diff --git a/.github/workflows/formal-full.yaml b/.github/workflows/formal-full.yaml index 66bc3e86..2c0d17ae 100644 --- a/.github/workflows/formal-full.yaml +++ b/.github/workflows/formal-full.yaml @@ -147,24 +147,27 @@ jobs: if-no-files-found: warn retention-days: 14 - # Each mutation lane is sharded over three runners. Every shard compiles, - # measures every unmodified baseline and evaluates the witness evidence - # itself, then measures a contiguous third of the catalog; the merge job - # refuses shards whose fingerprints or baselines disagree, so the merged - # report is exactly as strict as one sequential run. The lane was bounded - # by sequential mutants: run 34669546872 took 17 minutes unsharded. A shard - # runs the baselines (2-4 minutes) plus 4-5 mutants (2-4 minutes each); - # doubled for a slow runner that stays under 30. + # Each mutation lane is sharded. Every shard compiles, measures every + # unmodified baseline and evaluates the witness evidence itself, then + # measures a contiguous slice of the catalog; the merge job refuses shards + # whose fingerprints or baselines disagree, so the merged report is exactly + # as strict as one sequential run. The lane is bounded by sequential + # mutants: about 1 minute per TypeScript mutant on a fast runner and about 2 + # on the slow class (13 mutants took 17 minutes unsharded in run + # 34669546872). test/formal-validation.test.ts pins the mutants a shard may + # hold so that the baselines (2-4 minutes), the slow-class mutant cost and + # one hung cohort's 9-minute bound fit the timeout; growing the catalog past + # that fails the pull request until the matrix grows. typescript-mutations: needs: generate runs-on: ubuntu-latest strategy: fail-fast: false matrix: - shard: [1, 2, 3] + shard: [1, 2, 3, 4, 5, 6] env: - MUTATION_SHARD: ${{ matrix.shard }}/3 - timeout-minutes: 30 + MUTATION_SHARD: ${{ matrix.shard }}/6 + timeout-minutes: 40 steps: - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 - uses: ./.github/actions/setup-validation @@ -247,22 +250,24 @@ jobs: if-no-files-found: warn retention-days: 14 - # The Go lane bounded the whole workflow: 13 mutants each replaying the - # generated cohort for about 105 s on a fast runner, strictly in sequence. - # Run 34660598461 took 25 minutes; runs 34669546872 and 34670045249 took 47 - # and 48 on the slow runner class. A shard compiles, runs the baselines - # (2-4 minutes) and 4-5 mutants (2-4 minutes each); doubled for a slow - # runner that stays under 40, and one hung cohort adds its 8-minute test - # bound before the shard fails. + # The Go lane bounds the whole workflow: every mutant replays the generated + # cohort, about 1.6 minutes per mutant on a fast runner and about 3 on the + # slow class (13 mutants took 25 minutes in run 34660598461 and 47-48 in + # runs 34669546872 and 34670045249), strictly in sequence. A shard compiles, + # runs the baselines (2-4 minutes) and its slice of the catalog; one hung + # cohort adds its 8-minute test bound before the shard fails. + # test/formal-validation.test.ts pins the mutants a shard may hold within + # the timeout, so catalog growth fails the pull request until the matrix + # grows. go-mutations: needs: generate runs-on: ubuntu-latest strategy: fail-fast: false matrix: - shard: [1, 2, 3] + shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] env: - MUTATION_SHARD: ${{ matrix.shard }}/3 + MUTATION_SHARD: ${{ matrix.shard }}/10 timeout-minutes: 40 steps: - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 diff --git a/.github/workflows/formal.yaml b/.github/workflows/formal.yaml index 7eb0253a..6934b6d8 100644 --- a/.github/workflows/formal.yaml +++ b/.github/workflows/formal.yaml @@ -48,11 +48,24 @@ jobs: # previous text generated, and vice versa, unless the manifest declares an # intended change. The reference is the merge base with the pull request's # base branch; a push to main has no reference. The step also checks the - # composition lint baseline. + # composition lint baseline and the kernel fixtures. A kernel change replays + # every composed profile in both directions: six profiles took about 35 + # minutes on the hosted runner, five about 26, and fourteen in one job + # overran the 60-minute budget (57 minutes, then a cancellation at the + # timeout), so the lane runs as four matrix shards, each replaying a + # round-robin quarter of the profiles sorted by name (DIFFERENTIAL_SHARD); + # a change outside the kernel skips unchanged closures in under ten. The + # gate is the four statuses `differential (1)` to `differential (4)`; none + # is required on main. Grow the matrix, and the count in DIFFERENTIAL_SHARD + # with it, before a shard approaches the budget. differential: if: github.event_name == 'pull_request' runs-on: ubuntu-latest - timeout-minutes: 30 + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + shard: [1, 2, 3, 4] steps: - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 with: @@ -63,16 +76,17 @@ jobs: run: node .github/scripts/fixture-scope.mjs - uses: ./.github/actions/setup-quint if: steps.fixture-scope.outputs.recompute == 'true' - - name: Replay every composed profile's reference corpus through the pull request's text + - name: Replay this shard of the composed profiles' reference corpus through the pull request's text if: steps.fixture-scope.outputs.recompute == 'true' env: DIFFERENTIAL_REFERENCE: origin/${{ github.base_ref }} + DIFFERENTIAL_SHARD: ${{ matrix.shard }}/4 run: make differential - - name: Preserve differential reports + - name: Preserve this shard's differential reports if: always() && steps.fixture-scope.outputs.recompute == 'true' uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: - name: formal-differential + name: formal-differential-${{ matrix.shard }} path: | .formal-traces/differential/*/report.json .formal-traces/differential/**/replay-*/quint-test.log diff --git a/formal/AUTHORING.md b/formal/AUTHORING.md index fa28e15a..583ca643 100644 --- a/formal/AUTHORING.md +++ b/formal/AUTHORING.md @@ -3,8 +3,12 @@ The Quint files should let a reader understand a behavior without translating the TypeScript implementation. Readability is part of the specification's acceptance criteria. Executable checks then challenge that written behavior. -Quint is the behavioral source of truth for both TypeScript and Go. The prose -explains it; implementation tests must not become an independent, drifting +TypeScript is the executable reference these models formalize; Quint is the +independently reviewed contract that TypeScript, Go and later ports are held +to. When the two disagree, neither side is edited to match the other quietly: +the change lands with a regression that distinguishes the two behaviors and a +comment recording the decision about which one is intended. The prose explains +the contract; implementation tests must not become an independent, drifting definition of the same portable rule. For a first contribution, start with the [worked walkthrough](./WALKTHROUGH.md). @@ -48,7 +52,8 @@ Named predicates make the conditions readable; they do not perform cache work. Finally, read the invariants and `run ...Test` examples. An invariant states a property of explored states. A regression gives a concrete sequence and its expected observations. A `val` declaration can also be a helper; `execution.json` -identifies the properties that are actually scheduled for checking. Some +identifies the properties that are actually scheduled for checking, and every +`run ...Test` a scheduled model declares is one of its regressions. Some regressions deliberately corrupt state to show that a property rejects the fault. They are tests of the property, not allowed system transitions. Passing bounded exploration is not a proof over every execution. @@ -117,10 +122,14 @@ A rewrite lands only when `node formal/differential.mjs ` replays the profile's whole reference corpus and exported regressions through the new text, and the new text's corpus through the old, with step-by-step agreement on every driver-asserted channel; an intended change of behavior is declared by bumping -the model's `differential.behaviorVersion` in the manifest instead. Compare the -same recorded inputs before attributing a change in observations to the -rewrite. Reusing a random seed does not preserve an input history when a -model's choice structure changes. +the model's `differential.behaviorVersion` in the manifest instead. Trace bytes +per state may grow at most 1.2 times over the reference; a composition that +must carry more state declares its own bound as +`differential.maxBytesPerStateRatio` beside `behaviorVersion`, with the reason +recorded in the kernel README's record table. Compare the same recorded inputs +before attributing a change in observations to the rewrite. Reusing a random +seed does not preserve an input history when a model's choice structure +changes. Connection models advance the imported profile and save its preceding context in the same `all` action. Views such as `acquired` and `observedSources` combine @@ -162,13 +171,29 @@ For each new rule or interaction: plausible wrong implementation of the rule; require an invariant violation, not merely a compiler error or failed bookkeeping check. Use symbolic checking for tractable finite modules and sample larger compositions. Schedule every - property and regression in `execution.json`. + property in `execution.json`; every run the model declares is a regression + without being listed. Give the challenge a + `nativeMutants` entry that maps it to a TypeScript mutant and a Go mutant + injecting the same wrong behavior into `src/` and `go/`, or an enumerated + explanation of why no native line embodies the rule (see + [Mapping every challenge to native mutants](#mapping-every-challenge-to-native-mutants)). 4. **Exercise both implementations.** Require a generated witness or exported Quint regression that exposes the rule's consequence, and replay the same history in TypeScript and Go. Fixed scenarios preserve narrow regressions; protocol vectors and native tests cover wire and language boundaries. The driver supplies only external inputs and asserts actual public results/effects. Expected model state must never drive the implementation. + The generated cohort of each mutation lane must detect both native mutants: + list `generated` in their `requiredDetections`. A mutant the corpus does not + detect is a coverage gap; close it with an exported regression or a witness + before the challenge counts as mapped. A new profile or held effect kind + stays inside the settlement receipt ([PORTING.md](./PORTING.md)) by + extending the ledger's kinds and gate names in + [replay/settlement.mjs](./replay/settlement.mjs), the `held` members of + `$defs/settlementReceipt`, both drivers' held computation and the receipt + table; a hold fault must precede every effect-starting command of its step. + A new rule text belongs in the same module's exported violation pattern, + which both mutation runners import. 5. **Account for the evidence.** Link the case, property, scenario, and required witness in the existing catalogs. Preserve explicit gaps and update profile claims only after the corresponding language driver passes. @@ -215,9 +240,11 @@ choice. A parameterized public action can serve both random exploration and a named regression. The regression must invoke those actions; an arbitrary assignment to private model state is not an executable input. -List exportable runs in the model's `replayRegressions` in `execution.json`. -Generation exports them under `regressions//` alongside the sampled -corpus. Quint's deterministic test export omits MBT action metadata. +Every public-only run of a profile model is exported; `execution.mjs` reads +the model's runs and classifies each one (see [Exported runs are exactly the +public-only runs](#exported-runs-are-exactly-the-public-only-runs)), so nothing +is listed. Generation exports them under `regressions//` alongside the +sampled corpus. Quint's deterministic test export omits MBT action metadata. `replay-inputs.mjs` adds compatibility annotations derived only from the explicit input record to scheduled exports; it never infers commands from expected state. The coordinator also accepts raw regression exports directly. `input` remains @@ -234,8 +261,10 @@ distinct evidence categories. ## Maintaining case and witness evidence Use [FEATURE-COVERAGE.md](./FEATURE-COVERAGE.md) to place each new rule in its -feature family. Update `semantic-cases.json` and `quint-case-audit.json` with -precise contract, provenance and checked-scope references. Every positive fixed +feature family. Update `semantic-cases.json` with precise contract and +provenance references and a reviewed `scope` on every Quint citation, in +`models` for a scheduled check and in `definitions` for the transition, helper +or predicate that owns the rule. Every positive fixed scenario and every protocol/invalidation vector must be assigned to at least one semantic case. An unmapped fixture is an accounting failure, even if its test passes. Reuse a case for repeated evidence of the same rule; splitting @@ -262,6 +291,9 @@ record and public observations; [kernel/README.md](./kernel/README.md) lists the classifiers still reading private predictions. Their inputs never name a TypeScript or Go file: `node formal/witnesses.mjs evaluate` runs them for every port. Declare a new module in the profile's `witnessSources` in `profiles.json`. +A classifier that shadows the model from public channels binds that shadow to +the private predictions through [replay/witnesses/fidelity.mjs](./replay/witnesses/fidelity.mjs) +rather than restating the comparison. Add discriminating negative controls when introducing or changing witness classification. Preserve the matching fixture or phase, then remove or alter @@ -291,11 +323,14 @@ driver, fixture and completion contracts. ## Refactoring and execution -[`execution.json`](./execution.json) is the execution schedule: invariant and -regression names, model order, exploration settings, and generated trace paths -and bounds. [`profiles.json`](./profiles.json) records versioned conformance -claims. Keep these purposes distinct; checking and generation consume the same -execution settings rather than maintaining separate invariant lists. +[`execution.json`](./execution.json) is the execution schedule: invariant +names, model order, exploration settings, and generated trace paths and +bounds. The regressions are the runs each model declares and the libraries are +the Quint sources no model claims; `execution.mjs` reads both from the text +(`scheduleExecution`) and refuses a manifest that lists them. [`profiles.json`](./profiles.json) +records versioned conformance claims. Keep these purposes distinct; checking +and generation consume the same execution settings rather than maintaining +separate invariant lists. Preserve public action names, choice encodings, state/observation fields, and `...Test` suffixes during cleanup. Preserve the order and nesting of `any` and @@ -346,9 +381,9 @@ deterministic `run`, its `kind`, the `failure` the fault produces (the condition of one top-level `.expect(...)` in that run, copied from the model), the fault `family` slug it belongs to, the `profiles` where the fault is observable, and `exclusions` mapping other known profiles to the reason they -cannot exercise it. Two kinds exist. An `exported-regression` cites a run in a -profile model's `replayRegressions`, so it is public-only and both ports replay -it: use this kind for every portable behavior fault. The run normally belongs +cannot exercise it. Two kinds exist. An `exported-regression` cites a +public-only run of a profile model, so both ports replay it: use this kind for +every portable behavior fault. The run normally belongs to the challenged model; when the fault sits in a shared library, the reproducer may instead name another profile `model` whose exported run reaches it, which is how a verification model's shared-rule challenge gets a portable @@ -385,15 +420,103 @@ only shrinks: the ids that may appear in it are frozen in `grandfatheredReproducerBacklog` in `formal/execution.mjs`, so a new challenge cannot opt out by listing itself. Adding to that constant is a reviewed code change; removing an id once its challenge has a reproducer is the normal path. +The native-mutant backlog below follows the same rule. + +### Mapping every challenge to native mutants + +A model challenge shows that a named property rejects one deliberate change to +the specification. It says nothing about the ports until the same wrong +behavior is injected into `src/` and `go/` and the generated corpus, replayed +through each port, fails. Each challenge therefore carries a `nativeMutants` +entry in `execution.json`: + +```json +"nativeMutants": { + "kind": "mapped", + "mutant": "M18", + "text": "M18 is the native twin of local_storage.localEntryLiveAt losing its strict bound: a local entry is served at its exact insertion expiry in both ports." +} +``` + +The text says why the mutant is the same fault as the model's and stays under +500 characters; the port-side account (which lines change, what the wrong +behavior is, any asymmetry between the ports) lives once on the catalog entry +as its `rationale`, beside the anchors it describes, so a port refactor +updates one place and the challenges never quote code. + +`kind` is one of: + +- `mapped`: `mutant` names an entry of `formal/mutations.json` whose + TypeScript and Go sections both list `generated` in their + `requiredDetections`, so the weekly mutation lanes fail if the corpus stops + detecting it in either port. `text` names the mutant and the model + definition. `crossContract` is a sentence, required and allowed only when + the mutant's semantic case does not list the challenge's contract, saying + why it is the same fault. +- `unobservable`: a port line exists, but the port checks the same condition + again at a later point the model does not have, so no public history can + distinguish the fault. `text` names the line and the later check; no + catalog entry is kept for it. +- `model-only`: the fault changes model bookkeeping that no implementation + line embodies (a connection monitor reconstructing owners or clocks, an + invariant helper). `text` names the model construct and the port code that + makes the fault inexpressible. + +Search both ports for the line before writing an explanation; an explanation +where a native line exists is a review failure, and an explanation must name +the port file it examined. A mutant maps to a challenge when it produces the +same wrong behavior at the same boundary, not when it edits similar text; +several challenges may share one mutant, and a port section may need two +edits when the port implements the rule at two sites. + +The catalog is one file, `formal/mutations.json`: each entry has an `id`, +its semantic `case`, a one-sentence `description`, the `rationale`, and a +`typescript` and a `go` section, each with `edits: [{ path, before, after }]` +(applied in order, every `before` matching the port text exactly once) and +`requiredDetections`. Every validation of the manifest checks the catalog's +schema: every entry has a description, a rationale, a known case, and in each +section known cohorts and a non-empty list of edits inside its port (`src/` or +`go/`, never a Go test file). The anchors themselves are checked by +`node formal/execution.mjs`, `make audit`, the test suite and both mutation +runners (`checkMutantAnchors`), so a refactor that moves an anchored line +fails the pull request rather than the weekly lane, while the Quint +generation lanes never read port text. The challenge rules: the kind is one +of the three, `text` is non-empty, within its length ceiling and names the +mutant or a port file, `mutant` is present exactly for `mapped`, +`crossContract` exactly when the case lacks the contract; two challenges that +repeat one `(source, before, after)` fault map it the same way; and every +challenge has a `nativeMutants` entry or is listed in the top-level +`nativeMutantBacklog`, never both. The backlog is frozen in +`grandfatheredNativeMutantBacklog` in `formal/execution.mjs` and only shrinks. +The summary also counts catalog mutants no challenge cites. + +Each port's own unit suite is informational for a mutant: when a fault +leaves a goroutine blocked or a pointer nil, a synctest bubble panics instead +of failing an assertion, and when a fault settles a promise the TypeScript +suite was not awaiting with no assertion failing, the runner records that +`ordinary` cohort as `crashed` (neither detected nor survived) and measures +the replay cohorts as usual; a mutant that does not compile is recorded with +every cohort crashed, so the gate names it while the rest of the shard is +measured; a settlement violation under a mutant ([PORTING.md](./PORTING.md)) +is recorded the same way, naming the first violating history and rule. New +mutants therefore require `generated` and `portable`; require +`ordinary` only where a unit test pins the fault on purpose. To measure one +mutant while authoring it, run `MUTATION_ONLY=M18 make mutations-ts` and +`MUTATION_ONLY=M18 make mutations-go`, one partial run per port at a time +(they share `partial/`); the partial report under +`.formal-traces/semantic/partial/` (and `go-semantic/partial/`) is never +complete evidence. Then run the full lanes, or let the weekly workflow run +them. ### Exported runs are exactly the public-only runs A profile run is public-only when every transition it takes records a command in `input`. A run that assigns `s'` inline, keeps `input' = input` across a state assignment, or reaches such a fixture through a helper action is -state-patching. `execution.mjs` classifies each run from the declaration bodies -and requires the `replayRegressions` list to equal the public-only runs -exactly, naming any unexported public run or exported patching run. Generation +state-patching. `execution.mjs` classifies each run from the declaration bodies: +the public-only runs are the model's exported replay regressions and the +state-patching runs stay model-only, with nothing listed in the manifest (a +`replayRegressions` list is refused). Generation then binds every history it produces, sampled and exported alike, to the driver contract, so a choice outside an action's declared domain fails `run-models.mjs generate` rather than a later native replay. diff --git a/formal/BEHAVIOR.md b/formal/BEHAVIOR.md index cf431bf7..d2af5c3d 100644 --- a/formal/BEHAVIOR.md +++ b/formal/BEHAVIOR.md @@ -1,6 +1,6 @@ # Portable behavioral scenarios and generated feature profiles -[`behavioral-scenarios.json`](./behavioral-scenarios.json) specifies deterministic feature scenarios independently of TypeScript. [`dialcache-effects-conformance.qnt`](./dialcache-effects-conformance.qnt) generates additional races using the same driver operations. Together with the [core profile](./CONFORMANCE.md) and [protocol vectors](./protocol-vectors.json), these are executable contracts for implementation tests and language ports. +[`behavioral-scenarios.json`](./behavioral-scenarios.json) specifies deterministic feature scenarios independently of TypeScript. [`dialcache-effects-conformance.qnt`](./dialcache-effects-conformance.qnt) generates additional races using the same driver operations. Together with the [core profile](./CONFORMANCE.md) and [protocol vectors](./protocol-vectors.json), these are executable contracts for implementation tests and language ports. The core profile is the introductory one and stays uncomposed from the kernel library: its drivers read the model's private state fields as their observation, so composing it is a driver-contract change in both ports. The deterministic corpus currently contains 244 scenarios across 12 behavior families. It includes request-scope lifetime, coalescing, both read and fallback deadlines, local TTL/LRU, runtime snapshots, layer precedence, cache failures, tracked invalidation, frame age/retention, stale recovery, and shadow validation. These scenarios are test-derived contracts, **not Quint-generated traces**. The effects model generates interleavings of calls, loader settlement, clock observations, native writes, and invalidation. Recovery, policy, and shadow models generate further feature schedules through the same driver; their bounds and action mappings appear below. Keeping these complementary forms avoids a single model containing every feature combination. The [feature map](./FEATURE-COVERAGE.md) relates the scenarios to the full reviewed behavioral, protocol, and native inventory. @@ -88,12 +88,12 @@ observations never select a command, effect index or source result. | Profile | Boundary and distinguishing public observations | Executable mapping | | --- | --- | --- | -| `recovery-read` | Request/local/remote traversal, retained snapshots, held reads/decoding, compressed candidates, frame rejection and watermark lifetime. New public requests distinguish retained bytes from current Redis state. | [Fixture and actions](./replay/profiles/recovery-read.mjs) | -| `local-failure` | Local storage exceptions, accepted source outcomes and request-only reuse. A failed local read remains publication-ineligible even after the fault is cleared before source settlement. | [Fixture and actions](./replay/profiles/local-failure.mjs) | +| `recovery-read` | Request/local/remote traversal, retained snapshots, held reads/decoding, compressed candidates, frame rejection and watermark lifetime. New public requests distinguish retained bytes from current Redis state. Composed from the kernel library: the held remote traversal with its recovery snapshots and payload classes, the compression channel variants and the marker lifetime. | [Fixture and actions](./replay/profiles/recovery-read.mjs) | +| `local-failure` | Local storage exceptions, accepted source outcomes and request-only reuse. A failed local read remains publication-ineligible even after the fault is cleared before source settlement. Composed from the kernel library: the layered traversal with the local fault switch (`local_faults`) read at admission and settlement. | [Fixture and actions](./replay/profiles/local-failure.mjs) | | `runtime-boundaries` | Exact serving cohort thresholds, leaf inheritance and validation, falsy/absent values, and feature toggles. Results and later layer reuse distinguish policy admission from mere policy input selection. | [Fixture and actions](./replay/profiles/runtime-boundaries.mjs) | -| `shadow-layers` | Dark and served shadow work combined with request/local publication, independent caller sources, per-instance job capacity, captured fill policy and propagated source errors. | [Fixture and actions](./replay/profiles/shadow-layers.mjs) | +| `shadow-layers` | Dark and served shadow work combined with request/local publication, independent caller sources, per-instance job capacity, captured fill policy and propagated source errors. Composed from the kernel library: the atomic layered release with held refills and stale-on-error on the atomic path, and the shadow job registry with its budgets. | [Fixture and actions](./replay/profiles/shadow-layers.mjs) | | `source-budgets` | Default, unbounded and finite source budgets; held policy resolution, outside calls, invalid keys, late followers and late results after retry. | [Fixture and actions](./replay/profiles/source-budgets.mjs) | -| `local-clock` | Fractional native time with whole-millisecond local insertion and expiration, including instances constructed at different process times. | [Inputs and observations](./replay/local-clock.mjs) | +| `local-clock` | Fractional native time with whole-millisecond local insertion and expiration, including instances constructed at different process times. Composed from the kernel library: the local projection with an inline source (`Serving::callLocal`) over the fractional clock (`Clock::advanceTicks`). | [Inputs and observations](./replay/local-clock.mjs) | This table summarizes scope. The linked modules define exact choices and command mappings; [bindings.mjs](./replay/bindings.mjs) connects their fixtures, setup and @@ -151,7 +151,7 @@ A returned cache value, loader invocation, or acknowledged write does not prove ## Generated pending-effect profile -The effects model fixes remote-only policy to 60 seconds, a 10 ms source deadline and separately configured read budgets, and held read/decode/serialize/write effects. It bounds each trace to eight callers and eight sources; successful values are 1. Model monotonic time and application wall time are separate. No local cache, recovery, shadow work, or physical expiry is enabled in this profile. +The effects model fixes remote-only policy to 60 seconds, a 10 ms source deadline and separately configured read budgets, and held read/decode/serialize/write effects. It bounds each trace to eight callers and eight sources; successful values are 1. Model monotonic time and application wall time are separate. No local cache, recovery, shadow work, or physical expiry is enabled in this profile. The model is composed from the kernel library: the held remote traversal under the budgeted lifecycle with its refills held, the queued adapter reply, and the metric events the drivers compare. | Quint action | Driver input | | --- | --- | @@ -186,11 +186,11 @@ actual effect index; `observerFault` records 0/1; `init` records 0..5, an external choice use `-1`. Optional MBT compatibility annotations must agree with the explicit input; raw regression exports need no annotations. See the [trace contract](./PORTING.md#trace-and-observation-contract). -The parser rejects missing, unexpected, or unsafe choices. Failure actions set a fixture fault, release the selected external gate, drain runnable work, and restore the fault. Model-only timestamps, fences, phase, and registration fields never enter execution or implementation projection. +The parser rejects missing, unexpected, or unsafe choices. Failure actions set a fixture fault, release the selected external gate, drain runnable work, and restore the fault. `s.o`, `s.io` and `s.events` are the asserted channels; the rest of `s` is the model's private prediction and never enters execution or implementation projection. -After every step, replay compares actual caller outcomes, loader/read/write/invalidation/serializer/provider counts, physical write TTLs, actual raw-read context budgets/initial cancellation state, and ordered cancellation IDs. Model caller codes are 0 pending, 1 value 1, 2 original source error, 3 timeout. Fixed scenarios additionally compare logical error identity. A read deadline starts a fresh source budget and suppresses refill; successful raw-read completion clears that budget before application-owned decoding. Failed fresh decoding permits refill. Accepted serialization/write outlives the source budget, with the observed fence checked again after preparation. +After every step, replay compares actual caller outcomes, loader/read/write/invalidation/serializer/provider counts, physical write TTLs, actual raw-read context budgets/initial cancellation state, and ordered cancellation IDs. Model caller codes are 0 pending, 1 value 1, 2 original source error, 3 timeout; the composed text records the shared conformance codes in `s.o.calls` (3 source error, 4 deadline error) and the parser maps them to these, so the version-2 contract is unchanged. Asserting `io` and `d` beside `events` under the shared codes, as the feature profiles do, is a version-3 change left to the ports slice. Fixed scenarios additionally compare logical error identity. A read deadline starts a fresh source budget and suppresses refill; successful raw-read completion clears that budget before application-owned decoding. Failed fresh decoding permits refill. Accepted serialization/write outlives the source budget, with the observed fence checked again after preparation. -Full validation exports 512 traces from 4,096 samples, up to 60 transitions, and requires all actions plus 79 witnesses covering abandoned source/read settlement, independent budgets, late settlement guards, application-owned phases, acquired snapshots across invalidation, failure-specific publication, clock rollback at the second fence check, and observer failure isolation. Scheduled deterministic regressions anchor their declared boundaries; [execution.json](./execution.json) distinguishes model checks from exported replays. Sampling favors the narrow rollback-during-publication boundary as well as unrestricted clock changes; it does not restrict that behavior to the favored schedule. +Full validation exports 512 traces from 4,096 samples, up to 60 transitions, and requires all actions plus 93 witnesses covering abandoned source/read settlement, independent budgets, late settlement guards, application-owned phases, acquired snapshots across invalidation, failure-specific publication, clock rollback at the second fence check, and observer failure isolation. Scheduled deterministic regressions anchor their declared boundaries; [execution.json](./execution.json) distinguishes model checks from exported replays. Sampling favors the narrow rollback-during-publication boundary as well as unrestricted clock changes; it does not restrict that behavior to the favored schedule. Full validation runs all profiles in `execution.json` through TypeScript and Go. PR checks run the committed subset alongside ordinary tests. Committed ITF smokes run without Quint. Failure diagnostics include trace, step, action, and both observations. The effects choice/state schema and scope/policy value choices changed with this specification revision; ports must select a matching revision and reject unsupported actions or choices. Behavioral scenario schema 2 is unchanged. @@ -198,7 +198,7 @@ The queued adapter choices are: 1 null, 2 primitive, 3 legacy watermark shape, 4 `s.events` records `{ event, location, detail, amount }`. Location identifies a reached layer or coalescing scope. Amount is an integer millisecond measurement (get, fallback, serialization, future offset), a byte size, a write-dispatch index, or zero. Replay converts model milliseconds to callback seconds and compares actual ordered events, their labels, and source-error attribution. A follower emits its coalescing event without repeating the leader's read/source trail. Fresh decoding is included in remote-get duration; source duration ends at accepted settlement/deadline; dump has its own duration. Late sources do not repeat failures. Size events precede actual adapter dispatch, including when that write remains pending. Scalar value 1 has one serialized byte here; Unicode/binary byte accounting remains covered by protocol vectors and fixed scenarios. -The profile requires 93 witnesses, listed in [coverage-witnesses.json](./coverage-witnesses.json): fixture and race boundaries, every reply class consumed by an active read, untracked fence demotion, normalized fences blocking publication, every selected event kind, error/miss categories, and nonzero held load/dump durations. Its 42 exported public regressions, scheduled in [execution.json](./execution.json), anchor normalization, phase timing, late-failure suppression, and the sampled boundaries that random generation reaches only rarely, so a fresh seed cannot lose them. Missing/corrupted diagnostic observations fail the harness. +The profile requires 93 witnesses, listed in [coverage-witnesses.json](./coverage-witnesses.json): fixture and race boundaries, every reply class consumed by an active read, untracked fence demotion, normalized fences blocking publication, every selected event kind, error/miss categories, and nonzero held load/dump durations. Its 48 exported public regressions, the model's public-only runs, anchor normalization, phase timing, late-failure suppression, and the sampled boundaries that random generation reaches only rarely, so a fresh seed cannot lose them. Missing/corrupted diagnostic observations fail the harness. ## Generated feature profiles @@ -210,11 +210,11 @@ Call observations encode pending as 0, fixture values 1/2 as 1/2, source errors | --- | --- | --- | | [Independent](./dialcache-independent-conformance.qnt) | Tracked same-key calls, coalescing disabled, six callers, independent read/source/decode gates, read budgets 5/10 ms, F=1 s and captured M=2/5 s | Per-call cancellation, late effects, refill authority, recovery snapshots/policy and original source-error identities | | [Layers](./dialcache-layers-conformance.qnt) | Two instances, three persistent contexts, four identities, tracked/untracked and capacity 0/2 fixtures, twenty calls | Request/process sharing, layer precedence, LRU promotion/eviction, per-instance capacity, tracked local warming and operation-group invalidation | -| [Admission](./dialcache-admission-conformance.qnt) | Tracked served remote hits, three keys, two instances, two shadow slots per instance, held reads/decodes, 10 ms job deadline, up to sixteen callers | Same-key deduplication, capacity drops, instance isolation, coalesced hits, policy snapshots, disabled detached sources, match/mismatch/supersession, capacity retained through timed-out source/decode/C1 work | +| [Admission](./dialcache-admission-conformance.qnt) | Tracked served remote hits, three keys, two instances, two shadow slots per instance, held reads/decodes, 10 ms job deadline, up to sixteen callers | Same-key deduplication, capacity drops, instance isolation, coalesced hits, policy snapshots, disabled detached sources, match/mismatch/supersession, capacity retained through timed-out source/decode/C1 work. Composed from the kernel library: the held remote traversal (`remote_io`) with the shadow module's held served-job lifecycle and its budgets | | [Scope](./dialcache-scope-conformance.qnt) | Request-only, one key, two outer lifetimes, three nested contexts, one held provider reply, independently settled sources, no deadline, up to sixteen callers | Scope isolation/closure/replacement; nested and disabled contexts; reenablement; pending policy at closure; shared rejection/retry; request/coalescing policy changes; late source settlement | -| [Recovery](./dialcache-recovery-conformance.qnt) | Tracked remote with optional request memoization in two contexts, F=1 s, M initially 5 s, 10 ms source deadline, held decoding, up to eight callers | Fresh/stale/future frames; F/M boundaries; allow/deny/failing classifier; coalesced followers; source success versus rejection/deadline; default timeout-only classification and explicit overrides; abandoned source settlement; age checks around decode; invalidation/replacement; read/decode failures; captured recovery policy | +| [Recovery](./dialcache-recovery-conformance.qnt) | Tracked remote with optional request memoization in two contexts, F=1 s, M initially 5 s, 10 ms source deadline, held decoding, up to eight callers | Fresh/stale/future frames; F/M boundaries; allow/deny/failing classifier; coalesced followers; source success versus rejection/deadline; default timeout-only classification and explicit overrides; abandoned source settlement; age checks around decode; invalidation/replacement; read/decode failures; captured recovery policy. Composed from the kernel library: the held remote traversal with its recovery snapshots under the budgeted lifecycle, the read settled at admission, and the diagnosed variants that record the coalesced scope, the failed layer and the recovery age | | [Policy](./dialcache-policy-conformance.qnt) | Untracked local+remote, both TTLs initially 1 s, M=5 s, local capacity one, two keys, one held provider reply, independently settled sources, no source deadline, up to twelve callers | Runtime coalescing on/off, per-source policy snapshots, shared versus independent same-key work, cross-key overlap and reverse settlement; independent runtime leaves; invalid local/remote TTL; provider/read/dump/write failure; policy acquisition and pending publication; local eviction/insertion TTL; logical Redis freshness versus physical retention | -| [Shadow](./dialcache-shadow-conformance.qnt) | Tracked remote TTL=60 s, serving ramp=0, shadow ramp initially 100 (runtime 0/100/invalid), optional outcome hook, caller/job deadline=10 ms, all read/load/dump/write effects held, up to eight callers | Independent dark C0/source settlement; captured payload decode; match/mismatch/C1 supersession; confirmation failure; conditional fills; source/read/decode/dump/write failure; deadline during held effects; late work cannot change emitted outcomes | +| [Shadow](./dialcache-shadow-conformance.qnt) | Tracked remote TTL=60 s, serving ramp=0, shadow ramp initially 100 (runtime 0/100/invalid), optional outcome hook, caller/job deadline=10 ms, all read/load/dump/write effects held, up to eight callers | Independent dark C0/source settlement; captured payload decode; match/mismatch/C1 supersession; confirmation failure; conditional fills; source/read/decode/dump/write failure; deadline during held effects; late work cannot change emitted outcomes. Composed from the kernel library: the dark arm of the shadow module's held lifecycle (the job's C0 read, decode and confirmation read held and released by ordinal) over the diagnosed budgeted held remote traversal, with the held fill and the buffered invalidation | Recovery opens contexts 0 and 1 in every fixture. New calls use open contexts; the separate scope profile covers detached calls after closure. Request misses may join the same process flight, after which each attached open context memoizes its result. A same-request follower records request coalescing; a new request records process coalescing. Recovered values have no shared-cache publication. Closing a context clears its memo and prevents late recovery from populating it. Four required witnesses include a recovered memo hit, later probes of both requests after shared recovery, a new read after closed-scope recovery, and request followers sharing recovery work. Three deterministic regressions anchor these cases. @@ -285,7 +285,7 @@ Scope and recovery expose `s.d = { warnings, ages, coalesced, fallbackErrors }`. `coalesced` records actual request/process scope labels; `fallbackErrors` records the source-failure layer, including failures later recovered as stale. Scope fixtures assert one trail for shared failures, no cache-error trail for disabled pass-through work, and `noop` attribution if the request closes while policy is pending. Admission-time attribution survives later scope closure. Three deterministic scope regressions and five diagnostic witnesses anchor these consequences. Other cache/maintenance errors are outside this feature diagnostic projection and remain checked by effects and fixed scenarios. -Thirteen shadow fixtures, both custom comparison overrides, comparison failure, both captured-logging directions, logging on/off, malformed logging at a completed mismatch, no warning for match/supersession, clamped age, and positive verdict age are required witnesses. Eighteen deterministic shadow regressions anchor these rules. Required witnesses also cover no job without the outcome hook, disabled/invalid policy skipping new jobs, and an admitted job completing under its original policy. Missing or corrupted diagnostic expectations must fail harness checks. +Thirteen shadow fixtures, both custom comparison overrides, comparison failure, both captured-logging directions, logging on/off, malformed logging at a completed mismatch, no warning for match/supersession, clamped age, and positive verdict age are required witnesses. Thirty-nine deterministic shadow regressions, every one an exported public schedule, anchor these rules. Required witnesses also cover no job without the outcome hook, disabled/invalid policy skipping new jobs, and an admitted job completing under its original policy. Missing or corrupted diagnostic expectations must fail harness checks. Fixtures 11/12 use the existing external `sourceWorkMs` input, advancing elapsed and wall time without delivering timers while the source begins. At 9 ms, the dark job still dispatches C0 and an immediately settled source can succeed. At exactly 10 ms, the deferred job reports timeout without a Redis read, while the caller remains pending. Subsequent source resolution or rejection produces the caller's deadline error when settlement checks elapsed time; delivering its timer may produce that error first. These fixtures advance in full 10 ms windows after the blocked work, observing after overdue timers are delivered; intermediate native timer ordering is outside their bounds. This distinguishes job abandonment from source timer delivery. Generated witnesses require both boundaries and both late settlement outcomes. The `expiredSourceWorkSkipsRedis` invariant independently forbids reads in the exhausted-work fixture; warning authorization is checked against captured valid policy separately from verdict emission. @@ -319,7 +319,7 @@ Each call captures its read budget and recovery policy. Read failure or timeout Besides the common `s.o`, replay requires `s.io = { budgets, aborted, sourceErrors }`. `budgets` records actual adapter read budgets in read invocation order; `aborted` records actual cooperative cancellation indices in delivery order. `sourceErrors` has one entry per caller: zero unless the caller returned its source's ordinary error, otherwise the one-based actual source identity. The driver projects actual adapter callbacks and returned error tokens; model-private ownership records never enter execution. Parser and corrupted-budget tests protect that boundary. -Full validation emits 512 traces from 2,048 samples, up to 60 steps, and requires every action plus sixteen witnesses covering separate budgets/deadlines, distinct recovery values/errors, captured age policy, failed-read refill suppression, acquired observations across invalidation, and late completion isolation. Six deterministic model regressions anchor these rules. The committed `independent-smoke.itf.json` replays without Quint. Coalesced recovery, scope lifetimes, wall rollback, and held publication retain separate profile coverage; this model does not combine every feature. +Full validation emits 512 traces from 2,048 samples, up to 60 steps, and requires every action plus the witnesses listed for it in [coverage-witnesses.json](./coverage-witnesses.json), covering separate budgets/deadlines, distinct recovery values/errors, captured age policy, failed-read refill suppression, acquired observations across invalidation, and late completion isolation. The profile's deterministic regressions, the runs its model declares, anchor these rules. The committed `independent-smoke.itf.json` replays without Quint. Coalesced recovery, scope lifetimes, wall rollback, and held publication retain separate profile coverage; this model does not combine every feature. ## Generated layer-composition profile @@ -351,7 +351,7 @@ Modes 4 and 5 omit the Redis adapter and require public local-hit reuse after ex At most twenty calls and eighty steps keep entries fresh throughout this profile; TTL boundaries remain in policy/scenario coverage. There are four logical identities, so a two-slot local cache can demonstrate read promotion and eviction, while request storage can exceed that capacity. Successful source completion publishes only to participating eligible layers. Tracked remote fallback skips direct local publication; an authoritative hit can warm local. Invalidation fences subsequent remote reads while acquired request/local values survive. Policy changes preserve admitted sources' publication decisions. -Full validation exports 512 traces from 2,048 samples. Required witnesses include all six fixtures and local reuse without Redis before and after a surfaced maintenance error, cross-request process sharing, zero-capacity sharing/reload, uncapped request memoization, LRU promotion/eviction with later public probes, per-instance capacity, tracked read warming, local survival across invalidation, both operation variants fenced, and untracked reads ignoring markers. Private model records select reachability witnesses only; storage-related witnesses require actual replayed calls that probe their predictions. They never control the adapter or become implementation observations. Scheduled deterministic regressions anchor these boundaries, and a committed generated smoke runs without Quint. The current regression and witness inventories are in [execution.json](./execution.json) and [coverage-witnesses.json](./coverage-witnesses.json). +Full validation exports 512 traces from 2,048 samples. Required witnesses include all six fixtures and local reuse without Redis before and after a surfaced maintenance error, cross-request process sharing, zero-capacity sharing/reload, uncapped request memoization, LRU promotion/eviction with later public probes, per-instance capacity, tracked read warming, local survival across invalidation, both operation variants fenced, and untracked reads ignoring markers. Private model records select reachability witnesses only; storage-related witnesses require actual replayed calls that probe their predictions. They never control the adapter or become implementation observations. Scheduled deterministic regressions anchor these boundaries, and a committed generated smoke runs without Quint. The current regression inventory is the model's runs; the witness inventory is in [coverage-witnesses.json](./coverage-witnesses.json). This profile uses the same observations and public/environment inputs as the other feature profiles. It adds initial fixture choices; drivers must reject unsupported choices. Larger capacities, more scopes/instances, mixed deadline/recovery/shadow combinations, and expiry during LRU ordering are outside its generated bounds. @@ -382,7 +382,7 @@ The committed `scope-smoke.itf.json` is a generated schedule including absent-va [`dialcache-admission-conformance.qnt`](./dialcache-admission-conformance.qnt) reuses the existing public driver and observation schema. It separates admission and resource ownership from the dark C0/fill protocol. Three shared Redis keys initially contain value 1, with tracked serving and shadow ramps at 100%. Two cache instances each have two shadow slots. This makes a duplicate drop distinguishable from a full instance, and permits checking another instance while the first is full. -Caller reads and all decoding are held. A successful caller read acquires C0; completing its decode returns that value and considers shadow admission using the caller flight's accepted policy. Coalesced followers share this one admission. Independently accepted calls can each attempt admission. An admitted detached source runs with caching disabled. Shadow comparison uses its retained C0 and source result; unequal values trigger a held C1 read. No shadow action changes a caller result or writes cache values. +Caller reads and all decoding are held. A successful caller read acquires C0; completing its decode returns that value and considers shadow admission using the caller flight's accepted policy. Coalesced followers share this one admission. Independently accepted calls can each attempt admission. An admitted detached source runs with caching disabled. Shadow comparison uses its retained C0 and source result; unequal values trigger a held C1 read. No shadow action changes a caller result or writes cache values. Every rule is a kernel transition: the held remote traversal with immediate replies (`remote_io`) through the shadow module's held served-job lifecycle, which captures the cohort selection when the caller's read is dispatched and consults it when the decode completes the hit, with the job budgets kept by `deadlines`; the profile owns the bounded state, the input decoding and the guards. | Quint action | Portable input and choice | | --- | --- | @@ -398,7 +398,7 @@ Only pending effects/sources may settle. There are at most sixteen calls and six A whole-job timeout emits one diagnostic outcome but keeps the slot until its pending source, decode, or confirmation read settles. Later completion cannot start another decode/read or emit a replacement verdict. Once the owned work drains, a subsequent hit may admit another job. This models resource ownership rather than cancellation or language executor turns. -Full validation exports 128 traces from 1,024 samples, up to 60 transitions, and requires every action plus eighteen witnesses: six terminal outcomes (match, mismatch, superseded, source_error, timeout, dropped), one admission for coalesced hits, uncoalesced hit overlap, accepted shadow policy after a change, unselected hits, duplicate drops while capacity is available, full-capacity drops, admission while the other instance is full, per-instance deduplication, capacity retained by each of the three timed-out phases, and readmission after expired work drains. Six deterministic model regressions anchor coalesced admission, duplicate drops, per-instance capacity, and all three timeout ownership phases. +Full validation exports 128 traces from 1,024 samples, up to 60 transitions, and requires every action plus eighteen witnesses: six terminal outcomes (match, mismatch, superseded, source_error, timeout, dropped), one admission for coalesced hits, uncoalesced hit overlap, accepted shadow policy after a change, unselected hits, duplicate drops while capacity is available, full-capacity drops, admission while the other instance is full, per-instance deduplication, capacity retained by each of the three timed-out phases, and readmission after expired work drains. Eight deterministic model regressions anchor coalesced admission, duplicate drops, per-instance capacity, all three timeout ownership phases, the shadow selection captured with the read across a policy change, and an uncoalesced caller's own read beside the registered leader. The committed `admission-smoke.itf.json` retains actions, choices, and observation records from the first 57 states of a generated trace. Model-private prediction fields are omitted to keep it compact. It contains a timed-out decode, a blocked duplicate, completion of the raw decode, and subsequent admission for that key. Full generated ITF states remain in the full workflow artifacts. The existing parser replays both forms without special handling or expected-state input to the driver. diff --git a/formal/CONTRACTS.md b/formal/CONTRACTS.md index 862e986b..aaaf6dc6 100644 --- a/formal/CONTRACTS.md +++ b/formal/CONTRACTS.md @@ -49,10 +49,10 @@ Exporter compatibility and resource-exhaustion limits have explicit native integ | C08 | Local capacity is per instance, shared across operation identities, and least-recently-used | S: `local capacity evicts the least recently used key`, `shared local capacity spans operation identities`, `instances isolate local storage and registered flights`; G: policy (one-slot eviction), layers (two-slot LRU read promotion/eviction and per-instance capacity) | | C09 | Local TTL starts at insertion, reads do not renew it, and wall-clock rollback does not extend it | Policy model insertion history; S: `local exact TTL boundary expires`, `local expiry uses monotonic time across application wall rollback`, `nearly expired remote hit warms local for its full insertion TTL`; G: policy (separate wall/elapsed clocks, rollback reuse and expiry probes) | | C10 | Zero local capacity disables storage while preserving eligible in-flight sharing | S: `zero local capacity retains coalescing but no settled value`; G: layers | -| C11 | Same-key eligible calls share one registered execution; distinct keys/instances remain isolated | Flight-deadlines model; generated effects; S: `different keys own independent flights`, `instances isolate local storage and registered flights`; G: recovery, policy (cross-key overlap) | +| C11 | Same-key eligible calls share one registered execution; distinct keys/instances remain isolated | Effects profile (one registered source); generated effects; S: `different keys own independent flights`, `instances isolate local storage and registered flights`; G: recovery, policy (cross-key overlap) | | C12 | Request misses can join a process flight and memoize its result separately | S: `request misses join one process flight then memoize separately`; G: layers | | C13 | Coalescing disabled means independent executions, not disabled settled caching; publication is last-writer-wins | S: `coalescing off keeps settled caching`, `independent local publication is last writer wins`, `independent remote publication is last writer wins`, `uncoalesced request calls still memoize the last settled value`; G: policy (independent sources, reverse settlement, coalescing changes); G: scope | -| C14 | With no active serving layer, calls do not coalesce | Flight-deadlines model; S: `inactive serving layers do not coalesce` | +| C14 | With no active serving layer, calls do not coalesce | Runtime-boundaries profile (inherited-disabled sharing never joins); S: `inactive serving layers do not coalesce` | | C15 | Failed flights share the logical source error and clear for retry, including within one request | S: `rejected request flight is shared then removed for retry`; generated effects; G: scope | ### Policy, liveness, and failure handling @@ -66,9 +66,9 @@ Exporter compatibility and resource-exhaustion limits have explicit native integ | C20 | Provider failure uses uncached source, not baseline caching; invalid whole-invocation policy also bypasses caching | S: `provider failure fails open without caching`, invalid runtime coalesce/requestLocal/remoteReadTimeoutMs scenarios; G: policy (provider failure and invalid numeric read budget) | | C21 | Invalid TTL/ramp disables its layer; valid layers continue; invalid optional recovery/shadow preserves normal serving | S: `invalid runtime ramp fails open`, `invalid local TTL leaves valid remote serving available`, invalid optional policy scenarios, `invalid optional shadow disables dark reads while retaining local publication`; G: policy (invalid layer ramps, optional recovery retention and shadow policy on fresh Redis hits) | | C22 | Redis logical freshness uses current policy; physical TTL remains as written and expired storage cannot be resurrected | Policy model physical history; S: `remote exact fresh TTL expires`, `runtime changes preserve in-flight physical TTL and affect later freshness`; G: policy | -| C23 | Read deadline precedence: runtime → operation → instance → 50 ms; source defaults to 60 seconds and starts only at source invocation | S: library/instance/operation/runtime `read deadline precedence`, `fallback deadline starts after remote read completes`, `library source deadline defaults to sixty seconds`; flight-deadlines model; G: effects (library/instance/operation/runtime read budget precedence) | -| C24 | Late followers inherit remaining read/source time and outcome; uncoalesced work owns independent budgets | S: `late follower inherits remaining read deadline`, `late follower inherits remaining fallback deadline`; flight-deadlines model; G: independent (per-call read/source budgets and late completion) | -| C25 | Expired source results are rejected even before timer delivery; abandoned source work can overlap a new flight | Flight-deadlines model; generated effects; S: `late resolve loses to deadline before timer delivery`, `late reject loses to deadline before timer delivery`, `timeout releases flight while old loader continues` | +| C23 | Read deadline precedence: runtime → operation → instance → 50 ms; source defaults to 60 seconds and starts only at source invocation | S: library/instance/operation/runtime `read deadline precedence`, `fallback deadline starts after remote read completes`, `library source deadline defaults to sixty seconds`; source-budgets profile; G: effects (library/instance/operation/runtime read budget precedence) | +| C24 | Late followers inherit remaining read/source time and outcome; uncoalesced work owns independent budgets | S: `late follower inherits remaining read deadline`, `late follower inherits remaining fallback deadline`; source-budgets and independent profiles; G: independent (per-call read/source budgets and late completion) | +| C25 | Expired source results are rejected even before timer delivery; abandoned source work can overlap a new flight | Effects profile (accepted sources settle before their deadline); generated effects; S: `late resolve loses to deadline before timer delivery`, `late reject loses to deadline before timer delivery`, `timeout releases flight while old loader continues` | | C26 | Explicitly unbounded source work is permitted; config, decoding, accepted serialization/write have application-owned budgets | S: `disabled fallback deadline accepts later source settlement`, `accepted serialization and write outlive fallback deadline`; coalescing model | | C27 | Key/config/cache/serializer/write failures fail open; failed local reads disable local publication for that invocation; source failures remain source failures | Core model; S: `key construction failure runs source with its enabled deadline`, `dump failure returns source and does not retain value`, `write failure returns source and does not retain value`; G: policy | | C28 | Read failure/timeout never authorizes a Redis refill; safe untracked local publication remains possible | Core model; S: `remote read timeout suppresses refill and late read`, `untracked read failure still permits active local publication`; G: policy | diff --git a/formal/FEATURE-COVERAGE.md b/formal/FEATURE-COVERAGE.md index 742cbd1b..b62bb7d4 100644 --- a/formal/FEATURE-COVERAGE.md +++ b/formal/FEATURE-COVERAGE.md @@ -25,8 +25,7 @@ Use these sources for current totals and execution requirements: | Inventory | Authoritative source | | --- | --- | -| Behavioral/wire cases and evidence links | [semantic-cases.json](./semantic-cases.json) | -| Checked clauses and explicit limits | [quint-case-audit.json](./quint-case-audit.json) | +| Behavioral/wire cases, evidence links and the reviewed scope of each Quint citation | [semantic-cases.json](./semantic-cases.json) | | Native cases and feature families | [feature-coverage.json](./feature-coverage.json) | | Profiles and input encodings | [profiles.json](./profiles.json) | | Models, properties, sampled histories, exported regressions and wire artifacts | [execution.json](./execution.json) | @@ -101,8 +100,8 @@ and [formal-witness-attribution.test.ts](../test/formal-witness-attribution.test exercise this distinction. They test evidence attribution, so they receive no positive behavioral-case or mutation-detection credit. -Each Quint citation also has a reviewed scope in -[quint-case-audit.json](./quint-case-audit.json). A cutoff-preservation regression +Each Quint citation in [semantic-cases.json](./semantic-cases.json) also carries +its reviewed scope. A cutoff-preservation regression does not establish Redis TTL preservation, and a generic source-deadline property does not establish separate budgets for two independent calls. Definitions describe behavior; only scheduled invariants/regressions count as diff --git a/formal/GO-PARITY.md b/formal/GO-PARITY.md index 414f1910..fc810755 100644 --- a/formal/GO-PARITY.md +++ b/formal/GO-PARITY.md @@ -73,9 +73,10 @@ useful for a known failure or a narrow complementary example. Protocol vectors and native integration tests are appropriate evidence for byte encodings, host numeric limits, backend registration, and actual Redis execution. Acceptance does not require every fixed case to become a generated -history. It does require reviewing the consequential portable branches and -using Quint as their behavioral source of truth, rather than treating a large -trace count as evidence that all obligations were exercised. When several +history. It does require reviewing the consequential portable branches against the +Quint contract, with TypeScript as the executable reference that contract +formalizes, rather than treating a large trace count as evidence that all +obligations were exercised. When several cases share a witness, review each rule separately: reachability alone does not establish that the observation distinguishes its incorrect implementation. @@ -109,38 +110,46 @@ manufacture a separate model for every fixed test. ## Reading and updating the ledger -`cases` records every current semantic case, its declared model links, -generated witness requirements, and fixed or vector evidence. Empty model -links mean that no scheduled invariant or regression is currently cited for -that case; a precise transition definition may still express its behavior. -Record that transition separately from an independently checked property. -A matching profile name does not invent either connection, and a property -checking one clause does not prove all clauses of a compound case. Evidence -fields identify the checked local reports and corpus fingerprints. Refresh -them after executable inputs change; a previous revision's pass must not -silently satisfy a changed model or implementation. - -[`quint-case-audit.json`](quint-case-audit.json) records the reviewed scope of -each cited scheduled invariant or regression, plus separate transition, -helper, and predicate references. It explicitly distinguishes a checked -safety clause from a complete case proof and records known limits of the -properties. The ordinary metadata gates check reference kinds, scheduling, -case membership, positive scenario/vector assignments, feature/native coverage, -and nonempty scope notes without requiring Quint; it cannot -automate the semantic judgment in those notes. - -`profiles` records the shared corpus for each executable profile. Scheduled -trace counts are generation settings, not a claim that all traces differ or -that the model's state space was exhausted. After a model or registry change, -refresh the input hashes, case inventory, required witnesses, and reports -together. Preserve the existing execution-manifest validation and scheduled -invariant/regression checks. - -`sourceInventory` lists reviewed TypeScript production declarations. -Each inherits its reviewed source-file mapping to named Go symbols, with hashes -that reject stale mappings. These are navigation and review records, not -independent equivalence claims. The linked source audit's test and -documentation files also have explicit Go-applicability reviews. Native +`cases` has one row per semantic case holding what a reviewer decides: +its `group`, its known `gaps` and an `evidence` block naming the replay +reports and any native Go tests that supplement the shared evidence. The +case's rule, contracts, cited Quint checks, required witnesses, exported +regressions and vectors are read from [semantic-cases.json](semantic-cases.json) +when the ledger is checked and verified against the schedule in +[execution.json](execution.json); the ledger stores no copy of them, so a +citation is stated once and cannot drift from a mirror. A property checking +one clause does not prove all clauses of a compound case, and a matching +profile name does not connect a case to a check. Refresh the evidence paths +after executable inputs change; a previous revision's pass must not silently +satisfy a changed model or implementation. + +Each Quint citation in [semantic-cases.json](semantic-cases.json) carries the +reviewed scope of the cited scheduled invariant or regression, and a case's +`definitions` cite the transition, helper or predicate that owns its rule with +their own scopes. A scope distinguishes a checked safety clause from a +complete case proof; the known limits of the properties are stated in +[SEMANTIC-COVERAGE.md](SEMANTIC-COVERAGE.md). The ordinary metadata gates check +reference kinds, scheduling, case membership, positive scenario/vector +assignments, feature/native coverage, and nonempty scopes without requiring +Quint; they cannot automate the semantic judgment in those scopes. + +The profile schedule (each profile's model, planned trace count, exported +regressions and witness sources) is read from [execution.json](execution.json) +and [profiles.json](profiles.json); the checker requires the two to name the +same profiles over the same models. Planned trace counts are generation +settings, not a claim that all traces differ or that the model's state space +was exhausted. After a model or registry change, refresh the input hashes, +case inventory, required witnesses, and reports together. + +`sourceInventory` maps each TypeScript production file to reviewed Go +bindings: the named Go symbols, a mapping rationale and the hashes of both +sides, which reject a stale review. The file's declarations are scanned from +`src/` at check time and counted in `inventory.sourceDeclarations`; they are +navigation, not stored rows, and a mapping is a review record, not an +equivalence claim. `reviewedTestAndDocumentationAudit` gives each test and +documentation file in [source-audit.json](source-audit.json) an explicit +Go-applicability review (native files, adaptations and rationale); the file +hashes, entry counts and contract sets are the source audit's own. Native adaptations retain their rationale and evidence rather than being counted as identical language APIs. diff --git a/formal/PORTING.md b/formal/PORTING.md index e97c6e87..3c47e791 100644 --- a/formal/PORTING.md +++ b/formal/PORTING.md @@ -33,7 +33,7 @@ API names, threading model, internal storage, or scheduling implementation. | External effects | Hold/release actual policy, Redis read/write, serialization, and decoding operations by their invocation IDs. A held operation cannot finish until its external release or specified failure. | | Clock control | Control wall time and elapsed time separately. Advance or shift only the specified clock; follow the profile's timer-delivery rule. Preserve fractional units in the local-clock profile. | | Storage inputs | Seed the specified bytes/value/TTL or execute invalidation. The adapter must expose the requested atomic primary snapshot and maintenance result. | -| Settle | After every command, bring the implementation to quiescence under the `causally-ready-v1` contract: every task spawned by the implementation or the driver has finished or is blocked on a driver-owned gate, a driver-owned timer that is not yet due, or a driver-owned scope gate, and nothing is runnable. This obligation falls on the library as well as the test: it must expose its detached scheduling to the test executor (Go's `Defer` hook drained under `synctest.Wait`, the Node fake-timer microtask queue drained by `advanceTimersByTimeAsync(0)`) so the driver reaches quiescence without guessing turn counts or advancing deadline time. Both ports include a no-settle control: [formal-settlement-control.test.ts](../test/formal-settlement-control.test.ts) skips the TypeScript drain, and [settlement_control_replay_test.go](../go/settlement_control_replay_test.go) reports the Go observation held before the drain; each must fail the observation assertions of every behavior-driver-backed smoke history (currently all eight). A third port carries an equivalent control against its own driver. | +| Settle | After every command, bring the implementation to quiescence under the `causally-ready-v1` contract: every task spawned by the implementation or the driver has finished or is blocked on a driver-owned gate, a driver-owned timer that is not yet due, or a driver-owned scope gate, and nothing is runnable. This obligation falls on the library as well as the test: it must expose its detached scheduling to the test executor (Go's `Defer` hook drained under `synctest.Wait`, the Node fake-timer microtask queue drained by `advanceTimersByTimeAsync(0)`) so the driver reaches quiescence without guessing turn counts or advancing deadline time. The coordinator checks this contract by name on every behavior `observe` through the driver's settlement receipt, rules R1 to R5 in the [trace and observation contract](#trace-and-observation-contract); a failed rule is a `Settlement violation`, an infrastructure error that earns no comparison credit. Both ports include a no-settle control: [formal-settlement-control.test.ts](../test/formal-settlement-control.test.ts) skips the TypeScript drain, and [settlement_control_replay_test.go](../go/settlement_control_replay_test.go) reports the Go observation held before the drain; each must fail with a settlement violation, never an observation mismatch, on the smoke history of every behavior-driver profile. A third port carries an equivalent control against its own driver. | | Observe | Read actual caller outcomes, source/effect counts, event order, timestamps, values and error categories after the step. Collect observations independently of expected model state. | | Cleanup | Drain or release test-owned work, restore clock/fault hooks, and isolate the next history. Unfinished work must not silently leak into another history. | @@ -52,21 +52,25 @@ match each response's version and ID. Responses contain `ok: true` and `result`, or `ok: false` and an error. [protocol.schema.json](./replay/protocol.schema.json) defines the message, command, observation, fixture and environment shapes. Malformed input, unknown commands, mismatched IDs, process failure and transport -timeouts fail the test. The coordinator performs no cache operations. +timeouts fail the test. The coordinator performs no cache operations. The schema +file, not the version constant, is the compatibility unit: `version: 1` has +stayed while members were added to the `prepare` result (`observation`, +`receipt`), and a transport that pins exact member sets, as the Go one does, +moves with the coordinator. | Request | Purpose | | --- | --- | | `profiles` | Discover supported profiles/actions and settlement contract | -| `prepare` with `profile`, `path`, optional JSON-text `raw` | Validate the entire history; return a session ID, initialization fixture/setup, the `observation` definition every record of the session must satisfy, action names and step count | -| `observe` with `session`, `index`, `settlement`, `observed`, `environment` | Assert the actual observation for this step; return the next external commands or final completion | +| `prepare` with `profile`, `path`, optional JSON-text `raw` | Validate the entire history; return a session ID, initialization fixture/setup, the `observation` definition every record of the session must satisfy, the `receipt` definition every observe must carry (`settlementReceipt`, or `null` for core and local-clock), action names and step count | +| `observe` with `session`, `index`, `settlement`, `observed`, `environment` and, on a behavior session, `receipt` | Check the settlement receipt, then assert the actual observation for this step; return the next external commands or final completion | | `discard` with `session` | Release an unfinished coordinator session after a failed or canceled native run | After `prepare`, create the native fixture, execute setup and report observation index zero. Execute the returned `inputs`, settle authorized work and report the -next index. Validate each record locally against the `$defs` definition that -`prepare` named before sending it, as the Go transport does; a shape defect is -then attributed to the driver without a coordinator round trip, and the -coordinator's own check remains the last line. The environment carries the driver's actual `wallMs` clock in epoch +next index. Validate each observation and receipt locally against the `$defs` +definitions that `prepare` named before sending them, as the Go transport does; +a shape defect is then attributed to the driver without a coordinator round +trip, and the coordinator's own check remains the last line. The environment carries the driver's actual `wallMs` clock in epoch milliseconds; behavior, effects and core drivers start it at `2026-09-08T12:00:00.000Z` (`1788868800000` ms) and move it only through clock commands, as the [observation contract](#observation-contract) describes. @@ -131,6 +135,45 @@ delivery follows the command's explicit clock policy: a silent clock shift must not deliver a timer that the history deliberately holds. Do not release held work, advance virtual time, or poll expectations to obtain a matching snapshot. +The coordinator checks that contract on every behavior `observe` through the +driver's settlement receipt, in this order, before comparing the observation: + +- R1 presence and shape. A behavior session (feature profiles and effects) + sends a `receipt` satisfying `$defs/settlementReceipt` with every observe; + core and local-clock sessions send none. Failures: `Missing settlement + receipt`, `Unexpected settlement receipt`, `Malformed settlement receipt at + receipt.`. +- R2 quiescence. `runnable` is 0: the driver took its snapshot, ran one more + zero-time drain of its controlled executor, and that drain ran nothing and + changed nothing. +- R3 monotonic clock. `elapsedMs` equals the sum of every `advance` command's + `ms` plus `loaders × sourceWorkMs` plus `comparisons × comparisonMs`, the + fixture work consumed inside callbacks, read from the driver's own + observation counters. +- R4 wall clock. `environment.wallMs` equals `1788868800000` plus every + `advance` and `shiftWall` `ms` plus the same fixture work. A core session + carries no receipt but is held to this rule with `advanceWall` as its clock + command; the local-clock driver reports the real process clock, which no + rule constrains. +- R5 held gates. `held` equals the gates the schedule leaves open: loaders + begun minus loaders resolved or rejected; for each effect kind, operations + started while its hold fault was on minus those released by name; scopes + opened minus closed, setup included. Hold faults are attributed per + observation interval, so a command that turns a hold on or off leads its + interval (every current mapping and setup does); the ledger refuses any + other schedule as its own limit, an infrastructure error, never as a + violation by the driver. + +A violated rule fails as `Settlement violation: `, an infrastructure +error without comparison markers, so an unsettled driver never earns mutation +credit: both mutation runners record one under a mutant as a crashed cohort +naming the history and rule, so the gate fails by mutant id while the rest of +the shard is measured. The rules read only the commands the coordinator issued and the +driver's public counters, so a library fault that starts an extra source moves +the counters, the ledger and the driver's clock together, passes here, and +fails the observation comparison where the mutation lanes credit it. Timer +delivery (R6) is enforced by the next observation, not by the receipt. + Exact observations describe the profile's controlled schedule. Preserve required causal order and invocation ownership. An unrelated native event order can only be normalized when the declared observation contract allows it; sorting every @@ -214,6 +257,28 @@ marker cutoffs are computed relative to that epoch. The local-clock driver reports its real process clock, which no mapping consumes. `seed.ageMs` (signed), `seed.ttlMs` and `invalidate.futureBufferMs` are whole milliseconds. +Every observe of a behavior session also carries the driver's settlement +receipt, `$defs/settlementReceipt`, describing the same instant as `observed`: + +| Field | Type | Meaning | +| --- | --- | --- | +| `elapsedMs` | nonnegative integer | The driver's controlled monotonic clock in whole milliseconds, moved only by `advance` commands and the fixture's `sourceWorkMs`/`comparisonMs` work, never by settling | +| `runnable` | nonnegative integer | What one zero-time drain of the controlled executor found after the snapshot: 0 when nothing ran and neither the observation nor the pending-timer count changed; otherwise the driver's count of what it found | +| `held` | seven nonnegative integers | `loaders` not yet resolved or rejected; `reads`, `writes`, `dumps`, `loads`, `policies` held by a fault and not yet released by name; `scopes` opened and not closed, setup included | + +The TypeScript driver ([behavior-driver.ts](../test/formal/behavior-driver.ts)) +takes its snapshot after the settle drain as the JSON encoding that crosses the +wire (a value the library hands back is recorded by reference, so the encoding +fixes what this instant reported), drains the fake-timer queue once more at +zero time, and reports 1 if that encoding changed plus the change in the +pending fake-timer count. The Go driver +([behavior_driver_test.go](../go/behavior_driver_test.go)) snapshots under its +lock, waits for every goroutine in the `synctest` bubble to block, and reports +the deferred functions found plus 1 if the observation changed. Gates the +library abandons, such as a read aborted by its deadline, stay registered until +their release command. Validate the receipt locally against the definition +`prepare` named, as the Go transport does, before sending it. + [coordinated-replay.ts](../test/formal/coordinated-replay.ts) replays any profile's history through the coordinator with the TypeScript drivers exactly as a native port does. The coordinator test runs every committed smoke history @@ -369,7 +434,7 @@ reach; [coverage-witnesses.json](./coverage-witnesses.json) names them per profile. Each `witness/` completion leaf is decided by one shared, language-neutral evaluator under [replay/witnesses/](./replay/witnesses/). It reads the same histories every port replays (the profile's sampled traces plus -its exported `replayRegressions`), keys every rule on the explicit Quint `input` +its exported regressions, the model's public-only runs), keys every rule on the explicit Quint `input` record, and classifies from declared inputs and public observations; kernel/README.md lists the classifiers still reading private predictions. Driver observations never enter it, and it never supplies an implementation's inputs. @@ -398,7 +463,7 @@ For each complete profile it writes `/.json`: | `traces` | Number of evaluated histories | | `required` | The registry's required labels, in registry order | | `seen` | Every reached label, sorted | -| `labels` | Per reached label: `sampled` and `regression` hit counts, and `traces`, one `{ name, kind, checkpoints }` per history that earned the label, sorted by name. `kind` is `sampled` for a history from the profile's generated directory and `regression` for an exported `replayRegressions` trace. `checkpoints` are the ascending step indices at which the classifier credited the label: the step whose public consequence the rule requires, every declared checkpoint of a public-prefix rule, `0` for labels decided by the init choice (`fixture:*`, `action:init`), and every establishing step for a rule whose consequence spans several public steps | +| `labels` | Per reached label: `sampled` and `regression` hit counts, and `traces`, one `{ name, kind, checkpoints }` per history that earned the label, sorted by name. `kind` is `sampled` for a history from the profile's generated directory and `regression` for an exported regression trace. `checkpoints` are the ascending step indices at which the classifier credited the label: the step whose public consequence the rule requires, every declared checkpoint of a public-prefix rule, `0` for labels decided by the init choice (`fixture:*`, `action:init`), and every establishing step for a rule whose consequence spans several public steps | | `diversity` | Over sampled histories only: `sampledHistories`, `distinctActionSequences` (distinct sequences of action names) and `distinctObservationSequences` (distinct sequences of the observation each driver is asserted against at every step: the feature coordinator's expected observation record, the effects projection or the local-clock expected record, compared as JSON) | | `inputs` | `{ path, sha256 }` for `formal/profiles.json`, `formal/coverage-witnesses.json`, `formal/execution.json`, the profile's model, `formal/conformance-observations.qnt`, every Quint library, the full `formal/replay` closure (which contains the classifiers) and the profile's `witnessSources`, deduplicated in that order | | `corpus` | `{ name, sha256 }` per history, sorted by file name | @@ -454,11 +519,19 @@ every required label names at least one history of the bound corpus. ## Current limitations for a third port -The `causally-ready-v1` settlement contract is defined in prose, in the -[trace and observation contract](#trace-and-observation-contract) and the -`Settle` row above; no machine-checkable definition exists. Its executable -controls are the TypeScript and Go no-settle tests, each written against its -own driver, so a third port writes its own the same way. +The coordinator checks the `causally-ready-v1` settlement contract through the +settlement receipt on every behavior observe, so a third port's driver is held +to rules R1 to R5 from its first replay. What the coordinator still cannot +check: `runnable` is the driver's own attestation, verified by one zero-time +drain rather than by inspecting the executor; timer delivery (R6) is checked +only through the next observation; core sessions are held to the wall-clock +rule alone and local-clock sessions to none; and the completion document +remains the evidence that the whole corpus passed. In the Node driver a +zero-delay timer or immediate the library schedules while a fake-timer tick is +in progress becomes due one millisecond later, so such work stays parked until +the next advance and `runnable` truthfully reads 0; the cross-port replay shows +no history lands observable work there. Each port also keeps a no-settle +control against its own driver, so a third port writes one the same way. Node 24 is required as test tooling: the coordinator and the witness evaluator are Node scripts that a port's test run spawns, and the completion checker and @@ -471,7 +544,10 @@ coordinator keeps the predictions and the assertion logic in one place. Start with keys/frames and core traversal; add profile mappings until the full shared inventory passes. Preserve one failing history as the reproduction unit: report profile, action index, input, expected/actual observations and command. -Automatic shrinking is not currently supplied. +Automatic shrinking is not currently supplied. Carry a no-settle control +against the port's own driver: skipping the settle step must fail the smoke +history of every behavior-driver profile with a settlement violation, never an +observation mismatch. Before accepting a port, also run its native API/value/clock/exporter checks, real Redis/Valkey/Cluster protocol and bidirectional interoperability tests, diff --git a/formal/README.md b/formal/README.md index a9ffd068..743659e5 100644 --- a/formal/README.md +++ b/formal/README.md @@ -1,8 +1,11 @@ # Executable DialCache specification Quint defines the portable contracts that TypeScript, Go and future ports must -preserve. Native drivers execute external commands against the real libraries; -generated expectations stay in the test coordinator. +preserve. TypeScript is the executable reference those contracts formalize; a +disagreement between the two is settled by a distinguishing regression and a +recorded decision, not by editing the easier side. Native drivers execute +external commands against the real libraries; generated expectations stay in +the test coordinator. ## Start with your task @@ -45,7 +48,7 @@ calling the helper they are meant to challenge. Read [cache-rules.qnt](./cache-rules.qnt) and [cache-contract.qnt](./cache-contract.qnt) for shared judgments and acquired ownership records. [SPEC.md](./SPEC.md#definition-ownership-and-executable-connections) -maps them to the five checked profile connections. +maps them to the four checked profile connections. [dialcache-rule-checks.qnt](./dialcache-rule-checks.qnt) supplies the finite symbolic boundary checks. @@ -55,10 +58,8 @@ The verification models emphasize individual ownership or safety boundaries: | --- | --- | | [dialcache-core.qnt](./dialcache-core.qnt) | Enabled scopes, traversal and publication | | [dialcache-runtime-policy.qnt](./dialcache-runtime-policy.qnt) | Sparse overlays and captured policy | -| [dialcache-flight-deadlines.qnt](./dialcache-flight-deadlines.qnt) | Flights, deadlines and abandoned sources | | [dialcache-tracked-invalidation.qnt](./dialcache-tracked-invalidation.qnt) | Acquired snapshots, watermarks and delayed writes | | [dialcache-stale-recovery.qnt](./dialcache-stale-recovery.qnt) | Retained bytes, age checks and recovery authority | -| [dialcache-shadow-validation.qnt](./dialcache-shadow-validation.qnt) | Diagnostic C0/source/C1 work and fills | | [dialcache-redis-protocol.qnt](./dialcache-redis-protocol.qnt) | Frame/fence validation order | Conformance profiles expose external commands that both language drivers replay: @@ -180,8 +181,9 @@ and their corresponding tests. Local-clock uses feature selectors with ## Evidence and scope -[execution.json](./execution.json) schedules model properties, regressions, -exports and bounds. [profiles.json](./profiles.json) declares the replay profiles. +[execution.json](./execution.json) schedules model properties, exports and +bounds; every run a scheduled model declares is one of its regressions. +[profiles.json](./profiles.json) declares the replay profiles. [SEMANTIC-COVERAGE.md](./SEMANTIC-COVERAGE.md) explains witness and mutation evidence. Query the inventories instead of copying changing totals between documents: diff --git a/formal/SEMANTIC-COVERAGE.md b/formal/SEMANTIC-COVERAGE.md index 9b8cd95e..25d5e86b 100644 --- a/formal/SEMANTIC-COVERAGE.md +++ b/formal/SEMANTIC-COVERAGE.md @@ -16,7 +16,7 @@ The checker reports these distinct categories: | Category | What is counted | | --- | --- | -| Model | A cited invariant/regression scheduled in [execution.json](./execution.json) | +| Model | A cited invariant scheduled in [execution.json](./execution.json) or a run declared by a scheduled model | | Portable | Fixed scenarios, witnesses, exported Quint regressions or wire vectors | | Generated witness | A required consequential history in [coverage-witnesses.json](./coverage-witnesses.json) | | Quint regression replay | A named public-action regression exported and replayed in both ports | @@ -25,9 +25,27 @@ The checker reports these distinct categories: These categories overlap. Definitions/helpers explain rules but are not checked properties. A named case is not an independent proof, and a finite corpus is not -the full input domain. [quint-case-audit.json](./quint-case-audit.json) records -what each cited check actually establishes; metadata validation cannot replace -semantic review of that scope. +the full input domain. Each Quint citation in semantic-cases.json carries a +reviewed `scope`: what that scheduled invariant or regression (`models`) or that +transition, helper or predicate (`definitions`) establishes for the case. A +scheduled check supports only its stated scope, not necessarily every clause of +the case; a cited bounded model clause complements the fixed and generated +consequences and does not prove every host input or scheduling combination; +definitions describe transition semantics and are not independent invariants or +extra coverage. No model state-space exhaustion or universal refinement is +claimed. The checker verifies that every citation has a scope, that a cited +check is scheduled and that a cited definition is an action, def or val of a +scheduled model or library rather than a scheduled property; it cannot automate +the semantic judgment in the scope text. Generated witness reachability and +implementation replay are recorded separately: a citation alone does not +establish that a witness was reached or that both implementations passed. Weak +accounting checks such as policy `hitsSkipSource` (loaders <= callers), recovery +`singleReadPerFlight` (reads <= callers) and age-sample counts are not treated +as proofs of hit traversal, single execution or sample time. No general +generated model claim is made for native key/byte/compression/numeric limits, +the 60000 ms default source timeout, unbounded source mode, the one-hour +tracked cap or arbitrary backend collector behavior; fixed, vector and native +evidence and the explicit model bounds remain relevant. Previous model-only gaps now have replay: local read/write failure consequences use native injection seams, and marker-preservation histories observe actual @@ -75,8 +93,8 @@ model checks and records an independent baseline and counterexample for each fault. Count challenges and distinct faults separately: a challenge is one (fault, model, invariant) measurement, while a distinct fault is one `(source, before, after)` mutation. The same shared-rule fault may be measured -against several models when each entry carries a `measures` note, so the -catalog currently reports 72 challenges over 68 distinct faults. Every scheduled +against several models when each entry carries a `measures` note; +`node formal/execution.mjs` reports both counts. Every scheduled model owns at least one challenge; a `challengeWaiver` on a model entry is a documented gap, not coverage. A detected challenge shows that the named invariant rejects that one deliberate change under the manifest bounds. Model @@ -88,6 +106,14 @@ run; challenges not yet backfilled are listed in the manifest's `reproducerBacklog`, whose size `node formal/execution.mjs` reports beside the challenge counts. See the [authoring rules](./AUTHORING.md#challenging-every-model). +Each challenge also carries a `nativeMutants` entry naming the TypeScript and +Go mutants that inject the same wrong behavior into the ports, or an +enumerated explanation of why no native line exists; the mutation lanes must +detect every mapped mutant in their generated cohort. A mapped challenge +establishes that the corpus would catch the mistake in a port; an explained +one establishes only that the model rejects it. Unmapped challenges are listed +in `nativeMutantBacklog`, which only shrinks. See +[mapping every challenge to native mutants](./AUTHORING.md#mapping-every-challenge-to-native-mutants). Boundary properties can challenge an eligibility helper by stating the inequality directly. Connection and composition properties may reuse that helper while checking independently captured inputs, ownership and history; @@ -109,7 +135,7 @@ Witness classification lives in the language-neutral modules under [`formal/repl ## Behavioral mutation comparison -[`semantic-mutations.json`](./semantic-mutations.json) defines 13 reviewed, single-site faults. `node formal/measure-semantics.mjs` applies each in an isolated copy, verifies that it compiles, and runs three cohorts against it: +[`mutations.json`](./mutations.json) defines the reviewed fault catalog: each fault is described once, with a rationale naming the port lines it changes, and carries a TypeScript and a Go section of exact-anchor edits to `src/` and `go/`; `node formal/execution.mjs` and `make audit` check the catalog on every pull request, including that every anchor still matches the port text exactly once. `node formal/measure-semantics.mjs` applies each TypeScript section in an isolated copy, verifies that it compiles, and runs three cohorts against it: 1. **Ordinary:** existing unit tests, excluding all formal tests. 2. **Generated:** sampled and exported-regression replays, reachability gates, and Quint-derived primitive vectors. @@ -145,7 +171,7 @@ measurement programs remain `measure-semantics.mjs` and `measure-go-semantics.mjs`; the Make targets supply the pinned prerequisite checks used by hosted full validation. -Hosted runs shard each lane three ways with `MUTATION_SHARD=/`. +Hosted runs shard each lane with `MUTATION_SHARD=/`, matching the workflow matrix; `test/formal-validation.test.ts` pins how many mutants a shard may hold within its timeout, so catalog growth fails the pull request until the matrix grows. A shard reruns the compile check, every unmodified baseline and the witness evaluation before its contiguous slice of the catalog, and writes an incomplete report under `shards/-of-/`. `make mutations-merge-ts` and @@ -167,7 +193,7 @@ The runner clears inherited trace selectors, uses the complete generated directo Each catalog entry's `requiredDetections` is a regression gate. The local mutation target and full workflow fail if a required fault survives. Newly detected faults remain visible as improvements; update the required set after inspecting the result. Source edits must match exactly once, so implementation drift requires reviewing the mutation rather than silently skipping it. -To expand assurance, add a test/doc-derived case and precise executable evidence, require a generated witness where appropriate, then add a representative fault for a previously unchallenged rule. Preserve gaps until execution closes them. Keep code coverage, source accounting, case evidence, and mutation detection as separate measurements. The current Go suite requires every shared profile, exported regression, fixed scenario and protocol case registered by the manifests, with an equivalent fault catalog in `go-mutations.json`. Broader interaction histories and larger domains remain separate assurance work. +To expand assurance, add a test/doc-derived case and precise executable evidence, require a generated witness where appropriate, then add a representative fault for a previously unchallenged rule. Preserve gaps until execution closes them. Keep code coverage, source accounting, case evidence, and mutation detection as separate measurements. The current Go suite requires every shared profile, exported regression, fixed scenario and protocol case registered by the manifests, with the Go section of every entry in `mutations.json`. A mutant whose fault leaves a goroutine blocked or a pointer nil makes the Go port's own synctest suite panic instead of failing an assertion, and one that settles a promise the TypeScript suite was not awaiting can leave no failed assertion behind; each runner records such an ordinary cohort as `crashed`, outside the detected and survived totals, as it does every cohort of a mutant that does not compile, and the generated cohort remains the required detection. Broader interaction histories and larger domains remain separate assurance work. ## Model properties and cross-language execution diff --git a/formal/SPEC.md b/formal/SPEC.md index 16ff68ac..3105ec8e 100644 --- a/formal/SPEC.md +++ b/formal/SPEC.md @@ -2,7 +2,10 @@ Specification revision **0.1.0 (experimental)**. The repository commit identifies the exact Quint definitions, profile definitions, and evidence used in a -conformance report. **Quint is the source of truth for portable behavior.** +conformance report. **Quint states the portable contract; TypeScript is the +executable reference it formalizes.** A disagreement between them is settled by +a regression that distinguishes the two behaviors and a recorded decision about +the intended one, not by editing whichever side is easier to change. The models registered in [`execution.json`](./execution.json) define transitions and independently checked properties; this document explains their contracts, assumptions, and encoding boundaries. [`CONTRACTS.md`](./CONTRACTS.md) @@ -32,10 +35,9 @@ caller ownership and permitted acceptance for the named scope: | Profile | Checked connection | | --- | --- | -| recovery-read | [Acquired payload and recovery return](./dialcache-recovery-connection.qnt) | -| recovery | [Retained flight snapshot and recovery](./dialcache-legacy-recovery-connection.qnt) | +| recovery-read | [Acquired payload and recovery return](./dialcache-recovery-read-connection.qnt) | +| recovery | [Retained flight snapshot and recovery](./dialcache-recovery-connection.qnt) | | independent | [Per-caller snapshots and source deadlines](./dialcache-independent-connection.qnt) | -| effects | [Source start and accepted publication timing](./dialcache-effects-connection.qnt) | | source-budgets | [Captured source origin, budget and follower ownership](./dialcache-source-connection.qnt) | Properties have different roles. The boundary assertions in diff --git a/formal/TEST-MAP.md b/formal/TEST-MAP.md index 9d106f04..abe4478b 100644 --- a/formal/TEST-MAP.md +++ b/formal/TEST-MAP.md @@ -7,8 +7,8 @@ slice, then read the exact case and check scope. A link to a test file does not mean that every assertion in it is modeled. [CONTRACTS.md](./CONTRACTS.md) assigns obligations; -[semantic-cases.json](./semantic-cases.json) maps cases to histories and vectors; -[quint-case-audit.json](./quint-case-audit.json) states each checked clause; +[semantic-cases.json](./semantic-cases.json) maps cases to histories and vectors +and states, on each Quint citation, the clause it checks; [feature-coverage.json](./feature-coverage.json) keeps native adaptations separate. All 240 reviewed behavioral cases now have checked Quint references and Quint-driven implementation evidence. This accounts for known cases, not every @@ -33,9 +33,9 @@ measured through the composing profile's scheduled invariants. | --- | --- | --- | --- | | Enablement and scopes | Core verification; core/scope/layers profiles | `dialcache-local`, `dialcache-request-local`: disabled pass-through, nested scopes, memo ownership, closure/replacement and later public reuse | Bounded context trees, calls and instances | | Traversal, local TTL and LRU | Core/policy verification; policy/layers/local-clock profiles | `dialcache-local`, `dialcache-config-ramp`: first hit, value/absence reuse, promotion without renewal, zero capacity and common native millisecond grid | Selected capacities/keys; custom-clock resolution remains native | -| Coalescing and independent calls | Flight-deadlines verification; effects/policy/layers/independent profiles | `dialcache-coalescing`, `dialcache-liveness`: leader/follower results, remaining budget, independent source/error/read identities and publication order | Bounded overlap and operation identities; no fairness proof | +| Coalescing and independent calls | Effects/policy/layers/independent profiles | `dialcache-coalescing`, `dialcache-liveness`: leader/follower results, remaining budget, independent source/error/read identities and publication order | Bounded overlap and operation identities; no fairness proof | | Runtime policy | Runtime-policy verification; policy/runtime-boundaries/scope profiles | `dialcache-config-ramp`: sparse leaves, null versus omission, defaults, invalid policy, cohort equality and captured snapshots | Native malformed host objects and static API validation remain separate | -| Source/read budgets | Flight-deadlines verification; effects/source-budgets/independent profiles | `dialcache-liveness`, `dialcache-redis-read-deadline`: time begins at actual work, separate budgets, exact deadlines, cancellation and late settlement | Selected integer budgets; precise native timer boundaries have binding tests | +| Source/read budgets | Effects/source-budgets/independent profiles | `dialcache-liveness`, `dialcache-redis-read-deadline`: time begins at actual work, separate budgets, exact deadlines, cancellation and late settlement | Selected integer budgets; precise native timer boundaries have binding tests | | Cache failures | Core/recovery verification; effects/local-failure/recovery-read profiles | `dialcache-redis`, `dialcache-local`: original source outcomes, failure-specific refill/publication authority and independent probes | Native storage/clock seams inject local faults; not arbitrary heap corruption | | Tracked invalidation | Tracked verification; effects/layers/recovery-read profiles | `dialcache-invalidation`, `redis-payload`, real/cluster tests: acquired snapshots, both observed-fence checks, marker existence/TTL and delayed writes | Atomic primary snapshots and watermark durability are assumptions | | Stale recovery | Stale-recovery verification; recovery/recovery-read/independent profiles | `dialcache-stale-on-error`, `dialcache-stale-recovery-policy`: F/M boundaries, original errors, lazy decode, retained bytes, closed scopes and no shared publication | Recovery-read selected-shadow mode admits only stale seeds and failed sources | diff --git a/formal/VALIDATION.md b/formal/VALIDATION.md index 2e8b5945..578fbb01 100644 --- a/formal/VALIDATION.md +++ b/formal/VALIDATION.md @@ -33,8 +33,13 @@ The pull request lane's `differential` job runs `make differential` against the base branch whenever a Quint input changes: a composed profile that changes any driver-asserted observation of its previous corpus, or accepts an input the previous text refused, fails unless the manifest declares the change by bumping -its `differential.behaviorVersion`. Its report is migration evidence, not a -conformance completion report; the profile lanes still run. +its `differential.behaviorVersion`. The job is a matrix of four shards, +`differential (1)` to `differential (4)`: each checks the lint baseline and the +kernel fixtures, then replays a round-robin quarter of the composed profiles +sorted by name (`DIFFERENTIAL_SHARD=/4`; one unsharded job overran its +60-minute budget) and preserves its reports and replay logs as the +`formal-differential-` artifact. The reports are migration evidence, not +a conformance completion report; the profile lanes still run. The evaluator ends with a per-profile witness report: required labels with at most three sampled hits and no regression, labels pinned by a regression but @@ -92,37 +97,57 @@ units; a total invariant count is not a measure of specification strength. Every mutation must compile, its unmodified baseline must pass, and detection must come from a semantic assertion or invariant counterexample. A tool failure, -missing witness, crash or timeout is a failed measurement. The selected fault +missing witness, crash or timeout is a failed measurement. An unhandled +rejection under a mutant is the mutant settling a promise the suite was not +awaiting at that moment; the report records it beside the failed assertions, +and on its own it is a failed measurement, never a detection. The selected fault catalogs and per-run reports define the denominator; do not infer a percentage of all possible defects from their scores. -The model catalog in `execution.json` covers every scheduled model: currently 72 -challenges over 68 distinct faults, with no waivers. Its report distinguishes -those two counts and marks a filtered `--only` run as partial; only the complete -run is evidence. A challenge with a deterministic reproducer is additionally +The model catalog in `execution.json` covers every scheduled model with no +waivers; `node formal/execution.mjs` reports the challenge and distinct fault +counts. Its report distinguishes those two counts and marks a filtered `--only` +run as partial; only the complete run is evidence. A challenge with a deterministic reproducer is additionally replayed on the clean and mutated model and must fail only under the fault, at the expectation the manifest declares; the report records that outcome per challenge, and `node formal/execution.mjs` reports how many challenges still wait in `reproducerBacklog`. -The weekly full workflow shards each mutation lane over three runners. The Go -lane bounded the whole run: its 13 mutants replay the generated cohort in strict -sequence, 25 minutes on a fast runner and 47 to 48 minutes on the slow class -(runs 34669546872 and 34670045249; the TypeScript lane took 17). Each shard -measures every unmodified baseline itself, so its evidence stands on the -environment it ran in, then measures a contiguous third of the catalog. A merge +Each challenge also maps to the native mutant that injects the same wrong +behavior into both ports through its `nativeMutants` entry, or explains why no +native line exists; `node formal/execution.mjs` checks the mapping against +the mutant catalog (`formal/mutations.json`, one entry per fault with a +TypeScript and a Go section), anchors every catalog edit in the port text, and +reports the challenges still waiting in `nativeMutantBacklog`. The mutation lanes must detect every mapped mutant in +their generated cohort, so a mapped challenge is evidence that the corpus +would catch that mistake in a port, not only that the model would. See the +[authoring rules](./AUTHORING.md#mapping-every-challenge-to-native-mutants). + +The weekly full workflow shards each mutation lane over the workflow matrix; +`test/formal-validation.test.ts` pins how many mutants a shard may hold within +its timeout, so catalog growth fails the pull request until the matrix grows. +The Go lane bounded the whole run +when it had 13 mutants on three shards (25 minutes on a fast runner, 47 to 48 +minutes on the slow class, runs 34669546872 and 34670045249; the TypeScript lane +took 17), and its cost grows with the catalog: about 1.6 minutes per Go mutant +and one per TypeScript mutant on a fast runner, twice that on the slow class. +Each shard measures every unmodified baseline itself, so its evidence stands +on the environment it ran in, then measures a contiguous slice of the catalog. A merge job per language reads the shard reports and writes the complete report. It refuses a missing, duplicated or failed shard, shards whose source, catalog, corpus or witness fingerprints or baseline results differ, and coverage that is not the catalog exactly once in order. Only the merged report is complete -evidence; a shard report is never `complete`. Shard budgets are 30 minutes -(TypeScript) and 40 (Go): the baselines plus four or five mutants, doubled for a -slow runner. The Go mutation runner still bounds each `go test` invocation at -8 minutes to catch a hung mutant, not to pace a slow runner. Locally, -`MUTATION_SHARD=1/3 make mutations-ts` (then `2/3` and `3/3`) reproduces one -shard under `.formal-traces/semantic/shards/1-of-3/`, and +evidence; a shard report is never `complete`. Each shard's budget is 40 +minutes: the baselines plus its slice of the catalog at the slow runner's +per-mutant cost, plus one hung cohort's bound. The Go mutation runner still +bounds each `go test` invocation at 8 minutes to catch a hung mutant, not to +pace a slow runner. Locally, `MUTATION_SHARD=/ make mutations-ts` +for every index of the workflow matrix reproduces the shards under +`.formal-traces/semantic/shards/-of-/`, and `make mutations-merge-ts` assembles the report that an unsharded `make mutations-ts` writes; the Go targets mirror this. +`MUTATION_ONLY=M18 make mutations-ts` measures one mutant into a partial +report for authoring; it is never complete evidence. The workflow's `formal-full` aggregate job retains a small `formal-summary` artifact for 90 days: both completion and context reports, the Go replay summary, the model diff --git a/formal/WALKTHROUGH.md b/formal/WALKTHROUGH.md index b10dace2..ddc35623 100644 --- a/formal/WALKTHROUGH.md +++ b/formal/WALKTHROUGH.md @@ -97,10 +97,9 @@ Search by `C23.policy-does-not-spend-source-budget`, | Catalog | Responsibility for this example | | --- | --- | -| [CONTRACTS.md](./CONTRACTS.md) and [semantic-cases.json](./semantic-cases.json) | C23 names the broader obligation; the case ID connects this corner to its exact evidence | -| [execution.json](./execution.json) | Schedules the property and named regression; `replayRegressions` also exports the run as a history for both ports | +| [CONTRACTS.md](./CONTRACTS.md) and [semantic-cases.json](./semantic-cases.json) | C23 names the broader obligation; the case ID connects this corner to its exact evidence, and the `scope` on each cited property or regression states exactly what it establishes; a broad case can need several narrower checks | +| [execution.json](./execution.json) | Schedules the property; the named regression is a run of the model, exported as a history for both ports because it is public-only | | [profiles.json](./profiles.json) | Declares `source-budgets` version, input encoding and bounded scope | -| [quint-case-audit.json](./quint-case-audit.json) | States exactly what each cited property or regression establishes; a broad case can need several narrower checks | | [coverage-witnesses.json](./coverage-witnesses.json) | Requires the distinguishing `policy-wait-does-not-spend-source-budget` consequence to be reached | The witness classifier is `sourceBudgetsWitnessRules` in diff --git a/formal/admission-smoke.itf.json b/formal/admission-smoke.itf.json index 32b3c1d1..d7f9841d 100644 --- a/formal/admission-smoke.itf.json +++ b/formal/admission-smoke.itf.json @@ -11,5380 +11,62 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [], - "shadow": [ - "source_error" - ], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [], - "shadow": [ - "source_error" - ], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "7" - }, - "recovery": [], - "shadow": [ - "source_error" - ], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "3" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "7" - }, - "recovery": [], - "shadow": [ - "source_error" - ], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "4" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "7" - }, - "recovery": [], - "shadow": [ - "source_error" - ], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "4" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "9" - }, - "reads": { - "#bigint": "8" - }, - "recovery": [], - "shadow": [ - "source_error" - ], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "4" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "9" - }, - "reads": { - "#bigint": "8" - }, - "recovery": [], - "shadow": [ - "source_error" - ], - "sourceScopes": [ - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "4" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "10" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "source_error" - ], - "sourceScopes": [ - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "4" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "10" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout" - ], - "sourceScopes": [ - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "4" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "11" - }, - "reads": { - "#bigint": "10" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout" - ], - "sourceScopes": [ - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "4" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "11" - }, - "reads": { - "#bigint": "10" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout" - ], - "sourceScopes": [ - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "4" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "11" - }, - "reads": { - "#bigint": "10" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "4" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "11" - }, - "reads": { - "#bigint": "10" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "4" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "11" - }, - "reads": { - "#bigint": "10" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "4" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "12" - }, - "reads": { - "#bigint": "11" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "4" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "13" - }, - "reads": { - "#bigint": "12" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "5" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "13" - }, - "reads": { - "#bigint": "12" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "5" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "13" - }, - "reads": { - "#bigint": "12" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "5" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "13" - }, - "reads": { - "#bigint": "12" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "5" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "14" - }, - "reads": { - "#bigint": "13" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "11" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "11" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "6" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "14" - }, - "reads": { - "#bigint": "13" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "6" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "14" - }, - "reads": { - "#bigint": "13" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "6" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "14" - }, - "reads": { - "#bigint": "13" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "7" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "14" - }, - "reads": { - "#bigint": "13" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "7" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "14" - }, - "reads": { - "#bigint": "13" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "7" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "14" - }, - "reads": { - "#bigint": "13" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "8" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "14" - }, - "reads": { - "#bigint": "13" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "8" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "15" - }, - "reads": { - "#bigint": "14" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "11" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "11" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "9" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "15" - }, - "reads": { - "#bigint": "14" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "9" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "9" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout", - "source_error" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "12" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "12" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "10" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout", - "source_error" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "14" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "14" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "11" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout", - "source_error" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "11" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout", - "source_error", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "11" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout", - "source_error", - "timeout", - "timeout", - "dropped" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "6" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "12" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout", - "source_error", - "timeout", - "timeout", - "dropped" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "12" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout", - "source_error", - "timeout", - "timeout", - "dropped" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "12" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout", - "source_error", - "timeout", - "timeout", - "dropped" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "13" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout", - "source_error", - "timeout", - "timeout", - "dropped" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "14" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout", - "source_error", - "timeout", - "timeout", - "dropped" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "12" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "12" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "7" - }, - "loads": { - "#bigint": "14" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout", - "source_error", - "timeout", - "timeout", - "dropped" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "6" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "7" - }, - "loads": { - "#bigint": "14" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout", - "source_error", - "timeout", - "timeout", - "dropped", - "source_error" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "13" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "13" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "14" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "15" - }, - "recovery": [], - "shadow": [ - "source_error", - "timeout", - "timeout", - "source_error", - "timeout", - "timeout", - "dropped", - "source_error" - ], - "sourceScopes": [ - false, - false, - false, - false, - false, - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"4"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"5"},"recovery":[],"shadow":["source_error"],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"6"},"recovery":[],"shadow":["source_error"],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"7"},"recovery":[],"shadow":["source_error"],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"3"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"7"},"recovery":[],"shadow":["source_error"],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"4"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"7"},"recovery":[],"shadow":["source_error"],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"4"},"maintenance":[],"policyCalls":{"#bigint":"9"},"reads":{"#bigint":"8"},"recovery":[],"shadow":["source_error"],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"4"},"maintenance":[],"policyCalls":{"#bigint":"9"},"reads":{"#bigint":"8"},"recovery":[],"shadow":["source_error"],"sourceScopes":[false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"4"},"maintenance":[],"policyCalls":{"#bigint":"10"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["source_error"],"sourceScopes":[false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"4"},"maintenance":[],"policyCalls":{"#bigint":"10"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["source_error","timeout"],"sourceScopes":[false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"4"},"maintenance":[],"policyCalls":{"#bigint":"11"},"reads":{"#bigint":"10"},"recovery":[],"shadow":["source_error","timeout"],"sourceScopes":[false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"4"},"maintenance":[],"policyCalls":{"#bigint":"11"},"reads":{"#bigint":"10"},"recovery":[],"shadow":["source_error","timeout"],"sourceScopes":[false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"4"},"maintenance":[],"policyCalls":{"#bigint":"11"},"reads":{"#bigint":"10"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"4"},"maintenance":[],"policyCalls":{"#bigint":"11"},"reads":{"#bigint":"10"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"4"},"maintenance":[],"policyCalls":{"#bigint":"11"},"reads":{"#bigint":"10"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"4"},"maintenance":[],"policyCalls":{"#bigint":"12"},"reads":{"#bigint":"11"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"4"},"maintenance":[],"policyCalls":{"#bigint":"13"},"reads":{"#bigint":"12"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"5"},"maintenance":[],"policyCalls":{"#bigint":"13"},"reads":{"#bigint":"12"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"5"},"maintenance":[],"policyCalls":{"#bigint":"13"},"reads":{"#bigint":"12"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"5"},"maintenance":[],"policyCalls":{"#bigint":"13"},"reads":{"#bigint":"12"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"5"},"maintenance":[],"policyCalls":{"#bigint":"14"},"reads":{"#bigint":"13"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"11"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"11"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"6"},"maintenance":[],"policyCalls":{"#bigint":"14"},"reads":{"#bigint":"13"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"6"},"maintenance":[],"policyCalls":{"#bigint":"14"},"reads":{"#bigint":"13"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"6"},"maintenance":[],"policyCalls":{"#bigint":"14"},"reads":{"#bigint":"13"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"7"},"maintenance":[],"policyCalls":{"#bigint":"14"},"reads":{"#bigint":"13"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"7"},"maintenance":[],"policyCalls":{"#bigint":"14"},"reads":{"#bigint":"13"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"7"},"maintenance":[],"policyCalls":{"#bigint":"14"},"reads":{"#bigint":"13"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"8"},"maintenance":[],"policyCalls":{"#bigint":"14"},"reads":{"#bigint":"13"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"8"},"maintenance":[],"policyCalls":{"#bigint":"15"},"reads":{"#bigint":"14"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"11"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"11"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"9"},"maintenance":[],"policyCalls":{"#bigint":"15"},"reads":{"#bigint":"14"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"9"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"9"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout","source_error"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"12"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"10"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout","source_error"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"14"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"14"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"11"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout","source_error"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"11"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout","source_error","timeout","timeout"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"11"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout","source_error","timeout","timeout","dropped"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"6"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"6"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"12"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout","source_error","timeout","timeout","dropped"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"12"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout","source_error","timeout","timeout","dropped"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"8"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"12"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout","source_error","timeout","timeout","dropped"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"13"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout","source_error","timeout","timeout","dropped"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"8"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"14"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout","source_error","timeout","timeout","dropped"],"sourceScopes":[false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"12"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"7"},"loads":{"#bigint":"14"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout","source_error","timeout","timeout","dropped"],"sourceScopes":[false,false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"6"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"6"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"7"},"loads":{"#bigint":"14"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout","source_error","timeout","timeout","dropped","source_error"],"sourceScopes":[false,false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"13"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"13"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"14"},"maintenance":[],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"15"},"recovery":[],"shadow":["source_error","timeout","timeout","source_error","timeout","timeout","dropped","source_error"],"sourceScopes":[false,false,false,false,false,false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } diff --git a/formal/cache-rules.qnt b/formal/cache-rules.qnt index 4826ec95..8fa39afb 100644 --- a/formal/cache-rules.qnt +++ b/formal/cache-rules.qnt @@ -23,8 +23,10 @@ module cache_rules { // Local hits never renew insertion expiry. Fractional environment time is // projected on the common whole-millisecond grid before computing local age. pure def localEntryLiveAt(observed: int, expires: int): bool = observed < expires + // The whole-millisecond grid a fractional instant falls on. + pure def wholeMs(ticks: int, ticksPerMs: int): int = ticks / ticksPerMs pure def localEntryLiveOnGrid(observedTicks: int, insertedTicks: int, ttlMs: int, ticksPerMs: int): bool = - localEntryLiveAt(observedTicks / ticksPerMs, insertedTicks / ticksPerMs + ttlMs) + localEntryLiveAt(wholeMs(observedTicks, ticksPerMs), wholeMs(insertedTicks, ticksPerMs) + ttlMs) // Negative budget is the canonical unbounded representation. Profiles with // other sentinel codes normalize them here; finite zero is already expired. diff --git a/formal/check-go-parity.mjs b/formal/check-go-parity.mjs index cb243759..f8bb7dea 100644 --- a/formal/check-go-parity.mjs +++ b/formal/check-go-parity.mjs @@ -2,6 +2,7 @@ import { createHash } from 'node:crypto'; import { existsSync, readFileSync, readdirSync } from 'node:fs'; import { fileURLToPath } from 'node:url'; import ts from 'typescript'; +import { scheduleExecution } from './execution.mjs'; import { readVectorArtifact } from './vector-artifacts.mjs'; const root = fileURLToPath(new URL('../', import.meta.url)); @@ -17,8 +18,8 @@ function sourcePaths(directory = 'src') { entry.name.endsWith('.ts') ? [`${directory}/${entry.name}`] : []).sort(); } -// The declaration list is navigation, not an assertion inventory. Enumerate the -// stated scope so removing a ledger row cannot silently drop an API member. +// The declarations a production source file states: navigation for a reader +// of the mapping, counted in the ledger's inventory and never stored in it. export function sourceDeclarationSnapshot(path) { const ast = ts.createSourceFile(path, read(path), ts.ScriptTarget.Latest, true); const declarations = []; @@ -44,14 +45,23 @@ function goSymbols(path) { return new Set([...read(path).matchAll(/^(?:func\s+(?:\([^\n]*?\)\s+)?|(?:type|const|var)\s+)([A-Za-z_]\w*)/gm)].map(match => match[1])); } -/** Read-only accounting/freshness guard. Passing is not a parity or coverage proof. */ -export function checkGoParity(ledger = json('formal/go-parity.json')) { - const semantic = json('formal/semantic-cases.json'); - const applicability = json('formal/quint-case-audit.json'); - const execution = json('formal/execution.json'); - const profileManifest = json('formal/profiles.json'); - const witnessCatalog = json('formal/coverage-witnesses.json'); - const audit = json('formal/source-audit.json'); +// Read-only accounting/freshness guard. Passing is not a parity or coverage proof. +// +// The ledger stores what a reviewer writes: per case its group, gaps and +// evidence paths; per production source its hash, Go bindings and mapping +// rationale; per reviewed test or documentation file its Go applicability; +// the native adaptations and the boundary treatments. Everything the other +// ledgers and the sources already state (a case's rule, contracts, cited +// checks, witnesses, replays and vectors; a source file's declarations; a +// reviewed file's hash, entries and contracts; the profile schedule) is read +// from them here and checked against execution.json and the repository, not +// stored as a copy. `inputs` lets a test substitute one of those ledgers. +export function checkGoParity(ledger = json('formal/go-parity.json'), inputs = {}) { + const semantic = inputs.semantic ?? json('formal/semantic-cases.json'); + const execution = scheduleExecution(inputs.execution ?? json('formal/execution.json')); + const profileManifest = inputs.profileManifest ?? json('formal/profiles.json'); + const witnessCatalog = inputs.witnessCatalog ?? json('formal/coverage-witnesses.json'); + const audit = inputs.audit ?? json('formal/source-audit.json'); const failures = []; const check = (condition, message) => { if (!condition) failures.push(message); }; const pathExists = (path, context) => { @@ -63,29 +73,27 @@ export function checkGoParity(ledger = json('formal/go-parity.json')) { check(typeof path === 'string' && path.startsWith('go/') && path.endsWith('.go'), `${context}: expected a production/test Go source path, got ${path}`); return pathExists(path, context); }; - check(ledger.schemaVersion === 1, 'Unsupported Go parity ledger version'); - for (const [field, path] of Object.entries({ semanticCasesSha256: 'formal/semantic-cases.json', executionSha256: 'formal/execution.json', sourceAuditSha256: 'formal/source-audit.json', quintCaseAuditSha256: 'formal/quint-case-audit.json', featureCoverageSha256: 'formal/feature-coverage.json', coverageWitnessesSha256: 'formal/coverage-witnesses.json', profilesSha256: 'formal/profiles.json' })) { + check(ledger.schemaVersion === 2, 'Unsupported Go parity ledger version'); + for (const [field, path] of Object.entries({ semanticCasesSha256: 'formal/semantic-cases.json', executionSha256: 'formal/execution.json', sourceAuditSha256: 'formal/source-audit.json', featureCoverageSha256: 'formal/feature-coverage.json', coverageWitnessesSha256: 'formal/coverage-witnesses.json', profilesSha256: 'formal/profiles.json' })) { check(ledger.inputs?.[field] === digest(path), `${path}: ledger input hash is stale; review and refresh its snapshot`); } check(equal(ledger.cases?.map(row => row.id), semantic.cases.map(row => row.id)), 'Semantic case inventory/order differs from the reviewed ledger'); + + // The profile schedule: execution.json and profiles.json must name the same + // profiles over the same models, and every smoke fixture must exist. const models = new Map(execution.models.filter(model => model.profile).map(model => [model.profile, model])); const scheduledChecks = new Set(execution.models.flatMap(model => [...model.invariants, ...model.regressions].map(name => `${model.path}:${name}`))); const scheduledReplays = new Set(execution.models.filter(model => model.profile).flatMap(model => (model.replayRegressions ?? []).map(name => `${model.profile}/${name}`))); - check(equal(sorted(ledger.profiles.map(row => row.id)), sorted(models.keys())), 'Generated profile inventory differs from execution.json'); - check(equal(sorted(ledger.profiles.map(row => row.id)), sorted(profileManifest.profiles.map(row => row.id))), 'Profile inventory differs from profiles.json'); - for (const profile of ledger.profiles) { - const model = models.get(profile.id); + check(equal(sorted(models.keys()), sorted(profileManifest.profiles.map(row => row.id))), 'Profile inventory differs between execution.json and profiles.json'); + for (const declared of profileManifest.profiles) { + const model = models.get(declared.id); if (!model) continue; - check(profile.model === model.path && profile.plannedTraces === model.generate.traces, `${profile.id}: model or planned trace count is stale`); - const declared = profileManifest.profiles.find(row => row.id === profile.id); - check(declared && profile.version === declared.version && profile.model === declared.model && profile.smoke === declared.smoke, `${profile.id}: profile version/model/smoke differs from profiles.json`); - check(profile.status === 'executable-profile-schedule', `${profile.id}: current profile inventory must not claim a completed replay`); - check(equal(profile.scheduledRegressions, model.replayRegressions ?? []), `${profile.id}: scheduled regression histories are stale`); - check(equal(profile.witnessSources, declared?.witnessSources ?? []), `${profile.id}: witness source inventory is stale`); - pathExists(profile.smoke, profile.id); + check(declared.model === model.path, `${declared.id}: profiles.json model differs from execution.json`); + pathExists(declared.smoke, declared.id); } + const behavior = semantic.cases.filter(row => row.vectors.length === 0); const wire = semantic.cases.filter(row => row.vectors.length > 0); check(ledger.inventory.behavioralCases === behavior.length && ledger.inventory.wireCases === wire.length, 'Semantic case counts are stale'); @@ -117,31 +125,31 @@ export function checkGoParity(ledger = json('formal/go-parity.json')) { } check(ledger.inventory.quintGeneratedProtocolVectors === exportedModels.filter(model => model.vectorExport.kind === 'protocol').reduce((count,model) => count+model.vectorExport.cases,0) && ledger.inventory.quintGeneratedInvalidationVectors === exportedModels.filter(model => model.vectorExport.kind === 'invalidation').reduce((count,model) => count+model.vectorExport.cases,0), 'Quint generated vector counts are stale'); + + // Each case row carries the reviewer's group, gaps and evidence paths; its + // executable evidence is the semantic case's, checked against the schedule. for (const row of ledger.cases) { const source = semantic.cases.find(item => item.id === row.id); if (!source) continue; check(row.kind === (source.vectors.length > 0 ? 'wire-protocol' : 'portable-behavior'), `${row.id}: case classification is stale`); - check(equal(row.contracts, source.contracts) && row.rule === source.rule, `${row.id}: contract or rule snapshot is stale`); - check(equal(row.quintProperties, source.models) && equal(row.fixedRegressions, source.scenarios) && equal(row.vectorEvidence, source.vectors), `${row.id}: executable evidence references are stale`); - check(equal(row.quintReplays, source.quintReplays ?? []) && equal(row.generatedVectors, source.generatedVectors ?? []), `${row.id}: model-driven replay/vector references are stale`); - check(row.scopeAudit === 'formal/quint-case-audit.json' && equal(row.quintDefinitions, applicability.definitions.filter(item => item.case === row.id).map(item => item.reference)), `${row.id}: scoped Quint definitions are stale`); - check(equal(row.requiredGenerated.map(({ profile, witness }) => ({ profile, witness })), source.generated), `${row.id}: required witness snapshot is stale`); - for (const required of row.requiredGenerated) check(required.model === models.get(required.profile)?.path, `${row.id}: required witness model is stale`); - for (const reference of row.quintProperties ?? []) { + check(typeof row.group === 'string' && row.group.length > 0, `${row.id}: case group missing`); + check(Array.isArray(row.gaps), `${row.id}: case gaps must be listed`); + const evidence = row.evidence; + check(typeof evidence?.typescript === 'string' && typeof evidence?.go === 'string' && typeof evidence?.scope === 'string' && evidence.scope.length > 40 && Array.isArray(evidence.nativeGo), `${row.id}: evidence paths or scope missing`); + for (const reference of evidence?.nativeGo ?? []) goFile(String(reference).split(':')[0], row.id); + for (const required of source.generated) check(models.has(required.profile), `${row.id}: required witness profile is not scheduled: ${required.profile}`); + for (const reference of source.models.map(entry => entry.ref)) { check(scheduledChecks.has(reference), `${row.id}: Quint check is not independently scheduled: ${reference}`); const match = /^(formal\/[^:]+\.qnt):([A-Za-z_]\w*)$/.exec(reference); check(Boolean(match), `${row.id}: malformed Quint obligation reference ${reference}`); if (match && pathExists(match[1], row.id)) check(new RegExp(`\\b(?:val|def|action|run)\\s+${match[2]}\\b`).test(read(match[1])), `${row.id}: missing named Quint obligation ${reference}`); } - for (const reference of row.quintReplays ?? []) check(scheduledReplays.has(reference), `${row.id}: Quint replay is not scheduled: ${reference}`); - for (const reference of row.generatedVectors ?? []) { + for (const reference of source.quintReplays ?? []) check(scheduledReplays.has(reference), `${row.id}: Quint replay is not scheduled: ${reference}`); + for (const reference of source.generatedVectors ?? []) { const artifact = vectorArtifacts.get(reference.artifact); const vectors = artifact?.[reference.group ?? 'vectors']; check(Array.isArray(vectors) && (reference.name === '*' ? vectors.length > 0 : vectors.some(vector => vector.name === reference.name)), `${row.id}: missing generated vector reference`); } - const expectedStatus = source.generated.length ? 'executable-generated' : source.quintReplays?.length ? 'executable-quint-regression' - : source.generatedVectors?.length ? 'executable-quint-vector' : source.scenarios.length ? 'executable-fixed' : 'scoped-model-only'; - check(row.status === expectedStatus, `${row.id}: case status must describe its current executable evidence`); } const scope = ledger.sourceDeclarationScope; @@ -154,16 +162,14 @@ export function checkGoParity(ledger = json('formal/go-parity.json')) { check(adaptation.references?.length > 0, `${adaptation.id}: native binding references missing`); for (const path of adaptation.references ?? []) pathExists(path, adaptation.id); } + // Each production source keeps its hash and reviewed Go bindings; its + // declarations are scanned from src/ and only counted. check(equal(ledger.sourceInventory.map(row => row.path), sourcePaths()), 'Production TypeScript source file inventory changed'); let declarations = 0; for (const source of ledger.sourceInventory) { - declarations += source.declarations.length; if (!pathExists(source.path, 'Source inventory')) continue; check(source.sha256 === digest(source.path), `${source.path}: source hash changed; mapping review is stale`); - check(equal(source.declarations.map(({ name, kind, line }) => ({ name, kind, line })), sourceDeclarationSnapshot(source.path)), `${source.path}: declaration inventory/navigation changed`); - for (const declaration of source.declarations) { - check(declaration.status === 'inherits-source-file-mapping', `${source.path}:${declaration.line}: declaration must inherit a reviewed file mapping`); - } + declarations += sourceDeclarationSnapshot(source.path).length; const review = source.mappingReview; check(review?.status === 'reviewed-mapping-not-execution', `${source.path}: source mapping review missing`); check(typeof review?.rationale === 'string' && review.rationale.length > 80, `${source.path}: precise mapping rationale missing`); @@ -179,16 +185,16 @@ export function checkGoParity(ledger = json('formal/go-parity.json')) { for (const id of review?.nativeAdaptations ?? []) check(adaptations.has(id), `${source.path}: unknown native adaptation ${id}`); } check(ledger.inventory.sourceFiles === ledger.sourceInventory.length && ledger.inventory.sourceDeclarations === declarations, 'Source inventory counts are stale'); + // Each test or documentation file the source audit reviews has a Go + // applicability row; the file's hash, entries and contracts are the audit's. const reviewed = ledger.reviewedTestAndDocumentationAudit; - check(reviewed?.path === 'formal/source-audit.json' && reviewed.sha256 === digest('formal/source-audit.json'), 'Test/documentation applicability audit hash is stale'); + check(reviewed?.path === 'formal/source-audit.json', 'Test/documentation applicability audit must review formal/source-audit.json'); check(reviewed?.status === 'reviewed-applicability-not-execution', 'Test/documentation review must distinguish applicability from execution'); - check(reviewed.sourceFiles === audit.sources.length && equal(reviewed.sources?.map(source => source.path), audit.sources.map(source => source.path)), 'Test/documentation applicability inventory changed'); - for (const source of reviewed.sources ?? []) { + check(equal(reviewed?.sources?.map(source => source.path), audit.sources.map(source => source.path)), 'Test/documentation applicability inventory changed'); + for (const source of reviewed?.sources ?? []) { const original = audit.sources.find(item => item.path === source.path); if (!original) continue; - check(source.sha256 === original.sha256 && source.entries === original.entries.length, `${source.path}: applicability snapshot changed`); - if (pathExists(source.path, 'Test/documentation audit')) check(source.sha256 === digest(source.path), `${source.path}: reviewed test/documentation contents changed`); - check(equal(source.contracts, sorted(new Set(original.entries.flatMap(entry => entry.contracts)))), `${source.path}: applicability contract inventory changed`); + if (pathExists(source.path, 'Test/documentation audit')) check(original.sha256 === digest(source.path), `${source.path}: reviewed test/documentation contents changed`); check(typeof source.rationale === 'string' && source.rationale.length > 60, `${source.path}: Go applicability rationale missing`); check(source.goFiles?.length > 0, `${source.path}: Go applicability references missing`); for (const path of source.goFiles ?? []) goFile(path, source.path); @@ -197,7 +203,7 @@ export function checkGoParity(ledger = json('formal/go-parity.json')) { // File relocation must include optional boundary evidence owned by exporters. for (const boundary of ledger.boundaries) for (const reference of boundary.nativeTests ?? []) goFile(reference.split(':')[0], boundary.id); if (failures.length) throw new Error(failures.join('\n')); - return { kind: 'accounting-and-freshness', sourceFiles: ledger.sourceInventory.length, declarations, reviewedTestsAndDocs: reviewed.sourceFiles, semanticCases: ledger.cases.length, profiles: ledger.profiles.length, vectorModels: exportedModels.length, status: ledger.status, meaning: 'Fresh reviewed mappings and inventory snapshots; execution evidence remains separately assessed.' }; + return { kind: 'accounting-and-freshness', sourceFiles: ledger.sourceInventory.length, declarations, reviewedTestsAndDocs: audit.sources.length, semanticCases: ledger.cases.length, profiles: models.size, vectorModels: exportedModels.length, status: ledger.status, meaning: 'Fresh reviewed mappings and inventory snapshots; execution evidence remains separately assessed.' }; } if (process.argv[1] === fileURLToPath(import.meta.url)) console.log(checkGoParity()); diff --git a/formal/check-go-replay.mjs b/formal/check-go-replay.mjs index 69ec533f..b091a8f3 100644 --- a/formal/check-go-replay.mjs +++ b/formal/check-go-replay.mjs @@ -2,7 +2,7 @@ import { createHash } from 'node:crypto'; import { readFileSync } from 'node:fs'; import { resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; -import { readExecution, root, validateExecution } from './execution.mjs'; +import { readExecution, root, scheduleExecution, validateExecution } from './execution.mjs'; import { protocolCorpus } from './vector-artifacts.mjs'; import { conformanceInventory } from './conformance.mjs'; @@ -43,8 +43,9 @@ export function buildGoReplayInventory({ execution, scenarios, protocol, package } export function loadGoReplayInventory() { - const execution = readExecution(); - validateExecution(execution); + const manifest = readExecution(); + validateExecution(manifest); + const execution = scheduleExecution(manifest); const read = path => readFileSync(root + path, 'utf8'); const packageName = /^module\s+(\S+)\s*$/m.exec(read('go/go.mod'))?.[1]; return buildGoReplayInventory({ execution, packageName, diff --git a/formal/check-kernel-fixtures.mjs b/formal/check-kernel-fixtures.mjs index 9b3ee267..a0e2ef61 100644 --- a/formal/check-kernel-fixtures.mjs +++ b/formal/check-kernel-fixtures.mjs @@ -17,19 +17,25 @@ export function kernelFixtures(directory = root) { .map(name => `${fixtureDirectory}/${name}`); } -// Every run a fixture declares; `quint test` runs only those whose name ends -// in Test unless told otherwise, so the declared names are matched explicitly. +// Every run a fixture declares. `quint test` selects the runs whose name ends +// in Test, the convention the scheduled regressions also keep +// (execution.mjs), so a declared name without the suffix is rejected here +// rather than silently skipped by the selection. export function declaredRuns(source) { - return [...source.matchAll(/^\s*run\s+(\w+)/gm)].map(match => match[1]); + const runs = [...source.matchAll(/^\s*run\s+(\w+)/gm)].map(match => match[1]); + const unselected = runs.filter(name => !name.endsWith('Test')); + if (unselected.length) throw new Error(`Kernel fixture runs must end in Test: ${unselected.join(', ')}`); + return runs; } +// One `quint test` per fixture under the default selection; the declared +// count is the completeness guard. async function checkFixture(model, { settings, seed, directory, timeoutMs }) { const runs = declaredRuns(readFileSync(resolve(directory, model), 'utf8')); if (!runs.length) throw new Error(`${model} declares no runs`); const typecheck = await spawnBuffered('quint', ['typecheck', model], { cwd: directory, timeoutMs }); if (typecheck.status !== 0) throw new CommandFailure(`typecheck of ${model} failed (exit ${typecheck.status}):\n${typecheck.stderr}${typecheck.stdout}`, typecheck); - const test = await spawnBuffered('quint', ['test', model, `--backend=${settings.backend}`, '--max-samples=1', `--seed=${seed}`, - `--match=^(${runs.join('|')})$`], { cwd: directory, timeoutMs }); + const test = await spawnBuffered('quint', ['test', model, `--backend=${settings.backend}`, '--max-samples=1', `--seed=${seed}`], { cwd: directory, timeoutMs }); const log = test.stdout + test.stderr; const passing = Number(/(\d+) passing/.exec(log)?.[1] ?? NaN); if (test.status !== 0 || passing !== runs.length) { diff --git a/formal/check-model-properties.mjs b/formal/check-model-properties.mjs index d14b4c6d..c6bd6cc2 100644 --- a/formal/check-model-properties.mjs +++ b/formal/check-model-properties.mjs @@ -90,7 +90,7 @@ export async function measureModelProperties({ only, concurrency = resolveConcur sources: Object.fromEntries([...sources].map(([path, source]) => [path, createHash('sha256').update(source).digest('hex')])), catalogSha256: createHash('sha256').update(readFileSync(resolve(root, 'formal/execution.json'))).digest('hex'), catalog: manifest.challenges.length, reproducers: manifest.challenges.filter(challenge => challenge.reproducer).length, - reproducerBacklog: manifest.reproducerBacklog.length, challenges: [] }; + reproducerBacklog: manifest.reproducerBacklog.length, nativeMutantBacklog: manifest.nativeMutantBacklog.length, challenges: [] }; const save = () => writeFileSync(resolve(output, 'report.json'), JSON.stringify(report, null, 2) + '\n'); save(); async function execute(args) { diff --git a/formal/check-semantic-coverage.mjs b/formal/check-semantic-coverage.mjs index a50f0323..538f50dc 100644 --- a/formal/check-semantic-coverage.mjs +++ b/formal/check-semantic-coverage.mjs @@ -2,7 +2,7 @@ import { readFileSync } from 'node:fs'; import { fileURLToPath } from 'node:url'; import { checkSourceAudit } from './check-source-audit.mjs'; import { checkFeatureCoverage } from './check-feature-coverage.mjs'; -import { readExecution, scanDeclarations, scheduledProperties, validateExecution } from './execution.mjs'; +import { checkMutantAnchors, readExecution, readMutantCatalog, scanDeclarations, scheduleExecution, scheduledProperties, validateExecution } from './execution.mjs'; import { protocolCorpus, readVectorArtifact } from './vector-artifacts.mjs'; const root = fileURLToPath(new URL('../', import.meta.url)); @@ -38,54 +38,49 @@ export function checkProfiles(registry = parse('formal/profiles.json')) { return { specificationVersion: registry.specificationVersion, profiles: expected.length }; } -export function checkQuintCaseAudit(audit = parse('formal/quint-case-audit.json'), - catalog = parse('formal/semantic-cases.json'), manifest = readExecution()) { - if (audit.schemaVersion !== 1 || typeof audit.scope !== 'string' || !audit.scope.trim() || - !Array.isArray(audit.checks) || !Array.isArray(audit.definitions) || - !Array.isArray(audit.limitations) || !audit.limitations.length || - audit.limitations.some(item => typeof item !== 'string' || !item.trim())) { - throw new Error('Invalid Quint case applicability audit'); - } - const cases = new Map(catalog.cases.map(c => [c.id, c])); - const expected = new Map(manifest.models.flatMap(model => [ - ...model.invariants.map(name => [`${model.path}:${name}`, 'invariant']), - ...model.regressions.map(name => [`${model.path}:${name}`, 'regression']), - ])); - // A case cites the definition that owns its rule: a scheduled model's, or a - // library's (a kernel module's once the rule has moved there). +// Every Quint citation of a case carries its reviewed scope: what that check or +// definition establishes for the case. `models` cite scheduled invariants and +// regressions (their scheduling is checked per case above); `definitions` cite +// the transition, helper or predicate that owns the rule, in a scheduled model +// or a library (a kernel module's once the rule moved there). A definition's +// kind is read from its declaration (action, def or val) and it may not be a +// scheduled property itself. The checker verifies the shape, not the judgment +// in the scope text. +export function checkCitationScopes(catalog = parse('formal/semantic-cases.json'), manifest = scheduleExecution()) { + const properties = scheduledProperties(manifest); const models = new Set([...manifest.models.map(model => model.path), ...manifest.libraries]); - const checked = new Set(), defined = new Set(), declarations = new Map(); - for (const [entries, seen, isCheck] of [[audit.checks, checked, true], [audit.definitions, defined, false]]) { - for (const entry of entries) { - const c = cases.get(entry.case), key = `${entry.case}/${entry.reference}`; - if (!c || typeof entry.reference !== 'string' || typeof entry.scope !== 'string' || - !entry.scope.trim() || seen.has(key)) throw new Error(`Invalid/duplicate Quint case audit entry: ${key}`); - seen.add(key); - if (isCheck) { - if (!c.models.includes(entry.reference) || expected.get(entry.reference) !== entry.kind) { - throw new Error(`Quint case audit check is not a cited scheduled ${entry.kind}: ${key}`); + const declarations = new Map(); + const kinds = { action: 'transition', def: 'helper', val: 'predicate' }; + let scopedChecks = 0, definitions = 0, casesWithDefinitions = 0; + for (const c of catalog.cases) { + for (const [field, entries] of [['models', c.models], ['definitions', c.definitions ?? []]]) { + if (!Array.isArray(entries)) throw new Error(`${c.id}: invalid ${field} citations`); + const refs = new Set(); + for (const entry of entries) { + const key = `${c.id}/${entry?.ref}`; + if (typeof entry?.ref !== 'string' || typeof entry.scope !== 'string' || !entry.scope.trim() || refs.has(entry.ref)) { + throw new Error(`Invalid/duplicate Quint citation or missing scope: ${key}`); } - } else { - const parts = entry.reference.split(':'), [path, name] = parts; + refs.add(entry.ref); + if (field === 'models') { scopedChecks++; continue; } + const parts = entry.ref.split(':'), [path, name] = parts; if (parts.length !== 2 || !models.has(path)) throw new Error(`Unknown Quint definition model: ${key}`); if (!declarations.has(path)) declarations.set(path, scanDeclarations(read(path))); - const kinds = { transition: 'action', helper: 'def', predicate: 'val' }; - if (!Object.hasOwn(kinds, entry.kind) || declarations.get(path).get(name) !== kinds[entry.kind] || - expected.has(entry.reference)) throw new Error(`Quint case definition is not a transition/helper/predicate: ${key}`); + if (!Object.hasOwn(kinds, declarations.get(path).get(name)) || properties.has(entry.ref)) { + throw new Error(`Quint case definition is not a transition/helper/predicate: ${key}`); + } + definitions++; } } + if (c.definitions?.length) casesWithDefinitions++; } - for (const c of catalog.cases) for (const reference of c.models) { - if (!checked.has(`${c.id}/${reference}`)) throw new Error(`Missing Quint case applicability scope: ${c.id}/${reference}`); - } - return { scopedChecks: checked.size, definitions: defined.size, - casesWithDefinitions: new Set(audit.definitions.map(entry => entry.case)).size }; + return { scopedChecks, definitions, casesWithDefinitions }; } export function checkSemanticCoverage(catalog = parse('formal/semantic-cases.json')) { const profiles = checkProfiles(); - const manifest = readExecution(); - const execution = validateExecution(manifest); + const execution = validateExecution(readExecution()); + const manifest = scheduleExecution(); const scheduled = scheduledProperties(manifest); const vectorArtifacts = new Map(manifest.models.filter(model => model.vectorExport) .map(model => [model.vectorExport.artifact, { model, value: readVectorArtifact(model) }])); @@ -104,7 +99,8 @@ export function checkSemanticCoverage(catalog = parse('formal/semantic-cases.jso for (const key of ['scenarios', 'generated', 'models', 'vectors']) if (!Array.isArray(c[key])) throw new Error(`${c.id}: missing evidence list ${key}`); for (const name of c.scenarios) if (!scenarios.has(name)) throw new Error(`${c.id}: unknown scenario ${name}`); for (const g of c.generated) if (!witnesses[g.profile]?.includes(g.witness)) throw new Error(`${c.id}: unknown required witness ${g.profile}/${g.witness}`); - for (const model of c.models) { + const cited = c.models.map(entry => entry?.ref); + for (const model of cited) { if (!scheduled.has(model)) throw new Error(`${c.id}: model property is not scheduled for execution: ${model}`); } if (c.quintReplays !== undefined) { @@ -113,7 +109,7 @@ export function checkSemanticCoverage(catalog = parse('formal/semantic-cases.jso const parts = typeof reference === 'string' ? reference.split('/') : []; const model = manifest.models.find(model => model.profile === parts[0]); if (parts.length !== 2 || !model?.replayRegressions?.includes(parts[1]) || - !c.models.includes(`${model.path}:${parts[1]}`)) throw new Error(`${c.id}: Quint replay needs a cited scheduled exported regression: ${reference}`); + !cited.includes(`${model.path}:${parts[1]}`)) throw new Error(`${c.id}: Quint replay needs a cited scheduled exported regression: ${reference}`); } } if (c.generatedVectors !== undefined) { @@ -126,7 +122,7 @@ export function checkSemanticCoverage(catalog = parse('formal/semantic-cases.jso const key = `${reference.artifact}/${group}/${reference.name}`; if (!source || !Array.isArray(rows) || !rows.length || references.has(key) || (reference.name !== '*' && !rows.some(row => row.name === reference.name)) - || !c.models.some(ref => ref.startsWith(`${source.model.path}:`))) throw new Error(`${c.id}: generated vector needs a cited model and exported case: ${key}`); + || !cited.some(ref => ref.startsWith(`${source.model.path}:`))) throw new Error(`${c.id}: generated vector needs a cited model and exported case: ${key}`); references.add(key); } } @@ -174,16 +170,12 @@ export function checkSemanticCoverage(catalog = parse('formal/semantic-cases.jso } } } - const applicability = checkQuintCaseAudit(undefined, catalog, manifest); + const citations = checkCitationScopes(catalog, manifest); const featureCoverage = checkFeatureCoverage(undefined, catalog); - const mutations = parse('formal/semantic-mutations.json'); - if (mutations.schemaVersion !== 1 || !Array.isArray(mutations.mutations) || !mutations.mutations.length) throw new Error('Invalid mutation catalog'); - const mutationIds = new Set(); - for (const m of mutations.mutations) { - if (!/^M\d+$/.test(m.id) || mutationIds.has(m.id) || !ids.has(m.case)) throw new Error(`Invalid mutation case/ID: ${m.id}`); - mutationIds.add(m.id); - if (!Array.isArray(m.requiredDetections) || m.requiredDetections.some(c => !['ordinary', 'generated', 'portable'].includes(c))) throw new Error(`${m.id}: unknown mutation cohort`); - } + // validateExecution validated the mutant catalog's schema above; the audit + // also anchors every edit in the port text. + const mutantCatalog = readMutantCatalog(); + checkMutantAnchors(mutantCatalog); const behavioral = catalog.cases.filter(c => !c.vectors.length); const portable = c => c.scenarios.length || c.generated.length || c.vectors.length || c.quintReplays?.length || c.generatedVectors?.length; const count = cases => ({ total: cases.length, model: cases.filter(c => c.models.length).length, @@ -193,13 +185,12 @@ export function checkSemanticCoverage(catalog = parse('formal/semantic-cases.jso quintDriven: cases.filter(c => c.generated.length || c.quintReplays?.length || c.generatedVectors?.length).length, modelOnly: cases.filter(c => c.models.length && !portable(c)).map(c => c.id), uncovered: cases.filter(c => !c.models.length && !portable(c)).map(c => c.id) }); - return { profiles, execution, sourceAccounting, applicability, featureCoverage, contracts: parents.size, cases: count(catalog.cases), behavioral: count(behavioral), - protocol: count(catalog.cases.filter(c => c.vectors.length)), mutations: mutations.mutations.length }; + return { profiles, execution, sourceAccounting, citations, featureCoverage, contracts: parents.size, cases: count(catalog.cases), behavioral: count(behavioral), + protocol: count(catalog.cases.filter(c => c.vectors.length)), mutations: mutantCatalog.mutations.size }; } if (process.argv[1] === fileURLToPath(import.meta.url)) { console.log(JSON.stringify(process.argv.includes('--profiles-stdin') ? checkProfiles(JSON.parse(readFileSync(0, 'utf8'))) - : process.argv.includes('--audit-stdin') ? checkQuintCaseAudit(JSON.parse(readFileSync(0, 'utf8'))) : checkSemanticCoverage(process.argv.includes('--stdin') ? JSON.parse(readFileSync(0, 'utf8')) : undefined), null, 2)); } diff --git a/formal/check-symbolic-models.mjs b/formal/check-symbolic-models.mjs index 06c9d4f0..c62b189f 100644 --- a/formal/check-symbolic-models.mjs +++ b/formal/check-symbolic-models.mjs @@ -5,7 +5,7 @@ import { createServer } from 'node:net'; import { basename, resolve } from 'node:path'; import { setTimeout as delay } from 'node:timers/promises'; import { fileURLToPath } from 'node:url'; -import { readExecution, validateExecution } from './execution.mjs'; +import { quintSources, readExecution, validateExecution } from './execution.mjs'; import { prepareApalache } from './apalache.mjs'; import { waitForApalache } from './apalache-readiness.mjs'; @@ -107,7 +107,7 @@ export async function checkSymbolicModels({ directory = root } = {}) { const plan = symbolicPlan(manifest); report.backend = manifest.symbolic; const sources = ['formal/execution.json', 'formal/execution.mjs', 'formal/generated-fixtures.lock.json', - 'formal/check-symbolic-models.mjs', 'formal/apalache.mjs', 'formal/apalache-readiness.mjs', ...manifest.libraries, ...manifest.models.map(model => model.path)]; + 'formal/check-symbolic-models.mjs', 'formal/apalache.mjs', 'formal/apalache-readiness.mjs', ...quintSources(directory)]; report.sources = Object.fromEntries(sources.map(path => [path, hash(resolve(directory, path))])); save(); const version = spawnSync('quint', ['--version'], { cwd: directory, encoding: 'utf8', timeout: 15_000 }); diff --git a/formal/compact-json.mjs b/formal/compact-json.mjs new file mode 100644 index 00000000..8600fb58 --- /dev/null +++ b/formal/compact-json.mjs @@ -0,0 +1,19 @@ +// Pretty JSON with one record per line. A generated fixture's envelope (its +// metadata, group names and per-history headers) is indented two spaces per +// level as JSON.stringify would; every subtree the `record` predicate accepts, +// such as one history state or one vector row, is written on a single line. +// A fixture then costs about a line per state instead of sixty, and readers, +// which parse JSON, see no difference. `record` receives the path of keys and +// indices from the root and the subtree at that path. +export function encodeJson(value, record = () => false) { + const write = (node, path, indent) => { + if (node === null || typeof node !== 'object' || record(path, node)) return JSON.stringify(node ?? null); + const inner = `${indent} `; + if (Array.isArray(node)) { + return node.length ? `[\n${node.map((item, index) => inner + write(item, [...path, index], inner)).join(',\n')}\n${indent}]` : '[]'; + } + const entries = Object.entries(node).filter(([, item]) => item !== undefined); + return entries.length ? `{\n${entries.map(([key, item]) => `${inner}${JSON.stringify(key)}: ${write(item, [...path, key], inner)}`).join(',\n')}\n${indent}}` : '{}'; + }; + return `${write(value, [], '')}\n`; +} diff --git a/formal/conformance-smoke.itf.json b/formal/conformance-smoke.itf.json index 08ec0acf..61f122c5 100644 --- a/formal/conformance-smoke.itf.json +++ b/formal/conformance-smoke.itf.json @@ -11,770 +11,20 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "1" - }, - "lastResult": { - "#bigint": "0" - }, - "outsideLoaderCalls": { - "#bigint": "0" - }, - "requestLoaderCalls": { - "#bigint": "0" - }, - "localLoaderCalls": { - "#bigint": "0" - }, - "coalescedLoaderCalls": { - "#bigint": "0" - }, - "remoteLoaderCalls": { - "#bigint": "0" - }, - "localCached": false, - "localValue": { - "#bigint": "0" - }, - "coalescedCached": false, - "coalescedValue": { - "#bigint": "0" - }, - "remoteReadable": false, - "remoteValue": { - "#bigint": "0" - }, - "redisReads": { - "#bigint": "0" - }, - "redisWrites": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "outsideCall" - }, - "mbt::actionTaken": "outsideCall", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "1" - }, - "lastResult": { - "#bigint": "1" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "0" - }, - "localLoaderCalls": { - "#bigint": "0" - }, - "coalescedLoaderCalls": { - "#bigint": "0" - }, - "remoteLoaderCalls": { - "#bigint": "0" - }, - "localCached": false, - "localValue": { - "#bigint": "0" - }, - "coalescedCached": false, - "coalescedValue": { - "#bigint": "0" - }, - "remoteReadable": false, - "remoteValue": { - "#bigint": "0" - }, - "redisReads": { - "#bigint": "0" - }, - "redisWrites": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "requestLocalPair" - }, - "mbt::actionTaken": "requestLocalPair", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "1" - }, - "lastResult": { - "#bigint": "1" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "1" - }, - "localLoaderCalls": { - "#bigint": "0" - }, - "coalescedLoaderCalls": { - "#bigint": "0" - }, - "remoteLoaderCalls": { - "#bigint": "0" - }, - "localCached": false, - "localValue": { - "#bigint": "0" - }, - "coalescedCached": false, - "coalescedValue": { - "#bigint": "0" - }, - "remoteReadable": false, - "remoteValue": { - "#bigint": "0" - }, - "redisReads": { - "#bigint": "0" - }, - "redisWrites": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "localCall" - }, - "mbt::actionTaken": "localCall", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "1" - }, - "lastResult": { - "#bigint": "1" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "1" - }, - "localLoaderCalls": { - "#bigint": "1" - }, - "coalescedLoaderCalls": { - "#bigint": "0" - }, - "remoteLoaderCalls": { - "#bigint": "0" - }, - "localCached": true, - "localValue": { - "#bigint": "1" - }, - "coalescedCached": false, - "coalescedValue": { - "#bigint": "0" - }, - "remoteReadable": false, - "remoteValue": { - "#bigint": "0" - }, - "redisReads": { - "#bigint": "0" - }, - "redisWrites": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "bumpSource" - }, - "mbt::actionTaken": "bumpSource", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "2" - }, - "lastResult": { - "#bigint": "1" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "1" - }, - "localLoaderCalls": { - "#bigint": "1" - }, - "coalescedLoaderCalls": { - "#bigint": "0" - }, - "remoteLoaderCalls": { - "#bigint": "0" - }, - "localCached": true, - "localValue": { - "#bigint": "1" - }, - "coalescedCached": false, - "coalescedValue": { - "#bigint": "0" - }, - "remoteReadable": false, - "remoteValue": { - "#bigint": "0" - }, - "redisReads": { - "#bigint": "0" - }, - "redisWrites": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "localCall" - }, - "mbt::actionTaken": "localCall", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "2" - }, - "lastResult": { - "#bigint": "1" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "1" - }, - "localLoaderCalls": { - "#bigint": "1" - }, - "coalescedLoaderCalls": { - "#bigint": "0" - }, - "remoteLoaderCalls": { - "#bigint": "0" - }, - "localCached": true, - "localValue": { - "#bigint": "1" - }, - "coalescedCached": false, - "coalescedValue": { - "#bigint": "0" - }, - "remoteReadable": false, - "remoteValue": { - "#bigint": "0" - }, - "redisReads": { - "#bigint": "0" - }, - "redisWrites": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "coalescedLocalPair" - }, - "mbt::actionTaken": "coalescedLocalPair", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "2" - }, - "lastResult": { - "#bigint": "2" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "1" - }, - "localLoaderCalls": { - "#bigint": "1" - }, - "coalescedLoaderCalls": { - "#bigint": "1" - }, - "remoteLoaderCalls": { - "#bigint": "0" - }, - "localCached": true, - "localValue": { - "#bigint": "1" - }, - "coalescedCached": true, - "coalescedValue": { - "#bigint": "2" - }, - "remoteReadable": false, - "remoteValue": { - "#bigint": "0" - }, - "redisReads": { - "#bigint": "0" - }, - "redisWrites": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "remoteCall" - }, - "mbt::actionTaken": "remoteCall", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "2" - }, - "lastResult": { - "#bigint": "2" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "1" - }, - "localLoaderCalls": { - "#bigint": "1" - }, - "coalescedLoaderCalls": { - "#bigint": "1" - }, - "remoteLoaderCalls": { - "#bigint": "1" - }, - "localCached": true, - "localValue": { - "#bigint": "1" - }, - "coalescedCached": true, - "coalescedValue": { - "#bigint": "2" - }, - "remoteReadable": true, - "remoteValue": { - "#bigint": "2" - }, - "redisReads": { - "#bigint": "1" - }, - "redisWrites": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "bumpSource" - }, - "mbt::actionTaken": "bumpSource", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "3" - }, - "lastResult": { - "#bigint": "2" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "1" - }, - "localLoaderCalls": { - "#bigint": "1" - }, - "coalescedLoaderCalls": { - "#bigint": "1" - }, - "remoteLoaderCalls": { - "#bigint": "1" - }, - "localCached": true, - "localValue": { - "#bigint": "1" - }, - "coalescedCached": true, - "coalescedValue": { - "#bigint": "2" - }, - "remoteReadable": true, - "remoteValue": { - "#bigint": "2" - }, - "redisReads": { - "#bigint": "1" - }, - "redisWrites": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "remoteCall" - }, - "mbt::actionTaken": "remoteCall", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "3" - }, - "lastResult": { - "#bigint": "2" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "1" - }, - "localLoaderCalls": { - "#bigint": "1" - }, - "coalescedLoaderCalls": { - "#bigint": "1" - }, - "remoteLoaderCalls": { - "#bigint": "1" - }, - "localCached": true, - "localValue": { - "#bigint": "1" - }, - "coalescedCached": true, - "coalescedValue": { - "#bigint": "2" - }, - "remoteReadable": true, - "remoteValue": { - "#bigint": "2" - }, - "redisReads": { - "#bigint": "2" - }, - "redisWrites": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidateRemote" - }, - "mbt::actionTaken": "invalidateRemote", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "3" - }, - "lastResult": { - "#bigint": "2" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "1" - }, - "localLoaderCalls": { - "#bigint": "1" - }, - "coalescedLoaderCalls": { - "#bigint": "1" - }, - "remoteLoaderCalls": { - "#bigint": "1" - }, - "localCached": true, - "localValue": { - "#bigint": "1" - }, - "coalescedCached": true, - "coalescedValue": { - "#bigint": "2" - }, - "remoteReadable": false, - "remoteValue": { - "#bigint": "2" - }, - "redisReads": { - "#bigint": "2" - }, - "redisWrites": { - "#bigint": "2" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "remoteCall" - }, - "mbt::actionTaken": "remoteCall", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "3" - }, - "lastResult": { - "#bigint": "3" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "1" - }, - "localLoaderCalls": { - "#bigint": "1" - }, - "coalescedLoaderCalls": { - "#bigint": "1" - }, - "remoteLoaderCalls": { - "#bigint": "2" - }, - "localCached": true, - "localValue": { - "#bigint": "1" - }, - "coalescedCached": true, - "coalescedValue": { - "#bigint": "2" - }, - "remoteReadable": true, - "remoteValue": { - "#bigint": "3" - }, - "redisReads": { - "#bigint": "3" - }, - "redisWrites": { - "#bigint": "3" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "bumpSource" - }, - "mbt::actionTaken": "bumpSource", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "4" - }, - "lastResult": { - "#bigint": "3" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "1" - }, - "localLoaderCalls": { - "#bigint": "1" - }, - "coalescedLoaderCalls": { - "#bigint": "1" - }, - "remoteLoaderCalls": { - "#bigint": "2" - }, - "localCached": true, - "localValue": { - "#bigint": "1" - }, - "coalescedCached": true, - "coalescedValue": { - "#bigint": "2" - }, - "remoteReadable": true, - "remoteValue": { - "#bigint": "3" - }, - "redisReads": { - "#bigint": "3" - }, - "redisWrites": { - "#bigint": "3" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "remoteReadFailureCall" - }, - "mbt::actionTaken": "remoteReadFailureCall", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "4" - }, - "lastResult": { - "#bigint": "4" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "1" - }, - "localLoaderCalls": { - "#bigint": "1" - }, - "coalescedLoaderCalls": { - "#bigint": "1" - }, - "remoteLoaderCalls": { - "#bigint": "3" - }, - "localCached": true, - "localValue": { - "#bigint": "1" - }, - "coalescedCached": true, - "coalescedValue": { - "#bigint": "2" - }, - "remoteReadable": true, - "remoteValue": { - "#bigint": "3" - }, - "redisReads": { - "#bigint": "4" - }, - "redisWrites": { - "#bigint": "3" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "requestLocalPair" - }, - "mbt::actionTaken": "requestLocalPair", - "mbt::nondetPicks": {}, - "s": { - "sourceVersion": { - "#bigint": "4" - }, - "lastResult": { - "#bigint": "4" - }, - "outsideLoaderCalls": { - "#bigint": "1" - }, - "requestLoaderCalls": { - "#bigint": "2" - }, - "localLoaderCalls": { - "#bigint": "1" - }, - "coalescedLoaderCalls": { - "#bigint": "1" - }, - "remoteLoaderCalls": { - "#bigint": "3" - }, - "localCached": true, - "localValue": { - "#bigint": "1" - }, - "coalescedCached": true, - "coalescedValue": { - "#bigint": "2" - }, - "remoteReadable": true, - "remoteValue": { - "#bigint": "3" - }, - "redisReads": { - "#bigint": "4" - }, - "redisWrites": { - "#bigint": "3" - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"1"},"lastResult":{"#bigint":"0"},"outsideLoaderCalls":{"#bigint":"0"},"requestLoaderCalls":{"#bigint":"0"},"localLoaderCalls":{"#bigint":"0"},"coalescedLoaderCalls":{"#bigint":"0"},"remoteLoaderCalls":{"#bigint":"0"},"localCached":false,"localValue":{"#bigint":"0"},"coalescedCached":false,"coalescedValue":{"#bigint":"0"},"remoteReadable":false,"remoteValue":{"#bigint":"0"},"redisReads":{"#bigint":"0"},"redisWrites":{"#bigint":"0"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"outsideCall"},"mbt::actionTaken":"outsideCall","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"1"},"lastResult":{"#bigint":"1"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"0"},"localLoaderCalls":{"#bigint":"0"},"coalescedLoaderCalls":{"#bigint":"0"},"remoteLoaderCalls":{"#bigint":"0"},"localCached":false,"localValue":{"#bigint":"0"},"coalescedCached":false,"coalescedValue":{"#bigint":"0"},"remoteReadable":false,"remoteValue":{"#bigint":"0"},"redisReads":{"#bigint":"0"},"redisWrites":{"#bigint":"0"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"requestLocalPair"},"mbt::actionTaken":"requestLocalPair","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"1"},"lastResult":{"#bigint":"1"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"1"},"localLoaderCalls":{"#bigint":"0"},"coalescedLoaderCalls":{"#bigint":"0"},"remoteLoaderCalls":{"#bigint":"0"},"localCached":false,"localValue":{"#bigint":"0"},"coalescedCached":false,"coalescedValue":{"#bigint":"0"},"remoteReadable":false,"remoteValue":{"#bigint":"0"},"redisReads":{"#bigint":"0"},"redisWrites":{"#bigint":"0"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"localCall"},"mbt::actionTaken":"localCall","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"1"},"lastResult":{"#bigint":"1"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"1"},"localLoaderCalls":{"#bigint":"1"},"coalescedLoaderCalls":{"#bigint":"0"},"remoteLoaderCalls":{"#bigint":"0"},"localCached":true,"localValue":{"#bigint":"1"},"coalescedCached":false,"coalescedValue":{"#bigint":"0"},"remoteReadable":false,"remoteValue":{"#bigint":"0"},"redisReads":{"#bigint":"0"},"redisWrites":{"#bigint":"0"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"bumpSource"},"mbt::actionTaken":"bumpSource","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"2"},"lastResult":{"#bigint":"1"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"1"},"localLoaderCalls":{"#bigint":"1"},"coalescedLoaderCalls":{"#bigint":"0"},"remoteLoaderCalls":{"#bigint":"0"},"localCached":true,"localValue":{"#bigint":"1"},"coalescedCached":false,"coalescedValue":{"#bigint":"0"},"remoteReadable":false,"remoteValue":{"#bigint":"0"},"redisReads":{"#bigint":"0"},"redisWrites":{"#bigint":"0"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"localCall"},"mbt::actionTaken":"localCall","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"2"},"lastResult":{"#bigint":"1"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"1"},"localLoaderCalls":{"#bigint":"1"},"coalescedLoaderCalls":{"#bigint":"0"},"remoteLoaderCalls":{"#bigint":"0"},"localCached":true,"localValue":{"#bigint":"1"},"coalescedCached":false,"coalescedValue":{"#bigint":"0"},"remoteReadable":false,"remoteValue":{"#bigint":"0"},"redisReads":{"#bigint":"0"},"redisWrites":{"#bigint":"0"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"coalescedLocalPair"},"mbt::actionTaken":"coalescedLocalPair","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"2"},"lastResult":{"#bigint":"2"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"1"},"localLoaderCalls":{"#bigint":"1"},"coalescedLoaderCalls":{"#bigint":"1"},"remoteLoaderCalls":{"#bigint":"0"},"localCached":true,"localValue":{"#bigint":"1"},"coalescedCached":true,"coalescedValue":{"#bigint":"2"},"remoteReadable":false,"remoteValue":{"#bigint":"0"},"redisReads":{"#bigint":"0"},"redisWrites":{"#bigint":"0"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"remoteCall"},"mbt::actionTaken":"remoteCall","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"2"},"lastResult":{"#bigint":"2"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"1"},"localLoaderCalls":{"#bigint":"1"},"coalescedLoaderCalls":{"#bigint":"1"},"remoteLoaderCalls":{"#bigint":"1"},"localCached":true,"localValue":{"#bigint":"1"},"coalescedCached":true,"coalescedValue":{"#bigint":"2"},"remoteReadable":true,"remoteValue":{"#bigint":"2"},"redisReads":{"#bigint":"1"},"redisWrites":{"#bigint":"1"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"bumpSource"},"mbt::actionTaken":"bumpSource","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"3"},"lastResult":{"#bigint":"2"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"1"},"localLoaderCalls":{"#bigint":"1"},"coalescedLoaderCalls":{"#bigint":"1"},"remoteLoaderCalls":{"#bigint":"1"},"localCached":true,"localValue":{"#bigint":"1"},"coalescedCached":true,"coalescedValue":{"#bigint":"2"},"remoteReadable":true,"remoteValue":{"#bigint":"2"},"redisReads":{"#bigint":"1"},"redisWrites":{"#bigint":"1"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"remoteCall"},"mbt::actionTaken":"remoteCall","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"3"},"lastResult":{"#bigint":"2"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"1"},"localLoaderCalls":{"#bigint":"1"},"coalescedLoaderCalls":{"#bigint":"1"},"remoteLoaderCalls":{"#bigint":"1"},"localCached":true,"localValue":{"#bigint":"1"},"coalescedCached":true,"coalescedValue":{"#bigint":"2"},"remoteReadable":true,"remoteValue":{"#bigint":"2"},"redisReads":{"#bigint":"2"},"redisWrites":{"#bigint":"1"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidateRemote"},"mbt::actionTaken":"invalidateRemote","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"3"},"lastResult":{"#bigint":"2"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"1"},"localLoaderCalls":{"#bigint":"1"},"coalescedLoaderCalls":{"#bigint":"1"},"remoteLoaderCalls":{"#bigint":"1"},"localCached":true,"localValue":{"#bigint":"1"},"coalescedCached":true,"coalescedValue":{"#bigint":"2"},"remoteReadable":false,"remoteValue":{"#bigint":"2"},"redisReads":{"#bigint":"2"},"redisWrites":{"#bigint":"2"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"remoteCall"},"mbt::actionTaken":"remoteCall","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"3"},"lastResult":{"#bigint":"3"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"1"},"localLoaderCalls":{"#bigint":"1"},"coalescedLoaderCalls":{"#bigint":"1"},"remoteLoaderCalls":{"#bigint":"2"},"localCached":true,"localValue":{"#bigint":"1"},"coalescedCached":true,"coalescedValue":{"#bigint":"2"},"remoteReadable":true,"remoteValue":{"#bigint":"3"},"redisReads":{"#bigint":"3"},"redisWrites":{"#bigint":"3"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"bumpSource"},"mbt::actionTaken":"bumpSource","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"4"},"lastResult":{"#bigint":"3"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"1"},"localLoaderCalls":{"#bigint":"1"},"coalescedLoaderCalls":{"#bigint":"1"},"remoteLoaderCalls":{"#bigint":"2"},"localCached":true,"localValue":{"#bigint":"1"},"coalescedCached":true,"coalescedValue":{"#bigint":"2"},"remoteReadable":true,"remoteValue":{"#bigint":"3"},"redisReads":{"#bigint":"3"},"redisWrites":{"#bigint":"3"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"remoteReadFailureCall"},"mbt::actionTaken":"remoteReadFailureCall","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"4"},"lastResult":{"#bigint":"4"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"1"},"localLoaderCalls":{"#bigint":"1"},"coalescedLoaderCalls":{"#bigint":"1"},"remoteLoaderCalls":{"#bigint":"3"},"localCached":true,"localValue":{"#bigint":"1"},"coalescedCached":true,"coalescedValue":{"#bigint":"2"},"remoteReadable":true,"remoteValue":{"#bigint":"3"},"redisReads":{"#bigint":"4"},"redisWrites":{"#bigint":"3"}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"requestLocalPair"},"mbt::actionTaken":"requestLocalPair","mbt::nondetPicks":{},"s":{"sourceVersion":{"#bigint":"4"},"lastResult":{"#bigint":"4"},"outsideLoaderCalls":{"#bigint":"1"},"requestLoaderCalls":{"#bigint":"2"},"localLoaderCalls":{"#bigint":"1"},"coalescedLoaderCalls":{"#bigint":"1"},"remoteLoaderCalls":{"#bigint":"3"},"localCached":true,"localValue":{"#bigint":"1"},"coalescedCached":true,"coalescedValue":{"#bigint":"2"},"remoteReadable":true,"remoteValue":{"#bigint":"3"},"redisReads":{"#bigint":"4"},"redisWrites":{"#bigint":"3"}}} ] } diff --git a/formal/conformance.mjs b/formal/conformance.mjs index 49a11af8..de39c39d 100644 --- a/formal/conformance.mjs +++ b/formal/conformance.mjs @@ -3,7 +3,7 @@ import { readFileSync, readdirSync, realpathSync, writeFileSync } from 'node:fs' import { resolve, sep } from 'node:path'; import { fileURLToPath } from 'node:url'; import { isDeepStrictEqual } from 'node:util'; -import { readExecution, root, validateExecution } from './execution.mjs'; +import { readExecution, root, scheduleExecution, validateExecution } from './execution.mjs'; import { protocolCorpus } from './vector-artifacts.mjs'; export const readJSON = path => JSON.parse(readFileSync(resolve(root, path), 'utf8')); @@ -20,7 +20,9 @@ const filesBelow = path => readdirSync(resolve(root, path), { withFileTypes: tru // IDs contain domain names and original case names, never native test names. // Adding a language requires a driver/report adapter, not a change to this inventory. -export function conformanceInventory(execution = readExecution(), scenarios = readJSON('formal/behavioral-scenarios.json'), protocol = protocolCorpus(execution)) { +// `execution` is the scheduled manifest (scheduleExecution), which names the +// exported regressions. +export function conformanceInventory(execution = scheduleExecution(), scenarios = readJSON('formal/behavioral-scenarios.json'), protocol = protocolCorpus(execution)) { const cases = []; for (const model of execution.models.filter(model => model.profile)) { const profile = model.profile; diff --git a/formal/coverage-witnesses.json b/formal/coverage-witnesses.json index ea73b173..699d6b0d 100644 --- a/formal/coverage-witnesses.json +++ b/formal/coverage-witnesses.json @@ -15,7 +15,9 @@ "recovery:miss", "recovery:deserialization_error", "source-deadline", - "failed-recovery-keeps-source-error" + "failed-recovery-keeps-source-error", + "later-source-survives-earlier-deadline", + "later-source-expires-at-own-deadline" ], "layers": [ "absent-remote-maintenance-preserves-local", @@ -43,7 +45,8 @@ "local-hit-stops-remote-and-source", "request-hit-stops-lower-traversal", "source-publication-probed-in-all-three-layers", - "tracked-remote-disabled-local-hit" + "tracked-remote-disabled-local-hit", + "tracked-local-only-hit" ], "admission": [ "outcome:match", @@ -191,7 +194,9 @@ "sparse-empty-provider-inherits-local-hit", "sparse-empty-provider-inherits-remote-hit", "uncoalesced-local-settled-hit", - "uncoalesced-remote-settled-hit" + "uncoalesced-remote-settled-hit", + "remote-hit-local-ttl-outlives-remote-freshness", + "independent-remote-last-completion-probed" ], "shadow": [ "outcome:match", diff --git a/formal/dialcache-admission-conformance.qnt b/formal/dialcache-admission-conformance.qnt index 5411cb96..d85d032b 100644 --- a/formal/dialcache-admission-conformance.qnt +++ b/formal/dialcache-admission-conformance.qnt @@ -1,321 +1,196 @@ module dialcache_admission_conformance { import conformance_observations.* from "./conformance-observations" - import cache_rules.* from "./cache-rules" + import encodings.* from "./kernel/encodings" + import calls.* from "./kernel/calls" + import layer_policy.* from "./kernel/layer-policy" + import serving as Serving from "./kernel/serving" + import remote_io as RemoteIO from "./kernel/remote-io" + import remote_writes as Writes from "./kernel/remote-writes" + import shadow as Shadow from "./kernel/shadow" + import deadlines as Deadlines from "./kernel/deadlines" + import recovery as Recovery from "./kernel/recovery" + import remote_frames as Remote from "./kernel/remote-frames" + import policy_gate as Gate from "./kernel/policy-gate" // Served Redis hits: three keys, two instances, two shadow slots per instance. // Read/decode effects are held explicitly. Only shadow jobs invoke sources. - // Caller phases: 1 read, 2 decode, 3 done. Job phases: 1 source, 2 decode, - // 3 confirmation, 4 done. A timed-out job retains its pending external work. - // State: o is the public projection; calls/jobs and held effects explain - // ownership and later results. Job completion never publishes shared values. - // Environment: fresh served Redis hits, held reads/decodes, explicit source - // settlements and elapsed clock steps. Timed-out work remains releasable. - // Bounds: three keys, two instances, two job slots each, sixteen callers; - // elapsed time stays below read deadlines and physical Redis expiration. + // A timed-out job retains its pending external work and its slot until that + // work settles. Environment: fresh served Redis hits, held reads/decodes, + // explicit source settlements and elapsed clock steps. Bounds: three keys, + // two instances, two job slots each, sixteen callers; elapsed time stays + // below read deadlines and physical Redis expiration. + // See BEHAVIOR.md "Generated served-hit shadow admission profile" for the + // drivers' input table. + // Every rule is a kernel transition (formal/kernel): the held remote + // traversal with immediate replies (remote_io, through the shadow module's + // held variants), the served job registry with its budgets (shadow, + // deadlines), the frames a seed stores (remote_frames). This module owns + // the bounded state, the fixture decoding (the identity a call choice names, + // the coalescing and cohort selection a policy code resolves to, the frame + // a seed choice names, the loader and value a resolve code names), the + // input choices and the guards. The explicit input envelope is the portable + // driver input; keep the integer encodings stable. - // -- Stable caller/job phases and policy encodings ------------------------- + // -- Fixture bounds and the drivers' encodings --------------------------------- - pure val CALL_READING = 1 - pure val CALL_DECODING = 2 - pure val CALL_FINISHED = 3 - pure val JOB_SOURCE_PENDING = 1 - pure val JOB_DECODING = 2 - pure val JOB_CONFIRMING = 3 - pure val JOB_FINISHED = 4 pure val POLICY_DEFAULT = 0 pure val POLICY_NO_SHADOW = 1 pure val POLICY_NO_COALESCING = 2 pure val POLICY_NO_SHADOW_OR_COALESCING = 3 - pure val NO_OWNER = -1 - pure val NO_ACQUIRED_VALUE = 0 - pure val KEYS_PER_INSTANCE = 3 - pure val JOBS_PER_INSTANCE = 2 + pure val KEYS = 3 + pure val INSTANCES = 2 + pure val JOB_CAPACITY = 2 pure val MAX_CALLERS = 16 pure val MAX_IDENTITY_CHOICE = 5 pure val SOURCE_VALUE_COUNT = 2 pure val MAX_RESOLVE_CHOICE = 32 pure val SHADOW_TIMEOUT_MS = 10 pure val MAX_ELAPSED_MS = 600 - - // -- State and initial environment ----------------------------------------- - - type Call = { - identity: int, - shared: bool, - selected: bool, - phase: int, - value: int - } - type Job = { - identity: int, - phase: int, - value: int, - sourceValue: int, - deadline: int, - timedOut: bool - } - type Effect = { - job: bool, - owner: int, - pending: bool + // The drivers' 60 s Redis TTL: the freshness every reply resolves to and the + // retention every frame is stored with; the read budget every held read is + // dispatched under. Neither is reached inside the elapsed-time bound. + pure val REMOTE_TTL_MS = 60000 + pure val READ_BUDGET_MS = 1000 + // The wall clock's origin: every frame stamped from it clears the zero + // watermark of its tracked entity. + pure val WALL_ORIGIN_MS = 100000 + // Three keys per instance and per scope row, no persistent scope, one + // operation per entity; the drivers probe each source's scope. + pure val LAYOUT: Serving::Layout = { + keysPerInstance: KEYS, keysPerScope: KEYS, persistentContexts: 0, operationsPerEntity: 1, probeSourceScope: true, policyProvider: true } + // Every reply uses the remote layer alone, with the TTLs above. + pure val REMOTE_LAYERS: Layers = { request: false, local: false, remote: true } + pure val TTLS: Ttls = { localMs: 0, freshMs: REMOTE_TTL_MS, retentionMs: REMOTE_TTL_MS } + // The instance's shadow policy as read when a hit is judged: the outcome + // hook installed, two slots per instance, a 10 ms job budget, no mismatch + // logging; the cohort selection consulted is the one captured for the flight. + pure val SHADOWING: Shadow::Shadowing = { hook: true, selected: true, capacity: JOB_CAPACITY, budgetMs: SHADOW_TIMEOUT_MS, logging: false } + + // State: the held remote shape with the served job registry, its budgets + // and the cohort selections captured for pending flights, and the policy + // in force decoded once at the policy input (whether replies coalesce, + // whether they select the cohort). The local layer is off in every reply, + // so local storage is declared empty; no scope is persistent, so the memo + // and request registries are empty; served jobs never fill, so the held + // lifecycle's dumps and writes are declared empty. type State = { - o: Observation, - now: int, - overlay: int, - frames: List[int], - calls: List[Call], - owners: List[int], - registered: List[int], - jobs: List[Job], - reads: List[Effect], - loads: List[Effect] + o: Observation, io: RemoteIO::IO, + now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], loaders: List[int], retained: List[Recovery::Snapshot], + dumps: List[Writes::HeldDump], writes: List[Writes::HeldWrite], + jobs: List[Shadow::Job], deadlines: List[Deadlines::Due], selected: List[int], + coalesce: bool, shadowSelected: bool } var s: State var input: { name: str, choice: int } - action init = all { - input' = { name: "init", choice: -1 }, - s' = { - o: empty, - now: 0, - overlay: POLICY_DEFAULT, - frames: List(VALUE_ONE, VALUE_ONE, VALUE_ONE), - calls: List(), - owners: List(), - registered: List(NO_OWNER, NO_OWNER, NO_OWNER, NO_OWNER, NO_OWNER, NO_OWNER), - jobs: List(), - reads: List(), - loads: List() - } - } - // -- Caller admission and job capacity ------------------------------------- + // -- Input decoding (reads no state) -------------------------------------------- - pure def liveJobs(state: State): Set[int] = - state.jobs.indices().filter(i => state.jobs.nth(i).phase != JOB_FINISHED) - pure def begin(state: State, identity: int): State = { - val shared = state.overlay < POLICY_NO_COALESCING - val leader = if (shared) state.registered.nth(identity) else NO_OWNER - val starts = leader < 0 - val owner = if (starts) state.calls.length() else leader - { - calls: if (starts) state.calls.append({ - identity: identity, - shared: shared, - selected: state.overlay % 2 == POLICY_DEFAULT, - phase: CALL_READING, - value: NO_ACQUIRED_VALUE - }) else state.calls, - owners: state.owners.append(owner), - registered: if (starts and shared) state.registered.replaceAt(identity, owner) else state.registered, - reads: if (starts) state.reads.append({ - job: false, - owner: owner, - pending: true - }) else state.reads, - o: { - calls: state.o.calls.append(CALL_PENDING), - reads: state.o.reads + (if (starts) 1 else 0), - policyCalls: state.o.policyCalls + 1, - ...state.o - }, - ...state - } + pure def call(choice: int): Call = + { instance: choice / KEYS, key: choice % KEYS, context: 0, enabled: true, keyFailed: false } + // 0: defaults; 1: shadow off; 2: coalescing off; 3: both off. + pure def coalesces(choice: int): bool = choice < POLICY_NO_COALESCING + pure def selects(choice: int): bool = choice % 2 == POLICY_DEFAULT + pure def resolvedSource(code: int): int = (code - 1) / SOURCE_VALUE_COUNT + pure def resolvedValue(code: int): int = (code - 1) % SOURCE_VALUE_COUNT + VALUE_ONE + + // The initial fixture: value 1 stored under every key, stamped at the wall + // origin and retained for the Redis TTL; the policy of code 0 in force. + pure val INITIAL: State = { + o: empty, io: RemoteIO::NO_IO, + now: 0, skew: WALL_ORIGIN_MS, remoteAvailable: true, tracked: true, capacity: 0, + readFailed: false, dumpFailed: false, writeFailed: false, + closed: List(), memo: List(), requestFlights: List(), + processFlights: List(NO_OWNER, NO_OWNER, NO_OWNER, NO_OWNER, NO_OWNER, NO_OWNER), + localValues: List(), localExpires: List(), lru: List(List(), List()), + remoteValues: List(VALUE_ONE, VALUE_ONE, VALUE_ONE), created: List(WALL_ORIGIN_MS, WALL_ORIGIN_MS, WALL_ORIGIN_MS), + expires: List(REMOTE_TTL_MS, REMOTE_TTL_MS, REMOTE_TTL_MS), watermark: List(0, 0, 0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + reads: List(), loads: List(), loaders: List(), retained: List(), + dumps: List(), writes: List(), jobs: List(), deadlines: List(), selected: List(), + coalesce: true, shadowSelected: true } + action init = all { input' = { name: "init", choice: -1 }, s' = INITIAL } + + // -- Caller admission: the read dispatched, the selection captured -------------- + action beginWith(choice: int): bool = all { (0.to(MAX_IDENTITY_CHOICE)).contains(choice), input' = { name: "beginCall", choice: choice }, s.o.calls.length() < MAX_CALLERS, - s' = begin(s, choice) + s' = Shadow::beginHeld(s, LAYOUT, call(choice), { layers: REMOTE_LAYERS, coalesce: s.coalesce }, TTLS, READ_BUDGET_MS, s.shadowSelected) } action beginCall = { nondet choice = 0.to(MAX_IDENTITY_CHOICE).oneOf() beginWith(choice) } - pure def finishJob(state: State, job: int, outcome: str): State = { - val entry = state.jobs.nth(job) - { - jobs: state.jobs.replaceAt(job, { phase: JOB_FINISHED, ...entry }), - o: { - shadow: if (entry.timedOut) state.o.shadow else state.o.shadow.append(outcome), - ...state.o - }, - ...state - } - } - pure def finishCall(state: State, call: int): State = { - val entry = state.calls.nth(call) - val active = liveJobs(state) - val duplicate = active.exists(i => state.jobs.nth(i).identity == entry.identity) - val full = active.filter(i => - state.jobs.nth(i).identity / KEYS_PER_INSTANCE == entry.identity / KEYS_PER_INSTANCE - ).size() >= JOBS_PER_INSTANCE - val admitted = entry.selected and not(duplicate or full) - { - calls: state.calls.replaceAt(call, { phase: CALL_FINISHED, ...entry }), - registered: if (state.registered.nth(entry.identity) == call) state.registered.replaceAt(entry.identity, - NO_OWNER) else state.registered, - jobs: if (admitted) state.jobs.append({ - identity: entry.identity, - phase: JOB_SOURCE_PENDING, - value: entry.value, - sourceValue: NO_ACQUIRED_VALUE, - deadline: state.now + SHADOW_TIMEOUT_MS, - timedOut: false - }) else state.jobs, - o: { - calls: finishOwnedCalls(state.o.calls, state.owners, call, entry.value), - loaders: state.o.loaders + (if (admitted) 1 else 0), - sourceScopes: if (admitted) state.o.sourceScopes.append(false) else state.o.sourceScopes, - shadow: if (entry.selected and not(admitted)) state.o.shadow.append("dropped") else state.o.shadow, - ...state.o - }, - ...state - } - } - // -- Held read/decode completion and source settlement ---------------------- + // -- Held read/decode completion and source settlement, by explicit index ------- - pure def readReply(state: State, index: int): State = { - val effect = state.reads.nth(index) - val updated = { - reads: state.reads.replaceAt(index, { pending: false, ...effect }), - ...state - } - if (effect.job) { - val job = state.jobs.nth(effect.owner) - finishJob(updated, effect.owner, - if (state.frames.nth(job.identity % KEYS_PER_INSTANCE) == job.value) "mismatch" else "superseded") - } else { - val call = state.calls.nth(effect.owner) - { - calls: state.calls.replaceAt(effect.owner, { - phase: CALL_DECODING, - value: state.frames.nth(call.identity % KEYS_PER_INSTANCE), - ...call - }), - loads: state.loads.append({ - job: false, - owner: effect.owner, - pending: true - }), - o: { loads: state.o.loads + 1, ...state.o }, - ...updated - } - } - } + val heldReads = s.reads.indices().map(i => s.reads.nth(i).read) + val heldLoads = s.loads.indices().map(i => s.loads.nth(i).load) + val pendingLoaders = s.loaders.indices().filter(k => s.sources.nth(s.loaders.nth(k)).result == CALL_PENDING) action readWith(choice: int): bool = all { - (s.reads.indices().filter(i => s.reads.nth(i).pending)).contains(choice), + RemoteIO::holdsRead(s, choice), input' = { name: "releaseRead", choice: choice }, - s' = readReply(s, choice) + s' = Shadow::settleRead(s, LAYOUT, choice, false, Recovery::NONE) } action releaseRead = { - nondet choice = s.reads.indices().filter(i => s.reads.nth(i).pending).oneOf() + nondet choice = heldReads.oneOf() readWith(choice) } - pure def loadReply(state: State, index: int): State = { - val effect = state.loads.nth(index) - val updated = { - loads: state.loads.replaceAt(index, { pending: false, ...effect }), - ...state - } - if (effect.job) { - val job = state.jobs.nth(effect.owner) - if (job.timedOut or job.value == job.sourceValue) finishJob(updated, effect.owner, "match") - else { - jobs: state.jobs.replaceAt(effect.owner, { phase: JOB_CONFIRMING, ...job }), - reads: state.reads.append({ - job: true, - owner: effect.owner, - pending: true - }), - o: { reads: state.o.reads + 1, ...state.o }, - ...updated - } - } else finishCall(updated, effect.owner) - } action loadWith(choice: int): bool = all { - (s.loads.indices().filter(i => s.loads.nth(i).pending)).contains(choice), + RemoteIO::holdsLoad(s, choice), input' = { name: "releaseLoad", choice: choice }, - s' = loadReply(s, choice) + s' = Shadow::settleLoad(s, LAYOUT, choice, false, READ_BUDGET_MS, SHADOWING) } action releaseLoad = { - nondet choice = s.loads.indices().filter(i => s.loads.nth(i).pending).oneOf() + nondet choice = heldLoads.oneOf() loadWith(choice) } - pure def settle(state: State, loader: int, value: int): State = { - val job = state.jobs.nth(loader) - if (job.timedOut or value == SOURCE_ERROR) finishJob(state, loader, "source_error") - else { - jobs: state.jobs.replaceAt(loader, { - phase: JOB_DECODING, - sourceValue: value, - ...job - }), - loads: state.loads.append({ - job: true, - owner: loader, - pending: true - }), - o: { loads: state.o.loads + 1, ...state.o }, - ...state - } - } - val pendingSources = s.jobs.indices().filter(i => s.jobs.nth(i).phase == JOB_SOURCE_PENDING) action resolveWith(choice: int): bool = all { - (1.to(MAX_RESOLVE_CHOICE) - .filter(code => pendingSources.contains((code - 1) / SOURCE_VALUE_COUNT))).contains(choice), + (1.to(MAX_RESOLVE_CHOICE).filter(code => pendingLoaders.contains(resolvedSource(code)))).contains(choice), input' = { name: "resolveLoader", choice: choice }, - s' = settle(s, (choice - 1) / SOURCE_VALUE_COUNT, (choice - 1) % SOURCE_VALUE_COUNT + VALUE_ONE) + s' = Shadow::settleLoader(s, LAYOUT, resolvedSource(choice), resolvedValue(choice), false) } action resolveLoader = { - nondet choice = 1.to(MAX_RESOLVE_CHOICE) - .filter(code => pendingSources.contains((code - 1) / SOURCE_VALUE_COUNT)).oneOf() + nondet choice = 1.to(MAX_RESOLVE_CHOICE).filter(code => pendingLoaders.contains(resolvedSource(code))).oneOf() resolveWith(choice) } action rejectWith(choice: int): bool = all { - (pendingSources).contains(choice), + pendingLoaders.contains(choice), input' = { name: "rejectLoader", choice: choice }, - s' = settle(s, choice, SOURCE_ERROR) + s' = Shadow::settleLoader(s, LAYOUT, choice, SOURCE_ERROR, false) } action rejectLoader = { - nondet choice = pendingSources.oneOf() + nondet choice = pendingLoaders.oneOf() rejectWith(choice) } - // -- External time, policy, and remote replacement ------------------------- + // -- External time, policy, and remote replacement ------------------------------ - pure def tick(state: State, ms: int): State = { - val expired = liveJobs(state).filter(i => not(state.jobs.nth(i).timedOut) - and not(deadlinePendingAt(state.now + ms, state.jobs.nth(i).deadline))) - { - now: state.now + ms, - jobs: state.jobs.foldl(List(), (out, job) => out.append({ timedOut: job.timedOut - or expired.contains(out.length()), ...job })), - o: { - shadow: expired.fold(state.o.shadow, (out, _) => out.append("timeout")), - ...state.o - }, - ...state - } - } action advanceBy(choice: int): bool = all { (Set(1, SHADOW_TIMEOUT_MS)).contains(choice), input' = { name: "advance", choice: choice }, // Stay below read deadlines and Redis expiry even in longer explorations. all { s.now + choice <= MAX_ELAPSED_MS, - s' = tick(s, choice) + s' = Shadow::advance(s, choice) } } action advance = { nondet choice = Set(1, SHADOW_TIMEOUT_MS).oneOf() advanceBy(choice) } - // 0: defaults; 1: shadow off; 2: coalescing off; 3: both off. action policyWith(choice: int): bool = all { (POLICY_DEFAULT.to(POLICY_NO_SHADOW_OR_COALESCING)).contains(choice), input' = { name: "policy", choice: choice }, - s' = { overlay: choice, ...s } + s' = { coalesce: coalesces(choice), shadowSelected: selects(choice), ...s } } action policy = { nondet choice = POLICY_DEFAULT.to(POLICY_NO_SHADOW_OR_COALESCING).oneOf() @@ -324,10 +199,7 @@ module dialcache_admission_conformance { action seedWith(choice: int): bool = all { (0.to(MAX_IDENTITY_CHOICE)).contains(choice), input' = { name: "seed", choice: choice }, - s' = { - frames: s.frames.replaceAt(choice / 2, choice % 2 + 1), - ...s - } + s' = Remote::seedFrame(s, choice / 2, choice % 2 + VALUE_ONE, REMOTE_TTL_MS) } action seed = { nondet choice = 0.to(MAX_IDENTITY_CHOICE).oneOf() @@ -351,25 +223,57 @@ module dialcache_admission_conformance { } } - // -- Independently stated safety properties -------------------------------- + // -- Independently stated safety properties over the library records -------- - val capacityIsPerInstance = Set(0, 1).forall(instance => - liveJobs(s).filter(i => s.jobs.nth(i).identity / KEYS_PER_INSTANCE == instance).size() <= JOBS_PER_INSTANCE) - val oneJobPerIdentity = liveJobs(s).forall(i => liveJobs(s).forall(j => - i == j or s.jobs.nth(i).identity != s.jobs.nth(j).identity)) - val registeredCallsArePending = s.registered.indices().forall(identity => { - val owner = s.registered.nth(identity) - owner < 0 or (s.calls.nth(owner).identity == identity and s.calls.nth(owner).shared - and s.calls.nth(owner).phase != CALL_FINISHED) - }) - val callsKeepAcquiredValue = s.owners.indices().forall(i => { - val call = s.calls.nth(s.owners.nth(i)) - s.o.calls.nth(i) == (if (call.phase == CALL_FINISHED) call.value else CALL_PENDING) + // A job's identity is its source's (instance, key); the registry is + // pending-only, so every record is a live job. + def jobInstance(i: int): int = s.sources.nth(s.jobs.nth(i).source).instance + def jobKey(i: int): int = s.sources.nth(s.jobs.nth(i).source).key + val capacityIsPerInstance = 0.to(INSTANCES - 1).forall(instance => + s.jobs.indices().filter(i => jobInstance(i) == instance).size() <= JOB_CAPACITY) + val oneJobPerIdentity = s.jobs.indices().forall(i => s.jobs.indices().forall(j => + i == j or jobInstance(i) != jobInstance(j) or jobKey(i) != jobKey(j))) + // A flight registered for an identity is a shared, pending flight for it + // (the former registeredCallsArePending over the process registry). + val registeredFlightsArePending = s.processFlights.indices().forall(identity => { + val flight = s.processFlights.nth(identity) + flight < 0 or (s.sources.nth(flight).result == CALL_PENDING and s.sources.nth(flight).shared + and s.sources.nth(flight).instance * KEYS + s.sources.nth(flight).key == identity) }) + // Every caller owns a flight and holds its recorded result: pending while + // the flight is, the decoded hit once it completes. + val callsKeepAcquiredValue = s.owners.indices().forall(c => + s.owners.nth(c) >= 0 and s.o.calls.nth(c) == s.sources.nth(s.owners.nth(c)).result) val jobsAreDiagnostic = s.o.writes == 0 and s.o.dumps == 0 and s.o.sourceScopes.indices().forall(i => not(s.o.sourceScopes.nth(i))) - val effectsMatchRecords = s.o.loaders == s.jobs.length() and s.o.reads == s.reads.length() - and s.o.loads == s.loads.length() + // Every loader runs a detached source no caller owns (only shadow jobs + // invoke sources), every registered job runs over a loader's flight and + // every pending loader flight has its job (a served job keeps its record + // until its detached source settles); every held effect is one the drivers + // dispatched; every read counted was budgeted on the io channel (the former + // effectsMatchRecords over pending-only records and the append-only read + // budgets: only the decode count has no such twin). + val effectsMatchRecords = s.o.loaders == s.loaders.length() + and s.loaders.indices().forall(k => s.owners.indices().forall(c => s.owners.nth(c) != s.loaders.nth(k))) + and s.jobs.indices().forall(i => s.loaders.indices().exists(k => s.loaders.nth(k) == s.jobs.nth(i).source)) + and s.loaders.indices().forall(k => s.sources.nth(s.loaders.nth(k)).result != CALL_PENDING or Shadow::holdsJob(s, s.loaders.nth(k))) + and s.reads.indices().forall(i => s.reads.nth(i).read < s.o.reads) + and s.loads.indices().forall(i => s.loads.nth(i).load < s.o.loads) + and s.io.budgets.length() == s.o.reads + // A captured selection belongs to a pending flight whose read or decode is + // still held: it is consulted when that effect settles and never outlives it. + val selectionsAwaitTheirHit = s.selected.indices().forall(i => { + val flight = s.selected.nth(i) + s.sources.nth(flight).result == CALL_PENDING + and (s.reads.indices().exists(j => s.reads.nth(j).flight == flight) or s.loads.indices().exists(j => s.loads.nth(j).flight == flight)) + }) + // Every pending deadline is a registered job's whose budget has not + // expired (keyed by the job's source), and every such job has exactly one. + val jobBudgetsBelongToLiveJobs = s.deadlines.indices().forall(i => { + val due = s.deadlines.nth(i) + due.kind == Deadlines::JOB and Shadow::holdsJob(s, due.index) and not(Shadow::jobOf(s, due.index).timedOut) + }) and s.jobs.indices().forall(i => s.jobs.nth(i).timedOut + or Deadlines::deadlinesOf(s, Deadlines::JOB, s.jobs.nth(i).source).length() == 1) // -- Deterministic regression schedules ------------------------------------ @@ -394,13 +298,13 @@ module dialcache_admission_conformance { .then(readWith(0)) .then(loadWith(0)) .then(advanceBy(SHADOW_TIMEOUT_MS)) - .expect(liveJobs(s) == Set(0) and s.o.shadow == List("timeout")) + .expect(s.jobs.length() == 1 and s.jobs.nth(0).timedOut and s.o.shadow == List("timeout")) // A later caller still receives its cache hit, but its duplicate job drops // while the timed-out source owns the slot. Settlement permits admission. .then(beginWith(0)).then(readWith(1)).then(loadWith(1)) .expect(s.o.loaders == 1 and s.o.shadow == List("timeout", "dropped")) .then(resolveWith(2)) - .expect(liveJobs(s) == Set()) + .expect(s.jobs == List()) .then(beginWith(0)).then(readWith(2)).then(loadWith(2)) .expect(s.o.loaders == 2 and s.o.loads == 3 and s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_ONE) and s.o.shadow == List("timeout", "dropped")) @@ -411,11 +315,11 @@ module dialcache_admission_conformance { .then(loadWith(0)) .then(resolveWith(2)) .then(advanceBy(SHADOW_TIMEOUT_MS)) - .expect(liveJobs(s) == Set(0)) + .expect(s.jobs.length() == 1 and s.jobs.nth(0).timedOut) .then(beginWith(0)).then(readWith(1)).then(loadWith(2)) .expect(s.o.loaders == 1 and s.o.shadow == List("timeout", "dropped")) .then(loadWith(1)) - .expect(liveJobs(s) == Set() and s.o.reads == 2) + .expect(s.jobs == List() and s.o.reads == 2) .then(beginWith(0)).then(readWith(2)).then(loadWith(3)) .expect(s.o.loaders == 2 and s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_ONE) and s.o.shadow == List("timeout", "dropped")) @@ -427,11 +331,11 @@ module dialcache_admission_conformance { .then(resolveWith(2)) .then(loadWith(1)) .then(advanceBy(SHADOW_TIMEOUT_MS)) - .expect(liveJobs(s) == Set(0)) + .expect(s.jobs.length() == 1 and s.jobs.nth(0).timedOut) .then(beginWith(0)).then(readWith(2)).then(loadWith(2)) .expect(s.o.loaders == 1 and s.o.shadow == List("timeout", "dropped")) .then(readWith(1)) - .expect(liveJobs(s) == Set()) + .expect(s.jobs == List()) .then(beginWith(0)).then(readWith(3)).then(loadWith(3)) .expect(s.o.loaders == 2 and s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_ONE) and s.o.shadow == List("timeout", "dropped")) @@ -452,4 +356,24 @@ module dialcache_admission_conformance { .then(loadWith(3)) .expect(s.o.loaders == 3 and s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_ONE, VALUE_ONE) and s.o.shadow == List("dropped")) + + // The cohort selection a caller's reply resolved is captured when its read + // is dispatched and consulted when its decode completes the hit (C18): a + // policy change in between neither revokes an admission nor grants one. + run capturedShadowPolicySurvivesPolicyChangeTest = init + .then(beginWith(0)).then(policyWith(POLICY_NO_SHADOW)).then(readWith(0)).then(loadWith(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.loaders == 1 and s.o.shadow == List()) + .then(beginWith(1)).then(policyWith(POLICY_DEFAULT)).then(readWith(1)).then(loadWith(1)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loaders == 1 and s.o.shadow == List()) + + // A caller whose reply turns coalescing off starts its own read beside the + // registered leader (C13) and its hit is judged first: its job is admitted, + // and the leader's later hit finds a live job for the identity and drops. + run uncoalescedCallerReadsAloneTest = init + .then(beginWith(0)).then(policyWith(POLICY_NO_COALESCING)).then(beginWith(0)) + .expect(s.o.calls == List(CALL_PENDING, CALL_PENDING) and s.o.reads == 2 and s.o.policyCalls == 2) + .then(readWith(1)).then(loadWith(0)) + .expect(s.o.calls == List(CALL_PENDING, VALUE_ONE) and s.o.loaders == 1 and s.o.shadow == List()) + .then(readWith(0)).then(loadWith(1)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loaders == 1 and s.o.shadow == List("dropped")) } diff --git a/formal/dialcache-effects-conformance.qnt b/formal/dialcache-effects-conformance.qnt index dc127966..a6ef2dc0 100644 --- a/formal/dialcache-effects-conformance.qnt +++ b/formal/dialcache-effects-conformance.qnt @@ -1,39 +1,51 @@ module dialcache_effects_conformance { import cache_rules.* from "./cache-rules" + import conformance_observations.* from "./conformance-observations" + import encodings.* from "./kernel/encodings" + import calls.* from "./kernel/calls" + import layer_policy.* from "./kernel/layer-policy" + import serving as Serving from "./kernel/serving" + import remote_io as RemoteIO from "./kernel/remote-io" + import remote_writes as Writes from "./kernel/remote-writes" + import recovery as Recovery from "./kernel/recovery" + import deadlines as Deadlines from "./kernel/deadlines" + import diagnostics as Diagnostics from "./kernel/diagnostics" + import adapter_replies as Replies from "./kernel/adapter-replies" + import metrics as Metrics from "./kernel/metrics" + import remote_frames as Remote from "./kernel/remote-frames" + import flights as Flights from "./kernel/flights" + import clock as Clock from "./kernel/clock" + import policy_gate as Gate from "./kernel/policy-gate" // Model boundary ----------------------------------------------------------- // One registered remote-only execution, plus up to eight callers and late // external sources/reads. Selected aspects of C23-C28 cover budgets and // accepted publication; C33-C36 cover fences/snapshots; C55-C59 cover effects. // See BEHAVIOR.md: "Generated pending-effect profile" for the driver mapping. // No local storage, recovery, shadow work, or physical expiry participates. - // `now` is elapsed milliseconds; `wall` is an independent application clock. - // Adapter effects are environmental settlements, not language executor turns. - - // Trace encodings ---------------------------------------------------------- - // Keep these integers stable: this profile's result encoding intentionally - // differs from the feature profiles in conformance-observations.qnt. - pure val CALL_PENDING = 0 - pure val CALL_VALUE = 1 - pure val CALL_SOURCE_ERROR = 2 - pure val CALL_TIMEOUT = 3 - pure val EFFECT_REGISTERED = 0 - pure val EFFECT_ABANDONED = 1 - pure val EFFECT_SETTLED = 2 - pure val IDLE = 0 - pure val SOURCE_RUNNING = 1 - pure val WRITE_PENDING = 2 - pure val READ_PENDING = 3 - pure val DECODE_PENDING = 4 - pure val SERIALIZE_PENDING = 5 - pure val UNTRACKED = 0 - pure val TRACKED = 1 - pure val REFILL_DENIED = 0 - pure val REFILL_ALLOWED = 1 + // Every rule is a kernel transition (formal/kernel): the held remote + // traversal (remote_io) under the budgeted held lifecycle (deadlines) with + // its refills held (remote_writes), the queued adapter reply + // (adapter_replies), the diagnosed channel (diagnostics) and the metric + // events the drivers compare (metrics); the frames a seed stores + // (remote_frames); the wall rollback (clock). This module owns the bounded + // state, the fixture decoding (the read budget a fixture mode or a runtime + // choice names), the input choices and the guards. `now` is elapsed time; + // the wall clock is `now` plus a skew a rollback shifts. Adapter effects are + // environmental settlements, not language executor turns. + + // Trace encodings and fixture bounds --------------------------------------- + // Keep integer input fields stable; shared caller results come from the import. pure val SOURCE_BUDGET_MS = 10 pure val CLOCK_STEP_MS = 10 pure val WALL_ROLLBACK_MS = 1000 pure val FUTURE_BUFFER_MS = 20 + pure val REMOTE_TTL_MS = 60000 + pure val INITIAL_NOW_MS = 10000 + pure val WALL_SKEW_MS = 90000 + pure val PAYLOAD_BYTES = 1 pure val MAX_CALLS = 8 + pure val KEY = 0 + pure val ENTITY = 0 // Initial read-budget precedence fixtures; values are recorded input choices. pure val FIXTURE_LIBRARY_BUDGET = 0 @@ -43,89 +55,66 @@ module dialcache_effects_conformance { pure val FIXTURE_NULL_PROVIDER = 4 pure val FIXTURE_UNTRACKED = 5 - // Queued reply classes used by the normalization branches. Other malformed - // classes deliberately follow the default unclassified-miss branch. - pure val NO_QUEUED_REPLY = 0 - pure val REPLY_UNKNOWN_WITH_FENCE = 7 - pure val REPLY_FRACTIONAL_FENCE = 10 - pure val REPLY_UNSAFE_FENCE = 11 - pure val REPLY_ABSENT_WITH_FENCE = 12 - pure val REPLY_EXPIRED_ZERO_FENCE = 13 - pure val REPLY_MISS_WITH_FRAME_FIELDS = 14 - pure val REPLY_FRAME_WITH_MISS_FIELDS = 15 - pure val REPLY_FENCED_WITH_VALID_FENCE = 16 - - // State and observable history -------------------------------------------- - // Histories survive flight completion. Accepted timestamps and fences belong - // to the execution that acquired them; stored state belongs to the environment. - // Event amount is milliseconds for time, bytes for sizes, otherwise zero. - type Event = { event: str, location: str, detail: str, amount: int } + // One key on one instance, no request scope, no local capacity, one + // operation per entity; the drivers never probe a source's scope. + pure val LAYOUT: Serving::Layout = { + keysPerInstance: 1, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true + } + pure val CALL: Call = { instance: 0, key: KEY, context: 0, enabled: true, keyFailed: false } + // Every reply enables the remote layer alone and coalesces. + pure val REMOTE_SHARED: Resolution = { layers: { request: false, local: false, remote: true }, coalesce: true } + // The TTLs every reply carries: no local TTL, the 60 s remote TTL as freshness and retention. + pure val TTLS: Ttls = { localMs: 0, freshMs: REMOTE_TTL_MS, retentionMs: REMOTE_TTL_MS } + + // Input decoding (reads no state) ------------------------------------------ + // The read budget a fixture mode resolves to (library 50, instance 20, + // operation 10, runtime 30, null provider 10, untracked 10), the base a + // runtime reset inherits, and the runtime budgets of readBudgetPolicy 1..4. + pure def readBudgetOf(mode: int): int = List(50, 20, 10, 30, 10, 10).nth(mode) + pure def baseReadBudgetOf(mode: int): int = + if (mode == FIXTURE_LIBRARY_BUDGET) 50 else if (mode == FIXTURE_INSTANCE_BUDGET) 20 else 10 + pure def runtimeBudgetOf(choice: int): int = List(0, 10, 20, 30, 50).nth(choice) + + // State: the layered shape with its held remote effects and refills, the + // deadlines and the metered instants, the three driver channels (o, io, + // events) and the diagnosed channel (d), the queued reply, the read budget + // in force and the fixture's base. type State = { - events: List[Event], - readStarted: int, decodeStarted: int, - tracked: int, reply: int, replyAt: int, - now: int, wall: int, - readBudget: int, baseReadBudget: int, - phase: int, activeLoader: int, activeRead: int, deadline: int, - observedFence: int, refill: int, acceptedAt: int, acceptedWall: int, - writeTimestamp: int, storedTimestamp: int, watermark: int, - calls: List[int], sources: List[int], readStates: List[int], readBudgets: List[int], - loaders: int, reads: int, writes: int, invalidations: int, - loads: int, dumps: int, policyCalls: int, readAborts: int, observerFailed: int + o: Observation, d: Diagnostics, io: RemoteIO::IO, events: List[Metrics::Event], + now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], loaders: List[int], retained: List[Recovery::Snapshot], + sourceBudget: int, deadlines: List[Deadlines::Due], drained: List[bool], sourceLayers: List[str], + dumps: List[Writes::HeldDump], writes: List[Writes::HeldWrite], + reply: int, replyAt: int, + readStarted: List[int], decodeStarted: List[int], sourceStarted: List[int], dumpStarted: List[int], + readBudget: int, baseReadBudget: int } var s: State var input: { name: str, choice: int } - // Observation and transition helpers --------------------------------------- - pure def finishPendingCalls(calls: List[int], outcome: int): List[int] = - calls.foldl(List(), (out, result) => out.append(if (result == CALL_PENDING) outcome else result)) - pure def startSource(x: State, allowed: int, fence: int): State = { - phase: SOURCE_RUNNING, - activeLoader: x.sources.length(), deadline: x.now + SOURCE_BUDGET_MS, - loaders: x.loaders + 1, - sources: x.sources.append(EFFECT_REGISTERED), - refill: allowed, observedFence: fence, - ...x - } - pure def emit(x: State, event: str, location: str, detail: str, amount: int): State = { - events: x.events.append({ event: event, location: location, detail: detail, amount: amount }), - ...x - } - pure def metric(x: State, event: str, detail: str, amount: int): State = emit(x, event, "remote", detail, amount) - pure def readDone(x: State): State = metric(x, "get", "", x.now - x.readStarted) - pure def sourceDone(x: State, failed: bool): State = metric( - if (failed) metric(x, "error", "fallback", 0) else x, - "fallback", "", x.now - (x.deadline - SOURCE_BUDGET_MS)) - pure def decoded(x: State, failed: bool): State = { - val measured = metric(if (failed) metric(x, "error", "serialization_load", 0) else x, - "serialization", "load", x.now - x.decodeStarted) - readDone(if (failed) metric(measured, "miss", "unclassified", 0) else measured) - } - pure def serialized(x: State, failed: bool): State = { - val measured = metric(if (failed) metric(x, "error", "serialization_dump", 0) else x, - "serialization", "dump", x.now - x.acceptedAt) - if (failed) measured else metric(metric(measured, "size", "", 1), "storedSize", "", 1) - } - val unfenced = s.storedTimestamp > 0 and (s.tracked == UNTRACKED or fenceAllows(s.storedTimestamp, s.watermark)) - val readable = unfenced and s.wall >= s.storedTimestamp - - // Initial fixture ---------------------------------------------------------- + // Initial fixture: nothing stored, the zero watermark, the fixture's read budget. pure def initial(mode: int): State = { - events: List(), readStarted: 0, decodeStarted: 0, - tracked: if (mode == FIXTURE_UNTRACKED) UNTRACKED else TRACKED, - reply: NO_QUEUED_REPLY, replyAt: 0, - now: 10000, wall: 100000, readBudget: List(50, 20, 10, 30, 10, 10).nth(mode), - baseReadBudget: if (mode == FIXTURE_LIBRARY_BUDGET) 50 - else if (mode == FIXTURE_INSTANCE_BUDGET) 20 else 10, - phase: IDLE, activeLoader: 0, activeRead: 0, deadline: 0, - observedFence: 0, refill: REFILL_DENIED, acceptedAt: 0, acceptedWall: 0, - writeTimestamp: 0, storedTimestamp: 0, watermark: 0, - calls: List(), sources: List(), readStates: List(), readBudgets: List(), - loaders: 0, reads: 0, writes: 0, invalidations: 0, - loads: 0, dumps: 0, policyCalls: 0, readAborts: 0, observerFailed: 0 + o: empty, d: noDiagnostics, io: RemoteIO::NO_IO, events: List(), + now: INITIAL_NOW_MS, skew: WALL_SKEW_MS, remoteAvailable: true, tracked: mode != FIXTURE_UNTRACKED, capacity: 0, + readFailed: false, dumpFailed: false, writeFailed: false, + closed: List(), memo: List(), requestFlights: List(), processFlights: List(NO_OWNER), + localValues: List(NO_VALUE), localExpires: List(0), lru: List(List()), + remoteValues: List(NO_VALUE), created: List(0), expires: List(0), watermark: List(0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + reads: List(), loads: List(), loaders: List(), retained: List(), + sourceBudget: SOURCE_BUDGET_MS, deadlines: List(), drained: List(), sourceLayers: List(), + dumps: List(), writes: List(), + reply: Replies::NO_REPLY, replyAt: 0, + readStarted: List(), decodeStarted: List(), sourceStarted: List(), dumpStarted: List(), + readBudget: readBudgetOf(mode), baseReadBudget: baseReadBudgetOf(mode) } - action initialized(mode: int): bool = all { + (FIXTURE_LIBRARY_BUDGET.to(FIXTURE_UNTRACKED)).contains(mode), input' = { name: "init", choice: mode }, s' = initial(mode) } action init = { @@ -133,261 +122,152 @@ module dialcache_effects_conformance { initialized(choice) } - // Call admission and bounded raw reads ------------------------------------- + // Guards (may read state) --------------------------------------------------- + val heldReads = s.reads.indices().map(i => s.reads.nth(i).read) + val unsettledLoaders = s.loaders.indices().filter(i => Deadlines::pending(s, i)) + val owningReads = s.reads.select(held => RemoteIO::owning(held)) + // A clock observation without timer delivery is generated during a 10 ms + // read or outside any read; larger reads use delivered timer steps. + val tenMillisecondReadOrNone = owningReads.indices().forall(i => s.io.budgets.nth(owningReads.nth(i).read) == 10) + + // Call admission: the read is dispatched under the budget in force, or the + // caller joins the registered flight. -------------------------------------- action beginCall = all { input' = { name: "beginCall", choice: -1 }, - s.calls.length() < MAX_CALLS, - val visited = emit(s, "disabled", "local", "policy_disabled", 0) - val observed = if (s.phase == IDLE) metric(visited, "request", "", 0) - else emit(visited, "coalesced", "process", "", 0) - s' = { - events: observed.events, readStarted: if (s.phase == IDLE) s.now else s.readStarted, - calls: s.calls.append(CALL_PENDING), policyCalls: s.policyCalls + 1, - reads: if (s.phase == IDLE) s.reads + 1 else s.reads, - readStates: if (s.phase == IDLE) s.readStates.append(EFFECT_REGISTERED) else s.readStates, - readBudgets: if (s.phase == IDLE) s.readBudgets.append(s.readBudget) else s.readBudgets, - activeRead: if (s.phase == IDLE) s.reads else s.activeRead, - deadline: if (s.phase == IDLE) s.now + s.readBudget else s.deadline, - phase: if (s.phase == IDLE) READ_PENDING else s.phase, ...s - } + s.o.calls.length() < MAX_CALLS, + s' = Metrics::begin(s, LAYOUT, CALL, REMOTE_SHARED, TTLS, s.readBudget) } - def settledRead(index: int, failed: bool): State = { - val settled = { - reply: if (failed) s.reply else NO_QUEUED_REPLY, - readStates: s.readStates.replaceAt(index, EFFECT_SETTLED), - ...s - } - if (s.readStates.nth(index) == EFFECT_ABANDONED) settled - else if (not(deadlinePendingAt(s.now, s.deadline))) { - val cancelled = { readAborts: s.readAborts + 1, ...settled } - val measured = readDone(metric(cancelled, "error", "cache_read_timeout", 0)) - startSource(measured, REFILL_DENIED, 0) - } - else if (failed) { - val measured = readDone(metric(settled, "error", "cache_read", 0)) - startSource(measured, REFILL_DENIED, 0) - } - else if (s.reply > NO_QUEUED_REPLY) { - // Normalize semantic adapter observations before choosing traversal or refill. - val validFence = s.tracked == TRACKED and ( - s.reply == REPLY_UNKNOWN_WITH_FENCE or s.reply == REPLY_ABSENT_WITH_FENCE or - s.reply == REPLY_FENCED_WITH_VALID_FENCE) - val reason = if ( - s.reply == REPLY_FRACTIONAL_FENCE or s.reply == REPLY_UNSAFE_FENCE or - s.reply == REPLY_ABSENT_WITH_FENCE or s.reply == REPLY_MISS_WITH_FRAME_FIELDS - ) "value_absent" - else if (s.reply == REPLY_EXPIRED_ZERO_FENCE) "expired" - else if (s.reply == REPLY_FENCED_WITH_VALID_FENCE and validFence) "watermark_fenced" - else "unclassified" - if (s.reply == REPLY_FRAME_WITH_MISS_FIELDS and s.replyAt <= s.wall) { - phase: DECODE_PENDING, loads: s.loads + 1, decodeStarted: s.now, ...settled - } - else { - val observed = if (s.reply == REPLY_FRAME_WITH_MISS_FIELDS) - metric(settled, "futureOffset", "", s.replyAt - s.wall) else settled - startSource( - readDone(metric(observed, "miss", reason, 0)), REFILL_ALLOWED, - if (validFence) s.replyAt + FUTURE_BUFFER_MS else 0) - } - } - else if (readable) { - phase: DECODE_PENDING, loads: s.loads + 1, decodeStarted: s.now, ...settled - } - else { - val observed = if (unfenced) - metric(settled, "futureOffset", "", s.storedTimestamp - s.wall) else settled - val reason = if (unfenced) "unclassified" - else if (s.storedTimestamp == 0) "value_absent" else "watermark_fenced" - startSource( - readDone(metric(observed, "miss", reason, 0)), REFILL_ALLOWED, - if (s.tracked == UNTRACKED or unfenced) 0 else s.watermark) - } + // External settlement by explicit read index; the latest decode, dump and + // write; the loader by its ordinal. ------------------------------------------- + action readAt(index: int): bool = all { + RemoteIO::holdsRead(s, index), + input' = { name: "releaseRead", choice: index }, + s' = Metrics::settleRead(s, LAYOUT, index, false, Recovery::NONE, FUTURE_BUFFER_MS) } action releaseRead = { - nondet choice = s.readStates.indices().filter(i => s.readStates.nth(i) != EFFECT_SETTLED).oneOf() - all { - input' = { name: "releaseRead", choice: choice }, - s' = settledRead(choice, false) - } + nondet choice = heldReads.oneOf() + readAt(choice) + } + action failReadAt(index: int): bool = all { + RemoteIO::holdsRead(s, index), + input' = { name: "failRead", choice: index }, + s' = Metrics::settleRead(s, LAYOUT, index, true, Recovery::NONE, FUTURE_BUFFER_MS) } - action failRead = { - nondet choice = s.readStates.indices().filter(i => s.readStates.nth(i) != EFFECT_SETTLED).oneOf() - all { - input' = { name: "failRead", choice: choice }, - s' = settledRead(choice, true) - } + nondet choice = heldReads.oneOf() + failReadAt(choice) } - action releaseLoad = all { input' = { name: "releaseLoad", choice: -1 }, - s.phase == DECODE_PENDING, - // The acquired snapshot survives subsequent invalidation and time passage. - s' = { phase: IDLE, calls: finishPendingCalls(s.calls, CALL_VALUE), ...decoded(s, false) } + s.loads.length() > 0, + s' = Metrics::settleLoad(s, LAYOUT, RemoteIO::latestLoad(s).load, false) } - action failLoad = all { input' = { name: "failLoad", choice: -1 }, - s.phase == DECODE_PENDING, - s' = startSource(decoded(s, true), REFILL_ALLOWED, 0) - } - - // Source acceptance and application-owned publication ---------------------- - def settledSource(index: int, failed: bool): State = { - val settled = { sources: s.sources.replaceAt(index, EFFECT_SETTLED), ...s } - val measured = if (s.sources.nth(index) == EFFECT_ABANDONED) settled - else sourceDone(settled, failed or not(deadlinePendingAt(s.now, s.deadline))) - if (s.sources.nth(index) == EFFECT_ABANDONED) measured - else if (not(deadlinePendingAt(s.now, s.deadline))) { - phase: IDLE, calls: finishPendingCalls(s.calls, CALL_TIMEOUT), ...measured - } - else if (failed) { - phase: IDLE, calls: finishPendingCalls(s.calls, CALL_SOURCE_ERROR), ...measured - } - else if (s.refill == REFILL_DENIED or not(fenceAllows(s.wall, s.observedFence))) { - phase: IDLE, calls: finishPendingCalls(s.calls, CALL_VALUE), ...measured - } - else { - phase: SERIALIZE_PENDING, dumps: s.dumps + 1, - acceptedAt: s.now, acceptedWall: s.wall, - ...measured - } + s.loads.length() > 0, + s' = Metrics::settleLoad(s, LAYOUT, RemoteIO::latestLoad(s).load, true) + } + action resolveAt(index: int): bool = all { + index < s.loaders.length(), + Deadlines::pending(s, index), + input' = { name: "resolveLoader", choice: index }, + s' = Metrics::settleLoader(s, LAYOUT, index, VALUE_ONE, false) } action resolveLoader = { - nondet choice = s.sources.indices().filter(i => s.sources.nth(i) != EFFECT_SETTLED).oneOf() - all { - input' = { name: "resolveLoader", choice: choice }, - s' = settledSource(choice, false) - } + nondet choice = unsettledLoaders.oneOf() + resolveAt(choice) + } + action rejectAt(index: int): bool = all { + index < s.loaders.length(), + Deadlines::pending(s, index), + input' = { name: "rejectLoader", choice: index }, + s' = Metrics::settleLoader(s, LAYOUT, index, SOURCE_ERROR, false) } - action rejectLoader = { - nondet choice = s.sources.indices().filter(i => s.sources.nth(i) != EFFECT_SETTLED).oneOf() - all { - input' = { name: "rejectLoader", choice: choice }, - s' = settledSource(choice, true) - } + nondet choice = unsettledLoaders.oneOf() + rejectAt(choice) } - action releaseDump = all { input' = { name: "releaseDump", choice: -1 }, - s.phase == SERIALIZE_PENDING, - // The native write is stamped after serialization, not at source acceptance. - val prepared = serialized(s, false) - s' = if (not(fenceAllows(s.wall, s.observedFence))) { - phase: IDLE, calls: finishPendingCalls(s.calls, CALL_VALUE), ...prepared - } else { - phase: WRITE_PENDING, writes: s.writes + 1, writeTimestamp: s.wall, - ...emit(prepared, "writeDispatch", "remote", "", s.writes) - } + s.dumps.length() > 0, + s' = Metrics::releaseDump(s, LAYOUT, Writes::latestDump(s).dump, false, PAYLOAD_BYTES) } - action failDump = all { input' = { name: "failDump", choice: -1 }, - s.phase == SERIALIZE_PENDING, - s' = { phase: IDLE, calls: finishPendingCalls(s.calls, CALL_VALUE), ...serialized(s, true) } + s.dumps.length() > 0, + s' = Metrics::releaseDump(s, LAYOUT, Writes::latestDump(s).dump, true, PAYLOAD_BYTES) } - action releaseWrite = all { input' = { name: "releaseWrite", choice: -1 }, - s.phase == WRITE_PENDING, - s' = { storedTimestamp: s.writeTimestamp, phase: IDLE, calls: finishPendingCalls(s.calls, CALL_VALUE), ...s } + s.writes.length() > 0, + s' = Metrics::releaseWrite(s, LAYOUT, Writes::latestWrite(s).write, false) } - action failWrite = all { input' = { name: "failWrite", choice: -1 }, - s.phase == WRITE_PENDING, - s' = { - phase: IDLE, calls: finishPendingCalls(s.calls, CALL_VALUE), - ...metric(s, "error", "cache_write", 0) - } + s.writes.length() > 0, + s' = Metrics::releaseWrite(s, LAYOUT, Writes::latestWrite(s).write, true) } // Environmental clock, storage, policy, and failure inputs ------------------ - action tick = { - val advanced = { now: s.now + CLOCK_STEP_MS, wall: s.wall + CLOCK_STEP_MS, ...s } - all { - input' = { name: "tick", choice: -1 }, - s' = if (s.phase == READ_PENDING and not(deadlinePendingAt(s.now + CLOCK_STEP_MS, s.deadline))) { - val cancelled = { - readStates: s.readStates.replaceAt(s.activeRead, EFFECT_ABANDONED), - readAborts: s.readAborts + 1, - ...advanced - } - val measured = readDone(metric(cancelled, "error", "cache_read_timeout", 0)) - startSource(measured, REFILL_DENIED, 0) - } - else if (s.phase == SOURCE_RUNNING) { - phase: IDLE, - sources: s.sources.replaceAt(s.activeLoader, EFFECT_ABANDONED), - calls: finishPendingCalls(s.calls, CALL_TIMEOUT), - ...sourceDone(advanced, true) - } - else advanced - } + action tick = all { + input' = { name: "tick", choice: -1 }, + s' = Metrics::advance(s, LAYOUT, CLOCK_STEP_MS) } - // Clock observation without timer delivery also exercises settlement guards. action jumpClock = all { input' = { name: "jumpClock", choice: -1 }, - s.phase != READ_PENDING or s.readBudgets.nth(s.activeRead) == 10, - s' = { now: s.now + CLOCK_STEP_MS, wall: s.wall + CLOCK_STEP_MS, ...s } + tenMillisecondReadOrNone, + s' = Clock::advance(s, CLOCK_STEP_MS) } - action rollbackWall = all { input' = { name: "rollbackWall", choice: -1 }, - s' = { wall: s.wall - WALL_ROLLBACK_MS, ...s } + s' = Clock::shiftWall(s, -WALL_ROLLBACK_MS) } - action seedRemote = all { input' = { name: "seedRemote", choice: -1 }, - s' = { storedTimestamp: s.wall, ...s } + s' = Remote::seedFrame(s, KEY, VALUE_ONE, REMOTE_TTL_MS) } - action invalidate = all { input' = { name: "invalidate", choice: -1 }, - s' = { - invalidations: s.invalidations + 1, - watermark: if (s.wall > s.watermark) s.wall else s.watermark, ...metric(s, "invalidation", "", 0) - } + s' = Metrics::invalidate(s, ENTITY, 0) } - action futureFence = all { input' = { name: "futureFence", choice: -1 }, - s' = { - invalidations: s.invalidations + 1, - watermark: if (s.wall + FUTURE_BUFFER_MS > s.watermark) s.wall + FUTURE_BUFFER_MS else s.watermark, - ...metric(s, "invalidation", "", 0) - } + s' = Metrics::invalidate(s, ENTITY, FUTURE_BUFFER_MS) } - // One queued external reply, consumed by the next successfully settled raw read, - // including abandoned reads. 0 means the normal fake Redis environment. + // including abandoned reads. A second cannot be queued until the first is consumed. action replyWith(code: int): bool = all { + (1.to(16)).contains(code), input' = { name: "adapterReply", choice: code }, - s.reply == NO_QUEUED_REPLY, - s' = { reply: code, replyAt: s.wall, ...s } + not(Replies::queued(s)), + s' = Replies::queue(s, code) } action adapterReply = { nondet choice = 1.to(16).oneOf() replyWith(choice) } - + // Choice zero inherits the fixture's resolved base; 1..4 override it: two + // wrappers guarded on the input alone. + action inheritReadBudget = all { + input' = { name: "readBudgetPolicy", choice: 0 }, + s' = { readBudget: s.baseReadBudget, ...s } + } + action overrideReadBudgetWith(choice: int): bool = all { + (1.to(4)).contains(choice), + input' = { name: "readBudgetPolicy", choice: choice }, + s' = { readBudget: runtimeBudgetOf(choice), ...s } + } action readBudgetPolicy = { - // Choice zero inherits the fixture's resolved base; 1..4 override it. nondet choice = 0.to(4).oneOf() - all { - input' = { name: "readBudgetPolicy", choice: choice }, - s' = { - readBudget: if (choice == 0) s.baseReadBudget else List(0, 10, 20, 30, 50).nth(choice), - ...s - } - } + any { all { choice == 0, inheritReadBudget }, overrideReadBudgetWith(choice) } } - + // The observer fault is the drivers' fixture fault (C30): it changes no + // cache rule, so the model records the input and nothing else. action observerFaultWith(code: int): bool = all { - input' = { name: "observerFault", choice: code }, s' = { observerFailed: code, ...s } + (Set(0, 1)).contains(code), + input' = { name: "observerFault", choice: code }, s' = s } action observerFault = { nondet choice = Set(0, 1).oneOf() @@ -400,188 +280,223 @@ module dialcache_effects_conformance { any { releaseRead, releaseLoad, resolveLoader, releaseDump, releaseWrite }, any { failRead, failLoad, rejectLoader, failDump, failWrite }, // Favor the narrow second-fence check as well as unrestricted clock changes. - all { s.phase == SERIALIZE_PENDING and s.observedFence > 0, rollbackWall }, + all { s.dumps.length() > 0 and Writes::latestDump(s).fence > NO_FENCE, rollbackWall }, any { tick, jumpClock, seedRemote, any { rollbackWall, invalidate, futureFence, observerFault, readBudgetPolicy, adapterReply } } } - // Invariants: independent checks over state and observed history. - val oneRegisteredSource = s.sources.select(state => state == EFFECT_REGISTERED).length() <= 1 - val registeredFlightHasPendingCalls = s.phase == IDLE or s.calls.select(result => result == CALL_PENDING).length() > 0 - val writeRequiresAcceptedSource = (s.phase != WRITE_PENDING and s.phase != SERIALIZE_PENDING) or - (s.sources.nth(s.activeLoader) == EFFECT_SETTLED and s.acceptedAt < s.deadline and - s.acceptedWall > s.observedFence and s.refill == REFILL_ALLOWED) - val registeredReadOwnsFlight = - s.readStates.select(state => state == EFFECT_REGISTERED).length() == (if (s.phase == READ_PENDING) 1 else 0) and - (s.phase != READ_PENDING or s.readStates.nth(s.activeRead) == EFFECT_REGISTERED) - val oneRequestPerRead = s.events.select(e => e.event == "request").length() == s.reads - val oneSourceDurationPerSettlement = s.events.select(e => e.event == "fallback").length() == - s.loaders - (if (s.phase == SOURCE_RUNNING) 1 else 0) + // Invariants: independent checks over the public channels and the library records. + // Over the public channels, verbatim from the former text. + val oneRequestPerRead = s.events.select(e => e.event == "request").length() == s.o.reads val measurementsAreNonnegative = s.events.select(e => e.amount < 0).length() == 0 - val effectCountsMatchRecords = s.reads == s.readStates.length() and - s.reads == s.readBudgets.length() and s.loaders == s.sources.length() - val futureOffsetsArePositiveAtObservingLayer = s.events.indices().forall(i => { val event = s.events.nth(i) event.event != "futureOffset" or (event.location == "remote" and event.amount > 0) }) + // Every loader whose flight's outcome is recorded reported one source duration. + val oneSourceDurationPerSettlement = s.events.select(e => e.event == "fallback").length() == + s.loaders.indices().filter(k => s.sources.nth(s.loaders.nth(k)).result != CALL_PENDING).size() + // Over the library records, one step from the former text. + // The environment restriction stated: one flight is pending at a time, and + // at most one loader runs for it (undelivered work whose flight's result is pending). + val oneRegisteredSource = s.sources.select(source => source.result == CALL_PENDING).length() <= 1 and + s.loaders.indices().filter(k => Deadlines::pending(s, k) and s.sources.nth(s.loaders.nth(k)).result == CALL_PENDING).size() <= 1 + // A registered flight owns a pending caller (the former phase != IDLE). + val registeredFlightHasPendingCalls = s.processFlights.nth(0) == NO_OWNER or + s.o.calls.indices().exists(c => s.owners.nth(c) == s.processFlights.nth(0) and s.o.calls.nth(c) == CALL_PENDING) + // At most one read owns its traversal, and its flight is pending. + val registeredReadOwnsFlight = owningReads.length() <= 1 and + owningReads.indices().forall(i => s.sources.nth(owningReads.nth(i).flight).result == CALL_PENDING) + // The drivers' effect counts are the library records: a budget row per read, + // an ordinal and a history row per loader, an instant per flight. + val effectCountsMatchRecords = s.o.reads == s.io.budgets.length() and s.o.loaders == s.loaders.length() and + s.loaders.length() == s.sourceStarted.length() and s.sources.length() == s.readStarted.length() and + s.o.loads == s.decodeStarted.length() and s.o.dumps == s.dumpStarted.length() + // Every held dump or write serializes an accepted result of a flight that + // captured a retention, and a held dump's fence was cleared by the wall + // clock the first fence check sampled (the former writeRequiresAcceptedSource). + val writeRequiresAcceptedSource = s.dumps.indices().forall(i => { + val source = s.sources.nth(s.dumps.nth(i).source) + accepted(source.result) and source.retentionMs > 0 and + (s.dumps.nth(i).fence == NO_FENCE or fenceAllows(s.dumps.nth(i).sampled, s.dumps.nth(i).fence)) + }) and s.writes.indices().forall(i => { + val source = s.sources.nth(s.writes.nth(i).source) + accepted(source.result) and source.retentionMs > 0 + }) + // A loader whose result this step accepted settled inside its budget: the + // source duration it reported (the latest event, `fallback`) is below the + // budget (the former acceptedAt < deadline; a late result is a deadline + // error and a drained one accepts nothing). + val acceptedSourcesSettledBeforeTheirDeadline = input.name != "resolveLoader" or + not(accepted(s.sources.nth(s.loaders.nth(input.choice)).result)) or Deadlines::pending(s, input.choice) or { + val latest = s.events.nth(s.events.length() - 1) + latest.event == "fallback" and latest.amount < s.sourceBudget + } // Deterministic model regressions ------------------------------------------ + // The former text patched a queued reply or the read budget into private + // state in five runs; each patch is now the input that produces it + // (replyWith, overrideReadBudgetWith), so every run is public. action tenMillisecondFixture = initialized(FIXTURE_OPERATION_BUDGET) + def missReasons = s.events.select(e => e.event == "miss").foldl(List(), (out, e) => out.append(e.detail)) + def errorReasons = s.events.select(e => e.event == "error").foldl(List(), (out, e) => out.append(e.detail)) + def amounts(name: str): List[int] = s.events.select(e => e.event == name).foldl(List(), (out, e) => out.append(e.amount)) + def latestSource = s.sources.nth(Flights::latest(s)) + def readable = Remote::observe(s, KEY, 1, REMOTE_TTL_MS, false).value > NO_VALUE run unknownReasonKeepsValidFenceTest = tenMillisecondFixture.then(beginCall) - .then(all { input' = input, s' = { reply: REPLY_UNKNOWN_WITH_FENCE, replyAt: s.wall, ...s } }).then(releaseRead).then(resolveLoader) - .expect(s.calls == List(CALL_VALUE) and s.dumps == 0 and - s.events.select(e => e.event == "miss").nth(0).detail == "unclassified") + .then(replyWith(Replies::UNKNOWN_REASON_WITH_FENCE)).then(readAt(0)).then(resolveAt(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.dumps == 0 and missReasons.nth(0) == "unclassified") run untrackedReplyCannotCarryFenceTest = initialized(FIXTURE_UNTRACKED).then(beginCall) - .then(all { input' = input, s' = { reply: REPLY_FENCED_WITH_VALID_FENCE, replyAt: s.wall, ...s } }).then(releaseRead).then(resolveLoader) - .expect(s.dumps == 1 and s.observedFence == 0 and s.events.select(e => e.event == "miss").nth(0).detail == "unclassified") + .then(replyWith(Replies::FENCED_WITH_FENCE)).then(readAt(0)).then(resolveAt(0)) + .expect(s.o.dumps == 1 and latestSource.fence == NO_FENCE and missReasons.nth(0) == "unclassified") run missDiscriminatorWinsOverFrameFieldsTest = tenMillisecondFixture.then(beginCall) - .then(all { input' = input, s' = { reply: REPLY_MISS_WITH_FRAME_FIELDS, replyAt: s.wall, ...s } }).then(releaseRead) - .expect(s.loads == 0 and s.loaders == 1) + .then(replyWith(Replies::MISS_WITH_FRAME_FIELDS)).then(readAt(0)) + .expect(s.o.loads == 0 and s.o.loaders == 1) run frameWithoutMissDiscriminatorIgnoresMetadataTest = tenMillisecondFixture.then(beginCall) - .then(all { input' = input, s' = { reply: REPLY_FRAME_WITH_MISS_FIELDS, replyAt: s.wall, ...s } }).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE) and s.loaders == 0) - run readDurationIncludesDecodeTest = tenMillisecondFixture.then(seedRemote).then(beginCall).then(releaseRead) + .then(replyWith(Replies::FRAME_WITH_MISS_FIELDS)).then(readAt(0)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE) and s.o.loaders == 0) + run readDurationIncludesDecodeTest = tenMillisecondFixture.then(seedRemote).then(beginCall).then(readAt(0)) .then(tick).then(releaseLoad) - .expect(s.events.select(e => e.event == "get").foldl(List(), (out, e) => out.append(e.amount)) == List(10)) - run sourceDurationExcludesPublicationTest = tenMillisecondFixture.then(beginCall).then(releaseRead).then(resolveLoader) + .expect(amounts("get") == List(10)) + run sourceDurationExcludesPublicationTest = tenMillisecondFixture.then(beginCall).then(readAt(0)).then(resolveAt(0)) .then(tick).then(releaseDump).then(tick).then(releaseWrite) - .expect(s.events.select(e => e.event == "fallback").foldl(List(), (out, e) => out.append(e.amount)) == List(0) and - s.events.select(e => e.event == "serialization").foldl(List(), (out, e) => out.append(e.amount)) == List(10)) - run lateSourceCannotRepeatFailureMetricTest = tenMillisecondFixture.then(beginCall).then(releaseRead) - .then(tick).then(rejectLoader).expect(s.events.select(e => e.event == "error" and e.detail == "fallback").length() == 1) - run timedOutLoaderOverlapsNewFlightTest = tenMillisecondFixture.then(beginCall).then(releaseRead).then(tick) - .then(beginCall).then(releaseRead) - .expect(s.sources == List(EFFECT_ABANDONED, EFFECT_REGISTERED) and s.calls == List(CALL_TIMEOUT, CALL_PENDING)) - run acceptedWriteOutlivesDeadlineTest = tenMillisecondFixture.then(beginCall).then(releaseRead).then(resolveLoader) - .then(tick).then(releaseDump).then(tick).expect(s.phase == WRITE_PENDING and s.calls == List(CALL_PENDING)) - .then(releaseWrite).expect(s.calls == List(CALL_VALUE)) - run delayedWriteRemainsFencedTest = tenMillisecondFixture.then(beginCall).then(releaseRead).then(resolveLoader) - .then(releaseDump).then(tick).then(invalidate).then(releaseWrite).then(beginCall).then(releaseRead) - .expect(not(readable) and s.calls == List(CALL_VALUE, CALL_PENDING) and s.loaders == 2) + .expect(amounts("fallback") == List(0) and amounts("serialization") == List(10)) + run lateSourceCannotRepeatFailureMetricTest = tenMillisecondFixture.then(beginCall).then(readAt(0)) + .then(tick).then(rejectAt(0)).expect(s.events.select(e => e.event == "error" and e.detail == "fallback").length() == 1) + run timedOutLoaderOverlapsNewFlightTest = tenMillisecondFixture.then(beginCall).then(readAt(0)).then(tick) + .then(beginCall).then(readAt(1)) + .expect(s.sources.nth(0).result == DEADLINE_ERROR and s.sources.nth(1).result == CALL_PENDING + and s.drained == List(false, false) and s.o.calls == List(DEADLINE_ERROR, CALL_PENDING)) + run acceptedWriteOutlivesDeadlineTest = tenMillisecondFixture.then(beginCall).then(readAt(0)).then(resolveAt(0)) + .then(tick).then(releaseDump).then(tick).expect(s.writes.length() == 1 and s.o.calls == List(CALL_PENDING)) + .then(releaseWrite).expect(s.o.calls == List(VALUE_ONE)) + run delayedWriteRemainsFencedTest = tenMillisecondFixture.then(beginCall).then(readAt(0)).then(resolveAt(0)) + .then(releaseDump).then(tick).then(invalidate).then(releaseWrite).then(beginCall).then(readAt(1)) + .expect(not(readable) and s.o.calls == List(VALUE_ONE, CALL_PENDING) and s.o.loaders == 2) run readTimeoutStartsIndependentSourceDeadlineTest = tenMillisecondFixture.then(beginCall).then(beginCall).then(tick) - .expect(s.calls == List(CALL_PENDING, CALL_PENDING) and s.deadline == 10020 and s.readAborts == 1) - .then(resolveLoader).expect(s.calls == List(CALL_VALUE, CALL_VALUE) and s.dumps == 0 and s.writes == 0) - run lateReadCannotBecomeHitTest = tenMillisecondFixture.then(seedRemote).then(beginCall).then(jumpClock).then(releaseRead) - .expect(s.loads == 0 and s.loaders == 1 and s.readAborts == 1) + .expect(s.o.calls == List(CALL_PENDING, CALL_PENDING) and Deadlines::deadlineOf(s, Deadlines::SOURCE, 0) == 10020 and s.io.aborted == List(0)) + .then(resolveAt(0)).expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.dumps == 0 and s.o.writes == 0) + run lateReadCannotBecomeHitTest = tenMillisecondFixture.then(seedRemote).then(beginCall).then(jumpClock).then(readAt(0)) + .expect(s.o.loads == 0 and s.o.loaders == 1 and s.io.aborted == List(0)) run acquiredDecodeSurvivesInvalidationAndDeadlineTest = tenMillisecondFixture.then(seedRemote).then(beginCall) - .then(releaseRead).then(tick).then(invalidate).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE) and s.loaders == 0 and s.readAborts == 0) - run readFailureNeverRefillsTest = tenMillisecondFixture.then(beginCall).then(failRead).then(resolveLoader) - .expect(s.calls == List(CALL_VALUE) and s.dumps == 0 and s.readAborts == 0) - run decodeFailureMayRefillTest = tenMillisecondFixture.then(seedRemote).then(beginCall).then(releaseRead).then(failLoad) - .then(resolveLoader).then(releaseDump).then(releaseWrite) - .expect(s.calls == List(CALL_VALUE) and s.loads == 1 and s.writes == 1) - run dumpFailurePreservesSourceTest = tenMillisecondFixture.then(beginCall).then(releaseRead).then(resolveLoader).then(failDump) - .expect(s.calls == List(CALL_VALUE) and s.writes == 0) - run writeFailurePreservesSourceTest = tenMillisecondFixture.then(beginCall).then(releaseRead).then(resolveLoader) - .then(releaseDump).then(failWrite).expect(s.calls == List(CALL_VALUE) and s.storedTimestamp == 0) + .then(readAt(0)).then(tick).then(invalidate).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE) and s.o.loaders == 0 and s.io.aborted == List()) + run readFailureNeverRefillsTest = tenMillisecondFixture.then(beginCall).then(failReadAt(0)).then(resolveAt(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.dumps == 0 and s.io.aborted == List()) + run decodeFailureMayRefillTest = tenMillisecondFixture.then(seedRemote).then(beginCall).then(readAt(0)).then(failLoad) + .then(resolveAt(0)).then(releaseDump).then(releaseWrite) + .expect(s.o.calls == List(VALUE_ONE) and s.o.loads == 1 and s.o.writes == 1) + run dumpFailurePreservesSourceTest = tenMillisecondFixture.then(beginCall).then(readAt(0)).then(resolveAt(0)).then(failDump) + .expect(s.o.calls == List(VALUE_ONE) and s.o.writes == 0) + run writeFailurePreservesSourceTest = tenMillisecondFixture.then(beginCall).then(readAt(0)).then(resolveAt(0)) + .then(releaseDump).then(failWrite).expect(s.o.calls == List(VALUE_ONE) and s.remoteValues.nth(KEY) == NO_VALUE) run rollbackDuringDumpRechecksObservedFenceTest = tenMillisecondFixture.then(invalidate).then(tick) - .then(beginCall).then(releaseRead).then(resolveLoader).then(rollbackWall).then(releaseDump) - .expect(s.calls == List(CALL_VALUE) and s.dumps == 1 and s.writes == 0) - run rollbackDoesNotExtendSourceDeadlineTest = tenMillisecondFixture.then(beginCall).then(releaseRead) - .then(rollbackWall).then(tick).expect(s.calls == List(CALL_TIMEOUT)) + .then(beginCall).then(readAt(0)).then(resolveAt(0)).then(rollbackWall).then(releaseDump) + .expect(s.o.calls == List(VALUE_ONE) and s.o.dumps == 1 and s.o.writes == 0) + run rollbackDoesNotExtendSourceDeadlineTest = tenMillisecondFixture.then(beginCall).then(readAt(0)) + .then(rollbackWall).then(tick).expect(s.o.calls == List(DEADLINE_ERROR)) run observerFailuresCannotReplaceSourceErrorTest = tenMillisecondFixture.then(observerFaultWith(1)) - .then(beginCall).then(failRead).then(rejectLoader).expect(s.calls == List(CALL_SOURCE_ERROR)) + .then(beginCall).then(failReadAt(0)).then(rejectAt(0)).expect(s.o.calls == List(SOURCE_ERROR)) run libraryReadBudgetIsFiftyMillisecondsTest = initialized(FIXTURE_LIBRARY_BUDGET).then(beginCall) - .then(tick).then(tick).then(tick).then(tick).expect(s.phase == READ_PENDING and s.loaders == 0) - .then(tick).expect(s.phase == SOURCE_RUNNING and s.deadline == 10060 and s.readBudgets == List(50)) + .then(tick).then(tick).then(tick).then(tick).expect(owningReads.length() == 1 and s.o.loaders == 0) + .then(tick).expect(owningReads.length() == 0 and Deadlines::deadlineOf(s, Deadlines::SOURCE, 0) == 10060 and s.io.budgets == List(50)) run followerKeepsAcceptedReadBudgetTest = initialized(FIXTURE_RUNTIME_BUDGET).then(beginCall) - .then(all { input' = input, s' = { readBudget: 10, ...s } }).then(beginCall).then(tick).then(tick) - .expect(s.phase == READ_PENDING and s.readBudgets == List(30) and s.calls == List(CALL_PENDING, CALL_PENDING)) - .then(tick).expect(s.phase == SOURCE_RUNNING and s.deadline == 10040 and s.readAborts == 1) + .then(overrideReadBudgetWith(1)).then(beginCall).then(tick).then(tick) + .expect(owningReads.length() == 1 and s.io.budgets == List(30) and s.o.calls == List(CALL_PENDING, CALL_PENDING)) + .then(tick).expect(owningReads.length() == 0 and Deadlines::deadlineOf(s, Deadlines::SOURCE, 0) == 10040 and s.io.aborted == List(0)) // Deadline acceptance is checked when raw work settles, even if timer // delivery has not run. Rejection must receive the same deadline treatment // as fulfillment, without being recategorized as an ordinary adapter error. run lateReadRejectionUsesDeadlineCategoryTest = tenMillisecondFixture - .then(beginCall).then(jumpClock).then(failRead) - .expect(s.readAborts == 1 and s.loaders == 1 and s.refill == REFILL_DENIED and - s.events.select(e => e.event == "error").foldl(List(), (out, e) => out.append(e.detail)) == List("cache_read_timeout")) + .then(beginCall).then(jumpClock).then(failReadAt(0)) + .expect(s.io.aborted == List(0) and s.o.loaders == 1 and latestSource.retentionMs == 0 and + errorReasons == List("cache_read_timeout")) + // A source result arriving after its deadline is a deadline error, whether + // it resolves or rejects; the reproducer of the deadlines challenge. + run lateSourceResultIsADeadlineErrorTest = tenMillisecondFixture + .then(beginCall).then(readAt(0)).then(jumpClock).then(resolveAt(0)) + .expect(s.o.calls == List(DEADLINE_ERROR) and s.o.dumps == 0 and errorReasons == List("fallback") and amounts("fallback") == List(10)) run successfulReadClearsDeadlineBeforeDecodeTest = tenMillisecondFixture - .then(seedRemote).then(beginCall).then(releaseRead).then(tick).then(tick) + .then(seedRemote).then(beginCall).then(readAt(0)).then(tick).then(tick) .then(releaseLoad) - .expect(s.calls == List(CALL_VALUE) and s.readAborts == 0 and s.loaders == 0) + .expect(s.o.calls == List(VALUE_ONE) and s.io.aborted == List() and s.o.loaders == 0) // Each failure has its own diagnostic phase. The result and mutation // consequences are checked alongside the label; observing a label alone // would not establish fail-open behavior. run readFailureKeepsCategoryAndDeniesRefillTest = tenMillisecondFixture - .then(beginCall).then(failRead).then(resolveLoader) - .expect(s.calls == List(CALL_VALUE) and s.dumps == 0 and s.writes == 0 and - s.events.select(e => e.event == "error").foldl(List(), (out, e) => out.append(e.detail)) == List("cache_read")) + .then(beginCall).then(failReadAt(0)).then(resolveAt(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.dumps == 0 and s.o.writes == 0 and errorReasons == List("cache_read")) run decodeFailureKeepsCategoryAndAllowsRefillTest = tenMillisecondFixture - .then(seedRemote).then(beginCall).then(releaseRead).then(failLoad) - .then(resolveLoader).then(releaseDump).then(releaseWrite) - .expect(s.calls == List(CALL_VALUE) and s.writes == 1 and - s.events.select(e => e.event == "error").foldl(List(), (out, e) => out.append(e.detail)) == List("serialization_load")) + .then(seedRemote).then(beginCall).then(readAt(0)).then(failLoad) + .then(resolveAt(0)).then(releaseDump).then(releaseWrite) + .expect(s.o.calls == List(VALUE_ONE) and s.o.writes == 1 and errorReasons == List("serialization_load")) run dumpFailureKeepsCategoryAndSourceValueTest = tenMillisecondFixture - .then(beginCall).then(releaseRead).then(resolveLoader).then(failDump) - .expect(s.calls == List(CALL_VALUE) and s.writes == 0 and - s.events.select(e => e.event == "error").foldl(List(), (out, e) => out.append(e.detail)) == List("serialization_dump")) + .then(beginCall).then(readAt(0)).then(resolveAt(0)).then(failDump) + .expect(s.o.calls == List(VALUE_ONE) and s.o.writes == 0 and errorReasons == List("serialization_dump")) run writeFailureKeepsCategoryAndSourceValueTest = tenMillisecondFixture - .then(beginCall).then(releaseRead).then(resolveLoader).then(releaseDump).then(failWrite) - .expect(s.calls == List(CALL_VALUE) and s.storedTimestamp == 0 and - s.events.select(e => e.event == "error").foldl(List(), (out, e) => out.append(e.detail)) == List("cache_write")) + .then(beginCall).then(readAt(0)).then(resolveAt(0)).then(releaseDump).then(failWrite) + .expect(s.o.calls == List(VALUE_ONE) and s.remoteValues.nth(KEY) == NO_VALUE and errorReasons == List("cache_write")) // Observer failure is an external callback condition. Its isolation preserves // traversal, public outcomes and accepted publication, not merely event count. run observerFailuresCannotPreventCacheHitTest = tenMillisecondFixture .then(observerFaultWith(1)).then(seedRemote) - .then(beginCall).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE) and s.loaders == 0 and s.loads == 1 and s.writes == 0) + .then(beginCall).then(readAt(0)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE) and s.o.loaders == 0 and s.o.loads == 1 and s.o.writes == 0) run observerFailuresCannotPreventPublicationTest = tenMillisecondFixture - .then(observerFaultWith(1)).then(beginCall).then(releaseRead) - .then(resolveLoader).then(releaseDump).then(releaseWrite) - .then(beginCall).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE, CALL_VALUE) and s.loaders == 1 - and s.reads == 2 and s.loads == 1 and s.dumps == 1 and s.writes == 1) + .then(observerFaultWith(1)).then(beginCall).then(readAt(0)) + .then(resolveAt(0)).then(releaseDump).then(releaseWrite) + .then(beginCall).then(readAt(1)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loaders == 1 + and s.o.reads == 2 and s.o.loads == 1 and s.o.dumps == 1 and s.o.writes == 1) // Source acceptance precedes the native frame stamp. A serialization delay // and intervening invalidation make the distinction visible to the next read. run writeStampAfterSerializationClearsInterveningFenceTest = tenMillisecondFixture - .then(beginCall).then(releaseRead).then(resolveLoader).then(invalidate) + .then(beginCall).then(readAt(0)).then(resolveAt(0)).then(invalidate) .then(tick).then(releaseDump).then(releaseWrite) - .expect(s.acceptedWall == 100000 and s.storedTimestamp == 100010 and s.watermark == 100000) - .then(beginCall).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE, CALL_VALUE) and s.loaders == 1 - and s.loads == 1 and s.writes == 1) + .expect(s.created.nth(KEY) == 100010 and s.watermark.nth(ENTITY) == 100000 and s.o.writeTtls == List(REMOTE_TTL_MS)) + .then(beginCall).then(readAt(1)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loaders == 1 + and s.o.loads == 1 and s.o.writes == 1) run instanceReadBudgetOverridesLibraryTest = initialized(FIXTURE_INSTANCE_BUDGET) - .then(beginCall).then(tick).expect(s.calls == List(CALL_PENDING) and s.loaders == 0) - .then(tick).then(resolveLoader) - .expect(s.readBudgets == List(20) and s.readAborts == 1 - and s.calls == List(CALL_VALUE) and s.loaders == 1 and s.dumps == 0) + .then(beginCall).then(tick).expect(s.o.calls == List(CALL_PENDING) and s.o.loaders == 0) + .then(tick).then(resolveAt(0)) + .expect(s.io.budgets == List(20) and s.io.aborted == List(0) + and s.o.calls == List(VALUE_ONE) and s.o.loaders == 1 and s.o.dumps == 0) run operationReadBudgetOverridesInstanceTest = initialized(FIXTURE_OPERATION_BUDGET) - .then(beginCall).then(tick).then(resolveLoader) - .expect(s.readBudgets == List(10) and s.readAborts == 1 - and s.calls == List(CALL_VALUE) and s.loaders == 1 and s.dumps == 0) + .then(beginCall).then(tick).then(resolveAt(0)) + .expect(s.io.budgets == List(10) and s.io.aborted == List(0) + and s.o.calls == List(VALUE_ONE) and s.o.loaders == 1 and s.o.dumps == 0) run runtimeReadBudgetOverridesOperationTest = initialized(FIXTURE_RUNTIME_BUDGET) - .then(beginCall).then(tick).then(tick).expect(s.calls == List(CALL_PENDING) and s.loaders == 0) - .then(tick).then(resolveLoader) - .expect(s.readBudgets == List(30) and s.readAborts == 1 - and s.calls == List(CALL_VALUE) and s.loaders == 1 and s.dumps == 0) + .then(beginCall).then(tick).then(tick).expect(s.o.calls == List(CALL_PENDING) and s.o.loaders == 0) + .then(tick).then(resolveAt(0)) + .expect(s.io.budgets == List(30) and s.io.aborted == List(0) + and s.o.calls == List(VALUE_ONE) and s.o.loaders == 1 and s.o.dumps == 0) // Amounts are model milliseconds, converted once to public seconds by both // projections. This is the serving remote location; shadow locations are a // separate interaction, not implied by this assertion. run futureFrameReportsPositiveObservingOffsetTest = tenMillisecondFixture - .then(seedRemote).then(rollbackWall).then(beginCall).then(releaseRead).then(rejectLoader) - .expect(s.calls == List(CALL_SOURCE_ERROR) and s.loads == 0 and s.loaders == 1 + .then(seedRemote).then(rollbackWall).then(beginCall).then(readAt(0)).then(rejectAt(0)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.o.loads == 0 and s.o.loaders == 1 and s.events.select(e => e.event == "futureOffset") == List({ event: "futureOffset", location: "remote", detail: "", amount: 1000 })) run coalescedFailureKeepsOneLeaderAndFollowerTrailTest = tenMillisecondFixture - .then(beginCall).then(beginCall).then(failRead).then(rejectLoader) - .expect(s.calls == List(CALL_SOURCE_ERROR, CALL_SOURCE_ERROR) - and s.reads == 1 and s.loaders == 1 and s.loads == 0 and s.writes == 0) + .then(beginCall).then(beginCall).then(failReadAt(0)).then(rejectAt(0)) + .expect(s.o.calls == List(SOURCE_ERROR, SOURCE_ERROR) + and s.o.reads == 1 and s.o.loaders == 1 and s.o.loads == 0 and s.o.writes == 0) .expect(s.events.select(e => e.event == "request" or e.event == "coalesced" or e.event == "error") == List( { event: "request", location: "remote", detail: "", amount: 0 }, { event: "coalesced", location: "process", detail: "", amount: 0 }, @@ -589,92 +504,90 @@ module dialcache_effects_conformance { { event: "error", location: "remote", detail: "fallback", amount: 0 })) run nullReplyRefillsAndIsReadableTest = tenMillisecondFixture.then(replyWith(1)) - .then(beginCall).then(releaseRead).then(resolveLoader).then(releaseDump).then(releaseWrite) - .then(beginCall).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE, CALL_VALUE) and s.loads == 1 and s.loaders == 1 - and s.reads == 2 and s.dumps == 1 and s.writes == 1) - .expect(s.events.select(e => e.event == "miss").foldl(List(), (out, e) => out.append(e.detail)) == List("unclassified")) + .then(beginCall).then(readAt(0)).then(resolveAt(0)).then(releaseDump).then(releaseWrite) + .then(beginCall).then(readAt(1)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loads == 1 and s.o.loaders == 1 + and s.o.reads == 2 and s.o.dumps == 1 and s.o.writes == 1) + .expect(missReasons == List("unclassified")) run primitiveReplyRefillsAndIsReadableTest = tenMillisecondFixture.then(replyWith(2)) - .then(beginCall).then(releaseRead).then(resolveLoader).then(releaseDump).then(releaseWrite) - .then(beginCall).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE, CALL_VALUE) and s.loads == 1 and s.loaders == 1 - and s.reads == 2 and s.dumps == 1 and s.writes == 1) - .expect(s.events.select(e => e.event == "miss").foldl(List(), (out, e) => out.append(e.detail)) == List("unclassified")) + .then(beginCall).then(readAt(0)).then(resolveAt(0)).then(releaseDump).then(releaseWrite) + .then(beginCall).then(readAt(1)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loads == 1 and s.o.loaders == 1 + and s.o.reads == 2 and s.o.dumps == 1 and s.o.writes == 1) + .expect(missReasons == List("unclassified")) run legacyReplyRefillsAndIsReadableTest = tenMillisecondFixture.then(replyWith(3)) - .then(beginCall).then(releaseRead).then(resolveLoader).then(releaseDump).then(releaseWrite) - .then(beginCall).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE, CALL_VALUE) and s.loads == 1 and s.loaders == 1 - and s.reads == 2 and s.dumps == 1 and s.writes == 1) - .expect(s.events.select(e => e.event == "miss").foldl(List(), (out, e) => out.append(e.detail)) == List("unclassified")) + .then(beginCall).then(readAt(0)).then(resolveAt(0)).then(releaseDump).then(releaseWrite) + .then(beginCall).then(readAt(1)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loads == 1 and s.o.loaders == 1 + and s.o.reads == 2 and s.o.dumps == 1 and s.o.writes == 1) + .expect(missReasons == List("unclassified")) run kindlessReplyRefillsAndIsReadableTest = tenMillisecondFixture.then(replyWith(4)) - .then(beginCall).then(releaseRead).then(resolveLoader).then(releaseDump).then(releaseWrite) - .then(beginCall).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE, CALL_VALUE) and s.loads == 1 and s.loaders == 1 - and s.reads == 2 and s.dumps == 1 and s.writes == 1) - .expect(s.events.select(e => e.event == "miss").foldl(List(), (out, e) => out.append(e.detail)) == List("unclassified")) + .then(beginCall).then(readAt(0)).then(resolveAt(0)).then(releaseDump).then(releaseWrite) + .then(beginCall).then(readAt(1)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loads == 1 and s.o.loaders == 1 + and s.o.reads == 2 and s.o.dumps == 1 and s.o.writes == 1) + .expect(missReasons == List("unclassified")) run missingFenceRefillsAndIsReadableTest = tenMillisecondFixture.then(replyWith(8)) - .then(beginCall).then(releaseRead).then(resolveLoader).then(releaseDump).then(releaseWrite) - .then(beginCall).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE, CALL_VALUE) and s.loads == 1 and s.loaders == 1 - and s.reads == 2 and s.dumps == 1 and s.writes == 1) - .expect(s.events.select(e => e.event == "miss").foldl(List(), (out, e) => out.append(e.detail)) == List("unclassified")) + .then(beginCall).then(readAt(0)).then(resolveAt(0)).then(releaseDump).then(releaseWrite) + .then(beginCall).then(readAt(1)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loads == 1 and s.o.loaders == 1 + and s.o.reads == 2 and s.o.dumps == 1 and s.o.writes == 1) + .expect(missReasons == List("unclassified")) run negativeFenceRefillsAndIsReadableTest = tenMillisecondFixture.then(replyWith(9)) - .then(beginCall).then(releaseRead).then(resolveLoader).then(releaseDump).then(releaseWrite) - .then(beginCall).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE, CALL_VALUE) and s.loads == 1 and s.loaders == 1 - and s.reads == 2 and s.dumps == 1 and s.writes == 1) - .expect(s.events.select(e => e.event == "miss").foldl(List(), (out, e) => out.append(e.detail)) == List("unclassified")) - - run fractionalFenceRefillsAndIsReadableTest = tenMillisecondFixture.then(replyWith(10)) - .then(beginCall).then(releaseRead).then(resolveLoader).then(releaseDump).then(releaseWrite) - .then(beginCall).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE, CALL_VALUE) and s.loads == 1 and s.loaders == 1 - and s.reads == 2 and s.dumps == 1 and s.writes == 1) - .expect(s.events.select(e => e.event == "miss").foldl(List(), (out, e) => out.append(e.detail)) == List("value_absent")) - - run unsafeFenceRefillsAndIsReadableTest = tenMillisecondFixture.then(replyWith(11)) - .then(beginCall).then(releaseRead).then(resolveLoader).then(releaseDump).then(releaseWrite) - .then(beginCall).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE, CALL_VALUE) and s.loads == 1 and s.loaders == 1 - and s.reads == 2 and s.dumps == 1 and s.writes == 1) - .expect(s.events.select(e => e.event == "miss").foldl(List(), (out, e) => out.append(e.detail)) == List("value_absent")) + .then(beginCall).then(readAt(0)).then(resolveAt(0)).then(releaseDump).then(releaseWrite) + .then(beginCall).then(readAt(1)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loads == 1 and s.o.loaders == 1 + and s.o.reads == 2 and s.o.dumps == 1 and s.o.writes == 1) + .expect(missReasons == List("unclassified")) + + run fractionalFenceRefillsAndIsReadableTest = tenMillisecondFixture.then(replyWith(Replies::FRACTIONAL_FENCE)) + .then(beginCall).then(readAt(0)).then(resolveAt(0)).then(releaseDump).then(releaseWrite) + .then(beginCall).then(readAt(1)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loads == 1 and s.o.loaders == 1 + and s.o.reads == 2 and s.o.dumps == 1 and s.o.writes == 1) + .expect(missReasons == List("value_absent")) + + run unsafeFenceRefillsAndIsReadableTest = tenMillisecondFixture.then(replyWith(Replies::UNSAFE_FENCE)) + .then(beginCall).then(readAt(0)).then(resolveAt(0)).then(releaseDump).then(releaseWrite) + .then(beginCall).then(readAt(1)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loads == 1 and s.o.loaders == 1 + and s.o.reads == 2 and s.o.dumps == 1 and s.o.writes == 1) + .expect(missReasons == List("value_absent")) // Untracked reads demote a fenced-miss reply to an ordinary miss. Observe the // consequence through publication and a later hit, using only public inputs. run untrackedFencedReplyRefillsAndIsReadableTest = initialized(FIXTURE_UNTRACKED) - .then(replyWith(REPLY_FENCED_WITH_VALID_FENCE)).then(beginCall).then(releaseRead) - .then(resolveLoader).then(releaseDump).then(releaseWrite) - .then(beginCall).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE, CALL_VALUE) and s.observedFence == 0 - and s.loads == 1 and s.loaders == 1 and s.reads == 2 and s.dumps == 1 and s.writes == 1) - .expect(s.events.select(e => e.event == "miss").foldl(List(), (out, e) => out.append(e.detail)) == List("unclassified")) + .then(replyWith(Replies::FENCED_WITH_FENCE)).then(beginCall).then(readAt(0)) + .then(resolveAt(0)).then(releaseDump).then(releaseWrite) + .then(beginCall).then(readAt(1)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.sources.nth(0).fence == NO_FENCE + and s.o.loads == 1 and s.o.loaders == 1 and s.o.reads == 2 and s.o.dumps == 1 and s.o.writes == 1) + .expect(missReasons == List("unclassified")) // An expired-reason reply with a zero fence keeps its miss cause but retains // no fence. One source refill is serialized and written; a later read hits it. run expiredZeroFenceReplyRefillsAndIsReadableTest = tenMillisecondFixture - .then(replyWith(REPLY_EXPIRED_ZERO_FENCE)).then(beginCall).then(releaseRead) - .then(resolveLoader).then(releaseDump).then(releaseWrite) - .then(beginCall).then(releaseRead).then(releaseLoad) - .expect(s.calls == List(CALL_VALUE, CALL_VALUE) and s.observedFence == 0 - and s.loads == 1 and s.loaders == 1 and s.reads == 2 and s.dumps == 1 and s.writes == 1) - .expect(s.events.select(e => e.event == "miss").foldl(List(), (out, e) => out.append(e.detail)) == List("expired")) + .then(replyWith(Replies::EXPIRED_ZERO_FENCE)).then(beginCall).then(readAt(0)) + .then(resolveAt(0)).then(releaseDump).then(releaseWrite) + .then(beginCall).then(readAt(1)).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.sources.nth(0).fence == NO_FENCE + and s.o.loads == 1 and s.o.loaders == 1 and s.o.reads == 2 and s.o.dumps == 1 and s.o.writes == 1) + .expect(missReasons == List("expired")) // A valid future fence survives normalization even with an absent cause. The // accepted source is served but never serialized, so the next read misses again. run absentReplyWithFutureFenceBlocksRefillTest = tenMillisecondFixture - .then(replyWith(REPLY_ABSENT_WITH_FENCE)).then(beginCall).then(releaseRead) - .expect(s.observedFence == s.wall + FUTURE_BUFFER_MS and s.refill == REFILL_ALLOWED and s.loaders == 1) - .then(resolveLoader) - .expect(s.calls == List(CALL_VALUE) and s.dumps == 0 and s.writes == 0) - .then(beginCall).then(releaseRead) - .expect(s.calls == List(CALL_VALUE, CALL_PENDING) and s.loaders == 2 - and s.loads == 0 and s.dumps == 0 and s.writes == 0) - .expect(s.events.select(e => e.event == "miss").foldl(List(), (out, e) => out.append(e.detail)) - == List("value_absent", "value_absent")) - + .then(replyWith(Replies::ABSENT_WITH_FENCE)).then(beginCall).then(readAt(0)) + .expect(latestSource.fence == Clock::wallOf(s) + FUTURE_BUFFER_MS and latestSource.retentionMs > 0 and s.o.loaders == 1) + .then(resolveAt(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.dumps == 0 and s.o.writes == 0) + .then(beginCall).then(readAt(1)) + .expect(s.o.calls == List(VALUE_ONE, CALL_PENDING) and s.o.loaders == 2 + and s.o.loads == 0 and s.o.dumps == 0 and s.o.writes == 0) + .expect(missReasons == List("value_absent", "value_absent")) } diff --git a/formal/dialcache-effects-connection.qnt b/formal/dialcache-effects-connection.qnt deleted file mode 100644 index b29c5f19..00000000 --- a/formal/dialcache-effects-connection.qnt +++ /dev/null @@ -1,49 +0,0 @@ -module dialcache_effects_connection { - import dialcache_effects_conformance as profile from "./dialcache-effects-conformance" - import cache_contract.* from "./cache-contract" - - // Source starts are observed independently from the profile's shared deadline - // field. Read timeout starts a source at the end of tick; other source starts - // occur at the preceding clock. Settlement receipts come from the external - // resolve/reject input and preceding clock, not acceptedAt. Pending publication - // and new dump/write effects require that exact source's timely success. - // Application-owned serialization may finish after the source deadline. - // This checks source timing/ownership, not payload provenance or refill fences. - type Settlement = { source: int, at: int, succeeded: bool } - var sources: List[SourceExecution] - var settlements: List[Settlement] - var before: { now: int, dumps: int, writes: int } - action init = all { - profile::init, - sources' = List(), - settlements' = List(), - before' = { now: 0, dumps: 0, writes: 0 } - } - val observedSources = if (profile::s.loaders > sources.length()) - sources.append(captureSource(profile::s.activeLoader, - if (profile::input.name == "tick") before.now + profile::CLOCK_STEP_MS else before.now, - profile::SOURCE_BUDGET_MS)) else sources - val observedSettlements = if (profile::input.name == "resolveLoader" or profile::input.name == "rejectLoader") - settlements.append({ source: profile::input.choice, at: before.now, - succeeded: profile::input.name == "resolveLoader" }) else settlements - action step = all { - sources' = observedSources, - settlements' = observedSettlements, - before' = { now: profile::s.now, dumps: profile::s.dumps, writes: profile::s.writes }, - profile::step - } - val effectsDeadlineMatchesSourceStart = profile::s.phase != profile::SOURCE_RUNNING or - profile::s.deadline == observedSources.nth(profile::s.activeLoader).started + profile::SOURCE_BUDGET_MS - val effectsPublicationMatchesAcceptedSource = { - val publishes = profile::s.phase == profile::SERIALIZE_PENDING or profile::s.phase == profile::WRITE_PENDING or - profile::s.dumps > before.dumps or profile::s.writes > before.writes - not(publishes) or { - val receipts = observedSettlements.select(receipt => receipt.source == profile::s.activeLoader) - receipts.length() == 1 and { - val receipt = receipts.nth(0) - receipt.succeeded and profile::s.acceptedAt == receipt.at and - sourceReturnAllowed(observedSources.nth(receipt.source), receipt.source, receipt.at) - } - } - } -} diff --git a/formal/dialcache-flight-deadlines.qnt b/formal/dialcache-flight-deadlines.qnt deleted file mode 100644 index e5cfd004..00000000 --- a/formal/dialcache-flight-deadlines.qnt +++ /dev/null @@ -1,481 +0,0 @@ -module dialcache_flight_deadlines { - import cache_rules.* from "./cache-rules" - // Selected rules from C11, C14 and C23-C26. One request/process flight, with followers - // and older abandoned sources. Policy flags are environment inputs; phase and - // flightScope are DialCache ownership. fallbackStartedAt records invocation - // time so deadline properties can be checked independently of the transition. - // Sampled time ranges from 0 through MAX_TIME; named library-budget regressions - // also jump to 60,000/60,001 ms to check the real default boundary. Independently - // admitted sources model successful settlement versus timeout, without cache - // publication; the main flight also models rejection and publication ownership. - // This checks deadline safety and cleanup, not scheduler fairness or progress. - - // Types, bounds and state - type FlightScope = NoFlight | RequestFlight | ProcessFlight - type FlightPhase = FlightIdle | CacheLookup | FallbackRunning | Publication | FlightDone - type Outcome = NoOutcome | CacheHit | SourceSuccess | SourceFailure | SourceTimeout - - pure val MAX_TIME = 8 - pure val FALLBACK_TIMEOUT = 3 - pure val LIBRARY_FALLBACK_TIMEOUT_MS = 60000 - pure val OMITTED_FALLBACK_TIMEOUT = -1 - pure val NO_FALLBACK_TIMEOUT = 0 - - // Independently admitted callers include disabled calls, enabled calls with - // no serving layers, failed key construction, and coalescing-disabled calls. - // A zero captured budget means no deadline; initially disabled callers always - // capture zero regardless of the operation's configured source budget. - type IndependentSource = { - startedEnabled: bool, - configuredBudget: int, - budget: int, - startedAt: int, - acceptedAt: int, - outcome: Outcome - } - - type State = { - now: int, - scopeEnabled: bool, - requestLayerActive: bool, - sharedLayerActive: bool, - coalesce: bool, - phase: FlightPhase, - flightScope: FlightScope, - outcome: Outcome, - followers: int, - sourceExecutions: int, - independentExecutions: int, - independentSources: List[IndependentSource], - configuredSourceBudget: int, - keyConstructionFailed: bool, - fallbackDeadline: int, - fallbackStartedAt: int, - fallbackDeadlineStarted: bool, - activeSourceRunning: bool, - abandonedSources: int, - acceptedSourceResult: bool, - publicationDispatched: bool - } - - var s: State - - // Initial state - action init = s' = { - now: 0, - scopeEnabled: false, - requestLayerActive: false, - sharedLayerActive: false, - coalesce: true, - phase: FlightIdle, - flightScope: NoFlight, - outcome: NoOutcome, - followers: 0, - sourceExecutions: 0, - independentExecutions: 0, - independentSources: List(), - configuredSourceBudget: FALLBACK_TIMEOUT, - keyConstructionFailed: false, - fallbackDeadline: 0, - fallbackStartedAt: 0, - fallbackDeadlineStarted: false, - activeSourceRunning: false, - abandonedSources: 0, - acceptedSourceResult: false, - publicationDispatched: false - } - - // Environment transitions - action advanceTime = all { - s.now < MAX_TIME, - s' = { now: s.now + 1, ...s }, - } - - action toggleEnabled = all { - s.phase == FlightIdle, - s' = { scopeEnabled: not(s.scopeEnabled), ...s }, - } - - action toggleRequestLayer = all { - s.phase == FlightIdle, - s' = { requestLayerActive: not(s.requestLayerActive), ...s }, - } - - action toggleSharedLayer = all { - s.phase == FlightIdle, - s' = { sharedLayerActive: not(s.sharedLayerActive), ...s }, - } - - action toggleCoalesce = all { - s.phase == FlightIdle, - s' = { coalesce: not(s.coalesce), ...s }, - } - - action chooseSourceBudget = { - nondet budget = Set(OMITTED_FALLBACK_TIMEOUT, NO_FALLBACK_TIMEOUT, FALLBACK_TIMEOUT).oneOf() - s' = { configuredSourceBudget: budget, ...s } - } - - action toggleKeyFailure = all { - s.phase == FlightIdle, - s' = { keyConstructionFailed: not(s.keyConstructionFailed), ...s }, - } - - // Flight admission and cache lookup - // Request-local coalescing wraps process coalescing and therefore wins when - // both scopes are eligible for the same key. - action startLeader = all { - s.phase == FlightIdle, - s.scopeEnabled, - s.coalesce, - not(s.keyConstructionFailed), - s.requestLayerActive or s.sharedLayerActive, - s' = { - phase: CacheLookup, - flightScope: if (s.requestLayerActive) RequestFlight else ProcessFlight, - outcome: NoOutcome, - followers: 0, - sourceExecutions: 0, - fallbackDeadlineStarted: false, - activeSourceRunning: false, - acceptedSourceResult: false, - publicationDispatched: false, - ...s - }, - } - - action joinFollower = all { - s.phase != FlightIdle, - s.phase != FlightDone, - s.flightScope != NoFlight, - s' = { followers: s.followers + 1, ...s }, - } - - action startIndependentCaller = all { - s.phase == FlightIdle, - s.keyConstructionFailed or - not(s.scopeEnabled and s.coalesce and (s.requestLayerActive or s.sharedLayerActive)), - val budget = if (not(s.scopeEnabled)) NO_FALLBACK_TIMEOUT - else if (s.configuredSourceBudget == OMITTED_FALLBACK_TIMEOUT) LIBRARY_FALLBACK_TIMEOUT_MS - else s.configuredSourceBudget - s' = { - independentExecutions: s.independentExecutions + 1, - independentSources: s.independentSources.append({ - startedEnabled: s.scopeEnabled, - configuredBudget: s.configuredSourceBudget, - budget: budget, - startedAt: s.now, - acceptedAt: 0, - outcome: NoOutcome - }), - ...s - }, - } - - action settleIndependentSource = { - nondet source = s.independentSources.indices() - .filter(i => s.independentSources.nth(i).outcome == NoOutcome).oneOf() - val pending = s.independentSources.nth(source) - val expired = not(sourceAcceptsAt(pending.startedAt, s.now, - if (pending.budget == NO_FALLBACK_TIMEOUT) -1 else pending.budget)) - s' = { - independentSources: s.independentSources.replaceAt(source, { - outcome: if (expired) SourceTimeout else SourceSuccess, - acceptedAt: s.now, - ...pending - }), - ...s - } - } - - action finishCacheHit = all { - s.phase == CacheLookup, - s' = { outcome: CacheHit, phase: FlightDone, ...s }, - } - - // Source acceptance, abandonment and publication - // Cache-read time is outside the fallback budget. The source deadline begins - // exactly when the leader invokes the fallback. - action cacheMissStartsFallback = all { - s.phase == CacheLookup, - s' = { - sourceExecutions: s.sourceExecutions + 1, - activeSourceRunning: true, - fallbackDeadlineStarted: true, - fallbackStartedAt: s.now, - fallbackDeadline: s.now + FALLBACK_TIMEOUT, - phase: FallbackRunning, - ...s - }, - } - - action sourceSucceedsBeforeDeadline = all { - s.phase == FallbackRunning, - deadlinePendingAt(s.now, s.fallbackDeadline), - s.activeSourceRunning, - s' = { - activeSourceRunning: false, - acceptedSourceResult: true, - outcome: SourceSuccess, - phase: Publication, - ...s - }, - } - - action sourceRejects = all { - s.phase == FallbackRunning, - s.activeSourceRunning, - deadlinePendingAt(s.now, s.fallbackDeadline), - s' = { - activeSourceRunning: false, - acceptedSourceResult: false, - outcome: SourceFailure, - phase: FlightDone, - ...s - }, - } - - // A late success or rejection can reach DialCache before the timer callback. - // Settlement still checks the monotonic deadline and returns a timeout. - action sourceSettlesAfterDeadline = all { - s.phase == FallbackRunning, - s.activeSourceRunning, - not(deadlinePendingAt(s.now, s.fallbackDeadline)), - s' = { - activeSourceRunning: false, - acceptedSourceResult: false, - outcome: SourceTimeout, - phase: FlightDone, - flightScope: NoFlight, - ...s - }, - } - - // Timeout removes DialCache ownership immediately. The underlying operation is - // not cancelled; it becomes abandoned external work that may settle later. - action fallbackTimesOut = all { - s.phase == FallbackRunning, - s.fallbackDeadlineStarted, - not(deadlinePendingAt(s.now, s.fallbackDeadline)), - s.activeSourceRunning, - s' = { - activeSourceRunning: false, - abandonedSources: s.abandonedSources + 1, - acceptedSourceResult: false, - outcome: SourceTimeout, - phase: FlightDone, - flightScope: NoFlight, - ...s - }, - } - - // This can happen while another flight is already active. It cannot affect the - // current flight's accepted result or publication state. - action abandonedSourceSettles = all { - s.abandonedSources > 0, - s' = { abandonedSources: s.abandonedSources - 1, ...s }, - } - - // Serialization/write work begins only after a result was accepted before the - // fallback deadline, and is intentionally outside that deadline. - action dispatchPublication = all { - s.phase == Publication, - s.acceptedSourceResult, - s' = { publicationDispatched: true, phase: FlightDone, ...s }, - } - - action resetFlight = all { - s.phase == FlightDone, - s' = { - phase: FlightIdle, - flightScope: NoFlight, - outcome: NoOutcome, - followers: 0, - sourceExecutions: 0, - fallbackDeadlineStarted: false, - activeSourceRunning: false, - acceptedSourceResult: false, - publicationDispatched: false, - ...s - }, - } - - // Exploration order - action step = any { - advanceTime, - toggleEnabled, - toggleRequestLayer, - toggleSharedLayer, - toggleCoalesce, - startLeader, - joinFollower, - startIndependentCaller, - finishCacheHit, - cacheMissStartsFallback, - sourceSucceedsBeforeDeadline, - sourceRejects, - sourceSettlesAfterDeadline, - fallbackTimesOut, - abandonedSourceSettles, - dispatchPublication, - resetFlight, - chooseSourceBudget, - toggleKeyFailure, - settleIndependentSource, - } - - // Invariants - val flightsRequireEligibleCaching = - s.flightScope == NoFlight or - (s.scopeEnabled and s.coalesce and (s.requestLayerActive or s.sharedLayerActive)) - - val oneSourcePerRegisteredFlight = - s.sourceExecutions <= 1 - - val fallbackDeadlineStartsWithFallback = - not(s.fallbackDeadlineStarted) or - ((s.phase == FallbackRunning or s.phase == Publication or s.phase == FlightDone) and - s.fallbackStartedAt <= s.now and - s.fallbackDeadline == s.fallbackStartedAt + FALLBACK_TIMEOUT) - - val timedOutSourceCannotPublish = - s.outcome != SourceTimeout or - (not(s.acceptedSourceResult) and not(s.publicationDispatched)) - - val publicationRequiresAcceptedSource = - not(s.publicationDispatched) or s.acceptedSourceResult - - val noFlightWhenCoalescingIneligible = - (s.scopeEnabled and s.coalesce and (s.requestLayerActive or s.sharedLayerActive)) or - s.flightScope == NoFlight - - // Abandoned work is explicitly not represented as an active registered source. - val abandonedSourceIsNotAFlight = - s.abandonedSources == 0 or not(s.activeSourceRunning) or s.phase == FallbackRunning - - val requestLayerOwnsOuterFlight = - s.flightScope == NoFlight or not(s.requestLayerActive) or s.flightScope == RequestFlight - - val cacheHitNeverStartsSourceDeadline = - s.outcome != CacheHit or (s.sourceExecutions == 0 and not(s.fallbackDeadlineStarted)) - - val outsideSourceHasNoDeadline = s.independentSources.indices().forall(i => { - val source = s.independentSources.nth(i) - source.startedEnabled or (source.budget == 0 and source.outcome != SourceTimeout) - }) - - val omittedSourceBudgetUsesSixtySeconds = s.independentSources.indices().forall(i => { - val source = s.independentSources.nth(i) - not(source.startedEnabled) or source.configuredBudget != OMITTED_FALLBACK_TIMEOUT or source.budget == 60000 - }) - - val disabledSourceDeadlineNeverTimesOut = s.independentSources.indices().forall(i => { - val source = s.independentSources.nth(i) - source.budget != NO_FALLBACK_TIMEOUT or source.outcome != SourceTimeout - }) - - val independentAcceptanceChecksCapturedDeadline = s.independentSources.indices().forall(i => { - val source = s.independentSources.nth(i) - and { - source.outcome != SourceSuccess or source.budget == 0 or - source.acceptedAt - source.startedAt < source.budget, - source.outcome != SourceTimeout or - (source.budget > 0 and source.acceptedAt - source.startedAt >= source.budget), - } - }) - - // Deterministic regressions - run lateSettlementBeforeTimerTest = init - .then(toggleEnabled).then(toggleSharedLayer).then(startLeader) - .then(cacheMissStartsFallback) - .then(advanceTime).then(advanceTime).then(advanceTime) - .then(sourceSettlesAfterDeadline) - .expect(s.outcome == SourceTimeout and s.flightScope == NoFlight) - .expect(timedOutSourceCannotPublish) - - run abandonedSourceMayOverlapNewFlightTest = init - .then(toggleEnabled).then(toggleSharedLayer).then(startLeader) - .then(cacheMissStartsFallback) - .then(advanceTime).then(advanceTime).then(advanceTime) - .then(fallbackTimesOut).then(resetFlight).then(startLeader) - .then(cacheMissStartsFallback) - .expect(s.abandonedSources == 1 and s.activeSourceRunning) - .then(abandonedSourceSettles) - .expect(s.activeSourceRunning and s.sourceExecutions == 1) - - run acceptedPublicationOutlivesDeadlineTest = init - .then(toggleEnabled).then(toggleSharedLayer).then(startLeader) - .then(cacheMissStartsFallback).then(sourceSucceedsBeforeDeadline) - .then(advanceTime).then(advanceTime).then(advanceTime) - .then(dispatchPublication) - .expect(s.publicationDispatched and s.outcome == SourceSuccess) - - // C23: time spent reading the cache must not consume the source budget. - run delayedLookupKeepsFullSourceBudgetTest = init - .then(toggleEnabled).then(toggleSharedLayer).then(startLeader) - .then(advanceTime).then(advanceTime) - .then(cacheMissStartsFallback) - .expect(s.fallbackStartedAt == 2 and s.fallbackDeadline == 5) - .expect(fallbackDeadlineStartsWithFallback) - .then(advanceTime).then(sourceSucceedsBeforeDeadline) - .expect(s.outcome == SourceSuccess) - - run deadlineEpochMutationIsDetectedTest = init - .then(toggleEnabled).then(toggleSharedLayer).then(startLeader) - .then(advanceTime).then(advanceTime).then(cacheMissStartsFallback) - .then(all { s' = { fallbackDeadline: FALLBACK_TIMEOUT, ...s } }) - .expect(not(fallbackDeadlineStartsWithFallback)) - - run lateFollowerKeepsLeaderSourceDeadlineTest = init - .then(toggleEnabled).then(toggleSharedLayer).then(startLeader) - .then(cacheMissStartsFallback).then(advanceTime).then(advanceTime) - .then(joinFollower) - .expect(s.followers == 1 and s.sourceExecutions == 1 - and s.fallbackStartedAt == 0 and s.fallbackDeadline == 3) - .then(advanceTime).then(fallbackTimesOut) - .expect(s.outcome == SourceTimeout and s.flightScope == NoFlight) - - run inactiveServingLayersKeepConcurrentCallsIndependentTest = init - .then(toggleEnabled).then(startIndependentCaller).then(startIndependentCaller) - .expect(s.independentExecutions == 2 and s.flightScope == NoFlight) - - run coalescingDisabledKeepsConcurrentCallsIndependentTest = init - .then(toggleEnabled).then(toggleSharedLayer).then(toggleCoalesce) - .then(startIndependentCaller).then(startIndependentCaller) - .expect(s.independentExecutions == 2 and s.flightScope == NoFlight) - - run sharedCacheHitDoesNotStartSourceTest = init - .then(toggleEnabled).then(toggleSharedLayer).then(startLeader).then(joinFollower) - .then(finishCacheHit) - .expect(s.outcome == CacheHit and s.followers == 1 - and s.sourceExecutions == 0 and not(s.fallbackDeadlineStarted)) - - run outsideCallsIgnoreConfiguredSourceDeadlineTest = init - .then(toggleSharedLayer).then(startIndependentCaller).then(startIndependentCaller) - .then(advanceTime).then(advanceTime).then(advanceTime).then(advanceTime) - .then(settleIndependentSource).then(settleIndependentSource) - .expect(s.independentExecutions == 2 and s.flightScope == NoFlight) - .expect(s.independentSources.indices().forall(i => - s.independentSources.nth(i).outcome == SourceSuccess and s.independentSources.nth(i).budget == 0)) - - run librarySourceDeadlineIsSixtySecondsTest = init.then(toggleEnabled) - .then(s' = { configuredSourceBudget: OMITTED_FALLBACK_TIMEOUT, ...s }) - .then(startIndependentCaller) - .expect(s.independentSources.nth(0).budget == 60000) - .then(s' = { now: 60000, ...s }).then(settleIndependentSource) - .expect(s.independentSources.nth(0).outcome == SourceTimeout) - - run explicitlyUnboundedEnabledSourceAcceptsLateValueTest = init.then(toggleEnabled) - .then(s' = { configuredSourceBudget: NO_FALLBACK_TIMEOUT, ...s }) - .then(startIndependentCaller) - .then(s' = { now: 60001, ...s }).then(settleIndependentSource) - .expect(s.independentSources.nth(0).outcome == SourceSuccess - and s.independentSources.nth(0).budget == 0) - - run keyFailureKeepsEnabledSourceDeadlineTest = init - .then(toggleEnabled).then(toggleSharedLayer).then(toggleKeyFailure) - .then(startIndependentCaller) - .expect(s.flightScope == NoFlight and s.independentSources.nth(0).budget == 3) - .then(advanceTime).then(advanceTime).then(advanceTime).then(settleIndependentSource) - .expect(s.independentSources.nth(0).outcome == SourceTimeout) -} diff --git a/formal/dialcache-independent-conformance.qnt b/formal/dialcache-independent-conformance.qnt index da560c1c..8a92948f 100644 --- a/formal/dialcache-independent-conformance.qnt +++ b/formal/dialcache-independent-conformance.qnt @@ -1,6 +1,15 @@ module dialcache_independent_conformance { - import cache_rules.* from "./cache-rules" import conformance_observations.* from "./conformance-observations" + import encodings.* from "./kernel/encodings" + import calls.* from "./kernel/calls" + import layer_policy.* from "./kernel/layer-policy" + import serving as Serving from "./kernel/serving" + import remote_io as RemoteIO from "./kernel/remote-io" + import recovery as Recovery from "./kernel/recovery" + import deadlines as Deadlines from "./kernel/deadlines" + import remote_frames as Remote from "./kernel/remote-frames" + import clock as Clock from "./kernel/clock" + import policy_gate as Gate from "./kernel/policy-gate" // Model boundary ----------------------------------------------------------- // Six same-key callers with coalescing disabled exercise selected aspects of // C24/C56: each owns its read and source deadline. Read failure denies only @@ -8,19 +17,19 @@ module dialcache_independent_conformance { // and original error (selected aspects of C36/C40-C46/C58). // See BEHAVIOR.md: "Generated feature profiles" and its independent input table. // No local/request storage, shadow work, or publication failures participate. - // `now` is elapsed time; `wall` is the application clock. Pending external - // effects remain in their historical lists after timeout, so late settlement - // can be observed without regaining ownership of a completed caller. + // Every rule is a kernel transition (formal/kernel): the held remote + // traversal (remote_io) with its recovery snapshots (recovery) under the + // budgeted held lifecycle (deadlines), over the layered shape. This module + // owns the bounded state, the fixture decoding (the read budget and recovery + // maximum a policy code resolves to, the frame a seed choice names, the + // loader and value a resolve code names), the input choices and the guards. + // `now` is elapsed time; the wall clock is `now` plus a fixed skew. An + // expired read stays held until its late reply drains and a loader stays + // pending until its late result drains, so late settlement can be observed + // without regaining ownership of a completed caller. // Trace encodings and fixture bounds --------------------------------------- - // Keep integer state/input fields stable; shared results come from the import. - pure val READ_PENDING = 1 - pure val SOURCE_RUNNING = 2 - pure val FRESH_DECODE = 3 - pure val RECOVERY_DECODE = 4 - pure val CALL_DONE = 5 - pure val NO_SOURCE = -1 - pure val NO_CANDIDATE = 0 + // Keep integer input fields stable; shared results come from the import. pure val FRESH_AGE_MS = 1000 pure val SOURCE_BUDGET_MS = 10 pure val SHORT_READ_BUDGET_MS = 5 @@ -28,289 +37,150 @@ module dialcache_independent_conformance { pure val SHORT_RETENTION_MS = 2000 pure val LONG_RETENTION_MS = 5000 pure val FIXTURE_TTL_MS = 60000 + pure val WALL_SKEW_MS = 100000 pure val MAX_CALLS = 6 pure val SOURCE_RESULT_COUNT = 2 + // One key on one instance, no request scope, no local capacity, one + // operation per entity; the drivers never probe a source's scope. + pure val LAYOUT: Serving::Layout = { + keysPerInstance: 1, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true + } + pure val CALL: Call = { instance: 0, key: 0, context: 0, enabled: true, keyFailed: false } + // Every reply enables the remote layer alone and never coalesces. + pure val REMOTE_ONLY: Resolution = { layers: { request: false, local: false, remote: true }, coalesce: false } - // State: effect owners, captured admission values, and observed history. - type Call = { - source: int, phase: int, maxAge: int, - candidate: int, created: int, acquiredAt: int, - canRecover: bool, canWrite: bool, fence: int, error: int - } - type Read = { caller: int, pending: bool, active: bool } - type Source = { - caller: int, pending: bool, active: bool, - startedAt: int, settledAt: int, outcome: int - } - type Load = { caller: int, pending: bool, recovery: bool, value: int } - type Timer = { read: bool, index: int, at: int } + // State: the layered shape with its held remote effects, recovery + // snapshots and deadlines, plus the policy reply in force (`ttls`, whose + // retention is the recovery maximum a later caller is admitted with) and + // the read budget in force. type State = { - o: Observation, - io: { budgets: List[int], aborted: List[int], sourceErrors: List[int] }, - now: int, wall: int, - frame: int, created: int, expires: int, watermark: int, readBudget: int, maxAge: int, - calls: List[Call], reads: List[Read], sources: List[Source], loads: List[Load], timers: List[Timer] + o: Observation, io: RemoteIO::IO, now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], loaders: List[int], retained: List[Recovery::Snapshot], + sourceBudget: int, deadlines: List[Deadlines::Due], drained: List[bool], + ttls: Ttls, readBudget: int } var s: State var input: { name: str, choice: int } - // Initial fixture ---------------------------------------------------------- + // Input decoding (reads no state) ------------------------------------------ + // The TTLs a reply carries under the policy in force: no local TTL, 1 s + // freshness and the recovery maximum as retention. Wire choices 0/1 use the + // long retention; parity chooses the read budget. Seeds store fresh values + // and values just inside each admitted recovery age bound. A resolve code + // 1..12 pairs each loader ordinal with result VALUE_ONE/VALUE_TWO. + pure def ttlsFor(retentionMs: int): Ttls = { localMs: 0, freshMs: FRESH_AGE_MS, retentionMs: retentionMs } + pure def readBudgetOf(choice: int): int = if (choice % 2 == 0) SHORT_READ_BUDGET_MS else LONG_READ_BUDGET_MS + pure def retentionOf(choice: int): int = if (choice < 2) LONG_RETENTION_MS else SHORT_RETENTION_MS + pure def seedValue(choice: int): int = if (choice == 2 or choice == 4) VALUE_TWO else VALUE_ONE + pure def seedAge(choice: int): int = + if (choice == 0 or choice == 4) 0 else if (choice == 3) 4999 else if (choice == 5) 1999 else 1000 + pure def resolvedSource(code: int): int = (code - 1) / SOURCE_RESULT_COUNT + pure def resolvedValue(code: int): int = (code - 1) % SOURCE_RESULT_COUNT + 1 + + // Initial fixture: value 1 stored at age 1,000 ms (stale, never fresh) with + // a 60 s physical TTL above the zero watermark. action init = all { input' = { name: "init", choice: -1 }, s' = { - o: empty, - io: { budgets: List(), aborted: List(), sourceErrors: List() }, - now: 0, wall: 100000, - frame: VALUE_ONE, created: 99000, expires: FIXTURE_TTL_MS, watermark: 0, - readBudget: SHORT_READ_BUDGET_MS, maxAge: LONG_RETENTION_MS, - calls: List(), reads: List(), sources: List(), loads: List(), timers: List() + o: empty, io: RemoteIO::NO_IO, now: 0, skew: WALL_SKEW_MS, remoteAvailable: true, tracked: true, capacity: 0, + readFailed: false, dumpFailed: false, writeFailed: false, + closed: List(), memo: List(), requestFlights: List(), processFlights: List(NO_OWNER), + localValues: List(NO_VALUE), localExpires: List(0), lru: List(List()), + remoteValues: List(VALUE_ONE), created: List(WALL_SKEW_MS - FRESH_AGE_MS), expires: List(FIXTURE_TTL_MS), watermark: List(0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + reads: List(), loads: List(), loaders: List(), retained: List(), + sourceBudget: SOURCE_BUDGET_MS, deadlines: List(), drained: List(), + ttls: ttlsFor(LONG_RETENTION_MS), readBudget: SHORT_READ_BUDGET_MS } } - // Caller completion and owned effects ------------------------------------- - pure def finished(x: State, caller: int, value: int): State = { - calls: x.calls.replaceAt(caller, { phase: CALL_DONE, ...x.calls.nth(caller) }), - io: { - sourceErrors: x.io.sourceErrors.replaceAt(caller, - if (value == SOURCE_ERROR) x.calls.nth(caller).source + 1 else 0), - ...x.io - }, - o: { calls: x.o.calls.replaceAt(caller, value), ...x.o }, - ...x - } - pure def startSource(x: State, caller: int): State = { - calls: x.calls.replaceAt(caller, { phase: SOURCE_RUNNING, source: x.sources.length(), ...x.calls.nth(caller) }), - sources: x.sources.append({ caller: caller, active: true, pending: true, - startedAt: x.now, settledAt: -1, outcome: CALL_PENDING }), - timers: x.timers.append({ read: false, index: x.sources.length(), at: x.now + SOURCE_BUDGET_MS }), - o: { loaders: x.o.loaders + 1, ...x.o }, - ...x - } - pure def startLoad(x: State, caller: int, recovery: bool, value: int): State = { - calls: x.calls.replaceAt(caller, { phase: if (recovery) RECOVERY_DECODE else FRESH_DECODE, ...x.calls.nth(caller) }), - loads: x.loads.append({ caller: caller, pending: true, recovery: recovery, value: value }), - o: { loads: x.o.loads + 1, ...x.o }, - ...x - } - pure def validCandidate(x: State, caller: int): bool = { - val call = x.calls.nth(caller) - call.candidate > NO_CANDIDATE and recoveryAgeAllowed(call.created, x.wall, call.maxAge) - } - pure def rejected(x: State, caller: int, error: int): State = { - val call = x.calls.nth(caller) - val classified = { - calls: x.calls.replaceAt(caller, { error: error, ...call }), - o: { classifications: x.o.classifications + (if (call.canRecover) 1 else 0), ...x.o }, - ...x - } - if (not(call.canRecover)) finished(classified, caller, error) - else if (validCandidate(x, caller)) startLoad(classified, caller, true, call.candidate) - else finished({ - o: { recovery: classified.o.recovery.append("miss"), ...classified.o }, - ...classified - }, caller, error) - } - - // Admission captures policy separately for each same-key caller. ----------- - pure def begin(x: State): State = { - val caller = x.calls.length() - { - calls: x.calls.append({ - source: NO_SOURCE, phase: READ_PENDING, maxAge: x.maxAge, - candidate: NO_CANDIDATE, created: 0, acquiredAt: 0, - canRecover: false, canWrite: false, fence: 0, error: SOURCE_ERROR - }), - reads: x.reads.append({ caller: caller, active: true, pending: true }), - timers: x.timers.append({ read: true, index: x.reads.length(), at: x.now + x.readBudget }), - io: { budgets: x.io.budgets.append(x.readBudget), sourceErrors: x.io.sourceErrors.append(0), ...x.io }, - o: { - calls: x.o.calls.append(CALL_PENDING), - reads: x.o.reads + 1, policyCalls: x.o.policyCalls + 1, - ...x.o - }, - ...x - } - } + // Admission: the read is dispatched under the budget in force and its + // flight carries the recovery maximum in force, both captured here. ------- action beginCall = all { - s.calls.length() < MAX_CALLS, + s.o.calls.length() < MAX_CALLS, input' = { name: "beginCall", choice: -1 }, - s' = begin(s) - } - pure def expireRead(x: State, index: int): State = { - val read = x.reads.nth(index) - startSource({ - reads: x.reads.replaceAt(index, { active: false, ...read }), - io: { aborted: x.io.aborted.append(index), ...x.io }, - ...x - }, read.caller) - } - pure def expireSource(x: State, index: int): State = { - val source = x.sources.nth(index) - rejected({ - sources: x.sources.replaceAt(index, { active: false, settledAt: x.now, outcome: DEADLINE_ERROR, ...source }), - ...x - }, source.caller, DEADLINE_ERROR) + s' = Deadlines::begin(s, LAYOUT, CALL, REMOTE_ONLY, s.ttls, s.readBudget) } - // External settlement: abandoned effects cannot reclaim caller ownership. -- - pure def readReply(x: State, index: int, failed: bool): State = { - val read = x.reads.nth(index) - val settled = { - reads: x.reads.replaceAt(index, { pending: false, active: false, ...read }), - ...x - } - val call = x.calls.nth(read.caller) - val readable = x.frame > 0 and x.now < x.expires and fenceAllows(x.created, x.watermark) - val fresh = readable and freshAgeAllowed(x.created, x.wall, FRESH_AGE_MS) - val stale = readable and x.created <= x.wall and - retainedAgeAllowed(x.created, x.wall, FRESH_AGE_MS, call.maxAge) - val observed = { - calls: settled.calls.replaceAt(read.caller, { - canWrite: not(failed), canRecover: not(failed) and not(fresh), - candidate: if (stale and not(failed)) x.frame else NO_CANDIDATE, - created: x.created, acquiredAt: x.wall, - fence: if (readable) 0 else x.watermark, - ...call - }), - ...settled - } - if (not(read.active)) settled - else if (failed or not(fresh)) startSource(observed, read.caller) - else startLoad(observed, read.caller, false, x.frame) - } + // External settlement by explicit effect index: the drivers release a held + // read or decode by its index and settle a loader by its ordinal. --------- + val heldReads = s.reads.indices().map(i => s.reads.nth(i).read) + val heldLoads = s.loads.indices().map(i => s.loads.nth(i).load) action readAt(index: int): bool = all { - input' = { name: "releaseRead", choice: index }, s' = readReply(s, index, false) + RemoteIO::holdsRead(s, index), + input' = { name: "releaseRead", choice: index }, + s' = Deadlines::settleRead(s, LAYOUT, index, false, Recovery::ALLOW) } action releaseRead = { - nondet choice = s.reads.indices().filter(i => s.reads.nth(i).pending).oneOf() + nondet choice = heldReads.oneOf() readAt(choice) } action failReadAt(index: int): bool = all { - input' = { name: "failRead", choice: index }, s' = readReply(s, index, true) + RemoteIO::holdsRead(s, index), + input' = { name: "failRead", choice: index }, + s' = Deadlines::settleRead(s, LAYOUT, index, true, Recovery::ALLOW) } action failRead = { - nondet choice = s.reads.indices().filter(i => s.reads.nth(i).pending).oneOf() + nondet choice = heldReads.oneOf() failReadAt(choice) } - pure def sourceReply(x: State, index: int, value: int): State = { - val source = x.sources.nth(index) - val call = x.calls.nth(source.caller) - val settled = { - sources: x.sources.replaceAt(index, { pending: false, active: false, - settledAt: if (source.active) x.now else source.settledAt, - outcome: if (source.active) value else source.outcome, ...source }), - ...x - } - val mayWrite = call.canWrite and fenceAllows(x.wall, call.fence) - if (not(source.active)) settled - else if (value == SOURCE_ERROR) rejected(settled, source.caller, SOURCE_ERROR) - else finished({ - frame: if (mayWrite) value else x.frame, - created: if (mayWrite) x.wall else x.created, - expires: if (mayWrite) x.now + call.maxAge else x.expires, - o: { - writes: x.o.writes + (if (mayWrite) 1 else 0), - dumps: x.o.dumps + (if (mayWrite) 1 else 0), - writeTtls: if (mayWrite) x.o.writeTtls.append(call.maxAge) else x.o.writeTtls, - ...x.o - }, - ...settled - }, source.caller, value) - } action resolveWith(code: int): bool = all { + resolvedSource(code) < s.loaders.length(), + Deadlines::pending(s, resolvedSource(code)), input' = { name: "resolveLoader", choice: code }, - s' = sourceReply(s, (code - 1) / SOURCE_RESULT_COUNT, (code - 1) % SOURCE_RESULT_COUNT + 1) + s' = Deadlines::settleLoader(s, LAYOUT, resolvedSource(code), resolvedValue(code), false) } action resolveLoader = { - // Wire choice 1..12 pairs each source index with result VALUE_ONE/VALUE_TWO. nondet choice = 1.to(MAX_CALLS * SOURCE_RESULT_COUNT).filter(code => - (code - 1) / SOURCE_RESULT_COUNT < s.sources.length() and - s.sources.nth((code - 1) / SOURCE_RESULT_COUNT).pending).oneOf() + resolvedSource(code) < s.loaders.length() and Deadlines::pending(s, resolvedSource(code))).oneOf() resolveWith(choice) } action rejectAt(index: int): bool = all { - input' = { name: "rejectLoader", choice: index }, s' = sourceReply(s, index, SOURCE_ERROR) + index < s.loaders.length(), + Deadlines::pending(s, index), + input' = { name: "rejectLoader", choice: index }, + s' = Deadlines::settleLoader(s, LAYOUT, index, SOURCE_ERROR, false) } action rejectLoader = { - nondet choice = s.sources.indices().filter(i => s.sources.nth(i).pending).oneOf() + nondet choice = s.loaders.indices().filter(i => Deadlines::pending(s, i)).oneOf() rejectAt(choice) } - pure def loadReply(x: State, index: int, failed: bool): State = { - val load = x.loads.nth(index) - val call = x.calls.nth(load.caller) - val settled = { loads: x.loads.replaceAt(index, { pending: false, ...load }), ...x } - if (not(load.recovery)) { - if (failed) startSource({ - calls: x.calls.replaceAt(load.caller, { canRecover: false, ...call }), - ...settled - }, load.caller) - else finished(settled, load.caller, load.value) - } else { - val valid = validCandidate(x, load.caller) - finished({ - o: { - recovery: x.o.recovery.append( - if (failed) "deserialization_error" else if (valid) "served" else "miss"), - ...x.o - }, - ...settled - }, load.caller, if (failed or not(valid)) call.error else load.value) - } - } action loadAt(index: int): bool = all { - input' = { name: "releaseLoad", choice: index }, s' = loadReply(s, index, false) + RemoteIO::holdsLoad(s, index), + input' = { name: "releaseLoad", choice: index }, + s' = Deadlines::settleLoad(s, LAYOUT, index, false) } action releaseLoad = { - nondet choice = s.loads.indices().filter(i => s.loads.nth(i).pending).oneOf() + nondet choice = heldLoads.oneOf() loadAt(choice) } action failLoadAt(index: int): bool = all { - input' = { name: "failLoad", choice: index }, s' = loadReply(s, index, true) + RemoteIO::holdsLoad(s, index), + input' = { name: "failLoad", choice: index }, + s' = Deadlines::settleLoad(s, LAYOUT, index, true) } action failLoad = { - nondet choice = s.loads.indices().filter(i => s.loads.nth(i).pending).oneOf() + nondet choice = heldLoads.oneOf() failLoadAt(choice) } // Environmental clocks, storage, and policy -------------------------------- - pure def tick(x: State, ms: int): State = { - val target = x.now + ms - // At most one read deadline and one source deadline per admitted call. - // Visit only due deadline instants, including sources started by read expiry. - 0.to(x.calls.length() * 2).fold(x, (elapsed, _) => { - val dueAt = elapsed.timers.foldl(target, (earliest, timer) => { - val timerActive = if (timer.read) elapsed.reads.nth(timer.index).active - else elapsed.sources.nth(timer.index).active - if (timerActive and timer.at > elapsed.now and timer.at < earliest) timer.at else earliest - }) - val atDeadline = { now: dueAt, wall: elapsed.wall + dueAt - elapsed.now, ...elapsed } - atDeadline.timers.foldl(atDeadline, (delivered, timer) => - if (timer.at != atDeadline.now) delivered - else if (timer.read and delivered.reads.nth(timer.index).active) - expireRead(delivered, timer.index) - else if (not(timer.read) and delivered.sources.nth(timer.index).active) - expireSource(delivered, timer.index) - else delivered) - }) - } action advanceBy(ms: int): bool = all { - input' = { name: "advance", choice: ms }, s' = tick(s, ms) + input' = { name: "advance", choice: ms }, s' = Deadlines::advance(s, LAYOUT, ms) } action advance = { nondet choice = Set(1, 5, 10, 1000).oneOf() advanceBy(choice) } - // Fresh values and values just inside each admitted recovery age bound. action seedWith(choice: int): bool = all { (0.to(5)).contains(choice), input' = { name: "seed", choice: choice }, - s' = { - frame: if (choice == 2 or choice == 4) VALUE_TWO else VALUE_ONE, - created: s.wall - (if (choice == 0 or choice == 4) 0 - else if (choice == 3) 4999 else if (choice == 5) 1999 else 1000), - expires: s.now + FIXTURE_TTL_MS, - ...s - } + s' = Remote::seedAged(s, 0, seedValue(choice), seedAge(choice), FIXTURE_TTL_MS) } action seed = { nondet choice = 0.to(5).oneOf() @@ -318,88 +188,106 @@ module dialcache_independent_conformance { } action invalidate = all { input' = { name: "invalidate", choice: -1 }, - s' = { - watermark: s.wall, - o: { invalidations: s.o.invalidations + 1, maintenance: s.o.maintenance.append("ok"), ...s.o }, - ...s - } + s' = Serving::invalidate(s, 0, 0) } - - // Wire choices 0/1 use long retention; parity chooses the read budget. action policyWith(choice: int): bool = all { (0.to(3)).contains(choice), input' = { name: "policy", choice: choice }, - s' = { - readBudget: if (choice % 2 == 0) SHORT_READ_BUDGET_MS else LONG_READ_BUDGET_MS, - maxAge: if (choice < 2) LONG_RETENTION_MS else SHORT_RETENTION_MS, - ...s - } + s' = { readBudget: readBudgetOf(choice), ttls: ttlsFor(retentionOf(choice)), ...s } } action policy = { nondet choice = 0.to(3).oneOf() policyWith(choice) } - // Exploration schedule: preserve grouping and order for seeded sampling. action step = any { beginCall, releaseRead, any { resolveLoader, rejectLoader, releaseLoad }, any { policy, seed }, any { advance, invalidate, failRead, failLoad } } - // Invariants: independent checks over ownership and observed history. + // Invariants: independent checks over ownership and observed history. ----- + // Over the public channels, verbatim from the former text. val oneReadPerCall = s.o.reads == s.o.calls.length() and s.io.budgets.length() == s.o.reads and s.io.sourceErrors.length() == s.o.calls.length() - val effectsMatchOwners = s.o.reads == s.reads.length() and - s.o.loads == s.loads.length() and s.o.loaders == s.sources.length() - val completedCallsHaveNoActiveWork = s.calls.indices().forall(i => s.calls.nth(i).phase != CALL_DONE or - (s.reads.indices().forall(j => s.reads.nth(j).caller != i or not(s.reads.nth(j).active)) and - s.sources.indices().forall(j => s.sources.nth(j).caller != i or not(s.sources.nth(j).active)))) - val retainedSnapshotsWereEligible = s.calls.indices().forall(i => { - val c = s.calls.nth(i) - c.candidate == NO_CANDIDATE or - (c.acquiredAt - c.created >= FRESH_AGE_MS and c.acquiredAt - c.created < c.maxAge) - }) val abortsAreUnique = s.io.aborted.indices().forall(i => s.io.aborted.indices().forall(j => i == j or s.io.aborted.nth(i) != s.io.aborted.nth(j))) val writesKeepCapturedRetention = s.o.writeTtls.indices().forall(i => s.o.writeTtls.nth(i) == SHORT_RETENTION_MS or s.o.writeTtls.nth(i) == LONG_RETENTION_MS) - - // Source timers retain the owner's start, even when another source expires. - val eachSourceKeepsItsFullBudget = s.sources.indices().forall(i => { - val source = s.sources.nth(i) - s.timers.select(timer => not(timer.read) and timer.index == i).length() == 1 and - s.timers.select(timer => not(timer.read) and timer.index == i).nth(0).at == source.startedAt + 10 + // Over the library records: the drivers' loaders are the loader ordinals, + // and every held effect is one the drivers dispatched. + val effectsMatchOwners = s.o.loaders == s.loaders.length() and + s.reads.indices().forall(i => s.reads.nth(i).read < s.o.reads) and + s.loads.indices().forall(i => s.loads.nth(i).load < s.o.loads) + // A completed caller owns a flight whose result is recorded and on which no + // read or decode is still held (a read whose deadline was delivered owns no + // flight and is accepted). + val completedCallsHaveNoActiveWork = s.o.calls.indices().forall(c => s.o.calls.nth(c) == CALL_PENDING or { + val flight = s.owners.nth(c) + flight >= 0 and s.sources.nth(flight).result != CALL_PENDING and + s.reads.indices().forall(j => s.reads.nth(j).flight != flight) and + s.loads.indices().forall(j => s.loads.nth(j).flight != flight) }) - val sourceSettlementsRespectOwnDeadline = s.sources.indices().forall(i => { - val source = s.sources.nth(i) - source.outcome == CALL_PENDING or - (if (source.outcome == DEADLINE_ERROR) source.settledAt >= source.startedAt + 10 - else source.settledAt < source.startedAt + 10) + // A candidate is retained only from a frame stale by at least the freshness + // (its age only grows afterwards) and, at the read settlement that captured + // it, inside the maximum admitted for its caller: read index i is caller i + // in this profile (every caller dispatches exactly one read at admission), + // so the snapshot judged at a releaseRead step is that of the read's + // caller's flight. + val retainedSnapshotsWereEligible = s.retained.indices().forall(i => { + val snapshot = s.retained.nth(i) + val age = Clock::wallOf(s) - snapshot.created + snapshot.candidate == NO_VALUE or (age >= FRESH_AGE_MS and + (input.name != "releaseRead" or snapshot.flight != s.owners.nth(input.choice) or age < snapshot.maximum)) }) + // Every loader ordinal has exactly one source deadline while its work is + // undelivered and its flight's result is pending, none otherwise: a + // deadline belongs to its loader until that loader settles or expires. The + // instant of each deadline (its loader's own start plus the configured + // budget) is checked by the connection monitor's origins clause. + val eachSourceKeepsItsFullBudget = s.loaders.indices().forall(k => + Deadlines::deadlinesOf(s, Deadlines::SOURCE, k).length() == + (if (Deadlines::pending(s, k) and s.sources.nth(s.loaders.nth(k)).result == CALL_PENDING) 1 else 0)) + // The former sourceSettlementsRespectOwnDeadline read a settlement instant + // the held shape does not carry. Its statement is carried in writing: a + // loader's outcome is DEADLINE_ERROR exactly when the fold delivered its + // deadline at an instant at or after it (deadlines::deliver) or arrival + // substituted it at a reached deadline (deadlines::arrival); any other + // outcome is applied only while the deadline is pending. The connection + // monitor's independentSourceOriginsMatchContract checks the deadline + // instant while pending and the acceptance instant at each resolve; the + // regressions staggeredSourcesExpireAtTheirOwnDeadlineTest and + // staggeredSourceStartsKeepIndependentBudgetsTest and the kernel fixture + // run readExpiryChainsIntoTheSameAdvanceTest pin the boundary. // Deterministic model regressions ------------------------------------------ + // Three former regressions patched private state (the stored frame, its + // stamp, the policy maximum); each patch is now the input that produces it: + // seedWith(2) stores value 2 at age 1000 (the former frame swap kept the + // 1000 ms stamp), seedWith(0) stores value 1 at age 0 (the former + // created := wall), policyWith(2) sets the short maximum with the read + // budget unchanged (the former maxAge patch). run independentReadDeadlinesStartSeparateSourcesTest = init.then(beginCall).then(advanceBy(1)).then(beginCall) .then(advanceBy(1)).then(advanceBy(1)).then(advanceBy(1)).then(advanceBy(1)) .expect(s.io.aborted == List(0) and s.o.loaders == 1) .then(advanceBy(1)).expect(s.io.aborted == List(0, 1) and s.o.loaders == 2) run independentRecoveryKeepsDistinctSnapshotsTest = init.then(beginCall).then(readAt(0)) - .then(all { input' = input, s' = { frame: VALUE_TWO, ...s } }).then(beginCall).then(readAt(1)) + .then(seedWith(2)).then(beginCall).then(readAt(1)) .then(rejectAt(0)).then(rejectAt(1)).then(invalidate) .then(loadAt(1)).then(loadAt(0)) .expect(s.o.calls == List(VALUE_ONE, VALUE_TWO) and s.o.reads == 2 and s.o.writes == 0) run timedOutReadCannotAffectAnotherCallTest = init.then(beginCall).then(advanceBy(5)) .then(beginCall).then(readAt(1)).then(readAt(0)) .expect(s.o.loads == 0 and s.o.loaders == 2 and s.io.aborted == List(0)) - run acceptedFreshDecodeSurvivesOtherInvalidationTest = init.then(all { input' = input, s' = { created: s.wall, ...s } }).then(beginCall) + run acceptedFreshDecodeSurvivesOtherInvalidationTest = init.then(seedWith(0)).then(beginCall) .then(readAt(0)).then(invalidate).then(beginCall).then(readAt(1)) .then(loadAt(0)).expect(s.o.calls == List(VALUE_ONE, CALL_PENDING) and s.o.loaders == 1) run readFailureCannotBorrowAnotherCallsRefillTest = init.then(beginCall).then(beginCall) .then(failReadAt(0)).then(readAt(1)) .then(resolveWith(4)).then(resolveWith(1)) - .expect(s.o.calls == List(VALUE_ONE, VALUE_TWO) and s.o.writes == 1 and s.frame == VALUE_TWO) + .expect(s.o.calls == List(VALUE_ONE, VALUE_TWO) and s.o.writes == 1 and s.remoteValues == List(VALUE_TWO)) run recoveryPolicyIsCapturedPerCallerTest = init.then(beginCall).then(readAt(0)) - .then(all { input' = input, s' = { maxAge: SHORT_RETENTION_MS, ...s } }).then(beginCall).then(readAt(1)) + .then(policyWith(2)).then(beginCall).then(readAt(1)) .then(rejectAt(0)).then(rejectAt(1)).then(advanceBy(1000)) .then(loadAt(0)).then(loadAt(1)) .expect(s.o.calls == List(VALUE_ONE, SOURCE_ERROR) and s.io.sourceErrors == List(0, 2) and s.o.recovery == List("served", "miss")) @@ -443,4 +331,40 @@ module dialcache_independent_conformance { .then(loadAt(1)).then(loadAt(0)) .expect(s.o.calls == List(VALUE_ONE, VALUE_TWO) and s.o.recovery == List("served", "served") and s.o.reads == 2 and s.o.loaders == 2 and s.o.loads == 2 and s.o.dumps == 0 and s.o.writes == 0) + + // A fresh hit retains nothing: when its decode fails, the loader it starts + // cannot recover, and a rejection completes with the source error and the + // loader's identity, unclassified. + run freshDecodeFailureCannotRecoverTest = init.then(seedWith(0)).then(beginCall).then(readAt(0)) + .expect(s.o.loads == 1 and s.o.loaders == 0) + .then(failLoadAt(0)).expect(s.o.loaders == 1 and s.o.calls == List(CALL_PENDING)) + .then(rejectAt(0)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.o.classifications == 0 and s.o.recovery == List() and s.io.sourceErrors == List(1)) + // The loader a failed fresh decode starts carries no fence (C58): the frame + // the read accepted had cleared the watermark, so a watermark raised since + // the read does not fence its refill. The loader's value replaces the frame + // with the reply's retention and the caller completes with it. + run freshDecodeFailureRefillsUnfencedUnderARaisedWatermarkTest = init.then(seedWith(0)).then(beginCall).then(readAt(0)) + .then(invalidate).then(failLoadAt(0)) + .expect(s.o.loaders == 1 and s.sources.nth(0).fence == NO_FENCE and s.watermark.nth(0) == Clock::wallOf(s)) + .then(resolveWith(2)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 1 and s.o.writeTtls == List(LONG_RETENTION_MS) + and s.remoteValues == List(VALUE_TWO) and s.o.recovery == List()) + // A visible frame the read declined as stale carries no fence (C58): the + // frame itself cleared the watermark, so its miss refills unfenced, and the + // refill is fresh for the next caller's read. + run visibleStaleMissCarriesNoFenceAndRefillsTest = init.then(invalidate) + .then(advanceBy(1000)).then(advanceBy(1000)).then(seedWith(1)) + .then(beginCall).then(readAt(0)).expect(s.o.loaders == 1 and s.o.loads == 0 and s.sources.nth(0).fence == NO_FENCE) + .then(resolveWith(2)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 1 and s.o.writeTtls == List(LONG_RETENTION_MS)) + .then(beginCall).then(readAt(1)).expect(s.o.loads == 1 and s.o.loaders == 1) + // A read left pending expires inside one long advance and starts its loader + // at the read's own due instant, so the loader's deadline, measured from + // there, is delivered inside the same advance: the caller completes with a + // deadline error, the read is aborted and its loader counted before the + // advance ends. Delivering at the advance's end instead would leave the + // caller pending with its loader due after the advance. + run readExpiryStartsItsLoaderAtTheReadsDueInstantTest = init.then(beginCall).then(advanceBy(1000)) + .expect(s.o.calls == List(DEADLINE_ERROR) and s.io.aborted == List(0) and s.o.loaders == 1 and s.o.loads == 0 and s.now == 1000) } diff --git a/formal/dialcache-independent-connection.qnt b/formal/dialcache-independent-connection.qnt index ad4786ed..1b2b5552 100644 --- a/formal/dialcache-independent-connection.qnt +++ b/formal/dialcache-independent-connection.qnt @@ -2,92 +2,134 @@ module dialcache_independent_connection { import dialcache_independent_conformance as profile from "./dialcache-independent-conformance" import conformance_observations.* from "./conformance-observations" import cache_contract.* from "./cache-contract" + import encodings.* from "./kernel/encodings" + import remote_io as RemoteIO from "./kernel/remote-io" + import deadlines as Deadlines from "./kernel/deadlines" + import clock as Clock from "./kernel/clock" // Each independent caller owns its admission policy and later read snapshot. // The real profile executes; this projection captures external acquisition - // fields separately and checks returned values, including reversed completion. + // fields separately from the library's records and checks retained + // snapshots, returned values, deadlines and loader origins against them, + // including reversed completion. A caller's flight is `owners[caller]` + // (registered when its read is dispatched at admission, so every caller has + // one), a held read or decode names its flight, a loader ordinal maps to + // its flight through `loaders`, and a pending deadline is a `Due` the + // monitor reads before the step. var snapshots: List[RecoverySnapshot] var sources: List[SourceExecution] var before: { - frame: int, created: int, maximum: int, wall: int, now: int, - calls: int, sourceCount: int, reads: List[profile::Read], - loads: List[profile::Load], timers: List[profile::Timer] + frame: int, created: int, maximum: int, wall: int, now: int, calls: int, loaderCount: int, + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], deadlines: List[Deadlines::Due], owners: List[int] } action init = all { profile::init, snapshots' = List(), sources' = List(), - before' = { frame: 0, created: 0, maximum: 0, wall: 0, now: 0, - calls: 0, sourceCount: 0, reads: List(), loads: List(), timers: List() } + before' = { frame: 0, created: 0, maximum: 0, wall: 0, now: 0, calls: 0, loaderCount: 0, + reads: List(), loads: List(), deadlines: List(), owners: List() } } - val admitted = if (profile::s.calls.length() > snapshots.length()) - snapshots.append(captureRecovery(before.calls, 0, 0, before.maximum, 0)) else snapshots + + // The caller a flight completes (no caller coalesces, so at most one), or + // NO_OWNER for a flight no caller owns; a disowned read names no caller. + pure def ownerOf(owners: List[int], flight: int): int = + if (flight < 0) NO_OWNER + else owners.indices().filter(c => owners.nth(c) == flight).fold(NO_OWNER, (acc, c) => if (acc < 0) c else acc) + pure def readOwner(owners: List[int], reads: List[RemoteIO::HeldRead], read: int): int = { + val held = reads.select(h => h.read == read) + if (held.length() == 0) NO_OWNER else ownerOf(owners, held.nth(0).flight) + } + // A reference slot read defensively: a fault that leaves a flight without an + // owner is a violation of the clause that asked, not an out-of-bounds read. + pure def snapshotReference(list: List[RecoverySnapshot], owner: int): RecoverySnapshot = + if (owner < 0 or owner >= list.length()) captureRecovery(NO_OWNER, NO_VALUE, 0, 0, 0) else list.nth(owner) + pure def sourceReference(list: List[SourceExecution], owner: int): SourceExecution = + if (owner < 0 or owner >= list.length()) captureSource(NO_OWNER, -1, 0) else list.nth(owner) + + // Snapshots per caller: the maximum admitted from the policy in force before + // the admission; the frame and stamp acquired when the caller's held read + // settles while it still owns its flight. + val admitted = if (profile::s.o.calls.length() > snapshots.length()) + snapshots.append(captureRecovery(before.calls, NO_VALUE, 0, before.maximum, 0)) else snapshots val acquired = if (profile::input.name == "releaseRead" or profile::input.name == "failRead") { - val read = before.reads.nth(profile::input.choice) - if (read.active) admitted.replaceAt(read.caller, captureRecovery(read.caller, - before.frame, before.created, admitted.nth(read.caller).maximum, before.wall)) else admitted + val owner = readOwner(before.owners, before.reads, profile::input.choice) + if (owner >= 0) admitted.replaceAt(owner, captureRecovery(owner, before.frame, before.created, + snapshotReference(admitted, owner).maximum, before.wall)) else admitted } else admitted - // One reference slot per caller; -1 means its source has not started. Read - // settlement and fresh-decode failure start at the preceding process clock. - // Advancing time can start several sources: each starts at its owned read - // deadline, even when the external advance ends much later. These origins - // never come from the source's predicted startedAt/caller or source timer. - val sourceSlots = if (profile::s.calls.length() > sources.length()) + // One reference slot per caller; -1 means its loader has not started. A + // read settlement or a failed fresh decode starts the loader at the + // preceding clock; an advance starts one at each owned read deadline it + // delivers, even when the advance ends much later. These origins never + // come from the library's deadline records. + val sourceSlots = if (profile::s.o.calls.length() > sources.length()) sources.append(captureSource(before.calls, -1, profile::SOURCE_BUDGET_MS)) else sources val observedSources = if (profile::input.name == "advance") { - before.timers.foldl(sourceSlots, (references, timer) => - if (timer.read and before.reads.nth(timer.index).active and - timer.at > before.now and timer.at <= before.now + profile::input.choice) { - val owner = before.reads.nth(timer.index).caller - references.replaceAt(owner, captureSource(owner, timer.at, profile::SOURCE_BUDGET_MS)) - } else references) - } else if (profile::s.sources.length() > before.sourceCount) { - val owner = if (profile::input.name == "failLoad") before.loads.nth(profile::input.choice).caller - else before.reads.nth(profile::input.choice).caller - sourceSlots.replaceAt(owner, captureSource(owner, before.now, profile::SOURCE_BUDGET_MS)) + before.deadlines.foldl(sourceSlots, (references, due) => { + val owner = if (due.kind == Deadlines::READ) readOwner(before.owners, before.reads, due.index) else NO_OWNER + if (owner >= 0 and due.at > before.now and due.at <= before.now + profile::input.choice) + references.replaceAt(owner, captureSource(owner, due.at, profile::SOURCE_BUDGET_MS)) + else references + }) + } else if (profile::s.loaders.length() > before.loaderCount) { + val owner = ownerOf(profile::s.owners, profile::s.loaders.nth(profile::s.loaders.length() - 1)) + if (owner >= 0) sourceSlots.replaceAt(owner, captureSource(owner, before.now, profile::SOURCE_BUDGET_MS)) else sourceSlots } else sourceSlots action step = all { snapshots' = acquired, sources' = observedSources, - before' = { frame: profile::s.frame, created: profile::s.created, maximum: profile::s.maxAge, - wall: profile::s.wall, now: profile::s.now, calls: profile::s.calls.length(), - sourceCount: profile::s.sources.length(), reads: profile::s.reads, loads: profile::s.loads, - timers: profile::s.timers }, + before' = { frame: profile::s.remoteValues.nth(0), created: profile::s.created.nth(0), maximum: profile::s.ttls.retentionMs, + wall: Clock::wallOf(profile::s), now: profile::s.now, calls: profile::s.o.calls.length(), + loaderCount: profile::s.loaders.length(), reads: profile::s.reads, loads: profile::s.loads, + deadlines: profile::s.deadlines, owners: profile::s.owners }, profile::step } - val independentSnapshotsMatchAcquisition = acquired.length() == profile::s.calls.length() and - acquired.indices().forall(owner => { - val reference = acquired.nth(owner) - val call = profile::s.calls.nth(owner) - call.maxAge == reference.maximum and (call.candidate == 0 or - (reference.owner == owner and call.candidate == reference.payload and - call.created == reference.created and call.acquiredAt == reference.acquiredAt)) + + // Every held read that owns its flight carries the maximum its caller was + // admitted with; every retained snapshot carries that maximum and, when it + // retains a candidate, the bytes and stamp the caller's own read acquired. + val independentSnapshotsMatchAcquisition = acquired.length() == profile::s.o.calls.length() and + profile::s.reads.indices().forall(i => { + val held = profile::s.reads.nth(i) + val owner = ownerOf(profile::s.owners, held.flight) + not(RemoteIO::owning(held)) or (owner >= 0 and held.ttls.retentionMs == snapshotReference(acquired, owner).maximum) + }) and + profile::s.retained.indices().forall(i => { + val snapshot = profile::s.retained.nth(i) + val owner = ownerOf(profile::s.owners, snapshot.flight) + val reference = snapshotReference(acquired, owner) + owner >= 0 and snapshot.maximum == reference.maximum and (snapshot.candidate == NO_VALUE or + (reference.owner == owner and snapshot.candidate == reference.payload and snapshot.created == reference.created)) }) + // A served recovery decode returns the acquired bytes to their caller within + // the acquired maximum at the wall clock of its release. val independentRecoveryMatchesContract = profile::input.name != "releaseLoad" or { - val load = before.loads.nth(profile::input.choice) - not(load.recovery) or profile::s.o.recovery.nth(profile::s.o.recovery.length() - 1) != "served" or - recoveryReturnAllowed(snapshots.nth(load.caller), load.caller, - profile::s.o.calls.nth(load.caller), before.wall) + val held = before.loads.select(load => load.load == profile::input.choice) + held.length() == 0 or not(held.nth(0).recovery) or { + val owner = ownerOf(before.owners, held.nth(0).flight) + val returned = if (owner >= 0) profile::s.o.calls.nth(owner) else CALL_PENDING + owner >= 0 and (profile::s.o.recovery.nth(profile::s.o.recovery.length() - 1) != "served" or + recoveryReturnAllowed(snapshotReference(snapshots, owner), owner, returned, before.wall)) + } } + // Every loader belongs to the caller whose read settled, failed to decode or + // expired at its start; while its flight is pending its deadline is that + // start plus the configured budget and once settled it has none; a value + // accepted at this resolve step arrived inside that budget. The former + // timer contract is this clause. val independentSourceOriginsMatchContract = - observedSources.select(source => source.started >= 0).length() == profile::s.sources.length() and - profile::s.sources.indices().forall(index => { - val source = profile::s.sources.nth(index) - val reference = observedSources.nth(source.caller) - reference.started >= 0 and reference.owner == source.caller and - profile::s.calls.nth(reference.owner).source == index and source.startedAt == reference.started + observedSources.select(source => source.started >= 0).length() == profile::s.loaders.length() and + profile::s.loaders.indices().forall(ordinal => { + val flight = profile::s.loaders.nth(ordinal) + val owner = ownerOf(profile::s.owners, flight) + val reference = sourceReference(observedSources, owner) + val source = profile::s.sources.nth(flight) + owner >= 0 and reference.started >= 0 and reference.owner == owner and + (source.result != CALL_PENDING or + Deadlines::deadlineOf(profile::s, Deadlines::SOURCE, ordinal) == reference.started + reference.budget) and + (source.result == CALL_PENDING or not(Deadlines::bounded(profile::s, Deadlines::SOURCE, ordinal))) and + (profile::input.name != "resolveLoader" or profile::resolvedSource(profile::input.choice) != ordinal or + not(accepted(source.result)) or sourceReturnAllowed(reference, owner, profile::s.now)) }) - - // Both the source timer and accepted settlement must agree with the origin - // captured from external events, never with another caller's source. - val independentSourceMatchesTimerContract = profile::s.sources.indices().forall(index => { - val source = profile::s.sources.nth(index) - val reference = observedSources.nth(source.caller) - val timers = profile::s.timers.select(timer => not(timer.read) and timer.index == index) - timers.length() == 1 and timers.nth(0).at == reference.started + reference.budget and - (source.outcome == CALL_PENDING or source.outcome == DEADLINE_ERROR or - sourceReturnAllowed(reference, source.caller, source.settledAt)) - }) } diff --git a/formal/dialcache-layers-conformance.qnt b/formal/dialcache-layers-conformance.qnt index 714ce0d3..854b9deb 100644 --- a/formal/dialcache-layers-conformance.qnt +++ b/formal/dialcache-layers-conformance.qnt @@ -101,7 +101,7 @@ module dialcache_layers_conformance { keysPerScope: KEYS_PER_INSTANCE, persistentContexts: PERSISTENT_CONTEXTS, operationsPerEntity: OPERATIONS_PER_ENTITY, - probeSourceScope: false + probeSourceScope: false, policyProvider: true } // Every reply here carries the fixture's TTLs: 60 s local, fresh and retained. pure val TTLS: Ttls = { localMs: SERVING_TTL_MS, freshMs: SERVING_TTL_MS, retentionMs: SERVING_TTL_MS } @@ -196,7 +196,7 @@ module dialcache_layers_conformance { seedRemote(choice / SOURCE_VALUE_COUNT, choice % SOURCE_VALUE_COUNT + VALUE_ONE) } action invalidateEntity(entity: int): bool = all { - s' = Serving::invalidate(s, entity), + s' = Serving::invalidate(s, entity, 0), input' = { name: "invalidate", choice: entity } } action invalidate = { diff --git a/formal/dialcache-legacy-recovery-connection.qnt b/formal/dialcache-legacy-recovery-connection.qnt deleted file mode 100644 index b72bb000..00000000 --- a/formal/dialcache-legacy-recovery-connection.qnt +++ /dev/null @@ -1,43 +0,0 @@ -module dialcache_legacy_recovery_connection { - import dialcache_recovery_conformance as profile from "./dialcache-recovery-conformance" - import conformance_observations.* from "./conformance-observations" - import cache_contract.* from "./cache-contract" - - // The legacy recovery profile acquires its read in beginCall. Project that - // acquisition into a flight-owned snapshot; joined callers share its result. - // Capture storage and policy from before the read, never candidate fields. - var snapshot: RecoverySnapshot - var before: { - frame: int, created: int, maximum: int, wall: int, - reads: int, calls: int, phase: int, pending: Set[int] - } - action init = all { - profile::init, - snapshot' = captureRecovery(-1, 0, 0, 0, 0), - before' = { frame: 0, created: 0, maximum: 0, wall: 0, - reads: 0, calls: 0, phase: profile::IDLE, pending: Set() } - } - val acquired = if (profile::s.o.reads > before.reads) - captureRecovery(before.calls, before.frame, before.created, before.maximum, before.wall) - else snapshot - action step = all { - snapshot' = acquired, - before' = { frame: profile::s.frame, created: profile::s.created, maximum: profile::s.maxAge, - wall: profile::s.wall, reads: profile::s.o.reads, calls: profile::s.o.calls.length(), phase: profile::s.phase, - pending: profile::s.o.calls.indices().filter(owner => profile::s.o.calls.nth(owner) == CALL_PENDING) }, - profile::step - } - val flightKeepsAcquiredSnapshot = profile::s.phase == profile::IDLE or profile::s.candidate == 0 or { - val reference = acquired - profile::s.candidate == reference.payload and profile::s.candidateCreated == reference.created and - profile::s.acceptedMaxAge == reference.maximum - } - val flightRecoveryMatchesContract = before.phase != profile::RECOVERY_DECODE or - profile::input.name != "releaseLoad" or - profile::s.o.recovery.nth(profile::s.o.recovery.length() - 1) != "served" or { - // The snapshot belongs to the acquiring flight. Every caller waiting on - // that flight, including followers, must receive its accepted value. - before.pending.contains(snapshot.owner) and before.pending.forall(caller => - recoveryReturnAllowed(snapshot, snapshot.owner, profile::s.o.calls.nth(caller), before.wall)) - } -} diff --git a/formal/dialcache-local-clock-conformance.qnt b/formal/dialcache-local-clock-conformance.qnt index f436d914..ed2f151e 100644 --- a/formal/dialcache-local-clock-conformance.qnt +++ b/formal/dialcache-local-clock-conformance.qnt @@ -1,6 +1,12 @@ module dialcache_local_clock_conformance { - import cache_rules.* from "./cache-rules" import conformance_observations.* from "./conformance-observations" + import encodings.* from "./kernel/encodings" + import calls.* from "./kernel/calls" + import layer_policy.* from "./kernel/layer-policy" + import serving as Serving from "./kernel/serving" + import clock as Clock from "./kernel/clock" + import instances as Instances from "./kernel/instances" + import policy_gate as Gate from "./kernel/policy-gate" // C09/B02: default instances share a whole-millisecond local expiry grid. // Environment time is expressed in microsecond ticks, while local insertion @@ -9,49 +15,75 @@ module dialcache_local_clock_conformance { // Two instances, one key per instance, healthy immediate sources, a fixed // one-second local TTL, and no request memo or remote layer bound this model. // The replay creates real default caches at the declared fractional times. + // Every rule is a kernel transition (formal/kernel): the local projection of + // the traversal with an inline source (`Serving::callLocal`) over the + // fractional clock (`Clock::advanceTicks`). This module owns the bounded + // state, the instance decoding, the input choices and the guards. pure val TICKS_PER_MS = 1000 pure val LOCAL_TTL_MS = 1000 pure val INSTANCE_IDS = Set(0, 1) pure val ADVANCES = Set(1, 100, 300, 400, 700, 999200, 999999, 1000000) - pure val EMPTY_ENTRY = 0 pure val MAX_CALLS = 20 - - type Entry = { value: int, insertedTicks: int } - type Fill = { instance: int, value: int, ticks: int } - type Probe = { - instance: int, ticks: int, offered: int, returned: int, - previous: Entry, ranSource: bool + // One key on each of two instances, no request scope, no remote layer; the + // default instances resolve policy from the key's configuration and make no + // provider call; every reply enables the local layer with sharing. + pure val LAYOUT: Serving::Layout = { + keysPerInstance: 1, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 1, probeSourceScope: false, policyProvider: false } + pure val LOCAL: Resolution = { layers: { request: false, local: true, remote: false }, coalesce: true } + pure val TTLS: Ttls = { localMs: LOCAL_TTL_MS, freshMs: 0, retentionMs: 0 } + type State = { o: Observation, + now: int, ticks: int, + capacity: int, constructed: List[bool], - entries: List[Entry], - fills: List[Fill], - probes: List[Probe] + closed: List[bool], + memo: List[int], + requestFlights: List[int], + processFlights: List[int], + localValues: List[int], + localExpires: List[int], + lru: List[List[int]], + sources: List[Serving::LocalSource], + owners: List[int], + memoSlots: List[int], + held: List[Gate::Held] } var s: State var input: { name: str, choice: int } - pure def entryIsLive(entry: Entry, ticks: int): bool = - entry.value != EMPTY_ENTRY and localEntryLiveOnGrid(ticks, entry.insertedTicks, LOCAL_TTL_MS, TICKS_PER_MS) + // Input decoding: a call names its instance; every call is enabled and runs + // in a context that is not a persistent scope. + pure def callOn(instance: int): Call = { instance: instance, key: 0, context: 0, enabled: true, keyFailed: false } action init = all { s' = { o: empty, + now: 0, ticks: 0, + capacity: 1, constructed: List(false, false), - entries: List({ value: EMPTY_ENTRY, insertedTicks: 0 }, { value: EMPTY_ENTRY, insertedTicks: 0 }), - fills: List(), - probes: List() + closed: List(), + memo: List(), + requestFlights: List(), + processFlights: List(NO_OWNER, NO_OWNER), + localValues: List(NO_VALUE, NO_VALUE), + localExpires: List(0, 0), + lru: List(List(), List()), + sources: List(), + owners: List(), + memoSlots: List(), + held: List() }, input' = { name: "init", choice: -1 } } action construct(instance: int): bool = all { not(s.constructed.nth(instance)), - s' = { constructed: s.constructed.replaceAt(instance, true), ...s }, + s' = Instances::construct(s, instance), input' = { name: "constructInstance", choice: instance } } action constructInstance = { @@ -60,7 +92,7 @@ module dialcache_local_clock_conformance { } action elapse(ticks: int): bool = all { - s' = { ticks: s.ticks + ticks, ...s }, + s' = Clock::advanceTicks(s, ticks, TICKS_PER_MS), input' = { name: "advanceTicks", choice: ticks } } action advanceTicks = { @@ -68,72 +100,73 @@ module dialcache_local_clock_conformance { elapse(choice) } - action call(instance: int, offered: int): bool = all { + action callWith(instance: int, offered: int): bool = all { s.constructed.nth(instance), s.o.calls.length() < MAX_CALLS, - val previous = s.entries.nth(instance) - val hit = entryIsLive(previous, s.ticks) - val returned = if (hit) previous.value else offered - s' = { - entries: if (hit) s.entries else s.entries.replaceAt(instance, { value: offered, insertedTicks: s.ticks }), - fills: if (hit) s.fills else s.fills.append({ instance: instance, value: offered, ticks: s.ticks }), - probes: s.probes.append({ - instance: instance, ticks: s.ticks, offered: offered, returned: returned, - previous: previous, ranSource: not(hit) - }), - o: { calls: s.o.calls.append(returned), loaders: s.o.loaders + (if (hit) 0 else 1), ...s.o }, - ...s - }, + s' = Serving::callLocal(s, LAYOUT, callOn(instance), LOCAL, TTLS, offered), input' = { name: "call", choice: instance * 2 + offered - 1 } } - action callCache = { + action call = { nondet choice = 0.to(3).filter(code => s.constructed.nth(code / 2)).oneOf() - call(choice / 2, choice % 2 + 1) + callWith(choice / 2, choice % 2 + 1) } - action step = any { constructInstance, advanceTicks, callCache } + action step = any { constructInstance, advanceTicks, call } - // Deliberately spell out the integer projection here instead of reusing the - // transition's localEntryLiveOnGrid helper. A precise-TTL substitution and - // a renewed insertion timestamp must both violate an independent obligation. - val localReadsUseCommonWholeMilliseconds = s.probes.indices().forall(index => { - val probe = s.probes.nth(index) - val ageTicks = probe.ticks - probe.ticks % TICKS_PER_MS - - (probe.previous.insertedTicks - probe.previous.insertedTicks % TICKS_PER_MS) - val mustHit = probe.previous.value != EMPTY_ENTRY and ageTicks < LOCAL_TTL_MS * TICKS_PER_MS - probe.ranSource != mustHit and probe.returned == - (if (mustHit) probe.previous.value else probe.offered) - }) - val readsNeverRenewLocalInsertion = INSTANCE_IDS.forall(instance => { - val last = s.fills.foldl({ value: EMPTY_ENTRY, insertedTicks: 0 }, (entry, fill) => - if (fill.instance == instance) { value: fill.value, insertedTicks: fill.ticks } else entry) - s.entries.nth(instance) == last - }) - val publicCallsPreserveProbeResults = s.o.calls == s.probes.foldl(List(), (calls, probe) => calls.append(probe.returned)) - and s.o.loaders == s.probes.foldl(0, (count, probe) => count + (if (probe.ranSource) 1 else 0)) + // -- Independently stated safety properties -------------------------------- + // The clock the layers read is the environment's time on the whole + // millisecond grid, stated here as the integer projection of the raw ticks, + // not through the clock module. + val clockIsOnTheGrid = s.now == s.ticks / TICKS_PER_MS + // The call that just happened, on the instance the input names: served + // locally, it returned a live entry's value (strictly before that entry's + // expiry on the grid) and started no source; otherwise it ran its source, + // returned what the source offered and left the entry stamped from this + // instant for the local TTL. + val newest = s.o.calls.length() - 1 + val calledInstance = input.choice / 2 + val offeredValue = input.choice % 2 + 1 + val callsServeLiveEntriesOrRunTheSource = input.name != "call" or { + val owner = s.owners.nth(newest) + val value = s.o.calls.nth(newest) + if (owner < 0) value == s.localValues.nth(calledInstance) and s.now < s.localExpires.nth(calledInstance) + else value == offeredValue and s.sources.nth(owner).result == value and s.sources.nth(owner).instance == calledInstance + and s.localValues.nth(calledInstance) == value and s.localExpires.nth(calledInstance) == s.now + LOCAL_TTL_MS + } + // Public calls and sources agree with the records: one source per loader, + // every call completed by its own source's outcome, and every entry the + // value of a source on its instance. + val publicCallsMatchSources = s.o.loaders == s.sources.length() + and s.owners.indices().forall(caller => s.owners.nth(caller) < 0 or s.o.calls.nth(caller) == s.sources.nth(s.owners.nth(caller)).result) + and INSTANCE_IDS.forall(instance => s.localValues.nth(instance) == NO_VALUE + or s.sources.indices().exists(i => s.sources.nth(i).instance == instance and s.sources.nth(i).result == s.localValues.nth(instance))) + // A default instance resolves policy from its key's configuration and makes + // no provider call, whatever it serves or starts (the layout's + // `policyProvider: false`, read by `Serving::entered`). + val noProviderMakesNoPolicyCall = s.o.policyCalls == 0 run fractionalInsertionExpiresAtWholeMillisecondTest = init - .then(construct(0)).then(elapse(700)).then(call(0, VALUE_ONE)) - .then(elapse(999200)).then(call(0, VALUE_TWO)) + .then(construct(0)).then(elapse(700)).then(callWith(0, VALUE_ONE)) + .then(elapse(999200)).then(callWith(0, VALUE_TWO)) .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loaders == 1) - .then(elapse(100)).then(call(0, VALUE_TWO)) + .then(elapse(100)).then(callWith(0, VALUE_TWO)) .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_TWO) and s.o.loaders == 2) run fractionalConstructionKeepsCommonInstanceGridTest = init .then(construct(0)).then(elapse(400)).then(construct(1)).then(elapse(300)) - .then(call(0, VALUE_ONE)).then(call(1, VALUE_ONE)) - .then(elapse(999200)).then(call(0, VALUE_TWO)).then(call(1, VALUE_TWO)) + .then(callWith(0, VALUE_ONE)).then(callWith(1, VALUE_ONE)) + .then(elapse(999200)).then(callWith(0, VALUE_TWO)).then(callWith(1, VALUE_TWO)) .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_ONE, VALUE_ONE) and s.o.loaders == 2) - .then(elapse(100)).then(call(0, VALUE_TWO)).then(call(1, VALUE_TWO)) + .then(elapse(100)).then(callWith(0, VALUE_TWO)).then(callWith(1, VALUE_TWO)) .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_ONE, VALUE_ONE, VALUE_TWO, VALUE_TWO) and s.o.loaders == 4) run nonzeroOriginKeepsWholeMillisecondBoundaryTest = init - .then(elapse(1000000)).then(construct(0)).then(elapse(700)).then(call(0, VALUE_ONE)) - .then(elapse(999200)).then(call(0, VALUE_TWO)).then(elapse(100)).then(call(0, VALUE_TWO)) + .then(elapse(1000000)).then(construct(0)).then(elapse(700)).then(callWith(0, VALUE_ONE)) + .then(elapse(999200)).then(callWith(0, VALUE_TWO)).then(elapse(100)).then(callWith(0, VALUE_TWO)) .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_TWO) and s.o.loaders == 2) run integerInsertionRetainsFullTtlTest = init - .then(construct(0)).then(call(0, VALUE_ONE)) - .then(elapse(999999)).then(call(0, VALUE_TWO)).then(elapse(1)).then(call(0, VALUE_TWO)) + .then(construct(0)).then(callWith(0, VALUE_ONE)) + .then(elapse(999999)).then(callWith(0, VALUE_TWO)).then(elapse(1)).then(callWith(0, VALUE_TWO)) .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_TWO) and s.o.loaders == 2) } diff --git a/formal/dialcache-local-failure-conformance.qnt b/formal/dialcache-local-failure-conformance.qnt index 1b6ea8a1..2aed1b92 100644 --- a/formal/dialcache-local-failure-conformance.qnt +++ b/formal/dialcache-local-failure-conformance.qnt @@ -1,5 +1,13 @@ module dialcache_local_failure_conformance { import conformance_observations.* from "./conformance-observations" + import encodings.* from "./kernel/encodings" + import calls.* from "./kernel/calls" + import layer_policy.* from "./kernel/layer-policy" + import serving as Serving from "./kernel/serving" + import local_faults as Faults from "./kernel/local-faults" + import remote_frames as Remote from "./kernel/remote-frames" + import flights as Flights from "./kernel/flights" + import policy_gate as Gate from "./kernel/policy-gate" // C27: local plumbing can fail without changing an accepted caller result. // Two persistent requests and a transient request distinguish memo ownership @@ -8,128 +16,166 @@ module dialcache_local_failure_conformance { // Native bindings inject failure at local storage/its integer-clock boundary. // A read fault is exercised on a present entry; a write fault is armed while // source work is pending. Successful operations use the real native storage. + // Every rule is a kernel transition (formal/kernel): the layered traversal + // with the local fault switch read at admission and settlement + // (`local_faults`). This module owns the bounded state, the scope and policy + // decoding, the input choices and the guards. - type Receipt = { - readFailed: bool, writeFailed: bool, before: int, after: int, - returned: int, call: int + pure val ROOT_REQUEST = 0 + pure val SECOND_REQUEST = 1 + pure val TRANSIENT_REQUEST = 2 + pure val MAX_CALLS = 10 + pure val SERVING_TTL_MS = 60000 + // One key on one instance, two persistent request scopes and a transient + // one, one operation per entity; the fixture installs a policy provider. + pure val LAYOUT: Serving::Layout = { + keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } + pure val TTLS: Ttls = { localMs: SERVING_TTL_MS, freshMs: SERVING_TTL_MS, retentionMs: SERVING_TTL_MS } + type State = { - o: Observation, memo: List[int], localValue: int, remoteValue: int, - remoteEnabled: bool, failed: bool, pending: bool, scope: int, - localMiss: bool, readFailed: bool, acceptedRemote: bool, - localBefore: int, receipts: List[Receipt] + o: Observation, + now: int, + skew: int, + remoteAvailable: bool, + tracked: bool, + capacity: int, + readFailed: bool, + dumpFailed: bool, + writeFailed: bool, + localFailed: bool, + policy: int, + closed: List[bool], + memo: List[int], + requestFlights: List[int], + processFlights: List[int], + localValues: List[int], + localExpires: List[int], + lru: List[List[int]], + remoteValues: List[int], + created: List[int], + expires: List[int], + watermark: List[int], + sources: List[Serving::LayeredSource], + owners: List[int], + memoSlots: List[int], + held: List[Gate::Held] } var s: State var input: { name: str, choice: int } + // Input decoding: every call is enabled on the one key; the two persistent + // scopes memoize, the transient one does not. The remote ramp reply is the + // drivers' layer policy code: all layers, or every layer but the remote one. + pure def call(scope: int): Call = { instance: 0, key: 0, context: scope, enabled: true, keyFailed: false } + pure def policyOf(selected: int): int = if (selected == 1) ALL_LAYERS else NO_REMOTE_LAYER + action init = all { input' = { name: "init", choice: -1 }, s' = { - o: empty, memo: List(0, 0), localValue: 0, remoteValue: 0, - remoteEnabled: true, failed: false, pending: false, scope: 2, - localMiss: false, readFailed: false, acceptedRemote: false, - localBefore: 0, receipts: List() - } - } - - pure def complete(x: State, value: int): State = { - pending: false, - memo: if (value != SOURCE_ERROR and x.scope < 2) - x.memo.replaceAt(x.scope, value) else x.memo, - o: finishPendingCalls(x.o, value), - ...x - } - - pure def recordPublication(x: State, value: int): State = { - receipts: x.receipts.append({ - readFailed: x.readFailed, - writeFailed: x.localMiss and x.failed and value != SOURCE_ERROR, - before: x.localBefore, after: x.localValue, - returned: value, call: x.o.calls.length() - 1 - }), ...x - } - - pure def acquired(x: State, value: int): State = { - val published = { - localValue: if (x.localMiss and not(x.failed)) value else x.localValue, - ...x + o: empty, + now: 0, + skew: 0, + remoteAvailable: true, + tracked: false, + capacity: 1, + readFailed: false, + dumpFailed: false, + writeFailed: false, + localFailed: false, + policy: ALL_LAYERS, + closed: List(false, false), + memo: List(NO_VALUE, NO_VALUE), + requestFlights: List(NO_OWNER, NO_OWNER), + processFlights: List(NO_OWNER), + localValues: List(NO_VALUE), + localExpires: List(0), + lru: List(List()), + remoteValues: List(NO_VALUE), + created: List(0), + expires: List(0), + watermark: List(0), + sources: List(), + owners: List(), + memoSlots: List(), + held: List() } - complete(recordPublication(published, value), value) } - pure def admitted(x: State, scope: int): State = { - val call = { - scope: scope, localBefore: x.localValue, readFailed: x.failed, - localMiss: not(x.failed), acceptedRemote: x.remoteEnabled, - o: { calls: x.o.calls.append(CALL_PENDING), policyCalls: x.o.policyCalls + 1, ...x.o }, ...x - } - if (scope < 2 and x.memo.nth(scope) != 0) complete(call, x.memo.nth(scope)) - else if (not(x.failed) and x.localValue != 0) complete(call, x.localValue) - else { - val read = { o: { reads: call.o.reads + (if (x.remoteEnabled) 1 else 0), ...call.o }, ...call } - if (x.remoteEnabled and x.remoteValue != 0) - acquired({ o: { loads: read.o.loads + 1, ...read.o }, ...read }, x.remoteValue) - else { pending: true, o: { loaders: read.o.loaders + 1, ...read.o }, ...read } - } - } + // One source at a time: the newest source is the pending one, if any. + val pending = s.sources.length() > 0 and s.sources.nth(Flights::latest(s)).result == CALL_PENDING action begin(scope: int): bool = all { - not(s.pending), s.o.calls.length() < 10, + not(pending), s.o.calls.length() < MAX_CALLS, // The two native injection bindings share this fallible-read domain. - not(s.failed) or s.localValue != 0, + not(s.localFailed) or s.localValues.nth(0) != NO_VALUE, input' = { name: "beginCall", choice: scope }, - s' = admitted(s, scope) + s' = Faults::begin(s, LAYOUT, call(scope), resolution(s.policy, s.remoteAvailable), TTLS) } action beginCall = { nondet choice = Set(0, 1, 2).oneOf(); begin(choice) } action resolve(value: int): bool = all { - s.pending, + pending, input' = { name: "resolveLoader", choice: value }, - val remote = if (s.acceptedRemote) { - remoteValue: value, - o: { - dumps: s.o.dumps + 1, writes: s.o.writes + 1, - writeTtls: s.o.writeTtls.append(60000), ...s.o - }, ...s - } else s - s' = acquired(remote, value) + s' = Faults::settle(s, LAYOUT, Flights::latest(s), value) } action resolveLoader = { nondet choice = Set(VALUE_ONE, VALUE_TWO).oneOf(); resolve(choice) } action rejectLoader = all { - s.pending, input' = { name: "rejectLoader", choice: -1 }, - s' = complete(recordPublication(s, SOURCE_ERROR), SOURCE_ERROR) + pending, input' = { name: "rejectLoader", choice: -1 }, + s' = Faults::settle(s, LAYOUT, Flights::latest(s), SOURCE_ERROR) } action fault(selected: int): bool = all { input' = { name: "localFault", choice: selected }, - s' = { failed: selected == 1, ...s } + s' = { localFailed: selected == 1, ...s } } action localFault = { nondet choice = Set(0, 1).oneOf(); fault(choice) } action remotePolicy(selected: int): bool = all { input' = { name: "policy", choice: selected }, - s' = { remoteEnabled: selected == 1, ...s } + s' = { policy: policyOf(selected), ...s } } action policy = { nondet choice = Set(0, 1).oneOf(); remotePolicy(choice) } action seeded(value: int): bool = all { - input' = { name: "seed", choice: value }, s' = { remoteValue: value, ...s } + input' = { name: "seed", choice: value }, s' = Remote::seedFrame(s, 0, value, SERVING_TTL_MS) } action seed = { nondet choice = Set(VALUE_ONE, VALUE_TWO).oneOf(); seeded(choice) } action step = any { beginCall, resolveLoader, rejectLoader, localFault, policy, seed } - // Independent receipts compare the old storage identity and accepted result; - // they do not call the transition's publication-eligibility helpers. - val failedReadKeepsPriorLocalValue = s.receipts.indices().forall(i => { - val receipt = s.receipts.nth(i) - not(receipt.readFailed) or receipt.after == receipt.before - }) - val failedWriteKeepsAcceptedCallerResult = s.receipts.indices().forall(i => { - val receipt = s.receipts.nth(i) - not(receipt.writeFailed) or (receipt.after == receipt.before - and s.o.calls.nth(receipt.call) == receipt.returned) - }) - val sourceErrorsNeverReplaceLocalValue = s.receipts.indices().forall(i => { - val receipt = s.receipts.nth(i) - receipt.returned != SOURCE_ERROR or receipt.after == receipt.before + // -- Independently stated safety properties -------------------------------- + // Stated one step over the library records: the step that just admitted + // (the newest caller and, when it started one, the newest source) and the + // step that just settled (the newest source, the one settlement names). + + val newest = s.o.calls.length() - 1 + val justAdmitted = input.name == "beginCall" + val justSettled = input.name == "resolveLoader" or input.name == "rejectLoader" + // A call admitted under an armed fault reads nothing from local storage: it + // is served from its scope's memo or from the remote frame, or it starts a + // source that captured no local TTL, so no later settlement of that source + // can publish locally, whatever the switch says by then. The no-warm half (a + // faulted remote hit leaves local storage as it was) is not stated here, as + // the slot may already hold the served value; the regression + // localReadFailureFallsThroughAndPreservesOldLocalTest pins it. + val faultedReadNeverUsesLocal = not(justAdmitted and s.localFailed) or { + val owner = s.owners.nth(newest) + val value = s.o.calls.nth(newest) + if (owner >= 0) s.sources.nth(owner).localMs == 0 + else (input.choice < 2 and s.memo.nth(input.choice) == value) or s.remoteValues.nth(0) == value + } + // A settlement under an armed fault carries no local TTL: the write it would + // have made is the one that failed. Its callers still receive the result. + val faultedSettlementPublishesNothingLocally = not(justSettled and s.localFailed) + or s.sources.nth(Flights::latest(s)).localMs == 0 + val callsKeepSourceOutcome = s.owners.indices().forall(caller => { + val owner = s.owners.nth(caller) + owner < 0 or s.o.calls.nth(caller) == s.sources.nth(owner).result }) + // Storage and memo hold accepted values only: a rejected source publishes + // and memoizes nothing, and a caller result is never an error code stored. + val storageHoldsAcceptedValuesOnly = and { + s.localValues.nth(0) == NO_VALUE or accepted(s.localValues.nth(0)), + s.remoteValues.nth(0) == NO_VALUE or accepted(s.remoteValues.nth(0)), + s.memo.indices().forall(slot => s.memo.nth(slot) == NO_VALUE or accepted(s.memo.nth(slot))) + } run localReadFailureFallsThroughAndPreservesOldLocalTest = init .then(begin(2)).then(resolve(VALUE_ONE)) @@ -160,4 +206,10 @@ module dialcache_local_failure_conformance { .then(fault(1)).then(begin(0)).then(rejectLoader).then(fault(0)).then(begin(2)) .expect(s.o.calls == List(VALUE_ONE, SOURCE_ERROR, VALUE_ONE) and s.o.loaders == 2 and s.o.writes == 1) + + // A rejected source seeds nothing: the next call on an empty store reads + // remote again and starts its own source. + run rejectedSourceDoesNotSeedLocalTest = init + .then(begin(2)).then(rejectLoader).then(begin(2)) + .expect(s.o.calls == List(SOURCE_ERROR, CALL_PENDING) and s.o.loaders == 2 and s.o.reads == 2) } diff --git a/formal/dialcache-policy-conformance.qnt b/formal/dialcache-policy-conformance.qnt index 85a1e906..4bb3ce3b 100644 --- a/formal/dialcache-policy-conformance.qnt +++ b/formal/dialcache-policy-conformance.qnt @@ -80,7 +80,7 @@ module dialcache_policy_conformance { // and a 5 s stale-on-error maximum, the baseline every overlay resolves // against (formal/replay/features.mjs policy). pure val LAYOUT: Serving::Layout = - { keysPerInstance: 2, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 2, probeSourceScope: false } + { keysPerInstance: 2, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 2, probeSourceScope: false, policyProvider: true } pure val BASELINE: Ttls = { localMs: ONE_SECOND_MS, freshMs: ONE_SECOND_MS, retentionMs: DEFAULT_RETENTION_MS } // Input decoding: every caller is enabled and asks for one key. pure def call(key: int): Call = { instance: 0, key: key, context: 0, enabled: true, keyFailed: false } @@ -477,6 +477,16 @@ module dialcache_policy_conformance { .then(startCall(0)).then(releasePolicy) .expect(s.o.calls == List(VALUE_ONE, VALUE_TWO, VALUE_ONE) and s.o.loaders == 2) + // A source that settles with the source error is not a local writer: the + // entry the earlier completed source published stays and serves the next call. + run independentFailureKeepsSettledLocalValueTest = init + .then(changePolicy(INDEPENDENT_OFFSET + NO_REMOTE)) + .then(startCall(0)).then(releasePolicy) + .then(startCall(0)).then(releasePolicy) + .then(finishSource(0, VALUE_ONE)).then(finishSource(1, SOURCE_ERROR)) + .then(startCall(0)).then(releasePolicy) + .expect(s.o.calls == List(VALUE_ONE, SOURCE_ERROR, VALUE_ONE) and s.o.loaders == 2) + run independentRemotePublicationUsesLastCompletionTest = init .then(changePolicy(INDEPENDENT_OFFSET + NO_LOCAL)) .then(startCall(0)).then(releasePolicy) diff --git a/formal/dialcache-recovery-conformance.qnt b/formal/dialcache-recovery-conformance.qnt index a13fba03..f537b0d7 100644 --- a/formal/dialcache-recovery-conformance.qnt +++ b/formal/dialcache-recovery-conformance.qnt @@ -1,280 +1,235 @@ module dialcache_recovery_conformance { import conformance_observations.* from "./conformance-observations" - import cache_rules.* from "./cache-rules" + import encodings.* from "./kernel/encodings" + import calls.* from "./kernel/calls" + import layer_policy.* from "./kernel/layer-policy" + import serving as Serving from "./kernel/serving" + import remote_io as RemoteIO from "./kernel/remote-io" + import recovery as Recovery from "./kernel/recovery" + import deadlines as Deadlines from "./kernel/deadlines" + import diagnostics as Diagnostics from "./kernel/diagnostics" + import remote_frames as Remote from "./kernel/remote-frames" + import flights as Flights from "./kernel/flights" + import clock as Clock from "./kernel/clock" + import policy_gate as Gate from "./kernel/policy-gate" // Model boundary ----------------------------------------------------------- // One registered tracked remote flight, with coalesced callers in two optional // request lifetimes. Selected aspects of C40-C46 cover retained recovery; // C03/C43 cover request publication; C57/C58 cover age and error observations. // See BEHAVIOR.md: "Generated feature profiles" and its recovery input table. - // Reads/publication settle at action boundaries; decoding and sources may wait. - // No local storage, independent same-key flights, or shadow work participates. - // `now` is elapsed milliseconds and `wall` is the application clock. Retained - // bytes, accepted age policy, and source error belong to the original flight. + // Reads and publication settle at action boundaries; decoding and sources may + // wait. No local storage, independent same-key flights or shadow work + // participates. Every rule is a kernel transition (formal/kernel): the held + // remote traversal (remote_io) with its recovery snapshots (recovery) under + // the budgeted held lifecycle (deadlines), with the read settled in the step + // that admits the caller (beginRead: the drivers hold decodes and loaders, + // never reads), through the diagnosed variants that record the coalesced + // scope, the failed layer and the recovery age the drivers compare + // (diagnostics); the frames a seed stores (remote_frames); the wall + // rollback (clock). This module owns the bounded state, the fixture decoding + // (the classifier a driver code names, the frame a seed choice stores, the + // maximum a policy choice sets), the input choices and the guards. `now` is + // elapsed time; the wall clock is `now` plus a skew a rollback shifts. // Trace encodings and fixture bounds --------------------------------------- - // Keep integer fields stable; shared caller results come from the import. - pure val IDLE = 0 - pure val FRESH_DECODE = 1 - pure val SOURCE_RUNNING = 2 - pure val RECOVERY_DECODE = 3 - pure val SOURCE_REGISTERED = 0 - pure val SOURCE_ABANDONED = 1 - pure val SOURCE_SETTLED = 2 - pure val CLASSIFIER_ALLOW = 0 - pure val CLASSIFIER_DENY = 1 - pure val CLASSIFIER_ERROR = 2 - pure val CLASSIFIER_TIMEOUT_ONLY = 3 - pure val CLASSIFIER_INHERIT = 3 - pure val SETTLEMENT_SUCCESS = 0 - pure val SETTLEMENT_FAILURE = 1 - pure val SETTLEMENT_PROPAGATED_TIMEOUT = 2 + // Keep integer input fields stable; shared caller results come from the import. + // The drivers' operation classifier codes (beginCall choice % 4). + pure val ALLOW = 0 + pure val DENY = 1 + pure val ERROR = 2 + pure val INHERIT = 3 pure val FRESH_AGE_MS = 1000 + pure val INITIAL_MAX_AGE_MS = 5000 pure val SOURCE_BUDGET_MS = 10 pure val WALL_ROLLBACK_MS = 1000 + pure val FIXTURE_TTL_MS = 60000 + pure val INITIAL_NOW_MS = 10000 + pure val WALL_SKEW_MS = 90000 + pure val INITIAL_FRAME_AGE_MS = 1000 pure val MAX_CALLS = 8 + pure val KEY = 0 + pure val ENTITY = 0 + // One key on one instance, two persistent request scopes (contexts 0 and 1), + // one operation per entity; the drivers never probe a source's scope. + pure val LAYOUT: Serving::Layout = { + keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true + } + pure def call(context: int): Call = { instance: 0, key: KEY, context: context, enabled: true, keyFailed: false } - // State: observed history, remote environment, and flight-owned snapshots. + // Input decoding (reads no state) ------------------------------------------ + // Every reply enables the remote layer, the request memo when the fixture + // enables request-local caching (init choices 4 to 7), and coalesces. + pure def resolvedFor(request: bool): Resolution = { layers: { request: request, local: false, remote: true }, coalesce: true } + // The TTLs a reply carries: no local TTL, 1 s freshness and the recovery + // maximum as the retention a refill is written with. + pure def ttlsFor(maximum: int): Ttls = { localMs: 0, freshMs: FRESH_AGE_MS, retentionMs: maximum } + // The kernel classifier a driver code names: a classifier that throws is + // DENY (recovery's rule, as the implementations treat it). The instance + // classifier of init choice % 4: the timeout-only default, allow, deny, error. + pure def operationClassifier(code: int): int = List(Recovery::ALLOW, Recovery::DENY, Recovery::DENY).nth(code) + pure def instanceClassifierOf(choice: int): int = List(Recovery::TIMEOUT_ONLY, Recovery::ALLOW, Recovery::DENY, Recovery::DENY).nth(choice % 4) + // Seeds store value 1, or value 2 for choice 6, at the ages the drivers name + // (-1 is a frame stamped one millisecond in the future). + pure def seedValue(choice: int): int = if (choice == 6) VALUE_TWO else VALUE_ONE + pure def seedAge(choice: int): int = List(0, 999, 1000, 4999, 5000, -1, 1000).nth(choice) + + // State: the layered shape with its held decodes, recovery snapshots and + // loader deadlines, the two driver channels (o, d), the io channel the held + // shape carries, the policy in force (`ttls`, whose retention is the + // recovery maximum a later caller is admitted with), the fixture's + // resolution and instance classifier, and the environment's decode fault. type State = { - o: Observation, d: Diagnostics, - now: int, wall: int, phase: int, - frame: int, created: int, expires: int, watermark: int, - candidate: int, candidateCreated: int, maxAge: int, acceptedMaxAge: int, - classifier: int, instanceClassifier: int, readFailed: bool, loadFailed: bool, - canRecover: bool, canWrite: bool, observedFence: int, - request: bool, memo: List[int], closed: List[bool], attached: List[bool], - sources: List[int], activeLoader: int, deadline: int, sourceError: int, - recoveryReceipts: List[{ created: int, accepted: int, maximum: int }] + o: Observation, d: Diagnostics, io: RemoteIO::IO, + now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, loadFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], loaders: List[int], retained: List[Recovery::Snapshot], + sourceBudget: int, deadlines: List[Deadlines::Due], drained: List[bool], sourceLayers: List[str], + ttls: Ttls, resolved: Resolution, instanceClassifier: int } var s: State // Public commands, separate from the state that predicts their consequences. var input: { name: str, choice: int } - // Initial fixture ---------------------------------------------------------- + // Initial fixture: value 1 stored at age 1,000 ms (stale, never fresh) with + // a 60 s physical TTL above the zero watermark; the policy's 5 s maximum. + pure def initialState(choice: int): State = { + o: empty, d: noDiagnostics, io: RemoteIO::NO_IO, + now: INITIAL_NOW_MS, skew: WALL_SKEW_MS, remoteAvailable: true, tracked: true, capacity: 0, + readFailed: false, dumpFailed: false, writeFailed: false, loadFailed: false, + closed: List(false, false), memo: List(NO_VALUE, NO_VALUE), requestFlights: List(NO_OWNER, NO_OWNER), processFlights: List(NO_OWNER), + localValues: List(NO_VALUE), localExpires: List(0), lru: List(List()), + remoteValues: List(VALUE_ONE), created: List(INITIAL_NOW_MS + WALL_SKEW_MS - INITIAL_FRAME_AGE_MS), + expires: List(INITIAL_NOW_MS + FIXTURE_TTL_MS), watermark: List(0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + reads: List(), loads: List(), loaders: List(), retained: List(), + sourceBudget: SOURCE_BUDGET_MS, deadlines: List(), drained: List(), sourceLayers: List(), + ttls: ttlsFor(INITIAL_MAX_AGE_MS), resolved: resolvedFor(choice >= 4), instanceClassifier: instanceClassifierOf(choice) + } action initialize(choice: int): bool = all { (0.to(7)).contains(choice), input' = { name: "init", choice: choice }, - s' = { - o: empty, d: noDiagnostics, - now: 10000, wall: 100000, phase: IDLE, - frame: VALUE_ONE, created: 99000, expires: 70000, watermark: 0, - candidate: 0, candidateCreated: 0, maxAge: 5000, acceptedMaxAge: 5000, - classifier: CLASSIFIER_ALLOW, - instanceClassifier: List( - CLASSIFIER_TIMEOUT_ONLY, CLASSIFIER_ALLOW, CLASSIFIER_DENY, CLASSIFIER_ERROR - ).nth(choice % 4), - readFailed: false, loadFailed: false, - canRecover: false, canWrite: false, observedFence: 0, - request: choice >= 4, memo: List(0, 0), - closed: List(false, false), attached: List(false, false), - sources: List(), activeLoader: 0, deadline: 0, sourceError: SOURCE_ERROR, - recoveryReceipts: List() - } + s' = initialState(choice) } action init = { nondet choice = 0.to(7).oneOf() initialize(choice) } - // Read classification and request admission -------------------------------- - val readable = not(s.readFailed) and s.frame > 0 and s.now < s.expires and fenceAllows(s.created, s.watermark) - val eligible = readable and recoveryAgeAllowed(s.created, s.wall, s.maxAge) - val fresh = eligible and freshAgeAllowed(s.created, s.wall, FRESH_AGE_MS) - pure def candidateValid(x: State): bool = x.candidate > 0 and - recoveryAgeAllowed(x.candidateCreated, x.wall, x.acceptedMaxAge) + // Guards (may read state) --------------------------------------------------- + // One flight at a time: a caller begins only while no caller is pending and + // joins only while one is; a decode is released while one is held; a loader + // settles by its ordinal until its result has arrived (a result arriving + // after its deadline drains). + val idle = s.o.calls.select(c => c == CALL_PENDING).length() == 0 + val decoding = s.loads.length() > 0 + val openScopes = 0.to(1).filter(scope => not(s.closed.nth(scope))) + val unsettledLoaders = s.loaders.indices().filter(i => Deadlines::pending(s, i)) - pure def memoized(x: State, value: int): State = { - memo: if (x.request and (value == VALUE_ONE or value == VALUE_TWO)) - x.memo.indices().fold(x.memo, (published, scope) => - if (x.attached.nth(scope) and not(x.closed.nth(scope))) - published.replaceAt(scope, value) - else published) - else x.memo, - ...x - } - def admitted(scope: int, policy: int): State = - if (s.request and s.memo.nth(scope) > 0) { - o: { calls: s.o.calls.append(s.memo.nth(scope)), policyCalls: s.o.policyCalls + 1, ...s.o }, - ...s - } else { - attached: List(false, false).replaceAt(scope, true), - o: { - calls: s.o.calls.append(CALL_PENDING), policyCalls: s.o.policyCalls + 1, - reads: s.o.reads + 1, loads: s.o.loads + (if (fresh) 1 else 0), - loaders: s.o.loaders + (if (fresh) 0 else 1), - ...s.o - }, - phase: if (fresh) FRESH_DECODE else SOURCE_RUNNING, - classifier: if (policy == CLASSIFIER_INHERIT) s.instanceClassifier else policy, - candidate: if (eligible) s.frame else 0, candidateCreated: s.created, - acceptedMaxAge: s.maxAge, canRecover: not(s.readFailed), canWrite: not(s.readFailed), - observedFence: if (readable) 0 else s.watermark, - sources: if (fresh) s.sources else s.sources.append(SOURCE_REGISTERED), - activeLoader: if (fresh) s.activeLoader else s.sources.length(), - deadline: s.now + SOURCE_BUDGET_MS, sourceError: SOURCE_ERROR, - ...s - } + // Admission, the release and the read in one step (beginRead): a memo hit + // stops the traversal, otherwise the read is dispatched and settled at once + // with the classifier the driver code names, retaining the flight's + // snapshot, holding a fresh decode or starting the loader under the source + // budget. The classifier is the operation's (choices 0 to 2) or the + // instance's (choice 3): two wrappers guarded on the input alone. + action beginClassifiedWith(choice: int): bool = all { + choice % 4 != INHERIT, + input' = { name: "beginCall", choice: choice }, + s' = Diagnostics::beginRead(s, LAYOUT, call(choice / 4), s.resolved, s.ttls, Deadlines::UNBOUNDED, operationClassifier(choice % 4)) + } + action beginInheritedWith(choice: int): bool = all { + choice % 4 == INHERIT, + input' = { name: "beginCall", choice: choice }, + s' = Diagnostics::beginRead(s, LAYOUT, call(choice / 4), s.resolved, s.ttls, Deadlines::UNBOUNDED, s.instanceClassifier) + } action beginWith(choice: int): bool = all { (0.to(7).filter(code => not(s.closed.nth(code / 4)))).contains(choice), - input' = { name: "beginCall", choice: choice }, - s.phase == IDLE, s.o.calls.length() < MAX_CALLS, - s' = admitted(choice / 4, choice % 4) + idle, s.o.calls.length() < MAX_CALLS, + any { beginClassifiedWith(choice), beginInheritedWith(choice) } } action beginCall = { nondet choice = 0.to(7).filter(code => not(s.closed.nth(code / 4))).oneOf() beginWith(choice) } - def joined(scope: int): State = { - val memo = if (s.request) s.memo.nth(scope) else 0 - val joinScope = if (s.request and s.attached.nth(scope)) "request_local" else "process" - { - attached: if (memo > 0) s.attached else s.attached.replaceAt(scope, true), - d: { coalesced: if (memo > 0) s.d.coalesced else s.d.coalesced.append(joinScope), ...s.d }, - o: { calls: s.o.calls.append(memo), policyCalls: s.o.policyCalls + 1, ...s.o }, - ...s - } - } + // A follower begins in a scope while a flight is pending: it joins the + // flight (its scope's registered flight, or the process flight) or is served + // its scope's memo; no read is dispatched, so the classifier passed is the + // instance's the drivers' plain begin inherits. action joinWith(choice: int): bool = all { - (0.to(1).filter(scope => not(s.closed.nth(scope)))).contains(choice), + openScopes.contains(choice), input' = { name: "joinCall", choice: choice }, - all { s.phase != IDLE, s.o.calls.length() < MAX_CALLS, s' = joined(choice) } + not(idle), s.o.calls.length() < MAX_CALLS, + s' = Diagnostics::beginRead(s, LAYOUT, call(choice), s.resolved, s.ttls, Deadlines::UNBOUNDED, s.instanceClassifier) } action joinCall = { - nondet choice = 0.to(1).filter(scope => not(s.closed.nth(scope))).oneOf() + nondet choice = openScopes.oneOf() joinWith(choice) } action closeWith(choice: int): bool = all { - (0.to(1).filter(scope => not(s.closed.nth(scope)))).contains(choice), + openScopes.contains(choice), input' = { name: "closeScope", choice: choice }, - s.request, s.o.calls.length() > 0, - s' = { - closed: s.closed.replaceAt(choice, true), memo: s.memo.replaceAt(choice, 0), - attached: s.attached.replaceAt(choice, false), - ...s - } + s.resolved.layers.request, s.o.calls.length() > 0, + s' = Serving::closeScope(s, LAYOUT, choice) } action closeScope = { - nondet choice = 0.to(1).filter(scope => not(s.closed.nth(scope))).oneOf() + nondet choice = openScopes.oneOf() closeWith(choice) } - // Source settlement and retained recovery ---------------------------------- - pure def rejected(x: State, error: int, timeout: bool): State = { - val mayRecover = x.canRecover and - (x.classifier == CLASSIFIER_ALLOW or (x.classifier == CLASSIFIER_TIMEOUT_ONLY and timeout)) - val mayDecode = mayRecover and candidateValid(x) - { - d: { fallbackErrors: x.d.fallbackErrors.append("remote"), ...x.d }, - phase: if (mayDecode) RECOVERY_DECODE else IDLE, sourceError: error, - o: { - classifications: x.o.classifications + - (if (x.canRecover and x.classifier != CLASSIFIER_TIMEOUT_ONLY) 1 else 0), - loads: x.o.loads + (if (mayDecode) 1 else 0), - recovery: if (mayRecover and not(mayDecode)) x.o.recovery.append("miss") else x.o.recovery, - ...finishPendingCalls(x.o, if (mayDecode) CALL_PENDING else error) - }, - ...x - } - } - def settled(index: int, failure: int): State = { - val sourceSettled = { sources: s.sources.replaceAt(index, SOURCE_SETTLED), ...s } - val mayWrite = s.canWrite and fenceAllows(s.wall, s.observedFence) - if (s.sources.nth(index) == SOURCE_ABANDONED) sourceSettled - else if (failure > SETTLEMENT_SUCCESS) - rejected(sourceSettled, SOURCE_ERROR, failure == SETTLEMENT_PROPAGATED_TIMEOUT) - else { - phase: IDLE, - o: { - dumps: s.o.dumps + (if (mayWrite) 1 else 0), writes: s.o.writes + (if (mayWrite) 1 else 0), - writeTtls: if (mayWrite) s.o.writeTtls.append(s.acceptedMaxAge) else s.o.writeTtls, - ...finishPendingCalls(s.o, VALUE_TWO) - }, - frame: if (mayWrite) VALUE_TWO else s.frame, - created: if (mayWrite) s.wall else s.created, - expires: if (mayWrite) s.now + s.acceptedMaxAge else s.expires, - ...memoized(sourceSettled, VALUE_TWO) - } - } + // Source settlement by the drivers' loader ordinal, and the held decode ----- action resolveWith(choice: int): bool = all { - (s.sources.indices().filter(i => s.sources.nth(i) != SOURCE_SETTLED)).contains(choice), + unsettledLoaders.contains(choice), input' = { name: "resolveLoader", choice: choice }, - s' = settled(choice, SETTLEMENT_SUCCESS) + s' = Diagnostics::settleLoader(s, LAYOUT, choice, VALUE_TWO, false) } action resolveLoader = { - nondet choice = s.sources.indices().filter(i => s.sources.nth(i) != SOURCE_SETTLED).oneOf() + nondet choice = unsettledLoaders.oneOf() resolveWith(choice) } action rejectWith(choice: int): bool = all { - (s.sources.indices().filter(i => s.sources.nth(i) != SOURCE_SETTLED)).contains(choice), + unsettledLoaders.contains(choice), input' = { name: "rejectLoader", choice: choice }, - s' = settled(choice, SETTLEMENT_FAILURE) + s' = Diagnostics::settleLoader(s, LAYOUT, choice, SOURCE_ERROR, false) } action rejectLoader = { - nondet choice = s.sources.indices().filter(i => s.sources.nth(i) != SOURCE_SETTLED).oneOf() + nondet choice = unsettledLoaders.oneOf() rejectWith(choice) } action rejectTimeoutWith(choice: int): bool = all { - (s.sources.indices().filter(i => s.sources.nth(i) != SOURCE_SETTLED)).contains(choice), + unsettledLoaders.contains(choice), input' = { name: "rejectTimeout", choice: choice }, - s' = settled(choice, SETTLEMENT_PROPAGATED_TIMEOUT) + s' = Diagnostics::settleLoader(s, LAYOUT, choice, SOURCE_ERROR, true) } action rejectTimeout = { - nondet choice = s.sources.indices().filter(i => s.sources.nth(i) != SOURCE_SETTLED).oneOf() + nondet choice = unsettledLoaders.oneOf() rejectTimeoutWith(choice) } + // The drivers release the latest held decode; one is held at a time. action releaseLoad = all { input' = { name: "releaseLoad", choice: -1 }, - s.phase == FRESH_DECODE or s.phase == RECOVERY_DECODE, - val recovered = not(s.loadFailed) and candidateValid(s) - val retry = s.phase == FRESH_DECODE and s.loadFailed - val result = if (retry) CALL_PENDING else if (s.phase == FRESH_DECODE or recovered) s.candidate else s.sourceError - s' = { - recoveryReceipts: if (s.phase == RECOVERY_DECODE and recovered) - s.recoveryReceipts.append({ created: s.candidateCreated, accepted: s.wall, maximum: s.acceptedMaxAge }) - else s.recoveryReceipts, - memo: memoized(s, result).memo, - d: if (s.phase == RECOVERY_DECODE and recovered) - { ages: s.d.ages.append(s.wall - s.candidateCreated), ...s.d } - else s.d, - phase: if (retry) SOURCE_RUNNING else IDLE, canRecover: if (retry) false else s.canRecover, - sources: if (retry) s.sources.append(SOURCE_REGISTERED) else s.sources, - activeLoader: if (retry) s.sources.length() else s.activeLoader, - deadline: if (retry) s.now + SOURCE_BUDGET_MS else s.deadline, - o: { - loaders: s.o.loaders + (if (retry) 1 else 0), - recovery: if (s.phase == FRESH_DECODE) s.o.recovery else s.o.recovery.append( - if (s.loadFailed) "deserialization_error" else if (recovered) "served" else "miss"), - ...finishPendingCalls(s.o, result) - }, - ...s - } + decoding, + s' = Diagnostics::settleLoad(s, LAYOUT, RemoteIO::latestLoad(s).load, s.loadFailed) } // Environmental storage, clocks, policy, and faults ------------------------- action seedWith(choice: int): bool = all { (0.to(6)).contains(choice), input' = { name: "seed", choice: choice }, - val age = List(0, 999, 1000, 4999, 5000, -1, 1000).nth(choice) - s' = { - frame: if (choice == 6) VALUE_TWO else VALUE_ONE, - created: s.wall - age, expires: s.now + 60000, - ...s - } + s' = Remote::seedAged(s, KEY, seedValue(choice), seedAge(choice), FIXTURE_TTL_MS) } action seed = { nondet choice = 0.to(6).oneOf() seedWith(choice) } + // Time passes through the diagnosed delivery: a loader deadline reached + // inside the advance completes its flight at the due instant. action advanceBy(choice: int): bool = all { (Set(1, 10, 1000, 4000)).contains(choice), input' = { name: "advance", choice: choice }, - val timedOut = if (s.phase == SOURCE_RUNNING and not(deadlinePendingAt(s.now + choice, s.deadline))) - rejected({ - now: s.deadline, wall: s.wall + s.deadline - s.now, - sources: s.sources.replaceAt(s.activeLoader, SOURCE_ABANDONED), - ...s - }, DEADLINE_ERROR, true) - else s - s' = { now: s.now + choice, wall: s.wall + choice, ...timedOut } + s' = Diagnostics::advance(s, LAYOUT, choice) } action advance = { nondet choice = Set(1, 10, 1000, 4000).oneOf() @@ -282,20 +237,16 @@ module dialcache_recovery_conformance { } action invalidate = all { input' = { name: "invalidate", choice: -1 }, - s' = { - watermark: if (s.wall > s.watermark) s.wall else s.watermark, - o: { invalidations: s.o.invalidations + 1, maintenance: s.o.maintenance.append("ok"), ...s.o }, - ...s - } + s' = Serving::invalidate(s, ENTITY, 0) } action rollbackWall = all { input' = { name: "rollbackWall", choice: -1 }, - s' = { wall: s.wall - WALL_ROLLBACK_MS, ...s } + s' = Clock::shiftWall(s, -WALL_ROLLBACK_MS) } action policyWith(choice: int): bool = all { (Set(2000, 5000)).contains(choice), input' = { name: "policy", choice: choice }, - s' = { maxAge: choice, ...s } + s' = { ttls: ttlsFor(choice), ...s } } action policy = { nondet choice = Set(2000, 5000).oneOf() @@ -326,22 +277,48 @@ module dialcache_recovery_conformance { any { seed, advance, rollbackWall, invalidate, policy, readFault, loadFault, closeScope } } - // Invariants: independent checks over state and observed history. + // Invariants: independent checks over the public channels and the library records. + // Over the public channels, verbatim from the former text. val singleReadPerFlight = s.o.reads <= s.o.calls.length() - val pendingDecodeHasCall = s.phase != RECOVERY_DECODE or s.o.calls.select(c => c == CALL_PENDING).length() > 0 val writesHaveRetention = s.o.writes == s.o.writeTtls.length() - - val closedScopesHaveNoMemo = s.closed.indices().forall(scope => not(s.closed.nth(scope)) or s.memo.nth(scope) == 0) val agesRequireRecovery = s.d.ages.length() == s.o.recovery.select(x => x == "served").length() - val sourcesMatchEffects = s.sources.length() == s.o.loaders - val onlyRegisteredSourceOwnsDeadline = s.phase != SOURCE_RUNNING or s.sources.nth(s.activeLoader) == SOURCE_REGISTERED - - // Check accepted history, not the current age of a value returned earlier. - // Keep these inequalities independent of the transition eligibility helper. - val recoveredValueWasWithinAcceptedAge = s.recoveryReceipts.indices().forall(i => { - val receipt = s.recoveryReceipts.nth(i) - receipt.created <= receipt.accepted and receipt.accepted - receipt.created < receipt.maximum + val closedScopesHaveNoMemo = s.closed.indices().forall(scope => not(s.closed.nth(scope)) or s.memo.nth(scope) == NO_VALUE) + // Over the library records, one step from the former text: a held recovery + // decode belongs to a flight that still owns a pending caller; the drivers' + // loaders are the loader ordinals; a source deadline belongs to a loader + // exactly while its work is undelivered and its flight's result pending + // (the former onlyRegisteredSourceOwnsDeadline: a registered source is a + // pending loader with its deadline, an abandoned one has neither). + val pendingDecodeHasCall = s.loads.indices().forall(i => not(s.loads.nth(i).recovery) or + Flights::ownedBy(s, s.loads.nth(i).flight).exists(c => s.o.calls.nth(c) == CALL_PENDING)) + val sourcesMatchEffects = s.loaders.length() == s.o.loaders + val onlyRegisteredSourceOwnsDeadline = s.loaders.indices().forall(k => + Deadlines::deadlinesOf(s, Deadlines::SOURCE, k).length() == + (if (Deadlines::pending(s, k) and s.sources.nth(s.loaders.nth(k)).result == CALL_PENDING) 1 else 0)) + // The environment restriction stated: one flight at a time, its read settled + // in its own step, so no read is held, at most one decode and one snapshot + // are, and at most one flight is pending. + val oneExecution = s.reads.length() == 0 and s.loads.length() <= 1 and s.retained.length() <= 1 and + s.sources.select(source => source.result == CALL_PENDING).length() <= 1 + // A completed caller either owns no flight (it was served its scope's memo) + // or owns one whose result is recorded and on which no decode is still held. + val completedCallsHaveNoActiveWork = s.o.calls.indices().forall(c => s.o.calls.nth(c) == CALL_PENDING or { + val flight = s.owners.nth(c) + flight < 0 or (s.sources.nth(flight).result != CALL_PENDING and + s.loads.indices().forall(j => s.loads.nth(j).flight != flight)) + }) + // A pending caller owns a flight that is still working: its source's result + // is pending, or a decode is held for it (a flight that recovers stays + // pending until its decode settles). A settlement that completes only some + // of a flight's owners strands the others (C24). + val pendingCallersOwnActiveFlights = s.o.calls.indices().forall(c => s.o.calls.nth(c) != CALL_PENDING or { + val flight = s.owners.nth(c) + flight >= 0 and (s.sources.nth(flight).result == CALL_PENDING or + s.loads.indices().exists(j => s.loads.nth(j).flight == flight)) }) + // The former recoveredValueWasWithinAcceptedAge read a receipt list the held + // shape does not carry; the connection model states it one step over the + // snapshot a served recovery decode settles from (dialcache-recovery-connection.qnt). // Deterministic public histories ------------------------------------------ // The same commands drive exploration and implementation replay. Initialization @@ -367,12 +344,12 @@ module dialcache_recovery_conformance { .then(loadFaultWith(1)).then(releaseLoad) .expect(s.o.calls == List(DEADLINE_ERROR) and s.o.recovery == List("deserialization_error")) run recoveredValueMemoizesOnlyInAttachedRequestTest = initialize(5).then(beginWith(3)) - .then(rejectWith(0)).then(releaseLoad).expect(s.memo == List(1, 0) and s.o.writes == 0) + .then(rejectWith(0)).then(releaseLoad).expect(s.memo == List(VALUE_ONE, NO_VALUE) and s.o.writes == 0) .then(beginWith(3)).expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.reads == 1) .then(beginWith(7)).expect(s.o.calls == List(VALUE_ONE, VALUE_ONE, CALL_PENDING) and s.o.reads == 2) run crossRequestRecoveryMemoizesBothScopesTest = initialize(5).then(beginWith(3)) .then(joinWith(1)).then(joinWith(0)).then(rejectWith(0)).then(releaseLoad) - .expect(s.memo == List(1, 1) and s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_ONE) and + .expect(s.memo == List(VALUE_ONE, VALUE_ONE) and s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_ONE) and s.d.coalesced == List("process", "request_local") and s.o.loads == 1) // Both request scopes join one flight, then independently reuse its recovered // value. These calls make request publication observable without shared writes. @@ -385,10 +362,10 @@ module dialcache_recovery_conformance { and s.o.classifications == 1 and s.o.dumps == 0 and s.o.writes == 0) run closedRequestCannotReceiveLateRecoveryMemoTest = initialize(5).then(beginWith(3)).then(rejectWith(0)) .then(closeWith(0)).then(releaseLoad) - .expect(s.memo == List(0, 0) and s.o.calls == List(VALUE_ONE)).then(beginWith(7)) + .expect(s.memo == List(NO_VALUE, NO_VALUE) and s.o.calls == List(VALUE_ONE)).then(beginWith(7)) .expect(s.o.reads == 2 and s.o.calls == List(VALUE_ONE, CALL_PENDING)) run rollbackCannotLowerInvalidationWatermarkTest = initialize(0).then(invalidate).then(rollbackWall).then(invalidate) - .expect(s.watermark == 100000) + .expect(s.watermark.nth(ENTITY) == 100000) // Probe the retained fence through a real source result and suppressed refill. .then(beginWith(3)).then(resolveWith(0)) .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 0 and s.o.dumps == 0) @@ -438,7 +415,7 @@ module dialcache_recovery_conformance { and s.o.recovery == List("served") and s.o.writes == 0) run replacementDoesNotChangeRetainedRecoveryTest = initialize(1) .then(beginWith(0)).then(seedWith(6)).then(rejectWith(0)).then(releaseLoad) - .expect(s.o.calls == List(VALUE_ONE) and s.frame == VALUE_TWO + .expect(s.o.calls == List(VALUE_ONE) and s.remoteValues.nth(KEY) == VALUE_TWO and s.o.reads == 1 and s.o.loads == 1 and s.o.writes == 0) run maximumAgeBeforeDecodePreservesSourceTest = initialize(1) .then(seedWith(3)).then(beginWith(0)).then(advanceBy(1)).then(rejectWith(0)) diff --git a/formal/dialcache-recovery-connection.qnt b/formal/dialcache-recovery-connection.qnt index 132b6eb5..2da91c97 100644 --- a/formal/dialcache-recovery-connection.qnt +++ b/formal/dialcache-recovery-connection.qnt @@ -1,56 +1,82 @@ module dialcache_recovery_connection { - import dialcache_recovery_read_conformance as profile from "./dialcache-recovery-read-conformance" - import cache_contract.* from "./cache-contract" + import dialcache_recovery_conformance as profile from "./dialcache-recovery-conformance" + import conformance_observations.* from "./conformance-observations" + import encodings.* from "./kernel/encodings" + import remote_io as RemoteIO from "./kernel/remote-io" + import recovery as Recovery from "./kernel/recovery" + import payloads as Payloads from "./kernel/payloads" + import clock as Clock from "./kernel/clock" - // Bounded correspondence for the real recovery-read profile, not a second - // replay machine. Its original actions run unchanged. This monitor acquires - // a reference snapshot from storage at read settlement and checks subsequent - // retained ownership and returned observations against that acquired record. - // Frame validity/fence/decode checks remain profile obligations. One active - // call and the profile's finite domain bound this connection; no fairness claim. - var snapshot: RecoverySnapshot - var capturedMaximum: int - var before: { phase: int, wall: int, calls: int, maximum: int } + // Bounded correspondence for the composed recovery profile, not a second + // replay machine: its actions execute unchanged and this monitor keeps the + // profile's previous state to state one-step facts the profile's own + // invariants cannot (the profile carries no receipt of a served recovery and + // no record of who was pending). It reads storage fields, the drivers' + // channels and the library records; the age arithmetic is restated here, + // never taken from cache_rules. One flight at a time bounds it; no fairness claim. + var before: profile::State - action init = all { - profile::init, - snapshot' = captureRecovery(-1, 0, 0, 0, 0), - capturedMaximum' = 0, - before' = { phase: profile::IDLE, wall: profile::WALL_ORIGIN, calls: 0, maximum: 0 } - } - // Admission acquires the preceding policy reply, independently of the - // profile's acceptedMaximum field. A held read cannot acquire a later reply. - val admittedMaximum = if (profile::input.name == "beginCall") before.maximum else capturedMaximum - // Capture immediately after the profile's read, before the next external - // transition can replace storage or policy. Read the storage fields, not the - // profile's predicted candidate fields: confusing those must be detectable. - val acquired = if (profile::input.name == "releaseRead") - captureRecovery(profile::s.o.calls.length() - 1, - profile::payloadValue(profile::s.frame), profile::s.created, - admittedMaximum, profile::s.wall) - else snapshot + action init = all { profile::init, before' = profile::initialState(0) } + action step = all { before' = profile::s, profile::step } - action step = all { - snapshot' = acquired, - capturedMaximum' = admittedMaximum, - before' = { phase: profile::s.phase, wall: profile::s.wall, calls: profile::s.o.calls.length(), - maximum: profile::s.maximumMs }, - profile::step - } + // The step that settled a recovery decode, and whether it served. + val recoveryDecodeSettling = profile::input.name == "releaseLoad" and + before.loads.length() > 0 and RemoteIO::latestLoad(before).recovery + val served = profile::s.o.recovery.length() > before.o.recovery.length() and + profile::s.o.recovery.nth(profile::s.o.recovery.length() - 1) == "served" + val servedFlight = RemoteIO::latestLoad(before).flight + val servedSnapshot = Recovery::retainedFor(before, servedFlight) + // The step that dispatched a read, and the flight it registered (the newest source). + val readDispatched = profile::s.o.reads > before.o.reads + val newFlight = profile::s.sources.length() - 1 - val retainedSnapshotMatchesAcquisition = - (profile::s.o.calls.length() == 0 or profile::s.acceptedMaximum == admittedMaximum) and - (profile::s.phase != profile::SOURCE_RUNNING and profile::s.phase != profile::RECOVERY_DECODE or - profile::s.candidate == 0 or { - val reference = acquired - reference.owner == profile::s.o.calls.length() - 1 and - reference.payload == profile::payloadValue(profile::s.candidate) and - reference.created == profile::s.candidateCreated and - reference.maximum == profile::s.acceptedMaximum + // C45: a recovered value was served at a wall clock at or after its stamp + // and strictly less than the maximum admitted for it, at the settlement's + // wall clock (clocks do not move in a release). The former profile + // invariant of the same name over receipts, restated one step. + val recoveredValueWasWithinAcceptedAge = not(recoveryDecodeSettling and served) or { + val wall = Clock::wallOf(before) + servedSnapshot.created <= wall and wall - servedSnapshot.created < servedSnapshot.maximum + } + // C24/C43: a served recovery completes every caller its flight owned that + // was pending with the value the candidate decodes to, and changes no + // other caller's outcome (the former legacy monitor's flightRecoveryMatchesContract). + val recoveredFlightCompletesEveryOwner = not(recoveryDecodeSettling and served) or + before.o.calls.indices().forall(c => + if (before.owners.nth(c) == servedFlight and before.o.calls.nth(c) == CALL_PENDING) + profile::s.o.calls.nth(c) == Payloads::valueOf(servedSnapshot.candidate) + else profile::s.o.calls.nth(c) == before.o.calls.nth(c)) + // C44: the snapshot a read retains is the frame the read acquired, under + // the maximum in force at admission: its candidate is that frame's code + // (or none), its stamp the frame's, its maximum the policy's retention + // (the former legacy monitor's flightKeepsAcquiredSnapshot). + val retainedSnapshotMatchesAcquisition = not(readDispatched) or + profile::s.retained.indices().forall(i => { + val snapshot = profile::s.retained.nth(i) + snapshot.flight != newFlight or (snapshot.maximum == before.ttls.retentionMs and + snapshot.created == before.created.nth(profile::KEY) and + (snapshot.candidate == NO_VALUE or snapshot.candidate == before.remoteValues.nth(profile::KEY))) }) + // A recovered value publishes nothing shared: no dump and no write. + val recoveredResultsNeverPublishShared = not(recoveryDecodeSettling) or + (profile::s.o.dumps == before.o.dumps and profile::s.o.writes == before.o.writes) - val recoveryReturnMatchesAcquiredContract = - before.phase != profile::RECOVERY_DECODE or profile::input.name != "releaseLoad" or - profile::s.o.recovery.nth(profile::s.o.recovery.length() - 1) != "served" or - recoveryReturnAllowed(snapshot, before.calls - 1, profile::s.o.calls.nth(profile::s.o.calls.length() - 1), before.wall) + // Follow-up recorded for this slice (PR 188): the candidate window pinned + // against the raw frame age at acquisition, independently of the recheck. + // At a step that dispatched a read, the new flight holds a snapshot unless + // the read failed or the frame was fresh; its candidate is the frame code + // exactly when the frame was visible (present, unexpired, above the + // watermark) at an age in [fresh, maximum), else none. + val retainedCandidateWindow = not(readDispatched) or { + val wall = Clock::wallOf(before) + val created = before.created.nth(profile::KEY) + val code = before.remoteValues.nth(profile::KEY) + val visible = code > NO_VALUE and before.now < before.expires.nth(profile::KEY) and created > before.watermark.nth(profile::ENTITY) + val age = wall - created + val isFresh = visible and created <= wall and age < before.ttls.freshMs + val window = visible and created <= wall and age >= before.ttls.freshMs and age < before.ttls.retentionMs + val snapshot = Recovery::retainedFor(profile::s, newFlight) + if (before.readFailed or isFresh) snapshot.flight == NO_OWNER + else snapshot.flight == newFlight and snapshot.candidate == (if (window) code else NO_VALUE) + } } diff --git a/formal/dialcache-recovery-read-conformance.qnt b/formal/dialcache-recovery-read-conformance.qnt index c1020b85..6e0923be 100644 --- a/formal/dialcache-recovery-read-conformance.qnt +++ b/formal/dialcache-recovery-read-conformance.qnt @@ -1,111 +1,137 @@ module dialcache_recovery_read_conformance { - import cache_rules.* from "./cache-rules" import conformance_observations.* from "./conformance-observations" - + import encodings.* from "./kernel/encodings" + import calls.* from "./kernel/calls" + import layer_policy.* from "./kernel/layer-policy" + import serving as Serving from "./kernel/serving" + import remote_io as RemoteIO from "./kernel/remote-io" + import recovery as Recovery from "./kernel/recovery" + import remote_frames as Remote from "./kernel/remote-frames" + import markers as Markers from "./kernel/markers" + import compression as Compression from "./kernel/compression" + import payloads as Payloads from "./kernel/payloads" + import clock as Clock from "./kernel/clock" + import policy_gate as Gate from "./kernel/policy-gate" + // Model boundary ----------------------------------------------------------- // One tracked or untracked operation crosses request, local and remote // storage. Reads and decoding can wait; successful source publication settles // within its action. C22/C28/C37/C38/C43/C45 are the selected contracts. // Two request scopes and one transient caller distinguish request memo from // process-local reuse. Only one execution is active: concurrent ownership and - // source/read deadlines remain in the independent/effects profiles. - // The read budget exceeds the entire elapsed-time domain; sources are - // explicitly unbounded. Logical age and native retention remain independent. + // source/read deadlines remain in the independent/effects profiles. The read + // budget exceeds the entire elapsed-time domain; sources are explicitly + // unbounded. Logical age and native retention remain independent. + // See BEHAVIOR.md: "Additional composition profiles" for this profile's row + // and replay/profiles/recovery-read.mjs for the drivers' input mapping (the + // seed codes 0..18, the policy codes and the advance choices). + // Every rule is a kernel transition (formal/kernel): the held remote + // traversal (remote_io) with its recovery snapshots (recovery) and payload + // classes (payloads) over the layered shape, admitted and released in one + // step (RemoteIO::begin: replies are immediate); the two settlements that + // hold a decode through the compression channel variants (compression); the + // invalidation marker's lifetime and expiry (markers); the frames a seed + // stores (remote_frames). This module owns the bounded state, the fixture + // decoding (the payload code, age and retention a seed choice names, the + // TTLs a policy code resolves to), the input choices and the guards. `now` + // is elapsed time; the wall clock is `now` plus the drivers' origin. + // Trace encodings and fixture bounds --------------------------------------- // Initialization choices are part of the replay input: keep these codes stable. pure val UNTRACKED_MODE = 0 pure val TRACKED_MODE = 1 pure val TRACKED_WITH_SHADOW_MODE = 2 - pure val IDLE = 0 - pure val READING = 1 - pure val FRESH_DECODE = 2 - pure val SOURCE_RUNNING = 3 - pure val RECOVERY_DECODE = 4 - pure val ABSENT_PAYLOAD = 0 - pure val RAW_ONE = 1 - pure val RAW_TWO = 2 - pure val RAW_ABSENCE = 16 - pure val COMPRESSED_ONE = 11 - pure val CORRUPT_COMPRESSED = 12 - pure val UNSUPPORTED_ENCODING = 13 - pure val UNSAFE_TIMESTAMP = 14 - pure val UNSUPPORTED_VERSION = 15 + pure val KEY = 0 + pure val ENTITY = 0 pure val WALL_ORIGIN = 1000000000 - pure val TRACKED_CAP_MS = 3600000 - pure val MARKER_FLOOR_MS = 7200000 - pure val MARKER_MARGIN_MS = 60000 pure val READ_BUDGET_MS = 30000000 pure val MAX_ELAPSED_MS = 14400000 - pure val LOCAL_TTL_MS = 1000 pure val MAX_CALLS = 10 - - type Marker = { cutoffMs: int, ttlMs: int } - type ReadReceipt = { validFrame: bool, age: int, freshMs: int, freshDecode: bool } - type WriteReceipt = { requested: int, tracked: bool, ttl: int } - type RecoveryReceipt = { - dumpsBefore: int, dumpsAfter: int, writesBefore: int, writesAfter: int, - localBefore: int, localAfter: int, age: int, maximum: int, served: bool + // The drivers' unsafe-timestamp fixture (replay/profiles/recovery-read.mjs, + // seed 16): a frame stamped at 2^53 + 1, above every wall clock the profile + // reaches. Stored as it is, cache_rules does the rest: a stamp after the + // observed wall fails every age judgment (never fresh, never a candidate) + // and clears the fence (the raw compare), so its miss refills unfenced, as + // the implementations treat an unsafe stamp. + pure val UNSAFE_STAMP_MS = 9007199254740993 + // One key on one instance, two persistent request scopes (contexts 0 and 1; + // context 2 is a transient caller), one operation per entity; the drivers + // never probe a source's scope. + pure val LAYOUT: Serving::Layout = { + keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } - // now is monotonic elapsed milliseconds; wall is application wall-clock ms. - // Stored frame/candidate timestamps use wall; local/remote/marker expiry uses - // now. s.o, io, markers and compression predict observations checked by the - // native drivers. Receipts retain before/after facts for independent invariants. + // Every reply enables every layer and coalesces, as the implementation's + // default policy does (layer_policy::resolution(ALL_LAYERS, true)); with + // one execution at a time no caller ever finds a flight to join. + pure val ALL: Resolution = { layers: { request: true, local: true, remote: true }, coalesce: true } + pure def call(context: int): Call = { instance: 0, key: KEY, context: context, enabled: true, keyFailed: false } + + // State: the layered shape with its held remote effects, recovery snapshots + // and marker lifetime, the four driver channels (o, io, markers, + // compression), the policy in force (`ttls`: the local insertion TTL, the + // remote freshness and the retention that is also the recovery maximum, + // captured by each held read at admission) and the shadow selection that + // restricts the inputs of mode 2. type State = { - o: Observation, - io: { budgets: List[int], aborted: List[int], sourceErrors: List[int] }, - markers: List[Marker], compression: List[str], - tracked: bool, shadowSelected: bool, now: int, wall: int, phase: int, writeFailed: bool, - frame: int, created: int, expires: int, - watermark: int, markerExpires: int, - localValue: int, localExpires: int, localVersion: int, - memo: List[int], closed: List[bool], scope: int, - freshMs: int, maximumMs: int, acceptedFresh: int, acceptedMaximum: int, - candidate: int, candidateCreated: int, canRecover: bool, canWrite: bool, - observedFence: int, activeSource: int, - readReceipts: List[ReadReceipt], writeReceipts: List[WriteReceipt], - recoveryReceipts: List[RecoveryReceipt] + o: Observation, io: RemoteIO::IO, markers: List[Markers::Marker], compression: List[str], + now: int, skew: int, remoteAvailable: bool, tracked: bool, shadowSelected: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], markerExpires: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], loaders: List[int], retained: List[Recovery::Snapshot], + ttls: Ttls } var s: State // These are external replay commands, never predicted observations. The // explicit record survives deterministic `quint test --out-itf` exports. var input: { name: str, choice: int } + // Input decoding (reads no state) ------------------------------------------ + // The TTLs a policy code resolves to: a 1 s local insertion TTL, 1 s remote + // freshness (2 h under code 2) and the recovery maximum as the retention. + pure def ttlsOf(code: int): Ttls = { + localMs: 1000, + freshMs: if (code == 2) 7200000 else 1000, + retentionMs: if (code == 2) 14400000 else if (code == 1) 7200000 else 5000 + } + // External fixtures: codes select actual raw/enveloped bytes, age and + // physical lifetime. Compressed bodies are fixed portable zstd examples in + // the driver; the payload code states their decode outcome (payloads), not + // the compression algorithm. Code 17 is a frame of an unsupported version, + // which the adapter reads as a miss, so it is stored as absence; code 16 is + // the unsafe stamp, stored by `seedUnsafeWith`. + pure def seedAge(code: int): int = + List(0, 999, 1000, 4999, 5000, 3600001, 7200000, 0, 1000, 1000, 0, 0, 4999, 0, 0, 1000, 0, 0, 1000).nth(code) + pure def seedPayload(code: int): int = + if (code == 7) VALUE_TWO + else if (code == 8 or code == 12 or code == 13) Payloads::COMPRESSED + VALUE_ONE + else if (code == 9 or code == 14) Payloads::CORRUPT + VALUE_ONE + else if (code == 10) Payloads::UNSUPPORTED_ENCODING + else if (code == 17) NO_VALUE + else if (code == 18) VALUE_ABSENT + else VALUE_ONE + pure def seedRetention(code: int): int = if (code == 11 or code == 15) 1000 else 60000 + + // Initial fixture: no frame, no watermark, no marker, empty local and + // request storage, one local slot, the policy of code 0 in force. + // TRACKED_WITH_SHADOW_MODE isolates recovery with a selected shadow policy: + // only stale bytes and failed sources are admitted in this mode (the seed + // and loader guards), so fresh-hit diagnostic jobs remain in the shadow + // profiles. action initialized(mode: int): bool = all { input' = { name: "init", choice: mode }, s' = { - o: empty, - io: { budgets: List(), aborted: List(), sourceErrors: List() }, - markers: List(), - compression: List(), - tracked: mode != UNTRACKED_MODE, - shadowSelected: mode == TRACKED_WITH_SHADOW_MODE, - now: 0, - wall: WALL_ORIGIN, - phase: IDLE, - writeFailed: false, - frame: ABSENT_PAYLOAD, - created: 0, - expires: 0, - watermark: 0, - markerExpires: 0, - localValue: 0, - localExpires: 0, - localVersion: 0, - memo: List(0, 0), - closed: List(false, false), - scope: 2, - freshMs: 1000, - maximumMs: 5000, - acceptedFresh: 1000, - acceptedMaximum: 5000, - candidate: 0, - candidateCreated: 0, - canRecover: false, - canWrite: false, - observedFence: 0, - activeSource: -1, - readReceipts: List(), - writeReceipts: List(), - recoveryReceipts: List() + o: empty, io: RemoteIO::NO_IO, markers: List(), compression: List(), + now: 0, skew: WALL_ORIGIN, remoteAvailable: true, tracked: mode != UNTRACKED_MODE, + shadowSelected: mode == TRACKED_WITH_SHADOW_MODE, capacity: 1, + readFailed: false, dumpFailed: false, writeFailed: false, + closed: List(false, false), memo: List(NO_VALUE, NO_VALUE), requestFlights: List(NO_OWNER, NO_OWNER), processFlights: List(NO_OWNER), + localValues: List(NO_VALUE), localExpires: List(0), lru: List(List()), + remoteValues: List(NO_VALUE), created: List(0), expires: List(0), watermark: List(0), markerExpires: List(0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + reads: List(), loads: List(), loaders: List(), retained: List(), + ttls: ttlsOf(0) } } action init = { @@ -113,247 +139,175 @@ module dialcache_recovery_read_conformance { initialized(choice) } - pure def effectiveMarker(x: State): int = if (x.now < x.markerExpires) x.watermark else 0 - pure def payloadValue(payload: int): int = - if (payload == RAW_ABSENCE) VALUE_ABSENT else if (payload == RAW_TWO) VALUE_TWO else VALUE_ONE - pure def decodeFails(payload: int): bool = payload == CORRUPT_COMPRESSED - pure def startedCompression(x: State, payload: int): List[str] = - if (payload == COMPRESSED_ONE) x.compression.append("decompressed") - else if (payload == CORRUPT_COMPRESSED) x.compression.append("fallback_raw") - else x.compression - pure def validCandidate(x: State): bool = x.candidate > 0 and - recoveryAgeAllowed(x.candidateCreated, x.wall, x.acceptedMaximum) - pure def complete(x: State, value: int): State = { - phase: IDLE, - memo: if (value != SOURCE_ERROR and x.scope < 2 and not(x.closed.nth(x.scope))) - x.memo.replaceAt(x.scope, value) else x.memo, - io: { - sourceErrors: x.io.sourceErrors.replaceAt(x.io.sourceErrors.length() - 1, - if (value == SOURCE_ERROR) x.activeSource + 1 else 0), - ...x.io - }, - o: finishPendingCalls(x.o, value), ...x - } - pure def startSource(x: State): State = { - phase: SOURCE_RUNNING, activeSource: x.o.loaders, - o: { loaders: x.o.loaders + 1, ...x.o }, ...x - } + // Guards (may read state) --------------------------------------------------- + // One execution at a time: a caller is admitted only while none is pending, + // and the drivers settle the latest effect (the held read, the held decode, + // the newest loader) rather than one by index. During a recovery decode the + // flight already records its source error, so `decoding` is what excludes + // a loader settlement then. + val idle = s.o.calls.select(c => c == CALL_PENDING).length() == 0 + val reading = s.reads.length() > 0 + val decoding = s.loads.length() > 0 + val running = not(reading) and not(decoding) and s.loaders.length() > 0 and + s.sources.nth(s.loaders.nth(s.loaders.length() - 1)).result == CALL_PENDING - // Request and local hits stop traversal. Local expiry uses the insertion - // deadline; a hit never alters it. Policy is captured before a held read. - // Contexts 0/1 own persistent request memos; context 2 is a transient caller. + // Admission and the held release in one step: request and local hits stop + // the traversal (a local hit never renews insertion), otherwise the read is + // dispatched under the read budget and its flight captures the policy in + // force (C45). Contexts 0/1 own persistent request memos; context 2 is a + // transient caller. --------------------------------------------------------- action beginIn(context: int): bool = all { - s.phase == IDLE, + idle, s.o.calls.length() < MAX_CALLS, context == 2 or not(s.closed.nth(context)), input' = { name: "beginCall", choice: context }, - val memoValue = if (context < 2) s.memo.nth(context) else 0 - val localHit = memoValue == 0 and s.localValue > 0 and localEntryLiveAt(s.now, s.localExpires) - val value = if (memoValue > 0) memoValue else if (localHit) s.localValue else CALL_PENDING - val admitted = { - scope: context, acceptedFresh: s.freshMs, acceptedMaximum: s.maximumMs, - candidate: 0, candidateCreated: 0, - io: { - sourceErrors: s.io.sourceErrors.append(0), - budgets: if (value == CALL_PENDING) s.io.budgets.append(READ_BUDGET_MS) else s.io.budgets, - ...s.io - }, - o: { - calls: s.o.calls.append(value), policyCalls: s.o.policyCalls + 1, - reads: s.o.reads + (if (value == CALL_PENDING) 1 else 0), ...s.o - }, ...s - } - s' = if (value == CALL_PENDING) { phase: READING, ...admitted } - else complete(admitted, value) + s' = RemoteIO::begin(s, LAYOUT, call(context), ALL, s.ttls, READ_BUDGET_MS) } action beginCall = { nondet choice = Set(0, 1, 2).oneOf(); beginIn(choice) } - // The adapter observes current storage when its held read settles. Unsupported - // encoding throws only after physical presence and the tracked fence pass. - // Freshness samples the settlement wall clock, not read dispatch time. + // External settlement of the latest effect. The adapter observes current + // storage when its held read settles: freshness samples the settlement wall + // clock (C22), an unsupported encoding fails the read once the frame is + // present and fence-cleared (C28), and the compression variants report the + // outcome of the decode a settlement holds (C59). Under `oneExecution` at + // most one read and one decode are held, so RemoteIO::latestRead, + // latestLoad (the last held record) and latestOrdinal (the newest loader) + // are the drivers' latest dispatched effect: `observed.reads - 1`, + // `observed.loads - 1` and `observed.loaders - 1` in + // replay/profiles/recovery-read.mjs. ----------------------------------------- action releaseRead = all { - s.phase == READING, + reading, input' = { name: "releaseRead", choice: -1 }, - val present = s.frame > 0 and s.now < s.expires - val fenced = s.tracked and not(fenceAllows(s.created, effectiveMarker(s))) - val supportedFrame = s.frame != UNSUPPORTED_VERSION and s.frame != UNSAFE_TIMESTAMP - val validFrame = present and not(fenced) and supportedFrame and s.frame != UNSUPPORTED_ENCODING - val encodingError = present and not(fenced) and s.frame == UNSUPPORTED_ENCODING - val age = s.wall - s.created - val freshHit = validFrame and freshAgeAllowed(s.created, s.wall, s.acceptedFresh) - val retained = validFrame and recoveryAgeAllowed(s.created, s.wall, s.acceptedMaximum) - val acquired = { - candidate: if (retained or freshHit) s.frame else 0, candidateCreated: s.created, - canRecover: not(encodingError), canWrite: not(encodingError), - observedFence: if (s.tracked and (not(present) or fenced or s.frame == UNSUPPORTED_VERSION)) effectiveMarker(s) else 0, - readReceipts: s.readReceipts.append({ validFrame: validFrame, age: age, - freshMs: s.acceptedFresh, freshDecode: freshHit }), - ...s - } - s' = if (freshHit) { - phase: FRESH_DECODE, compression: startedCompression(s, s.frame), - o: { loads: s.o.loads + 1, ...s.o }, ...acquired - } else startSource(acquired) + s' = Compression::settleRead(s, LAYOUT, RemoteIO::latestRead(s).read, false, Recovery::ALLOW) } - action rejectLoader = all { - s.phase == SOURCE_RUNNING, + running, input' = { name: "rejectLoader", choice: -1 }, - val decode = s.canRecover and validCandidate(s) - val rejected = { - o: { classifications: s.o.classifications + (if (s.canRecover) 1 else 0), - loads: s.o.loads + (if (decode) 1 else 0), - recovery: if (s.canRecover and not(decode)) s.o.recovery.append("miss") else s.o.recovery, - ...s.o }, ...s - } - s' = if (decode) { phase: RECOVERY_DECODE, compression: startedCompression(s, s.candidate), ...rejected } - else complete(rejected, SOURCE_ERROR) + s' = Compression::settleLoader(s, LAYOUT, RemoteIO::latestOrdinal(s), SOURCE_ERROR, false) } action resolveLoader = all { - s.phase == SOURCE_RUNNING, + running, not(s.shadowSelected), input' = { name: "resolveLoader", choice: -1 }, - val requested = if (s.acceptedMaximum > s.acceptedFresh) s.acceptedMaximum else s.acceptedFresh - val physicalTtl = if (s.tracked and requested > TRACKED_CAP_MS) TRACKED_CAP_MS else requested - val publishRemote = s.canWrite and fenceAllows(s.wall, s.observedFence) - val publishLocal = not(s.tracked) - val published = { - frame: if (publishRemote and not(s.writeFailed)) RAW_TWO else s.frame, - created: if (publishRemote and not(s.writeFailed)) s.wall else s.created, - expires: if (publishRemote and not(s.writeFailed)) s.now + physicalTtl else s.expires, - localValue: if (publishLocal) VALUE_TWO else s.localValue, - localExpires: if (publishLocal) s.now + LOCAL_TTL_MS else s.localExpires, - localVersion: s.localVersion + (if (publishLocal) 1 else 0), - writeReceipts: if (publishRemote) s.writeReceipts.append({ requested: requested, - tracked: s.tracked, ttl: physicalTtl }) else s.writeReceipts, - o: { dumps: s.o.dumps + (if (publishRemote) 1 else 0), - writes: s.o.writes + (if (publishRemote) 1 else 0), - writeTtls: if (publishRemote) s.o.writeTtls.append(physicalTtl) else s.o.writeTtls, - ...s.o }, ...s - } - s' = complete(published, VALUE_TWO) + s' = Compression::settleLoader(s, LAYOUT, RemoteIO::latestOrdinal(s), VALUE_TWO, false) } - // Decoding holds the acquired bytes. Fresh hits warm process storage after // successful decode; retained recovery can publish only to its live request. action releaseLoad = all { - s.phase == FRESH_DECODE or s.phase == RECOVERY_DECODE, + decoding, input' = { name: "releaseLoad", choice: -1 }, - val failed = decodeFails(s.candidate) - val recovery = s.phase == RECOVERY_DECODE - val served = not(failed) and (not(recovery) or validCandidate(s)) - val value = if (served) payloadValue(s.candidate) else SOURCE_ERROR - val decoded = { - localValue: if (served and not(recovery)) value else s.localValue, - localExpires: if (served and not(recovery)) s.now + LOCAL_TTL_MS else s.localExpires, - localVersion: s.localVersion + (if (served and not(recovery)) 1 else 0), - o: { recovery: if (recovery) s.o.recovery.append( - if (failed) "deserialization_error" else if (served) "served" else "miss") else s.o.recovery, ...s.o }, - ...s - } - val completed = if (not(recovery) and failed) - startSource({ canRecover: false, ...decoded }) else complete(decoded, value) - s' = { - recoveryReceipts: if (recovery) s.recoveryReceipts.append({ - dumpsBefore: s.o.dumps, dumpsAfter: completed.o.dumps, - writesBefore: s.o.writes, writesAfter: completed.o.writes, - localBefore: s.localVersion, localAfter: completed.localVersion, - age: s.wall - s.candidateCreated, maximum: s.acceptedMaximum, served: served - }) else s.recoveryReceipts, - ...completed - } + s' = RemoteIO::settleLoad(s, LAYOUT, RemoteIO::latestLoad(s).load, false) } - // External fixtures: codes select actual raw/enveloped bytes, age and physical - // lifetime. Compressed bodies are fixed portable zstd examples in the driver; - // this model states their decode outcome, not the compression algorithm. - // TRACKED_WITH_SHADOW_MODE isolates recovery with a selected shadow policy. - // Only stale bytes and failed sources are admitted in this mode, so fresh-hit - // diagnostic jobs remain in the shadow profiles. Absence is stored data here; - // ABSENT_PAYLOAD still means that the remote key itself does not exist. - action seedWith(code: int): bool = all { + // Environmental storage, clocks, policy, scopes and maintenance ------------- + // A seed stores a frame at an age (`seedAgedWith`) or, for code 16, the + // drivers' literal unsafe stamp (`seedUnsafeWith`): two wrappers guarded on + // the input alone and selected under `any`, so each assigns exactly one + // library transition. Only stale bytes and failed sources are admitted in + // shadow mode; absence is stored data (code 18, shadow mode only) and + // NO_VALUE still means that the remote key itself does not exist. + action seedAgedWith(code: int): bool = all { + code != 16, not(s.shadowSelected) or code == 2 or code == 18, s.shadowSelected or code != 18, input' = { name: "seed", choice: code }, - val age = List(0, 999, 1000, 4999, 5000, 3600001, 7200000, 0, 1000, 1000, 0, 0, 4999, 0, 0, 1000, 0, 0, 1000).nth(code) - val payload = if (code == 7) RAW_TWO else if (code == 8 or code == 12 or code == 13) COMPRESSED_ONE - else if (code == 9 or code == 14) CORRUPT_COMPRESSED else if (code == 10) UNSUPPORTED_ENCODING - else if (code == 18) RAW_ABSENCE else if (code == 16) UNSAFE_TIMESTAMP else if (code == 17) UNSUPPORTED_VERSION else RAW_ONE - s' = { frame: payload, created: if (code == 16) 9007199254740993 else s.wall - age, - expires: s.now + (if (code == 11 or code == 15) 1000 else 60000), ...s } + s' = Remote::seedAged(s, KEY, seedPayload(code), seedAge(code), seedRetention(code)) + } + action seedUnsafeWith(code: int): bool = all { + code == 16, + not(s.shadowSelected), + input' = { name: "seed", choice: code }, + s' = Remote::storeFrame(s, KEY, VALUE_ONE, UNSAFE_STAMP_MS, seedRetention(code)) } + action seedWith(code: int): bool = any { seedAgedWith(code), seedUnsafeWith(code) } action seed = { nondet choice = 0.to(18).oneOf(); seedWith(choice) } + // Time passes through the markers' advance, which expires a lapsed marker. action advanceBy(ms: int): bool = all { s.now + ms <= MAX_ELAPSED_MS, input' = { name: "advance", choice: ms }, - s' = { now: s.now + ms, wall: s.wall + ms, ...s } + s' = Markers::advance(s, ms) } action advance = { nondet choice = Set(1, 999, 1000, 4000, 60000, 3600000).oneOf(); advanceBy(choice) } action policyWith(code: int): bool = all { not(s.shadowSelected), input' = { name: "policy", choice: code }, - s' = { - freshMs: if (code == 2) 7200000 else 1000, - maximumMs: if (code == 2) 14400000 else if (code == 1) 7200000 else 5000, ...s - } + s' = { ttls: ttlsOf(code), ...s } } action policy = { nondet choice = Set(0, 1, 2).oneOf(); policyWith(choice) } action closeContext(context: int): bool = all { not(s.closed.nth(context)), input' = { name: "closeScope", choice: context }, - s' = { closed: s.closed.replaceAt(context, true), memo: s.memo.replaceAt(context, 0), ...s } + s' = Serving::closeScope(s, LAYOUT, context) } action closeScope = { nondet choice = Set(0, 1).oneOf(); closeContext(choice) } - - // Invalidation owns marker creation/extension. Read and value-write actions - // never update marker state; the separate command observes its external TTL. + // Invalidation owns marker creation and extension (markers). Read and + // value-write actions never update marker state; the separate command + // observes the marker's external cutoff and TTL against the drivers' origin. action invalidate = all { input' = { name: "invalidate", choice: -1 }, - val cutoff = if (s.wall > effectiveMarker(s)) s.wall else effectiveMarker(s) - val requested = cutoff - s.wall + TRACKED_CAP_MS + MARKER_MARGIN_MS - val ttl = if (requested > MARKER_FLOOR_MS) requested else MARKER_FLOOR_MS - s' = if (s.writeFailed) { - o: { invalidations: s.o.invalidations + 1, maintenance: s.o.maintenance.append("mutation_error"), ...s.o }, ...s - } else { watermark: cutoff, - markerExpires: if (s.markerExpires > s.now + ttl) s.markerExpires else s.now + ttl, - o: { invalidations: s.o.invalidations + 1, maintenance: s.o.maintenance.append("ok"), ...s.o }, ...s } + s' = Markers::invalidate(s, ENTITY, 0) } action observeMarker = all { input' = { name: "observeMarker", choice: -1 }, - s' = { markers: s.markers.append(if (s.now < s.markerExpires) - { cutoffMs: s.watermark - WALL_ORIGIN, ttlMs: s.markerExpires - s.now } - else { cutoffMs: -1, ttlMs: -2 }), ...s } + s' = Markers::observe(s, ENTITY, WALL_ORIGIN) } action writeFaultWith(code: int): bool = all { input' = { name: "writeFault", choice: code }, s' = { writeFailed: code == 1, ...s } } action writeFault = { nondet choice = Set(0, 1).oneOf(); writeFaultWith(choice) } + // Exploration schedule: preserve grouping and order for seeded sampling. action step = any { beginCall, releaseRead, rejectLoader, resolveLoader, releaseLoad, seed, advance, policy, closeScope, invalidate, observeMarker, writeFault } - // Independent checks over retained observation receipts. Publication checks - // compare the actual before/after state, not the predicate authorizing it. - val freshnessUsesReadSettlement = s.readReceipts.indices().forall(i => { val r = s.readReceipts.nth(i) - - not(r.validFrame) or (r.freshDecode == (r.age >= 0 and r.age < r.freshMs)) }) - val trackedWritesRespectPhysicalCap = s.writeReceipts.indices().forall(i => { val r = s.writeReceipts.nth(i) - - r.ttl == (if (r.tracked and r.requested > 3600000) 3600000 else r.requested) }) - val recoveredResultsNeverPublishShared = s.recoveryReceipts.indices().forall(i => { val r = s.recoveryReceipts.nth(i) - - r.dumpsBefore == r.dumpsAfter and r.writesBefore == r.writesAfter and r.localBefore == r.localAfter }) - val recoveredAgeUsesLogicalMaximum = s.recoveryReceipts.indices().forall(i => { val r = s.recoveryReceipts.nth(i) - - not(r.served) or (r.age >= 0 and r.age < r.maximum) }) + // Invariants: independent checks over ownership and observed history. ----- + // Over the public channels: a closed scope holds no memo (C03); a selected + // shadow policy admits no diagnostic work and a recovered result publishes + // nothing (C47; one local slot, never evicted, so an untouched slot reads + // NO_VALUE); every io row and every write TTL has an owner. val closedContextsStayEmpty = s.closed.indices().forall(i => not(s.closed.nth(i)) or s.memo.nth(i) == 0) val selectedShadowNeverAdmitsRecoveredResults = not(s.shadowSelected) or - (s.o.shadow == List() and s.o.dumps == 0 and s.o.writes == 0 and s.localVersion == 0) + (s.o.shadow == List() and s.o.dumps == 0 and s.o.writes == 0 and s.localValues == List(NO_VALUE)) val observationsHaveOwners = s.io.sourceErrors.length() == s.o.calls.length() and - s.io.budgets.length() == s.o.reads and s.writeReceipts.length() == s.o.writes + s.io.budgets.length() == s.o.reads and s.o.writeTtls.length() == s.o.writes + // Every write is retained for the policy's 5 s, or for the tracked cap when + // a policy asks a tracked entity for more, or for the policy's full 2 h or + // 4 h when untracked (C37); the requested retention survives nowhere in the + // state once the authority caps it, so the exact per-write pairing with the + // admitted maximum is the connection model's sourcesCarryCappedAdmittedRetention. + val trackedWritesRespectPhysicalCap = s.o.writeTtls.indices().forall(i => { + val ttl = s.o.writeTtls.nth(i) + ttl == 5000 or (s.tracked and ttl == Remote::TRACKED_RETENTION_CAP_MS) or + (not(s.tracked) and (ttl == 7200000 or ttl == 14400000)) + }) + // Over the library records: the drivers' loaders are the loader ordinals, + // and every held effect is one the drivers dispatched. + val effectsMatchOwners = s.o.loaders == s.loaders.length() and + s.reads.indices().forall(i => s.reads.nth(i).read < s.o.reads) and + s.loads.indices().forall(i => s.loads.nth(i).load < s.o.loads) + // A completed caller either owns no flight (it was served from the request + // memo or local storage: serving attaches NO_OWNER to a layer-served + // caller, which independent never sees because its every caller dispatches + // a read) or owns one whose result is recorded and on which no read or + // decode is still held. + val completedCallsHaveNoActiveWork = s.o.calls.indices().forall(c => s.o.calls.nth(c) == CALL_PENDING or { + val flight = s.owners.nth(c) + flight < 0 or (s.sources.nth(flight).result != CALL_PENDING and + s.reads.indices().forall(j => s.reads.nth(j).flight != flight) and + s.loads.indices().forall(j => s.loads.nth(j).flight != flight)) + }) + // The environment restriction stated: one execution at a time, so at most + // one read, one decode and one snapshot are held and one caller is pending. + val oneExecution = s.reads.length() <= 1 and s.loads.length() <= 1 and s.retained.length() <= 1 and + s.o.calls.select(c => c == CALL_PENDING).length() <= 1 + // A marker no longer in force fences nothing: its entity's watermark is at + // the zero baseline (markers). + val expiredMarkersFenceNothing = s.markerExpires.indices().forall(e => + s.now < s.markerExpires.nth(e) or s.watermark.nth(e) == 0) + // Deterministic model regressions ------------------------------------------ // A selected policy, outcome hook and available capacity make shadow work // otherwise eligible. Neither ordinary recovery nor its request-memo probe // may create a diagnostic source or any shared-cache publication. @@ -369,13 +323,13 @@ module dialcache_recovery_read_conformance { .expect(s.o.calls == List(VALUE_ABSENT, VALUE_ABSENT, VALUE_ABSENT) and s.o.loaders == 2 and s.o.reads == 2 and s.o.loads == 2 and s.o.recovery == List("served", "served") and s.o.shadow == List() - and s.o.dumps == 0 and s.o.writes == 0 and s.localValue == 0) + and s.o.dumps == 0 and s.o.writes == 0 and s.localValues == List(NO_VALUE)) run recoveredValueSkipsSelectedShadowTest = initialized(TRACKED_WITH_SHADOW_MODE).then(seedWith(2)) .then(beginIn(0)).then(releaseRead).then(rejectLoader).then(releaseLoad) .then(beginIn(0)) .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loaders == 1 and s.o.reads == 1 and s.o.loads == 1 and s.o.classifications == 1 and s.o.recovery == List("served") - and s.o.shadow == List() and s.o.dumps == 0 and s.o.writes == 0 and s.localValue == 0) + and s.o.shadow == List() and s.o.dumps == 0 and s.o.writes == 0 and s.localValues == List(NO_VALUE)) // Deterministic replay uses only the same external commands as exploration. run freshnessAfterHeldReadTest = initialized(TRACKED_MODE).then(seedWith(0)).then(beginIn(2)) @@ -391,20 +345,36 @@ module dialcache_recovery_read_conformance { .then(beginIn(0)).then(releaseRead).then(resolveLoader).then(beginIn(1)) .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.reads == 1 and s.o.loads == 0 and s.o.dumps == 0 and s.o.writes == 0) + // A read failed by the frame's encoding retains no snapshot, so the loader + // failure that follows is unclassified: the caller completes with the + // loader's own error, no recovery label is reported, nothing is decoded or + // written. + run encodingFailedReadLeavesNoCandidateTest = initialized(TRACKED_MODE).then(seedWith(10)) + .then(beginIn(0)).then(releaseRead).then(rejectLoader) + .expect(s.o.calls == List(SOURCE_ERROR) and s.io.sourceErrors == List(1) and s.o.classifications == 0 + and s.o.recovery == List() and s.o.loads == 0 and s.o.writes == 0) run trackedPhysicalRetentionExpiresAtCapTest = initialized(TRACKED_MODE).then(policyWith(2)) .then(beginIn(2)).then(releaseRead).then(resolveLoader) .expect(s.o.writeTtls == List(3600000)) .then(advanceBy(3600000)).then(beginIn(2)).then(releaseRead) .expect(s.o.calls == List(VALUE_TWO, CALL_PENDING) and s.o.loaders == 2 and s.o.loads == 0) + // The untracked twin: the policy's full 4 h retention is written. + run untrackedRetentionIsNotCappedTest = initialized(UNTRACKED_MODE).then(policyWith(2)) + .then(beginIn(2)).then(releaseRead).then(resolveLoader) + .expect(s.o.calls == List(VALUE_TWO) and s.o.dumps == 1 and s.o.writes == 1 and s.o.writeTtls == List(14400000)) + // The snapshot keeps the reply's 2 h maximum while the source captured the + // capped retention; a candidate an hour and a millisecond old still serves. run physicalCapDoesNotClampLogicalRecoveryTest = initialized(TRACKED_MODE).then(policyWith(1)) - .then(seedWith(5)).then(beginIn(2)).then(releaseRead).then(rejectLoader).then(releaseLoad) - .expect(s.o.calls == List(VALUE_ONE) and s.o.recovery == List("served") - and s.o.writeTtls == List() and s.recoveryReceipts.nth(0).age == 3600001) + .then(seedWith(5)).then(beginIn(2)).then(releaseRead) + .expect(Clock::wallOf(s) - s.retained.nth(0).created == 3600001 and s.retained.nth(0).maximum == 7200000 + and s.sources.nth(0).retentionMs == 3600000) + .then(rejectLoader).then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE) and s.o.recovery == List("served") and s.o.writeTtls == List()) run compressedRecoveryMemoizesWithoutLocalPublicationTest = initialized(TRACKED_MODE).then(seedWith(8)) .then(beginIn(0)).then(releaseRead).then(rejectLoader).then(releaseLoad) .then(beginIn(0)).expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.reads == 1) .then(beginIn(1)).expect(s.o.reads == 2 and s.o.calls == List(VALUE_ONE, VALUE_ONE, CALL_PENDING)) - .expect(s.o.dumps == 0 and s.o.writes == 0 and s.localValue == 0) + .expect(s.o.dumps == 0 and s.o.writes == 0 and s.localValues == List(NO_VALUE)) run corruptCompressedRecoveryKeepsOriginalSourceErrorTest = initialized(TRACKED_MODE).then(seedWith(9)) .then(beginIn(0)).then(releaseRead).then(rejectLoader).then(releaseLoad) .expect(s.o.calls == List(SOURCE_ERROR) and s.io.sourceErrors == List(1) @@ -419,13 +389,28 @@ module dialcache_recovery_read_conformance { run closedRequestCannotReceiveCompressedRecoveryTest = initialized(TRACKED_MODE).then(seedWith(8)) .then(beginIn(0)).then(releaseRead).then(rejectLoader).then(closeContext(0)).then(releaseLoad) .then(beginIn(1)).expect(s.o.calls == List(VALUE_ONE, CALL_PENDING) and s.o.reads == 2) - .expect(s.memo == List(0, 0) and s.localValue == 0 and s.o.writes == 0) + .expect(s.memo == List(NO_VALUE, NO_VALUE) and s.localValues == List(NO_VALUE) and s.o.writes == 0) run trackedSourceNeedsRemoteValidationBeforeLocalReuseTest = initialized(TRACKED_MODE) .then(beginIn(0)).then(releaseRead).then(resolveLoader).then(beginIn(0)) .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.reads == 1) .then(beginIn(1)).then(releaseRead).then(releaseLoad).then(beginIn(2)) .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO, VALUE_TWO, VALUE_TWO) and s.o.reads == 2 and s.o.loaders == 1 and s.o.loads == 1) + // A memo row belongs to its scope: closing another scope leaves this + // scope's memo, which the next same-scope caller reuses without a read. + run closingAnotherScopeKeepsThisScopesMemoTest = initialized(TRACKED_MODE) + .then(beginIn(0)).then(releaseRead).then(resolveLoader) + .expect(s.o.calls == List(VALUE_TWO) and s.o.reads == 1 and s.o.loaders == 1) + .then(closeContext(1)).then(beginIn(0)) + .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.reads == 1 and s.o.loaders == 1) + // A local entry serves until, not at, its insertion TTL: the transient + // caller hits at 999 ms and reads at 1000 ms. + run localEntryExpiresAtItsInsertionTtlTest = initialized(UNTRACKED_MODE) + .then(beginIn(2)).then(releaseRead).then(resolveLoader) + .then(advanceBy(999)).then(beginIn(2)) + .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.reads == 1) + .then(advanceBy(1)).then(beginIn(2)) + .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO, CALL_PENDING) and s.o.reads == 2 and s.o.loaders == 1) run ordinaryValueWorkDoesNotCreateMarkerTest = initialized(TRACKED_MODE).then(observeMarker) .then(beginIn(2)).then(releaseRead).then(resolveLoader).then(observeMarker) .then(beginIn(2)).then(releaseRead).then(releaseLoad).then(observeMarker) @@ -436,6 +421,27 @@ module dialcache_recovery_read_conformance { .then(observeMarker).then(beginIn(2)).then(releaseRead).then(releaseLoad).then(advanceBy(999)).then(observeMarker) .expect(s.markers == List({ cutoffMs: 0, ttlMs: 7200000 }, { cutoffMs: 0, ttlMs: 7199999 }, { cutoffMs: 0, ttlMs: 7199000 })) + // The marker lapses at its two-hour floor: the probe then reads no marker, + // and the next invalidation stamps a fresh floor marker at the new cutoff. + run expiredMarkerIsGoneTest = initialized(TRACKED_MODE).then(invalidate).then(observeMarker) + .expect(s.markers == List({ cutoffMs: 0, ttlMs: 7200000 })) + .then(advanceBy(3600000)).then(advanceBy(3600000)).then(observeMarker) + .expect(s.markers == List({ cutoffMs: 0, ttlMs: 7200000 }, { cutoffMs: -1, ttlMs: -2 })) + .then(invalidate).then(observeMarker) + .expect(s.o.invalidations == 2 and s.markers == List({ cutoffMs: 0, ttlMs: 7200000 }, + { cutoffMs: -1, ttlMs: -2 }, { cutoffMs: 7200000, ttlMs: 7200000 })) + // Once the marker lapses, the frame stamped exactly at its cutoff is + // un-fenced on the public channels: stale under the 2 h freshness, the read + // holds no decode, the loader's failure finds it a recovery candidate, and + // the held decode serves it without a write. + run lapsedMarkerUnfencesTheFrameStampedAtItsCutoffTest = initialized(TRACKED_MODE).then(invalidate) + .then(advanceBy(3600000)).then(advanceBy(3600000)).then(seedWith(6)).then(policyWith(2)) + .then(beginIn(0)).then(releaseRead) + .expect(s.o.loaders == 1 and s.o.loads == 0) + .then(rejectLoader) + .expect(s.o.loads == 1 and s.o.calls == List(CALL_PENDING)) + .then(releaseLoad) + .expect(s.o.calls == List(VALUE_ONE) and s.o.recovery == List("served") and s.o.writes == 0) run failedInvalidationPreservesExistingMarkerTest = initialized(TRACKED_MODE).then(invalidate).then(observeMarker) .then(advanceBy(1000)).then(writeFaultWith(1)).then(invalidate).then(observeMarker) @@ -459,7 +465,7 @@ module dialcache_recovery_read_conformance { run untrackedCompressedRecoveryDoesNotWarmLocalTest = initialized(UNTRACKED_MODE).then(seedWith(8)) .then(beginIn(0)).then(releaseRead).then(rejectLoader).then(releaseLoad) .then(beginIn(1)).expect(s.o.calls == List(VALUE_ONE, CALL_PENDING) - and s.o.reads == 2 and s.localValue == 0 and s.o.dumps == 0 and s.o.writes == 0) + and s.o.reads == 2 and s.localValues == List(NO_VALUE) and s.o.dumps == 0 and s.o.writes == 0) run compressedRecoveryRechecksMaximumAfterDecodeTest = initialized(TRACKED_MODE).then(seedWith(12)) .then(beginIn(0)).then(releaseRead).then(rejectLoader) .expect(s.compression == List("decompressed") and s.o.calls == List(CALL_PENDING)) @@ -481,11 +487,25 @@ module dialcache_recovery_read_conformance { .then(resolveLoader).then(beginIn(1)).then(releaseRead).then(releaseLoad) .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.reads == 2 and s.o.loaders == 1 and s.o.loads == 1 and s.o.dumps == 1 and s.o.writes == 1) + // A frame whose unsafe stamp lies above the watermark raised at the same + // instant is visible and never fresh: its miss carries no fence and refills. + run unsafeTimestampAtTheWatermarkStillRefillsTest = initialized(TRACKED_MODE).then(invalidate).then(seedWith(16)) + .then(beginIn(0)).then(releaseRead).expect(s.o.loads == 0 and s.o.loaders == 1) + .then(resolveLoader) + .expect(s.o.calls == List(VALUE_TWO) and s.o.dumps == 1 and s.o.writes == 1 and s.o.writeTtls == List(5000)) run unsupportedVersionSkipsSerializerAndAllowsRefillTest = initialized(TRACKED_MODE).then(seedWith(17)) .then(beginIn(0)).then(releaseRead).expect(s.o.loads == 0 and s.o.loaders == 1) .then(resolveLoader).then(beginIn(1)).then(releaseRead).then(releaseLoad) .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.reads == 2 and s.o.loaders == 1 and s.o.loads == 1 and s.o.dumps == 1 and s.o.writes == 1) + // The version miss carries the fence a miss observes: under a watermark + // raised at the same instant, the refill stamped then does not clear it, + // so nothing is dumped or written. + run unsupportedVersionUnderRaisedWatermarkIsAFencedMissTest = initialized(TRACKED_MODE).then(invalidate).then(seedWith(17)) + .then(beginIn(0)).then(releaseRead).expect(s.o.loads == 0 and s.o.loaders == 1) + .then(resolveLoader) + .expect(s.o.calls == List(VALUE_TWO) and s.o.dumps == 0 and s.o.writes == 0 and s.o.writeTtls == List() + and s.o.reads == 1 and s.localValues == List(NO_VALUE)) run maximumAgeBeforeDecodeKeepsOriginalErrorTest = initialized(TRACKED_MODE).then(seedWith(12)) .then(beginIn(0)).then(releaseRead).then(advanceBy(1)).then(rejectLoader) diff --git a/formal/dialcache-recovery-read-connection.qnt b/formal/dialcache-recovery-read-connection.qnt new file mode 100644 index 00000000..f187dd5c --- /dev/null +++ b/formal/dialcache-recovery-read-connection.qnt @@ -0,0 +1,137 @@ +module dialcache_recovery_read_connection { + import dialcache_recovery_read_conformance as profile from "./dialcache-recovery-read-conformance" + import conformance_observations.* from "./conformance-observations" + import cache_contract.* from "./cache-contract" + import encodings.* from "./kernel/encodings" + import remote_io as RemoteIO from "./kernel/remote-io" + import remote_frames as Remote from "./kernel/remote-frames" + import payloads as Payloads from "./kernel/payloads" + import clock as Clock from "./kernel/clock" + + // Bounded correspondence for the real recovery-read profile, not a second + // replay machine. Its actions execute unchanged. This monitor acquires a + // reference snapshot from storage when the held read settles (the frame's + // payload code, raw and decoded, its stamp, the maximum admitted from the + // policy in force before the caller's admission, the wall clock of the + // settlement) and checks the library's held reads, retained snapshots, + // pending sources and returned observations against that acquired record, + // reading storage fields and library records only: whether the frame is + // present, retained and fence-cleared is restated here from the raw fields, + // never taken from the kernel judgment under test. Two payload tables are + // shared with the kernel, `Payloads::valueOf` (cache_contract's + // recoveryReturnAllowed compares decoded values) and the class test + // `Payloads::readFails`. The monitor assumes every seed is a value below + // 100, an unsupported-encoding code (which fails the read, so + // `freshnessUsesReadSettlement` expects no decode), or a compressed or + // corrupt class code plus a positive value, as the profile's seed table + // is: a fresh observable frame storing a bare compressed or corrupt code + // decodes to NO_VALUE and holds no decode where + // `freshnessUsesReadSettlement` expects one. One active call and the + // profile's finite domain bound this connection; no fairness claim. + var snapshot: RecoverySnapshot + // The raw code the read acquired, beside the decoded snapshot: a retained + // candidate must be that code, not another code with the same value. + var snapshotCode: int + var capturedMaximum: int + var before: { + payload: int, created: int, wall: int, calls: int, maximum: int, valid: bool, + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], dumps: int, writes: int, + localValues: List[int], localExpires: List[int], lru: List[List[int]] + } + + action init = all { + profile::init, + snapshot' = captureRecovery(NO_OWNER, NO_VALUE, 0, 0, 0), + snapshotCode' = NO_VALUE, + capturedMaximum' = 0, + before' = { payload: NO_VALUE, created: 0, wall: 0, calls: 0, maximum: 0, valid: false, + reads: List(), loads: List(), dumps: 0, writes: 0, localValues: List(), localExpires: List(), lru: List() } + } + // Admission acquires the preceding policy reply's retention as the maximum, + // independently of the held read's record. A held read cannot acquire a + // later reply; one caller at a time, so one captured maximum suffices. + val admittedMaximum = if (profile::input.name == "beginCall") before.maximum else capturedMaximum + // The step that settled the held read, and the one that settled a recovery + // decode (a held decode released while a recovery decode was held). + val settlingRead = profile::input.name == "releaseRead" + val recoveryDecodeSettling = profile::input.name == "releaseLoad" and before.loads.select(load => load.recovery).length() > 0 + // Capture immediately after the profile's read settles, from the storage + // fields the read observed (the state before the step), not from the + // library's snapshot: confusing those must be detectable. The payload is + // recorded decoded, as a recovery returns it, and raw, as a snapshot + // retains it. + val acquired = if (settlingRead) + captureRecovery(before.calls - 1, Payloads::valueOf(before.payload), before.created, admittedMaximum, before.wall) + else snapshot + val acquiredCode = if (settlingRead) before.payload else snapshotCode + + action step = all { + snapshot' = acquired, + snapshotCode' = acquiredCode, + capturedMaximum' = admittedMaximum, + before' = { + payload: profile::s.remoteValues.nth(0), created: profile::s.created.nth(0), wall: Clock::wallOf(profile::s), + calls: profile::s.o.calls.length(), maximum: profile::s.ttls.retentionMs, + // A frame a read can observe, from the raw fields: present, retained + // (the monotonic clock before its expiry, cache_rules.deadlinePendingAt + // restated), fence-cleared for a tracked reader (stamped strictly above + // its entity's watermark, cache_rules.fenceAllows restated) and not of + // a class that fails the read. + valid: profile::s.remoteValues.nth(0) > NO_VALUE and profile::s.now < profile::s.expires.nth(0) and + (not(profile::s.tracked) or profile::s.created.nth(0) > profile::s.watermark.nth(0)) and + not(Payloads::readFails(profile::s.remoteValues.nth(0))), + reads: profile::s.reads, loads: profile::s.loads, dumps: profile::s.o.dumps, writes: profile::s.o.writes, + localValues: profile::s.localValues, localExpires: profile::s.localExpires, lru: profile::s.lru + }, + profile::step + } + + // Every held read carries the maximum its caller was admitted with. + val heldReadsCarryAdmittedMaximum = + profile::s.reads.indices().forall(i => profile::s.reads.nth(i).ttls.retentionMs == admittedMaximum) + // Every held read carries the admitted maximum; every retained snapshot + // carries that maximum and, when it retains a candidate, the very code and + // the stamp the caller's own read acquired. + val retainedSnapshotMatchesAcquisition = + heldReadsCarryAdmittedMaximum and + profile::s.retained.indices().forall(i => { + val retained = profile::s.retained.nth(i) + retained.maximum == admittedMaximum and (retained.candidate == NO_VALUE or + (acquired.owner == profile::s.o.calls.length() - 1 and + retained.candidate == acquiredCode and retained.created == acquired.created)) + }) + // A served recovery decode returns the acquired bytes to their caller within + // the acquired maximum at the wall clock of its release. + val recoveryReturnMatchesAcquiredContract = not(recoveryDecodeSettling) or + profile::s.o.recovery.nth(profile::s.o.recovery.length() - 1) != "served" or + recoveryReturnAllowed(snapshot, before.calls - 1, profile::s.o.calls.nth(before.calls - 1), before.wall) + // When a held read settles, a decode is held exactly when the frame is + // observable (present, retained, fence-cleared and readable, from the raw + // fields) and its age at the settlement wall clock lies in [0, the admitted + // freshness). Stated both ways, so a kernel that holds a decode of a frame + // the raw fields say is expired or fenced fails it too. The arithmetic is + // restated here rather than taken from cache_rules, so the clause is + // independent of the judgment under test. + val freshnessUsesReadSettlement = not(settlingRead) or + before.reads.length() == 0 or { + val age = before.wall - before.created + (profile::s.loads.length() > 0) == (before.valid and age >= 0 and age < before.reads.nth(0).ttls.freshMs) + } + // A recovery decode's settlement publishes nothing shared: no dump, no + // write and no local publication, the slot's value, expiry and recency + // unchanged, so a re-warm of the value the slot already holds is seen too + // (C43, C45). + val recoveredResultsNeverPublishShared = not(recoveryDecodeSettling) or + (profile::s.o.dumps == before.dumps and profile::s.o.writes == before.writes and + profile::s.localValues == before.localValues and profile::s.localExpires == before.localExpires and profile::s.lru == before.lru) + // Every pending source captured either no retention (its read has not + // settled, or it may not refill) or the admitted maximum, capped at the + // tracked cap for a tracked entity (C37): the write that follows carries + // exactly this retention. + val sourcesCarryCappedAdmittedRetention = + profile::s.sources.indices().forall(i => { + val source = profile::s.sources.nth(i) + source.result != CALL_PENDING or source.retentionMs == 0 or source.retentionMs == + (if (profile::s.tracked and admittedMaximum > Remote::TRACKED_RETENTION_CAP_MS) Remote::TRACKED_RETENTION_CAP_MS else admittedMaximum) + }) +} diff --git a/formal/dialcache-runtime-boundaries-conformance.qnt b/formal/dialcache-runtime-boundaries-conformance.qnt index ba85e119..9739074b 100644 --- a/formal/dialcache-runtime-boundaries-conformance.qnt +++ b/formal/dialcache-runtime-boundaries-conformance.qnt @@ -44,7 +44,7 @@ module dialcache_runtime_boundaries_conformance { pure val SAMPLES: Samples = { local: 4292886220, remote: 1018911151 } pure val CALL: Call = { instance: 0, key: 0, context: 0, enabled: true, keyFailed: false } pure val LAYOUT: Serving::Layout = - { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 1, operationsPerEntity: 1, probeSourceScope: false } + { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 1, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } // The drivers' fixtures configure 60 s local and remote TTLs; the all-features // fixture also configures a 120 s stale-on-error maximum, the retention its // refills are written with (formal/replay/profiles/runtime-boundaries.mjs). diff --git a/formal/dialcache-scope-conformance.qnt b/formal/dialcache-scope-conformance.qnt index 4de8f05d..8b9b779b 100644 --- a/formal/dialcache-scope-conformance.qnt +++ b/formal/dialcache-scope-conformance.qnt @@ -42,7 +42,7 @@ module dialcache_scope_conformance { // two outer ones are persistent scopes; no remote layer writes a TTL; the // drivers probe each source for the scope it started under. pure val LAYOUT: Serving::Layout = { - keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: true + keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: true, policyProvider: true } // -- State and initial environment ----------------------------------------- diff --git a/formal/dialcache-shadow-conformance.qnt b/formal/dialcache-shadow-conformance.qnt index 6aab1c4b..02953639 100644 --- a/formal/dialcache-shadow-conformance.qnt +++ b/formal/dialcache-shadow-conformance.qnt @@ -1,6 +1,20 @@ module dialcache_shadow_conformance { import cache_rules.* from "./cache-rules" import conformance_observations.* from "./conformance-observations" + import encodings.* from "./kernel/encodings" + import calls.* from "./kernel/calls" + import layer_policy.* from "./kernel/layer-policy" + import serving as Serving from "./kernel/serving" + import remote_io as RemoteIO from "./kernel/remote-io" + import remote_writes as Writes from "./kernel/remote-writes" + import shadow as Shadow from "./kernel/shadow" + import deadlines as Deadlines from "./kernel/deadlines" + import diagnostics as Diagnostics from "./kernel/diagnostics" + import recovery as Recovery from "./kernel/recovery" + import remote_frames as Remote from "./kernel/remote-frames" + import payloads as Payloads from "./kernel/payloads" + import clock as Clock from "./kernel/clock" + import policy_gate as Gate from "./kernel/policy-gate" // Model boundary ----------------------------------------------------------- // One ramped-down caller source and its selected dark C0/source/C1 job. // Selected rules from C47/C49-C54 govern admission, comparison, fill authority, @@ -8,29 +22,25 @@ module dialcache_shadow_conformance { // See BEHAVIOR.md: "Generated feature profiles" for fixtures and payloads. // Each source/read/decode/serialize/write can remain externally pending. This // profile excludes serving hits, request/local storage, and overlapping jobs. - // `now` is elapsed milliseconds; `wall` is independent application time. - // C0, fence, accepted logging, and dispatched write stamp are retained history. - // C0 must be strictly younger than sixty seconds. C1 checks payload bytes - // independently of logical age; application time may change while it waits. + // `now` is elapsed milliseconds; the wall clock is `now` plus a skew the + // rollback and the wall jump shift. C0 must be strictly younger than sixty + // seconds. C1 checks payload bytes independently of logical age; + // application time may change while it waits. + // Every rule is a kernel transition (formal/kernel): the dark arm of the + // held shadow lifecycle (shadow: the dark job's C0 read, decode and + // confirmation read held in remote_io's lists and released by ordinal, the + // comparator, the verdict age and the mismatch warning) over the diagnosed + // budgeted held remote lifecycle (deadlines, remote_io, diagnostics: the + // caller's source deadline and the layer its failure is attributed to), the + // held fill (remote_writes), the frames a seed stores and the watermark an + // invalidation raises with its future buffer (remote_frames, serving), the + // wall skew (clock). This module owns the bounded state, the fixture + // decoding (the comparator, its elapsed time and the source work an init + // choice names; the hook and the default logging; the payload code a seed + // choice names; the policy facts a runtime overlay sets), the input choices + // and the guards. // Trace encodings and fixture bounds --------------------------------------- - pure val IDLE = 0 - pure val C0_READ = 1 - pure val SOURCE_WAIT = 2 - pure val SNAPSHOT_DECODE = 3 - pure val CONFIRMATION_READ = 4 - pure val FILL_SERIALIZE = 5 - pure val FILL_WRITE = 6 - pure val JOB_DONE = 7 - pure val SOURCE_NOT_STARTED = 0 - pure val SOURCE_PENDING = 1 - pure val SOURCE_ACCEPTED = 2 - pure val SOURCE_FAILED = 3 - pure val SOURCE_TIMED_OUT = 4 - pure val COMPARE_DEFAULT = 0 - pure val COMPARE_EQUAL = 1 - pure val COMPARE_UNEQUAL = 2 - pure val COMPARE_ERROR = 3 pure val COMPARATOR_COUNT = 4 pure val FIRST_LOGGING_FIXTURE = 4 pure val FIXTURE_NO_HOOK = 8 @@ -45,404 +55,291 @@ module dialcache_shadow_conformance { pure val LOGGING_ENABLED = 1 pure val LOGGING_INVALID = 2 pure val JOB_BUDGET_MS = 10 + pure val SOURCE_BUDGET_MS = 10 pure val FRESHNESS_MS = 60000 + pure val SEED_RETENTION_MS = 60000 pure val WALL_ROLLBACK_MS = 1000 + pure val INITIAL_NOW_MS = 10000 + pure val WALL_SKEW_MS = 90000 pure val MAX_CALLS = 8 - - // Payload identity is not decoded value identity. The Unicode fixture's - // decoded symbol is 3; it never becomes a caller result in this profile. - pure val NO_PAYLOAD = 0 - pure val TEXT_ONE = 1 - pure val TEXT_TWO = 2 - pure val BINARY_ONE = 3 - pure val BINARY_TWO = 4 - pure val BINARY_PADDED_ONE = 5 - pure val TEXT_PADDED_ONE = 6 - pure val TEXT_UNICODE = 7 - pure val BINARY_UNICODE = 8 + pure val KEY = 0 + pure val ENTITY = 0 + // One key on one instance, no request scope, no local capacity, one + // operation per entity; the drivers never probe a source's scope. + pure val LAYOUT: Serving::Layout = { + keysPerInstance: 1, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true + } + pure val CALL: Call = { instance: 0, key: KEY, context: 0, enabled: true, keyFailed: false } + // The fixture's policy: a 60 s remote TTL with the serving ramp at 0, so the + // caller uses no layer and the job reads the remote layer on its own account. + pure val DARK: Resolution = { layers: { request: false, local: false, remote: false }, coalesce: false } + pure val TTLS: Ttls = { localMs: 0, freshMs: FRESHNESS_MS, retentionMs: FRESHNESS_MS } + + // The eight payload representations as payload codes (payloads): the + // drivers' text JSON `1`/`2` (seeds 1/2), their binary spellings (3/4), the + // binary and text padded spellings of `1` (5/6), and the text and binary + // spellings of a JSON string decoding to a value no source returns (7/8). + // Payload identity is not decoded value identity: text and binary forms + // share bytes, different bytes can decode to one value. pure val DECODED_UNICODE = 3 + pure val TEXT_ONE = VALUE_ONE + pure val TEXT_TWO = VALUE_TWO + pure val BINARY_ONE = Payloads::BINARY + VALUE_ONE + pure val BINARY_TWO = Payloads::BINARY + VALUE_TWO + pure val BINARY_PADDED_ONE = Payloads::BINARY + Payloads::PADDED + VALUE_ONE + pure val TEXT_PADDED_ONE = Payloads::PADDED + VALUE_ONE + pure val TEXT_UNICODE = Payloads::UNICODE + DECODED_UNICODE + pure val BINARY_UNICODE = Payloads::BINARY + Payloads::UNICODE + DECODED_UNICODE // Shadow profile v3 retains explicit external inputs and future timestamp // samples as well as verdict age, captured logging, and configuration errors. type ShadowDiagnostics = { configErrors: int, warnings: int, ages: List[int], coalesced: List[str], fallbackErrors: List[str], - futureOffsets: List[{ layer: str, offsetMs: int }] + futureOffsets: List[Diagnostics::FutureOffset] } - type C0ReadReceipt = { readable: bool, created: int, observed: int, fresh: int, accepted: bool } - // State: diagnostics, independent source/job lifecycles, and remote bytes. + // State: the layered shape with its held remote effects, deadlines, held + // fills and jobs, the two driver channels (o, d), the io channel the held + // shape carries, and the fixture's facts: the comparator, its elapsed time + // and the source work the init choice names, the hook and the default + // logging, and the shadow policy in force (the ramp selecting, the ramp + // malformed, logging on, logging malformed), decoded once at each overlay. type State = { - o: Observation, d: ShadowDiagnostics, - now: int, wall: int, comparator: int, comparisonMs: int, sourceWorkMs: int, - hook: bool, shadowActive: bool, defaultLog: bool, log: bool, acceptedLog: bool, - invalidShadow: bool, invalidLog: bool, acceptedInvalidLog: bool, - mismatchAuthorizations: List[bool], - c0ReadReceipts: List[C0ReadReceipt], - c0Created: int, deadline: int, phase: int, source: int, - sourcePending: bool, sourceValue: int, abandoned: bool, - frame: int, created: int, watermark: int, c0: int, fence: int, writeStamp: int, - readFailed: bool, loadFailed: bool, dumpFailed: bool, writeFailed: bool + o: Observation, d: ShadowDiagnostics, io: RemoteIO::IO, + now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, loadFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], loaders: List[int], retained: List[Recovery::Snapshot], + sourceBudget: int, deadlines: List[Deadlines::Due], drained: List[bool], sourceLayers: List[str], + dumps: List[Writes::HeldDump], writes: List[Writes::HeldWrite], jobs: List[Shadow::Job], + comparator: int, comparisonMs: int, sourceWorkMs: int, hook: bool, defaultLog: bool, + selected: bool, rampInvalid: bool, logging: bool, loggingInvalid: bool } var s: State var input: { name: str, choice: int } - // Snapshot identity and job completion ------------------------------------- - // Text and binary representations can share bytes; different JSON bytes - // can still decode to the same value. C1 uses bytes, C0/S uses decoded values. - pure def payloadBytes(payload: int): int = - if (payload == BINARY_ONE) TEXT_ONE - else if (payload == BINARY_TWO) TEXT_TWO - else if (payload == TEXT_PADDED_ONE) BINARY_PADDED_ONE - else if (payload == BINARY_UNICODE) TEXT_UNICODE - else payload - pure def payloadValue(payload: int): int = - if (payload >= TEXT_UNICODE) DECODED_UNICODE - else if (payload == BINARY_ONE or payload == BINARY_PADDED_ONE or payload == TEXT_PADDED_ONE) VALUE_ONE - else if (payload == BINARY_TWO) VALUE_TWO - else payload - pure def done(st: State, outcome: str): State = { - val validated = outcome == "match" or outcome == "mismatch" - val age = if (st.wall < st.c0Created) 0 else st.wall - st.c0Created - { - phase: JOB_DONE, - mismatchAuthorizations: if (outcome == "mismatch") - st.mismatchAuthorizations.append(st.acceptedLog and not(st.acceptedInvalidLog)) - else st.mismatchAuthorizations, - o: { shadow: st.o.shadow.append(outcome), ...st.o }, - d: { - warnings: st.d.warnings + (if (outcome == "mismatch" and st.acceptedLog) 1 else 0), - ages: if (validated) st.d.ages.append(age) else st.d.ages, - ...st.d - }, - ...st - } - } - pure def continueJob(st: State): State = - if (st.phase != SOURCE_WAIT or st.source == SOURCE_PENDING) st - else if (st.source == SOURCE_FAILED) done(st, "source_error") - else if (st.source == SOURCE_TIMED_OUT) done(st, "timeout") - else if (st.c0 > NO_PAYLOAD) { phase: SNAPSHOT_DECODE, o: { loads: st.o.loads + 1, ...st.o }, ...st } - else if (not(fenceAllows(st.wall, st.fence))) done(st, "fill_fenced") - else { phase: FILL_SERIALIZE, o: { dumps: st.o.dumps + 1, ...st.o }, ...st } - - // Initial fixture ---------------------------------------------------------- + // Input decoding (reads no state) ------------------------------------------ // Input fixtures: default/equal/unequal/error comparator, then the same four // with mismatch logging enabled; fixture 8 omits the outcome hook. // Fixtures 9/10 let successful/failing comparison consume the job budget. // Fixtures 11/12 consume 9/10 ms of synchronous external source work before - // deferred job dispatch. This advances elapsed time without delivering - // timers: job admission and eventual caller settlement remain separate. - // Policy changes are captured at admission. + // deferred job dispatch. + pure def comparatorOf(choice: int): int = + if (choice >= FIXTURE_SOURCE_WORK_BEFORE_DEADLINE) Shadow::COMPARE_VALUES + else if (choice == FIXTURE_SLOW_ERROR) Shadow::COMPARE_ERROR else choice % COMPARATOR_COUNT + pure def comparisonMsOf(choice: int): int = if (choice == FIXTURE_SLOW_EQUAL or choice == FIXTURE_SLOW_ERROR) JOB_BUDGET_MS else 0 + pure def sourceWorkOf(choice: int): int = + if (choice == FIXTURE_SOURCE_WORK_AT_DEADLINE) JOB_BUDGET_MS + else if (choice == FIXTURE_SOURCE_WORK_BEFORE_DEADLINE) JOB_BUDGET_MS - 1 else 0 + pure def hookOf(choice: int): bool = choice != FIXTURE_NO_HOOK + pure def defaultLogOf(choice: int): bool = choice >= FIRST_LOGGING_FIXTURE and choice < FIXTURE_NO_HOOK + // The payload a seed choice stores, and the choice naming the other form of + // a stored payload (the drivers' `reencode`). + pure def seedPayload(choice: int): int = + List(NO_VALUE, TEXT_ONE, TEXT_TWO, BINARY_ONE, BINARY_TWO, BINARY_PADDED_ONE, TEXT_PADDED_ONE, TEXT_UNICODE, BINARY_UNICODE).nth(choice) + pure def alternate(choice: int): int = List(0, 3, 4, 1, 2, 6, 5, 8, 7).nth(choice) + pure def choiceOf(payload: int): int = 1.to(8).fold(0, (found, choice) => if (seedPayload(choice) == payload) choice else found) + + // Initial fixture: no frame, no watermark, empty storage, the ramp selecting, + // logging as the fixture defaults it. Policy changes are captured at admission. + pure def initialState(choice: int): State = { + o: empty, d: { configErrors: 0, warnings: 0, ages: List(), coalesced: List(), fallbackErrors: List(), futureOffsets: List() }, + io: RemoteIO::NO_IO, + now: INITIAL_NOW_MS, skew: WALL_SKEW_MS, remoteAvailable: true, tracked: true, capacity: 0, + readFailed: false, dumpFailed: false, writeFailed: false, loadFailed: false, + closed: List(), memo: List(), requestFlights: List(), processFlights: List(NO_OWNER), + localValues: List(NO_VALUE), localExpires: List(0), lru: List(List()), + remoteValues: List(NO_VALUE), created: List(0), expires: List(0), watermark: List(0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + reads: List(), loads: List(), loaders: List(), retained: List(), + sourceBudget: SOURCE_BUDGET_MS, deadlines: List(), drained: List(), sourceLayers: List(), + dumps: List(), writes: List(), jobs: List(), + comparator: comparatorOf(choice), comparisonMs: comparisonMsOf(choice), sourceWorkMs: sourceWorkOf(choice), + hook: hookOf(choice), defaultLog: defaultLogOf(choice), + selected: true, rampInvalid: false, logging: defaultLogOf(choice), loggingInvalid: false + } action initialize(choice: int): bool = all { input' = { name: "init", choice: choice }, - s' = { - o: empty, d: { configErrors: 0, warnings: 0, ages: List(), coalesced: List(), fallbackErrors: List(), futureOffsets: List() }, - now: 10000, wall: 100000, - comparator: if (choice >= FIXTURE_SOURCE_WORK_BEFORE_DEADLINE) COMPARE_DEFAULT - else if (choice == FIXTURE_SLOW_ERROR) COMPARE_ERROR else choice % COMPARATOR_COUNT, - comparisonMs: if (choice == FIXTURE_SLOW_EQUAL or choice == FIXTURE_SLOW_ERROR) JOB_BUDGET_MS else 0, - sourceWorkMs: if (choice == FIXTURE_SOURCE_WORK_AT_DEADLINE) JOB_BUDGET_MS - else if (choice == FIXTURE_SOURCE_WORK_BEFORE_DEADLINE) JOB_BUDGET_MS - 1 else 0, - hook: choice != FIXTURE_NO_HOOK, shadowActive: choice != FIXTURE_NO_HOOK, - defaultLog: choice >= FIRST_LOGGING_FIXTURE and choice < FIXTURE_NO_HOOK, - log: choice >= FIRST_LOGGING_FIXTURE and choice < FIXTURE_NO_HOOK, - acceptedLog: false, invalidShadow: false, invalidLog: false, acceptedInvalidLog: false, - mismatchAuthorizations: List(), c0ReadReceipts: List(), c0Created: 0, deadline: 0, - phase: IDLE, source: SOURCE_NOT_STARTED, - sourcePending: false, sourceValue: 0, abandoned: false, - frame: NO_PAYLOAD, created: 0, watermark: 0, c0: NO_PAYLOAD, fence: 0, writeStamp: 0, - readFailed: false, loadFailed: false, dumpFailed: false, writeFailed: false - } + s' = initialState(choice) } action init = { nondet choice = 0.to(FIXTURE_SOURCE_WORK_AT_DEADLINE).oneOf() initialize(choice) } + // Guards (may read state) --------------------------------------------------- + // One caller at a time: the previous job has drained and the previous source + // has settled (a source whose deadline was delivered stays pending until its + // late result drains); the drivers settle the latest loader and release the + // latest held read, decode, dump or write. + val sourcePending = s.loaders.length() > 0 and Deadlines::pending(s, RemoteIO::latestOrdinal(s)) + // Caller source and job admission ------------------------------------------ action beginCall = all { input' = { name: "beginCall", choice: -1 }, - (s.phase == IDLE or s.phase == JOB_DONE), not(s.sourcePending), s.o.calls.length() < MAX_CALLS, - val jobExpired = s.shadowActive and not(deadlinePendingAt(s.sourceWorkMs, JOB_BUDGET_MS)) - s' = { - now: s.now + s.sourceWorkMs, wall: s.wall + s.sourceWorkMs, - phase: if (s.shadowActive and not(jobExpired)) C0_READ else JOB_DONE, - source: SOURCE_PENDING, sourcePending: true, sourceValue: 0, - abandoned: jobExpired, deadline: s.now + JOB_BUDGET_MS, - c0: NO_PAYLOAD, c0Created: 0, fence: 0, acceptedLog: s.log, - acceptedInvalidLog: s.invalidLog, - d: { - configErrors: s.d.configErrors + (if (s.invalidShadow or (s.shadowActive and s.invalidLog)) 1 else 0), - ...s.d - }, - o: { - calls: s.o.calls.append(CALL_PENDING), loaders: s.o.loaders + 1, - reads: s.o.reads + (if (s.shadowActive and not(jobExpired)) 1 else 0), policyCalls: s.o.policyCalls + 1, - shadow: if (jobExpired) s.o.shadow.append("timeout") else s.o.shadow, - ...s.o - }, - ...s - } + s.jobs.length() == 0, not(sourcePending), s.o.calls.length() < MAX_CALLS, + s' = Shadow::beginDark(s, LAYOUT, CALL, DARK, TTLS, Deadlines::UNBOUNDED, + { hook: s.hook, selected: s.selected, capacity: 1, budgetMs: JOB_BUDGET_MS, logging: s.logging }, + { ramp: s.rampInvalid, logging: s.loggingInvalid }, s.sourceWorkMs) } action resolveAt(choice: int): bool = all { - input' = { name: "resolveLoader", choice: choice }, - s.sourcePending, - val expired = s.source == SOURCE_TIMED_OUT or not(deadlinePendingAt(s.now, s.deadline)) - s' = continueJob({ - sourcePending: false, - source: if (expired) SOURCE_TIMED_OUT else SOURCE_ACCEPTED, sourceValue: choice, - o: finishPendingCalls(s.o, if (expired) DEADLINE_ERROR else choice), - d: { - fallbackErrors: if (expired and s.source != SOURCE_TIMED_OUT) s.d.fallbackErrors.append("local") - else s.d.fallbackErrors, - ...s.d - }, - ...s - }) - } + input' = { name: "resolveLoader", choice: choice }, + sourcePending, + s' = Shadow::settleHeld(s, LAYOUT, RemoteIO::latestOrdinal(s), choice, false) + } action resolveLoader = { nondet choice = Set(VALUE_ONE, VALUE_TWO).oneOf() resolveAt(choice) } action rejectLoader = all { input' = { name: "rejectLoader", choice: -1 }, - s.sourcePending, - val expired = s.source == SOURCE_TIMED_OUT or not(deadlinePendingAt(s.now, s.deadline)) - s' = continueJob({ - sourcePending: false, source: if (expired) SOURCE_TIMED_OUT else SOURCE_FAILED, - o: finishPendingCalls(s.o, if (expired) DEADLINE_ERROR else SOURCE_ERROR), - d: { - fallbackErrors: if (s.source == SOURCE_TIMED_OUT) s.d.fallbackErrors - else s.d.fallbackErrors.append("local"), - ...s.d - }, - ...s - }) + sourcePending, + s' = Shadow::settleHeld(s, LAYOUT, RemoteIO::latestOrdinal(s), SOURCE_ERROR, false) } - // C0 acquisition, retained comparison, and C1 confirmation ------------------ + // C0 acquisition, retained comparison, C1 confirmation and the held fill --- action releaseRead = all { input' = { name: "releaseRead", choice: -1 }, - s.phase == C0_READ or s.phase == CONFIRMATION_READ, - val readable = s.frame > NO_PAYLOAD and fenceAllows(s.created, s.watermark) - val snapshot = if (readable) s.frame else NO_PAYLOAD - val acquired = if (freshAgeAllowed(s.created, s.wall, FRESHNESS_MS)) snapshot else NO_PAYLOAD - // Raw read validation has its own read budget. Within this profile's - // elapsed-time bounds it may report a future timestamp even after the - // shorter job budget expired; the abandoned job still cannot continue. - val measured = { - d: { futureOffsets: if (not(s.readFailed) and readable and s.created > s.wall) - s.d.futureOffsets.append({ layer: "remote_shadow", offsetMs: s.created - s.wall }) - else s.d.futureOffsets, ...s.d }, ...s - } - s' = if (s.abandoned) { phase: JOB_DONE, ...measured } - else if (s.phase == CONFIRMATION_READ) done(measured, if (s.readFailed) "confirmation_error" - else if (payloadBytes(snapshot) == payloadBytes(s.c0)) "mismatch" else "superseded") - else if (s.readFailed) done(measured, "redis_error") - else continueJob({ - phase: SOURCE_WAIT, - c0: acquired, - c0ReadReceipts: s.c0ReadReceipts.append({ - readable: readable, created: s.created, observed: s.wall, - fresh: FRESHNESS_MS, accepted: acquired > NO_PAYLOAD - }), - c0Created: s.created, - fence: if (readable) 0 else s.watermark, - ...measured - }) + Shadow::latestRead(s) >= 0, + s' = Shadow::releaseRead(s, LAYOUT, Shadow::latestRead(s), s.readFailed) } action releaseLoad = all { input' = { name: "releaseLoad", choice: -1 }, - s.phase == SNAPSHOT_DECODE, - val compared = { - now: s.now + s.comparisonMs, wall: s.wall + s.comparisonMs, - o: { comparisons: s.o.comparisons + (if (s.comparator == COMPARE_DEFAULT) 0 else 1), ...s.o }, - ...s - } - val valuesMatch = s.comparator == COMPARE_EQUAL or - (s.comparator == COMPARE_DEFAULT and payloadValue(s.c0) == s.sourceValue) - s' = if (s.abandoned) { phase: JOB_DONE, ...s } - else if (s.loadFailed) done(s, "deserialization_error") - else if (not(deadlinePendingAt(compared.now, s.deadline))) done({ abandoned: true, ...compared }, "timeout") - else if (s.comparator == COMPARE_ERROR) done(compared, "comparison_error") - else if (valuesMatch) done(compared, "match") - else { phase: CONFIRMATION_READ, o: { reads: s.o.reads + 1, ...compared.o }, ...compared } + Shadow::latestLoad(s) >= 0, + s' = Shadow::releaseLoad(s, LAYOUT, Shadow::latestLoad(s), s.loadFailed, { comparator: s.comparator, elapsedMs: s.comparisonMs }, Deadlines::UNBOUNDED) } - - // Conditional fill preparation and native write completion ------------------ action releaseDump = all { input' = { name: "releaseDump", choice: -1 }, - s.phase == FILL_SERIALIZE, - s' = if (s.abandoned) { phase: JOB_DONE, ...s } - else if (s.dumpFailed) done(s, "fill_error") - else if (not(fenceAllows(s.wall, s.fence))) done(s, "fill_fenced") - else { - phase: FILL_WRITE, writeStamp: s.wall, - o: { writes: s.o.writes + 1, writeTtls: s.o.writeTtls.append(60000), ...s.o }, - ...s - } + s.dumps.length() > 0, + s' = Shadow::releaseDump(s, LAYOUT, Writes::latestDump(s).dump, s.dumpFailed) } action releaseWrite = all { input' = { name: "releaseWrite", choice: -1 }, - s.phase == FILL_WRITE, - val stored = { - frame: if (s.writeFailed) s.frame else s.sourceValue, - created: if (s.writeFailed) s.created else s.writeStamp, - ...s - } - s' = if (s.abandoned) { phase: JOB_DONE, ...stored } - else done(stored, if (s.writeFailed) "fill_error" else "filled") + s.writes.length() > 0, + s' = Shadow::releaseWrite(s, LAYOUT, Writes::latestWrite(s).write, s.writeFailed) } // Environmental clocks, storage, policy, and failures ----------------------- - action advanceBy(choice: int): bool = { - val expired = not(deadlinePendingAt(s.now + choice, s.deadline)) - val callerTimeout = s.source == SOURCE_PENDING and expired - val jobTimeout = s.phase > IDLE and s.phase < JOB_DONE and not(s.abandoned) and expired - all { - input' = { name: "advance", choice: choice }, - s' = { - d: { - fallbackErrors: if (callerTimeout) s.d.fallbackErrors.append("local") else s.d.fallbackErrors, - ...s.d - }, - now: s.now + choice, wall: s.wall + choice, source: if (callerTimeout) SOURCE_TIMED_OUT else s.source, - abandoned: s.abandoned or jobTimeout, - phase: if (jobTimeout and s.phase == SOURCE_WAIT) JOB_DONE else s.phase, - o: { - shadow: if (jobTimeout) s.o.shadow.append("timeout") else s.o.shadow, - ...finishPendingCalls(s.o, if (callerTimeout) DEADLINE_ERROR else CALL_PENDING) - }, - ...s - } - } + action advanceBy(choice: int): bool = all { + input' = { name: "advance", choice: choice }, + s' = Shadow::advanceHeld(s, LAYOUT, choice) } action advance = { // Blocked-source fixtures advance a full job budget so due timers run. nondet choice = (if (s.sourceWorkMs > 0) Set(JOB_BUDGET_MS) else Set(1, JOB_BUDGET_MS)).oneOf() advanceBy(choice) } - action seedAt(choice: int): bool = all { input' = { name: "seed", choice: choice }, - s' = { frame: choice, created: s.wall, ...s } + s' = Remote::seedFrame(s, KEY, seedPayload(choice), SEED_RETENTION_MS) } action seed = { - nondet choice = TEXT_ONE.to(BINARY_UNICODE).oneOf() + nondet choice = 1.to(8).oneOf() seedAt(choice) } - // A second external seed choice gives multibyte text/binary identities enough - // exploration weight alongside the new blocked-source fixtures. The ordinary + // exploration weight alongside the blocked-source fixtures. The ordinary // seed action still admits every payload representation. action seedUnicode = { - nondet choice = Set(TEXT_UNICODE, BINARY_UNICODE).oneOf() + nondet choice = Set(7, 8).oneOf() all { input' = { name: "seedUnicode", choice: choice }, - s' = { frame: choice, created: s.wall, ...s } + s' = Remote::seedFrame(s, KEY, seedPayload(choice), SEED_RETENTION_MS) } } // External replacement with identical bytes in the other supported form. // This targets confirmation's representation boundary, without fixing its outcome. action reencode = { - nondet choice = Set(List( - NO_PAYLOAD, BINARY_ONE, BINARY_TWO, TEXT_ONE, TEXT_TWO, - TEXT_PADDED_ONE, BINARY_PADDED_ONE, BINARY_UNICODE, TEXT_UNICODE - ).nth(s.frame)).oneOf() - all { s.phase == CONFIRMATION_READ, s.frame > NO_PAYLOAD, input' = { name: "reencode", choice: choice }, - s' = { frame: choice, created: s.wall, ...s } } + nondet choice = Set(alternate(choiceOf(s.remoteValues.nth(KEY)))).oneOf() + all { + Shadow::confirming(s), s.remoteValues.nth(KEY) > NO_VALUE, + input' = { name: "reencode", choice: choice }, + s' = Remote::seedFrame(s, KEY, seedPayload(choice), SEED_RETENTION_MS) + } + } + action invalidateAt(choice: int): bool = all { + input' = { name: "invalidate", choice: choice }, + s' = Serving::invalidate(s, ENTITY, choice) } action invalidate = { nondet choice = Set(0, 20).oneOf() - all { - input' = { name: "invalidate", choice: choice }, - s' = if (s.writeFailed) { - o: { - invalidations: s.o.invalidations + 1, - maintenance: s.o.maintenance.append("mutation_error"), - ...s.o - }, - ...s - } else { - watermark: if (s.wall + choice > s.watermark) s.wall + choice else s.watermark, - o: { invalidations: s.o.invalidations + 1, maintenance: s.o.maintenance.append("ok"), ...s.o }, - ...s - } - } + invalidateAt(choice) } action rollbackWall = all { input' = { name: "rollbackWall", choice: -1 }, - s' = { wall: s.wall - WALL_ROLLBACK_MS, ...s } + s' = Clock::shiftWall(s, -WALL_ROLLBACK_MS) } // Application time is independent of elapsed deadline time and physical TTL. // Only an already acquired C0 may encounter this large forward change. action advanceWallBy(choice: int): bool = all { - s.phase == CONFIRMATION_READ, + Shadow::confirming(s), input' = { name: "advanceWall", choice: choice }, - s' = { wall: s.wall + choice, ...s } + s' = Clock::shiftWall(s, choice) } action advanceWall = { nondet choice = Set(1, 60000).oneOf() advanceWallBy(choice) } + // A runtime overlay replaces the previous one: a logging overlay leaves the + // ramp at the fixture's 100, a ramp overlay leaves logging at the fixture's default. action setLogging(choice: int): bool = all { input' = { name: "logPolicy", choice: choice }, - s' = { - log: choice == LOGGING_ENABLED, invalidLog: choice == LOGGING_INVALID, - invalidShadow: false, shadowActive: s.hook, ...s - } + s' = { logging: choice == LOGGING_ENABLED, loggingInvalid: choice == LOGGING_INVALID, selected: true, rampInvalid: false, ...s } } action logPolicy = { nondet choice = Set(LOGGING_DISABLED, LOGGING_ENABLED, LOGGING_INVALID).oneOf() setLogging(choice) } - def shadowPolicyFor(choice: int): State = { - shadowActive: s.hook and choice == SHADOW_ENABLED, log: s.defaultLog, - invalidShadow: choice == SHADOW_INVALID, invalidLog: false, - ...s + action shadowPolicyAt(choice: int): bool = all { + input' = { name: "shadowPolicy", choice: choice }, + s' = { selected: choice == SHADOW_ENABLED, rampInvalid: choice == SHADOW_INVALID, logging: s.defaultLog, loggingInvalid: false, ...s } } action shadowPolicy = { nondet choice = Set(SHADOW_ENABLED, SHADOW_DISABLED, SHADOW_INVALID).oneOf() - all { - input' = { name: "shadowPolicy", choice: choice }, - s' = shadowPolicyFor(choice) - } + shadowPolicyAt(choice) + } + action readFaultAt(choice: int): bool = all { + input' = { name: "readFault", choice: choice }, + s' = { readFailed: choice == 1, ...s } } action readFault = { nondet choice = Set(0, 1).oneOf() - all { - input' = { name: "readFault", choice: choice }, - s' = { readFailed: choice == 1, ...s } - } + readFaultAt(choice) + } + action loadFaultAt(choice: int): bool = all { + input' = { name: "loadFault", choice: choice }, + s' = { loadFailed: choice == 1, ...s } } action loadFault = { nondet choice = Set(0, 1).oneOf() - all { - input' = { name: "loadFault", choice: choice }, - s' = { loadFailed: choice == 1, ...s } - } + loadFaultAt(choice) + } + action dumpFaultAt(choice: int): bool = all { + input' = { name: "dumpFault", choice: choice }, + s' = { dumpFailed: choice == 1, ...s } } action dumpFault = { nondet choice = Set(0, 1).oneOf() - all { - input' = { name: "dumpFault", choice: choice }, - s' = { dumpFailed: choice == 1, ...s } - } + dumpFaultAt(choice) + } + action writeFaultAt(choice: int): bool = all { + input' = { name: "writeFault", choice: choice }, + s' = { writeFailed: choice == 1, ...s } } action writeFault = { nondet choice = Set(0, 1).oneOf() - all { - input' = { name: "writeFault", choice: choice }, - s' = { writeFailed: choice == 1, ...s } - } + writeFaultAt(choice) } // Exploration schedule: retain every progress/environment action. // At C1, favor completion and logging changes while retaining every // replacement, failure, clock, and admission-policy transition. Unicode seed // choices add exploration frequency, not another payload representation. - action step = if (s.phase == CONFIRMATION_READ) any { + action step = if (Shadow::confirming(s)) any { releaseRead, logPolicy, reencode, advanceWall, any { seed, seedUnicode, invalidate, readFault, advance, rollbackWall, shadowPolicy } } else any { @@ -450,206 +347,251 @@ module dialcache_shadow_conformance { any { advance, seed, seedUnicode, invalidate, readFault, loadFault, dumpFault, writeFault, rollbackWall, logPolicy, shadowPolicy } } - // Invariants: independent checks over state and observed history. + // Invariants: independent checks over the public channels and the library records. + // Over the public channels, verbatim from the former text. val oneSourcePerCaller = s.o.loaders == s.o.calls.length() - val writesRequireMiss = s.phase != FILL_WRITE or (s.c0 == NO_PAYLOAD and s.source == SOURCE_ACCEPTED) val writesHaveRetention = s.o.writes == s.o.writeTtls.length() val missingHookHasNoShadowEffects = s.hook or (s.o.reads == 0 and s.o.loads == 0 and s.o.dumps == 0 and s.o.writes == 0) val agesRequireVerdicts = s.d.ages.length() == s.o.shadow.select(x => x == "match" or x == "mismatch").length() val warningsRequireMismatch = s.d.warnings <= s.o.shadow.select(x => x == "mismatch").length() - val warningsRequireValidCapturedPolicy = s.d.warnings == s.mismatchAuthorizations.select(allowed => allowed).length() - val invalidLoggingCannotBeCaptured = not(s.acceptedInvalidLog and s.acceptedLog) val expiredSourceWorkSkipsRedis = s.sourceWorkMs < JOB_BUDGET_MS or s.o.reads == 0 - // Only C0 acquisition classifies freshness. Later comparison and C1 reads - // keep that decision, even when the wall clock passes the original bound. - val c0AcquisitionsRespectFreshness = s.c0ReadReceipts.indices().forall(index => { - val receipt = s.c0ReadReceipts.nth(index) - receipt.accepted == (receipt.readable and receipt.created <= receipt.observed - and receipt.observed - receipt.created < receipt.fresh) + // The environment restriction stated: an invalid logging value never also + // enables logging, so no job captures an authority from a malformed value + // (the former invalidLoggingCannotBeCaptured over the captured pair). + val invalidLoggingCannotBeCaptured = not(s.loggingInvalid and s.logging) + // Over the library records, one step from the former text: every held fill + // belongs to a job whose C0 found nothing and whose source was accepted (the + // former writesRequireMiss over the fill phase). + def fillOf(source: int): bool = Shadow::holdsJob(s, source) + and Shadow::jobOf(s, source).cached == NO_VALUE and accepted(s.sources.nth(source).result) + val fillsRequireMissAndAcceptedSource = s.dumps.indices().forall(i => fillOf(s.dumps.nth(i).source)) + and s.writes.indices().forall(i => fillOf(s.writes.nth(i).source)) + // Only C0 acquisition classifies freshness (the former receipts list): at + // the step that releases a read, a job that survives it acquired the frame + // exactly when the frame was visible and strictly younger than the freshness + // at that instant (the frame and the wall clock are as the read saw them: + // no other input moves in this step), and acquired those bytes. Spelled + // through cache_rules directly, so a fault in the kernel's acquisition or + // freshness judgment is caught, not restated. + val c0AcquisitionsRespectFreshness = input.name != "releaseRead" or s.jobs.indices().forall(i => { + val job = s.jobs.nth(i) + val fresh = Remote::visible(s, KEY, 1) and freshAgeAllowed(s.created.nth(KEY), Clock::wallOf(s), FRESHNESS_MS) + (job.cached > NO_VALUE) == fresh and (job.cached == NO_VALUE or job.cached == s.remoteValues.nth(KEY)) }) - - // Deterministic model regressions ------------------------------------------ - // Fixtures can patch ownership to challenge a property. They preserve the - // last declared input and are never exported as implementation histories. - action modelFixture(snapshot: State): bool = all { - input' = input, s' = snapshot - } - // Fixed model regressions anchor the callback and captured-policy contract. - action compareFixture = init.then(modelFixture({ - phase: SNAPSHOT_DECODE, deadline: s.now + JOB_BUDGET_MS, comparisonMs: 0, - hook: true, shadowActive: true, - c0: TEXT_ONE, c0Created: s.wall - 1, sourceValue: VALUE_TWO, - o: { calls: List(VALUE_TWO), loaders: 1, reads: 1, loads: 1, ...empty }, - ...s - })) - run identicalTextAndBinaryBytesConfirmMismatchTest = compareFixture - .then(modelFixture({ comparator: COMPARE_UNEQUAL, frame: BINARY_ONE, created: s.wall, ...s })).then(releaseLoad).then(releaseRead) + // Every pending job budget is a registered, not yet expired job's and every + // such job has exactly one; a source deadline belongs to the latest loader + // exactly while its work is undelivered and its flight's result pending. + val budgetsBelongToPendingWork = s.deadlines.indices().forall(i => { + val due = s.deadlines.nth(i) + if (due.kind == Deadlines::JOB) Shadow::holdsJob(s, due.index) and not(Shadow::jobOf(s, due.index).timedOut) + else due.kind == Deadlines::SOURCE and Deadlines::pending(s, due.index) and s.sources.nth(s.loaders.nth(due.index)).result == CALL_PENDING + }) and s.jobs.indices().forall(i => s.jobs.nth(i).timedOut or Deadlines::deadlinesOf(s, Deadlines::JOB, s.jobs.nth(i).source).length() == 1) + and s.loaders.indices().forall(k => Deadlines::deadlinesOf(s, Deadlines::SOURCE, k).length() == + (if (Deadlines::pending(s, k) and s.sources.nth(s.loaders.nth(k)).result == CALL_PENDING) 1 else 0)) + // The drivers' effects are the held ones: every held read or decode is a + // job's (the caller uses no layer, so no caller read is ever held) under an + // ordinal the drivers dispatched, a job holds exactly one read while it + // reads and exactly one decode while it decodes, and the loaders are the + // loader ordinals. + val heldEffectsAreTheDrivers = s.o.loaders == s.loaders.length() + and s.reads.indices().forall(i => Shadow::holdsRead(s, s.reads.nth(i).read) and s.reads.nth(i).read < s.o.reads) + and s.loads.indices().forall(i => Shadow::holdsLoad(s, s.loads.nth(i).load) and s.loads.nth(i).load < s.o.loads) + and s.jobs.indices().forall(i => { + val job = s.jobs.nth(i) + s.reads.select(held => held.flight == job.source).length() == (if (Shadow::reading(job)) 1 else 0) + and s.loads.select(held => held.flight == job.source).length() == (if (job.phase == Shadow::DECODING) 1 else 0) + }) + // A dispatched fill was stamped after the fence its job's C0 read observed + // (the retired validation model's fencedFillDoesNotWrite): the write carries + // the stamp of its dump's release, the job the fence, so the fence recheck + // at dispatch (remote_writes) is judged here one step later. + val fillsClearTheirFence = s.writes.indices().forall(i => { + val held = s.writes.nth(i) + not(Shadow::holdsJob(s, held.source)) or Shadow::jobOf(s, held.source).fence == NO_FENCE + or fenceAllows(held.stamp, Shadow::jobOf(s, held.source).fence) + }) + // The environment restriction stated: one job and one pending source at a time. + val oneExecution = s.jobs.length() <= 1 and s.sources.select(source => source.result == CALL_PENDING).length() <= 1 + // The former warningsRequireValidCapturedPolicy read the authorization list + // the profile kept per verdict; the fact it stated (a warning exactly at a + // confirmed mismatch whose admission captured logging on) lives in + // shadow::recordVerdict and is pinned by + // explicitInequalityRequiresConfirmationTest, + // acceptedLoggingSurvivesPolicyChangeTest, + // invalidLoggingKeepsComparisonWithoutWarningTest, + // omittedLoggingKeepsMismatchMetricsOnlyTest and + // explicitFalseLoggingOverridesEnabledDefaultTest, with + // warningsRequireMismatch bounding the count. + + // Deterministic public histories ------------------------------------------- + // The same commands drive exploration and implementation replay. The former + // fixtures patched the job's phase, its C0 and the stored frame; each patch + // is now the input that produces it: a seed, a millisecond of elapsed time + // for a one-millisecond C0 age, the call, its read and its settlement. Every + // schedule settles its source with an explicit value, so its export does not + // depend on the seed. + // A dark job whose C0 (text `1`, stamped one millisecond before the call) is + // held for decoding after the source resolved with `value`. + action compareWith(fixture: int, value: int): bool = initialize(fixture).then(seedAt(1)).then(advanceBy(1)) + .then(beginCall).then(releaseRead).then(resolveAt(value)) + // A dark job over an absent frame whose source resolved: its fill is held. + action fillFixture = initialize(0).then(beginCall).then(releaseRead).then(resolveAt(VALUE_ONE)) + + run identicalTextAndBinaryBytesConfirmMismatchTest = compareWith(2, VALUE_TWO) + .then(seedAt(3)).then(releaseLoad).then(releaseRead) .expect(s.o.shadow == List("mismatch")) - run sameDecodedValueWithDifferentBytesIsSupersededTest = compareFixture - .then(modelFixture({ comparator: COMPARE_UNEQUAL, frame: BINARY_PADDED_ONE, created: s.wall, ...s })).then(releaseLoad).then(releaseRead) + run sameDecodedValueWithDifferentBytesIsSupersededTest = compareWith(2, VALUE_TWO) + .then(seedAt(5)).then(releaseLoad).then(releaseRead) .expect(s.o.shadow == List("superseded")) - run binarySnapshotComparesDecodedValueTest = compareFixture - .then(modelFixture({ comparator: COMPARE_DEFAULT, c0: BINARY_ONE, sourceValue: VALUE_ONE, ...s })).then(releaseLoad) + run binarySnapshotComparesDecodedValueTest = initialize(0).then(seedAt(3)).then(advanceBy(1)) + .then(beginCall).then(releaseRead).then(resolveAt(VALUE_ONE)).then(releaseLoad) .expect(s.o.shadow == List("match") and s.o.reads == 1) - run slowComparisonTimesOutBeforeConfirmationTest = compareFixture - .then(modelFixture({ comparator: COMPARE_UNEQUAL, comparisonMs: 10, ...s })).then(releaseLoad) + // A comparison that consumes the whole budget times the job out before any + // verdict, whether the callback would have reported equal or thrown. + run slowComparisonTimesOutBeforeConfirmationTest = compareWith(FIXTURE_SLOW_EQUAL, VALUE_TWO).then(releaseLoad) .expect(s.o.shadow == List("timeout") and s.o.reads == 1 and s.o.comparisons == 1 and s.o.calls == List(VALUE_TWO)) - run slowComparisonFailureStillTimesOutTest = compareFixture - .then(modelFixture({ comparator: COMPARE_ERROR, comparisonMs: 10, ...s })).then(releaseLoad) + run slowComparisonFailureStillTimesOutTest = compareWith(FIXTURE_SLOW_ERROR, VALUE_TWO).then(releaseLoad) .expect(s.o.shadow == List("timeout") and s.o.comparisons == 1 and s.o.calls == List(VALUE_TWO)) - run missingHookSkipsDarkJobTest = init.then(modelFixture({ hook: false, shadowActive: false, ...s })) - .then(beginCall).then(resolveLoader).expect(s.o.calls.nth(0) > 0 and s.o.reads == 0 and s.o.shadow == List()) - run invalidShadowPolicySkipsDarkJobTest = init.then(modelFixture(shadowPolicyFor(SHADOW_INVALID))).then(beginCall).then(resolveLoader) - .expect(s.o.calls.nth(0) > 0 and s.o.reads == 0 and s.o.shadow == List()) - run admittedComparisonSurvivesPolicyDisableTest = compareFixture.then(modelFixture({ comparator: COMPARE_EQUAL, ...s })) - .then(modelFixture(shadowPolicyFor(SHADOW_DISABLED))).then(releaseLoad).expect(s.o.shadow == List("match")) - run explicitEqualityOverridesValuesTest = compareFixture.then(modelFixture({ comparator: COMPARE_EQUAL, ...s })).then(releaseLoad) + run missingHookSkipsDarkJobTest = initialize(FIXTURE_NO_HOOK) + .then(beginCall).then(resolveAt(VALUE_ONE)).expect(s.o.calls == List(VALUE_ONE) and s.o.reads == 0 and s.o.shadow == List()) + run invalidShadowPolicySkipsDarkJobTest = initialize(0).then(shadowPolicyAt(SHADOW_INVALID)).then(beginCall).then(resolveAt(VALUE_ONE)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.reads == 0 and s.o.shadow == List() and s.d.configErrors == 1) + run admittedComparisonSurvivesPolicyDisableTest = compareWith(1, VALUE_TWO) + .then(shadowPolicyAt(SHADOW_DISABLED)).then(releaseLoad).expect(s.o.shadow == List("match")) + run explicitEqualityOverridesValuesTest = compareWith(1, VALUE_TWO).then(releaseLoad) .expect(s.o.shadow == List("match") and s.o.comparisons == 1 and s.d.ages == List(1)) - run explicitInequalityRequiresConfirmationTest = compareFixture - .then(modelFixture({ comparator: COMPARE_UNEQUAL, sourceValue: VALUE_ONE, frame: TEXT_ONE, created: s.wall, acceptedLog: true, ...s })) - .then(releaseLoad).expect(s.phase == CONFIRMATION_READ and s.d.warnings == 0).then(releaseRead) + run explicitInequalityRequiresConfirmationTest = compareWith(FIRST_LOGGING_FIXTURE + 2, VALUE_ONE) + .then(releaseLoad).expect(Shadow::confirming(s) and s.d.warnings == 0).then(releaseRead) .expect(s.o.shadow == List("mismatch") and s.o.comparisons == 1 and s.d.warnings == 1) - run comparisonFailureKeepsCallerTest = compareFixture.then(modelFixture({ comparator: COMPARE_ERROR, ...s })).then(releaseLoad) + run comparisonFailureKeepsCallerTest = compareWith(3, VALUE_TWO).then(releaseLoad) .expect(s.o.calls == List(VALUE_TWO) and s.o.shadow == List("comparison_error") and s.d.ages == List()) - run acceptedLoggingSurvivesPolicyChangeTest = compareFixture - .then(modelFixture({ comparator: COMPARE_UNEQUAL, frame: TEXT_ONE, created: s.wall, acceptedLog: true, log: false, ...s })) - .then(releaseLoad).then(releaseRead).expect(s.d.warnings == 1) - run ageClampsAfterWallRollbackTest = compareFixture.then(modelFixture({ comparator: COMPARE_EQUAL, ...s })) + run acceptedLoggingSurvivesPolicyChangeTest = compareWith(FIRST_LOGGING_FIXTURE + 2, VALUE_TWO) + .then(setLogging(LOGGING_DISABLED)).then(releaseLoad).then(releaseRead).expect(s.d.warnings == 1) + run ageClampsAfterWallRollbackTest = compareWith(1, VALUE_TWO) .then(rollbackWall).then(releaseLoad).expect(s.d.ages == List(0)) - run confirmationKeepsOriginalAgeTest = compareFixture - .then(modelFixture({ comparator: COMPARE_UNEQUAL, frame: TEXT_ONE, created: s.wall, ...s })).then(releaseLoad) - .then(modelFixture({ wall: s.wall + 1, created: s.wall + 1000, ...s })).then(releaseRead) + // The verdict age is the C0 frame's, not the confirmation frame's. + run confirmationKeepsOriginalAgeTest = compareWith(2, VALUE_TWO).then(releaseLoad) + .then(advanceWallBy(1)).then(seedAt(1)).then(releaseRead) .expect(s.o.shadow == List("mismatch") and s.d.ages == List(2)) - run invalidLoggingKeepsComparisonWithoutWarningTest = init.then(modelFixture({ - hook: true, shadowActive: true, comparator: COMPARE_UNEQUAL, comparisonMs: 0, sourceWorkMs: 0, - log: false, invalidLog: true, frame: TEXT_ONE, created: s.wall, - ...s - })).then(beginCall).expect(s.d.configErrors == 1 and s.o.reads == 1) - .then(releaseRead).then(resolveLoader).then(releaseLoad).then(releaseRead) + run invalidLoggingKeepsComparisonWithoutWarningTest = initialize(2).then(setLogging(LOGGING_INVALID)).then(seedAt(1)) + .then(beginCall).expect(s.d.configErrors == 1 and s.o.reads == 1) + .then(releaseRead).then(resolveAt(VALUE_ONE)).then(releaseLoad).then(releaseRead) .expect(s.o.shadow == List("mismatch") and s.d.warnings == 0 and s.o.comparisons == 1) // Omission and an explicit false reply are distinct environment inputs. Both // keep diagnostic metrics, while neither authorizes a mismatch warning. - run omittedLoggingKeepsMismatchMetricsOnlyTest = initialize(COMPARE_UNEQUAL) - .expect(not(s.defaultLog) and not(s.log)) - .then(seedAt(TEXT_ONE)).then(beginCall).then(releaseRead).then(resolveAt(VALUE_TWO)) + run omittedLoggingKeepsMismatchMetricsOnlyTest = initialize(2) + .expect(not(s.defaultLog) and not(s.logging)) + .then(seedAt(1)).then(beginCall).then(releaseRead).then(resolveAt(VALUE_TWO)) .then(releaseLoad).then(releaseRead) .expect(s.o.shadow == List("mismatch") and s.d.ages == List(0) and s.d.warnings == 0 and s.d.configErrors == 0 and s.o.comparisons == 1) - run explicitFalseLoggingOverridesEnabledDefaultTest = initialize(FIRST_LOGGING_FIXTURE + COMPARE_UNEQUAL) - .expect(s.defaultLog and s.log) - .then(setLogging(LOGGING_DISABLED)).then(seedAt(TEXT_ONE)).then(beginCall) + run explicitFalseLoggingOverridesEnabledDefaultTest = initialize(FIRST_LOGGING_FIXTURE + 2) + .expect(s.defaultLog and s.logging) + .then(setLogging(LOGGING_DISABLED)).then(seedAt(1)).then(beginCall) .then(releaseRead).then(resolveAt(VALUE_TWO)).then(releaseLoad).then(releaseRead) .expect(s.o.shadow == List("mismatch") and s.d.ages == List(0) and s.d.warnings == 0 and s.d.configErrors == 0 and s.o.comparisons == 1) - run sourceWorkBeforeDeadlineStillReadsTest = init.then(modelFixture({ - hook: true, shadowActive: true, sourceWorkMs: JOB_BUDGET_MS - 1, ...s - })).then(beginCall).expect(s.o.reads == 1 and s.o.calls == List(CALL_PENDING) and s.o.shadow == List()) - .then(resolveLoader).expect(s.o.calls.nth(0) == VALUE_ONE or s.o.calls.nth(0) == VALUE_TWO) - run sourceWorkAtDeadlineSkipsDeferredReadTest = init.then(modelFixture({ - hook: true, shadowActive: true, sourceWorkMs: JOB_BUDGET_MS, ...s - })).then(beginCall) + run sourceWorkBeforeDeadlineStillReadsTest = initialize(FIXTURE_SOURCE_WORK_BEFORE_DEADLINE) + .then(beginCall).expect(s.o.reads == 1 and s.o.calls == List(CALL_PENDING) and s.o.shadow == List()) + .then(resolveAt(VALUE_ONE)).expect(s.o.calls == List(VALUE_ONE)) + run sourceWorkAtDeadlineSkipsDeferredReadTest = initialize(FIXTURE_SOURCE_WORK_AT_DEADLINE) + .then(beginCall) .expect(s.o.reads == 0 and s.o.calls == List(CALL_PENDING) and s.o.shadow == List("timeout") and s.d.fallbackErrors == List()) - .then(resolveLoader) + .then(resolveAt(VALUE_ONE)) .expect(s.o.calls == List(DEADLINE_ERROR) and s.o.reads == 0 and s.d.fallbackErrors == List("local")) - run expiredDeferredJobRetainsSourceRejectionDeadlineTest = init.then(modelFixture({ - hook: true, shadowActive: true, sourceWorkMs: JOB_BUDGET_MS, ...s - })).then(beginCall).then(rejectLoader) + run expiredDeferredJobRetainsSourceRejectionDeadlineTest = initialize(FIXTURE_SOURCE_WORK_AT_DEADLINE) + .then(beginCall).then(rejectLoader) .expect(s.o.calls == List(DEADLINE_ERROR) and s.o.shadow == List("timeout") and s.o.reads == 0) - // These histories distinguish failures at C0, decode, C1, serialization and // write settlement. Their effects remain subordinate to the caller result. - action darkCallerFixture = init.then(modelFixture({ - hook: true, shadowActive: true, sourceWorkMs: 0, comparisonMs: 0, - comparator: COMPARE_DEFAULT, ...s - })) - action fillFixture = darkCallerFixture.then(beginCall) - .then(releaseRead).then(resolveLoader) - - run darkReadErrorCannotReplaceCallerSourceTest = darkCallerFixture - .then(modelFixture({ readFailed: true, ...s })).then(beginCall).then(releaseRead) + run darkReadErrorCannotReplaceCallerSourceTest = initialize(0) + .then(readFaultAt(1)).then(beginCall).then(releaseRead) .expect(s.o.calls == List(CALL_PENDING) and s.o.shadow == List("redis_error")) - .then(resolveLoader) - .expect(s.o.calls.nth(0) == VALUE_ONE or s.o.calls.nth(0) == VALUE_TWO) - .expect(s.o.shadow == List("redis_error") and s.o.loads == 0 and s.o.writes == 0) + .then(resolveAt(VALUE_ONE)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.shadow == List("redis_error") and s.o.loads == 0 and s.o.writes == 0) - run sourceErrorDoesNotDecodePresentDarkBytesTest = darkCallerFixture - .then(modelFixture({ frame: TEXT_ONE, created: s.wall, ...s })) - .then(beginCall).then(releaseRead).then(rejectLoader) + run sourceErrorDoesNotDecodePresentDarkBytesTest = initialize(0) + .then(seedAt(1)).then(beginCall).then(releaseRead).then(rejectLoader) .expect(s.o.calls == List(SOURCE_ERROR) and s.o.shadow == List("source_error") and s.o.loads == 0 and s.o.dumps == 0 and s.o.writes == 0) - run futureDarkBytesFillWithoutDecodingTest = darkCallerFixture - .then(modelFixture({ frame: TEXT_ONE, created: s.wall + 1, ...s })) - .then(beginCall).then(releaseRead).then(resolveLoader).then(releaseDump).then(releaseWrite) - .expect(s.o.shadow == List("filled") and s.o.loads == 0 - and s.o.loaders == 1 and s.o.writes == 1) - - run fencedDarkBytesCanAdmitNewerFillTest = darkCallerFixture - .then(modelFixture({ frame: TEXT_ONE, created: s.wall - 2, watermark: s.wall - 1, ...s })) - .then(beginCall).then(releaseRead).then(resolveLoader).then(releaseDump).then(releaseWrite) - .expect(s.o.shadow == List("filled") and s.o.loads == 0 - and s.o.writes == 1 and s.created > s.watermark) + // A frame fenced by an invalidation a millisecond after its stamp is a + // semantic miss; the fill stamped a millisecond after the watermark clears it. + run fencedDarkBytesCanAdmitNewerFillTest = initialize(0) + .then(seedAt(1)).then(advanceBy(1)).then(invalidateAt(0)).then(advanceBy(1)) + .then(beginCall).then(releaseRead).then(resolveAt(VALUE_ONE)).then(releaseDump).then(releaseWrite) + .expect(s.o.shadow == List("filled") and s.o.loads == 0 and s.o.writes == 1 + and s.o.writeTtls == List(FRESHNESS_MS) and s.created.nth(KEY) > s.watermark.nth(ENTITY)) + + // The fence a miss observed is judged again when the dump is released: a + // wall rollback below it between settlement and release stops the write. + run fenceRejudgedAtDumpReleaseAfterRollbackTest = initialize(0) + .then(invalidateAt(0)).then(advanceBy(1)).then(beginCall).then(releaseRead).then(resolveAt(VALUE_ONE)) + .expect(s.o.dumps == 1 and s.o.writes == 0 and s.o.shadow == List()) + .then(rollbackWall).then(releaseDump) + .expect(s.o.shadow == List("fill_fenced") and s.o.writes == 0) + .expect(s.o.calls == List(VALUE_ONE)) + // A dark read that settles before the source waits for it: no verdict, no + // fill, until the source resolves (the retired validation model's + // darkReadCanPrecedeCallerResultTest). + run darkReadBeforeSourceWaitsForItTest = initialize(0).then(beginCall).then(releaseRead) + .expect(s.o.calls == List(CALL_PENDING) and s.o.shadow == List() and s.o.dumps == 0 and s.o.loads == 0) + .then(resolveAt(VALUE_TWO)).expect(s.o.calls == List(VALUE_TWO) and s.o.dumps == 1) + .then(releaseDump).then(releaseWrite) + .expect(s.o.shadow == List("filled") and s.o.writes == 1 and s.o.loaders == 1) - run fencedConfirmationNeverRepairsTest = compareFixture - .then(modelFixture({ comparator: COMPARE_UNEQUAL, frame: TEXT_ONE, created: s.wall, watermark: s.wall, ...s })) - .then(releaseLoad).then(releaseRead) + run fencedConfirmationNeverRepairsTest = compareWith(2, VALUE_TWO) + .then(invalidateAt(0)).then(releaseLoad).then(releaseRead) .expect(s.o.shadow == List("superseded") and s.o.reads == 2 and s.o.calls == List(VALUE_TWO) and s.o.writes == 0 and s.d.ages == List()) - run futureConfirmationStillComparesBytesTest = compareFixture - .then(modelFixture({ comparator: COMPARE_UNEQUAL, frame: TEXT_ONE, created: s.wall + 1, ...s })) - .then(releaseLoad).then(releaseRead) + run futureConfirmationStillComparesBytesTest = compareWith(2, VALUE_TWO) + .then(seedAt(1)).then(rollbackWall).then(releaseLoad).then(releaseRead) .expect(s.o.shadow == List("mismatch") and s.o.reads == 2 and s.o.calls == List(VALUE_TWO) and s.o.writes == 0) run fillSerializationFailureNeverDispatchesWriteTest = fillFixture - .then(modelFixture({ dumpFailed: true, ...s })).then(releaseDump) + .then(dumpFaultAt(1)).then(releaseDump) .expect(s.o.shadow == List("fill_error") and s.o.dumps == 1 and s.o.writes == 0) - .expect(s.o.calls.nth(0) == VALUE_ONE or s.o.calls.nth(0) == VALUE_TWO) + .expect(s.o.calls == List(VALUE_ONE)) run fillWriteFailurePreservesCallerResultTest = fillFixture.then(releaseDump) - .then(modelFixture({ writeFailed: true, ...s })).then(releaseWrite) + .then(writeFaultAt(1)).then(releaseWrite) .expect(s.o.shadow == List("fill_error") and s.o.dumps == 1 and s.o.writes == 1) - .expect(s.o.calls.nth(0) == VALUE_ONE or s.o.calls.nth(0) == VALUE_TWO) - - action expirePendingJob = all { - input' = input, - s' = { - abandoned: true, now: s.deadline, wall: s.wall + s.deadline - s.now, - o: { shadow: s.o.shadow.append("timeout"), ...s.o }, - ...s - } - } + .expect(s.o.calls == List(VALUE_ONE)) + + // The job's budget delivered by a full advance: late held work drains + // without a second label, a late dump dispatching no write and a late write + // still storing. run lateFillSerializationCannotDispatchWriteTest = fillFixture - .then(expirePendingJob).then(releaseDump) + .then(advanceBy(JOB_BUDGET_MS)).then(releaseDump) .expect(s.o.shadow == List("timeout") and s.o.dumps == 1 and s.o.writes == 0) run lateFillWriteCannotEmitAnotherVerdictTest = fillFixture.then(releaseDump) - .then(expirePendingJob).then(releaseWrite) + .then(advanceBy(JOB_BUDGET_MS)).then(releaseWrite) .expect(s.o.shadow == List("timeout") and s.o.writes == 1) - .expect(s.o.calls.nth(0) == VALUE_ONE or s.o.calls.nth(0) == VALUE_TWO) + .expect(s.o.calls == List(VALUE_ONE)) - run lateDecodeCannotStartConfirmationTest = compareFixture - .then(modelFixture({ comparator: COMPARE_UNEQUAL, ...s })).then(expirePendingJob).then(releaseLoad) + run lateDecodeCannotStartConfirmationTest = compareWith(2, VALUE_TWO) + .then(advanceBy(JOB_BUDGET_MS)).then(releaseLoad) .expect(s.o.shadow == List("timeout") and s.o.reads == 1 and s.o.comparisons == 0 and s.o.calls == List(VALUE_TWO)) - run lateConfirmationCannotEmitAnotherVerdictTest = compareFixture - .then(modelFixture({ comparator: COMPARE_UNEQUAL, ...s })).then(releaseLoad) - .then(expirePendingJob).then(releaseRead) + run lateConfirmationCannotEmitAnotherVerdictTest = compareWith(2, VALUE_TWO).then(releaseLoad) + .then(advanceBy(JOB_BUDGET_MS)).then(releaseRead) .expect(s.o.shadow == List("timeout") and s.o.reads == 2 and s.o.writes == 0 and s.o.calls == List(VALUE_TWO)) - run lateDarkReadCannotStartDecodeOrFillTest = darkCallerFixture - .then(beginCall).then(resolveLoader).then(expirePendingJob).then(releaseRead) + run lateDarkReadCannotStartDecodeOrFillTest = initialize(0) + .then(beginCall).then(resolveAt(VALUE_ONE)).then(advanceBy(JOB_BUDGET_MS)).then(releaseRead) .expect(s.o.shadow == List("timeout") and s.o.loads == 0 and s.o.dumps == 0 and s.o.writes == 0) - run confirmationPastFreshnessKeepsOriginalPayloadAndAgeTest = initialize(FIRST_LOGGING_FIXTURE + COMPARE_UNEQUAL) - .then(seedAt(TEXT_ONE)).then(beginCall).then(releaseRead).then(resolveAt(VALUE_TWO)) + run confirmationPastFreshnessKeepsOriginalPayloadAndAgeTest = initialize(FIRST_LOGGING_FIXTURE + 2) + .then(seedAt(1)).then(beginCall).then(releaseRead).then(resolveAt(VALUE_TWO)) .then(releaseLoad).then(advanceWallBy(60000)).then(releaseRead) .expect(s.o.calls == List(VALUE_TWO) and s.o.shadow == List("mismatch") and s.o.reads == 2 and s.o.loads == 1 and s.o.writes == 0 @@ -657,8 +599,8 @@ module dialcache_shadow_conformance { // C1 may finish with its retained bytes at the boundary. The next job's C0 // must classify those same stored bytes again and refill instead of decoding. - run c0AtExactFreshnessBoundaryRefillsTest = initialize(COMPARE_UNEQUAL) - .then(seedAt(TEXT_ONE)).then(beginCall).then(releaseRead).then(resolveAt(VALUE_TWO)) + run c0AtExactFreshnessBoundaryRefillsTest = initialize(2) + .then(seedAt(1)).then(beginCall).then(releaseRead).then(resolveAt(VALUE_TWO)) .then(releaseLoad).then(advanceWallBy(FRESHNESS_MS)).then(releaseRead) .expect(s.o.shadow == List("mismatch") and s.o.loads == 1 and s.o.writes == 0) .then(beginCall).then(releaseRead).then(resolveAt(VALUE_TWO)) @@ -667,16 +609,16 @@ module dialcache_shadow_conformance { .expect(s.o.shadow == List("mismatch", "filled") and s.o.reads == 3 and s.o.loads == 1 and s.o.writes == 1 and s.d.ages == List(FRESHNESS_MS)) - run confirmationRollbackKeepsPayloadAndClampsAgeTest = initialize(FIRST_LOGGING_FIXTURE + COMPARE_UNEQUAL) - .then(seedAt(TEXT_ONE)).then(beginCall).then(releaseRead).then(resolveAt(VALUE_TWO)) + run confirmationRollbackKeepsPayloadAndClampsAgeTest = initialize(FIRST_LOGGING_FIXTURE + 2) + .then(seedAt(1)).then(beginCall).then(releaseRead).then(resolveAt(VALUE_TWO)) .then(releaseLoad).then(rollbackWall).then(releaseRead) .expect(s.o.calls == List(VALUE_TWO) and s.o.shadow == List("mismatch") and s.o.reads == 2 and s.o.loads == 1 and s.o.writes == 0 and s.d.ages == List(0) and s.d.warnings == 1 and s.d.futureOffsets == List({ layer: "remote_shadow", offsetMs: 1000 })) - run futureDarkAcquisitionReportsOffsetAndFillsMissTest = initialize(COMPARE_DEFAULT) - .then(seedAt(TEXT_ONE)).then(rollbackWall).then(beginCall).then(releaseRead) + run futureDarkAcquisitionReportsOffsetAndFillsMissTest = initialize(0) + .then(seedAt(1)).then(rollbackWall).then(beginCall).then(releaseRead) .expect(s.o.loads == 0 and s.o.dumps == 0 and s.d.futureOffsets == List({ layer: "remote_shadow", offsetMs: 1000 })) .then(resolveAt(VALUE_TWO)).then(releaseDump).then(releaseWrite) @@ -684,13 +626,12 @@ module dialcache_shadow_conformance { and s.o.loads == 0 and s.o.writes == 1 and s.d.futureOffsets == List({ layer: "remote_shadow", offsetMs: 1000 })) - run futureLateDarkReadKeepsTimeoutAndReportsOffsetTest = initialize(COMPARE_DEFAULT) - .then(seedAt(TEXT_ONE)).then(rollbackWall).then(beginCall).then(advanceBy(JOB_BUDGET_MS)) + run futureLateDarkReadKeepsTimeoutAndReportsOffsetTest = initialize(0) + .then(seedAt(1)).then(rollbackWall).then(beginCall).then(advanceBy(JOB_BUDGET_MS)) .expect(s.o.calls == List(DEADLINE_ERROR) and s.o.shadow == List("timeout") and s.d.futureOffsets == List()) .then(releaseRead) .expect(s.o.calls == List(DEADLINE_ERROR) and s.o.shadow == List("timeout") and s.o.loads == 0 and s.o.dumps == 0 and s.o.writes == 0 and s.d.futureOffsets == List({ layer: "remote_shadow", offsetMs: 990 })) - } diff --git a/formal/dialcache-shadow-layers-conformance.qnt b/formal/dialcache-shadow-layers-conformance.qnt index 29ff0535..f7092736 100644 --- a/formal/dialcache-shadow-layers-conformance.qnt +++ b/formal/dialcache-shadow-layers-conformance.qnt @@ -2,6 +2,18 @@ module dialcache_shadow_layers_conformance { import cache_rules.* from "./cache-rules" import conformance_observations.* from "./conformance-observations" import cohort_boundaries.* from "./cohort-boundaries" + import encodings.* from "./kernel/encodings" + import calls.* from "./kernel/calls" + import layer_policy.* from "./kernel/layer-policy" + import serving as Serving from "./kernel/serving" + import remote_frames as Remote from "./kernel/remote-frames" + import remote_writes as Writes from "./kernel/remote-writes" + import shadow as Shadow from "./kernel/shadow" + import deadlines as Deadlines from "./kernel/deadlines" + import recovery as Recovery from "./kernel/recovery" + import flights as Flights from "./kernel/flights" + import clock as Clock from "./kernel/clock" + import policy_gate as Gate from "./kernel/policy-gate" // Composition: request/local reuse, independent caller sources, and one // per-instance registry shared by served-hit and ramped-down shadow jobs. // C18/C21/C47/C49/C54 govern captured policy, admission, and publication. @@ -13,8 +25,13 @@ module dialcache_shadow_layers_conformance { // Three keys, two instances, three persistent scopes, twelve caller starts. // Coalescing is explicitly off. Ordinary stale-recovery reads are excluded; // dark acquisition includes stale bytes to distinguish its lack of recovery. - // The explicit input envelope is the portable driver input, including in - // deterministic regression traces. Expected cache/ownership state is not. + // Every rule is a kernel transition (formal/kernel): the layered atomic + // release with held refills and atomic stale-on-error (remote_writes), the + // shadow job registry beside it (shadow) with its budgets (deadlines), the + // frames a seed stores (remote_frames). This module owns the bounded state, + // the fixture decoding (the layers, TTLs and cohort selection a policy code + // resolves to, the frame a seed choice names), the input choices and the + // guards. The explicit input envelope is the portable driver input. pure val KEYS = 3 pure val INSTANCES = 2 @@ -24,8 +41,6 @@ module dialcache_shadow_layers_conformance { pure val JOB_BUDGET_MS = 60000 pure val LOCAL_TTL_MS = 60000 pure val SEED_TTL_MS = 180000 - pure val NO_OWNER = -1 - pure val NO_VALUE = 0 pure val DARK_ALL = 0 pure val DARK_REQUEST = 1 pure val DARK_LOCAL = 2 @@ -41,265 +56,103 @@ module dialcache_shadow_layers_conformance { pure val SERVED_ALL = 12 pure val SERVED_CHANGED_FILL = 13 pure val SHADOW_SAMPLE_NUMERATOR = 3203834406 - pure val WAITING_SOURCE = 0 - pure val SERIALIZING = 1 - pure val WRITING = 2 - pure val FINISHED = 3 - - type Policy = { - request: bool, local: bool, serving: bool, shadow: bool, - freshMs: int, retainedMs: int, choice: int - } - type Call = { source: int, hit: int, slot: int } - type Source = { - call: int, instance: int, key: int, slot: int, local: bool, - remote: bool, retainedMs: int, result: int - } - type Job = { - source: int, instance: int, key: int, dark: bool, cached: int, - admittedAt: int, cachedCreated: int, freshMs: int, - policyChoice: int, retainedMs: int, phase: int, - timedOut: bool - } - type Write = { - source: int, job: int, key: int, retainedMs: int, - phase: int, stamp: int + // Three keys per instance and per scope row, three persistent scopes, one + // operation per entity; the drivers probe each source's scope. + pure val LAYOUT: Serving::Layout = { + keysPerInstance: KEYS, keysPerScope: KEYS, persistentContexts: SCOPES, operationsPerEntity: 1, probeSourceScope: true, policyProvider: true } + + // State: the layered shape with its held refills, recovery snapshots and + // shadow jobs with their budgets, and the policy in force decoded once at + // the policy input (the code, for the guards; the layers, TTLs and cohort + // selection the traversal and the jobs read). type State = { - o: Observation, now: int, policy: Policy, - calls: List[Call], sources: List[Source], jobs: List[Job], - work: List[Write], dumps: List[int], writes: List[int], - memo: List[int], localValues: List[int], localExpires: List[int], - remoteValues: List[int], remoteCreated: List[int], remoteExpires: List[int], - localWriters: List[int] + o: Observation, + now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, + policy: int, resolved: Resolution, ttls: Ttls, shadow: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + dumps: List[Writes::HeldDump], writes: List[Writes::HeldWrite], retained: List[Recovery::Snapshot], + jobs: List[Shadow::Job], deadlines: List[Deadlines::Due] } var s: State var input: { name: str, choice: int } - pure def zeros(n: int): List[int] = - 0.to(n - 1).fold(List(), (out, _) => out.append(0)) - pure def policyFor(choice: int): Policy = { - request: Set(DARK_ALL, DARK_REQUEST, DARK_CHANGED_FILL, SERVED_ALL).contains(choice), - local: Set(DARK_ALL, DARK_LOCAL, DARK_INVALID_SHADOW, DARK_CHANGED_FILL, SERVED_ALL).contains(choice), - serving: Set(SERVED_NONE, SERVED_NO_SHADOW, SERVED_ALL, SERVED_CHANGED_FILL).contains(choice), - shadow: if (Set(COHORT_BELOW, COHORT_AT, COHORT_ABOVE).contains(choice)) - cohortAdmits(SHADOW_SAMPLE_NUMERATOR, - thresholdForRelation(SHADOW_SAMPLE_NUMERATOR, choice - COHORT_BELOW)) - else not(Set(SERVED_NO_SHADOW, DARK_NO_SHADOW, DARK_INVALID_SHADOW, - SERVED_CHANGED_FILL).contains(choice)), - freshMs: if (Set(DARK_CHANGED_FILL, SERVED_CHANGED_FILL).contains(choice)) 120000 else 60000, - retainedMs: if (Set(DARK_CHANGED_FILL, SERVED_CHANGED_FILL).contains(choice)) 180000 else 120000, - choice: choice - } + // Input decoding (reads no state) ------------------------------------------- + pure def zeros(n: int): List[int] = 0.to(n - 1).fold(List(), (out, _) => out.append(0)) + pure def slots(n: int): List[int] = 0.to(n - 1).fold(List(), (out, _) => out.append(NO_OWNER)) + pure def changedFill(choice: int): bool = choice == DARK_CHANGED_FILL or choice == SERVED_CHANGED_FILL + pure def cohortCode(choice: int): bool = Set(COHORT_BELOW, COHORT_AT, COHORT_ABOVE).contains(choice) + // The layers a policy code enables; no reply coalesces. + pure def resolvedFor(choice: int): Resolution = { + layers: { + request: Set(DARK_ALL, DARK_REQUEST, DARK_CHANGED_FILL, SERVED_ALL).contains(choice), + local: Set(DARK_ALL, DARK_LOCAL, DARK_INVALID_SHADOW, DARK_CHANGED_FILL, SERVED_ALL).contains(choice), + remote: Set(SERVED_NONE, SERVED_NO_SHADOW, SERVED_ALL, SERVED_CHANGED_FILL).contains(choice) + }, + coalesce: false + } + // A 60 s local insertion TTL; the changed-fill codes carry a 120 s freshness + // and a 180 s retention, the others 60 s and 120 s. + pure def ttlsFor(choice: int): Ttls = { + localMs: LOCAL_TTL_MS, + freshMs: if (changedFill(choice)) 120000 else 60000, + retentionMs: if (changedFill(choice)) 180000 else 120000 + } + // Whether the fixture key's cohort is selected: the drivers' shadow ramp is + // a full ramp, none (an invalid ramp admits nobody), or a cohort boundary + // compared strictly against the published numerator (C47). + pure def shadowFor(choice: int): bool = + if (cohortCode(choice)) cohortAdmits(SHADOW_SAMPLE_NUMERATOR, thresholdForRelation(SHADOW_SAMPLE_NUMERATOR, choice - COHORT_BELOW)) + else not(Set(SERVED_NO_SHADOW, DARK_NO_SHADOW, DARK_INVALID_SHADOW, SERVED_CHANGED_FILL).contains(choice)) pure def instance(context: int): int = if (context == 2 or context == 4) 1 else 0 - pure def liveJobs(state: State): Set[int] = - state.jobs.indices().filter(i => state.jobs.nth(i).phase != FINISHED) - pure def frame(state: State, key: int): int = - if (state.now < state.remoteExpires.nth(key)) state.remoteValues.nth(key) else NO_VALUE - pure def fresh(state: State, key: int): int = - if (freshAgeAllowed(state.remoteCreated.nth(key), state.now, state.policy.freshMs)) frame(state, key) else NO_VALUE - pure def ordinaryStaleCandidate(state: State, key: int): bool = - frame(state, key) > NO_VALUE and fresh(state, key) == NO_VALUE - and recoveryAgeAllowed(state.remoteCreated.nth(key), state.now, state.policy.retainedMs) + pure def call(choice: int): Call = + { instance: instance(choice / KEYS), key: choice % KEYS, context: choice / KEYS, enabled: true, keyFailed: false } + pure def seedValue(choice: int): int = if (choice % 4 == 1) VALUE_TWO else VALUE_ONE + pure def seedAge(choice: int): int = if (choice % 4 == 2) 59999 else if (choice % 4 == 3) 60000 else 0 - action init = all { - input' = { name: "init", choice: -1 }, - s' = { - o: empty, now: 100000, policy: policyFor(DARK_ALL), - calls: List(), sources: List(), jobs: List(), work: List(), - dumps: List(), writes: List(), memo: zeros(SCOPES * KEYS), - localValues: zeros(INSTANCES * KEYS), localExpires: zeros(INSTANCES * KEYS), - remoteValues: zeros(KEYS), remoteCreated: zeros(KEYS), remoteExpires: zeros(KEYS), - localWriters: 0.to(INSTANCES * KEYS - 1).fold(List(), (out, _) => out.append(NO_OWNER)) - } - } + // The initial fixture: the policy of code 0 in force, nothing stored. + pure val INITIAL: State = { + o: empty, + now: 100000, skew: 0, remoteAvailable: true, tracked: true, capacity: KEYS, + readFailed: false, dumpFailed: false, writeFailed: false, + policy: DARK_ALL, resolved: resolvedFor(DARK_ALL), ttls: ttlsFor(DARK_ALL), shadow: shadowFor(DARK_ALL), + closed: List(false, false, false), memo: zeros(SCOPES * KEYS), requestFlights: slots(SCOPES * KEYS), processFlights: slots(INSTANCES * KEYS), + localValues: zeros(INSTANCES * KEYS), localExpires: zeros(INSTANCES * KEYS), lru: List(List(), List()), + remoteValues: zeros(KEYS), created: zeros(KEYS), expires: zeros(KEYS), watermark: zeros(KEYS), + sources: List(), owners: List(), memoSlots: List(), held: List(), + dumps: List(), writes: List(), retained: List(), jobs: List(), deadlines: List() + } + action init = all { input' = { name: "init", choice: -1 }, s' = INITIAL } - // Public cache/source results are owned by callers. Detached served-hit - // sources never enter this path and cannot warm request or local storage. - pure def finishCaller(state: State, call: int, value: int): State = { - val entry = state.calls.nth(call) - { - o: { calls: state.o.calls.replaceAt(call, value), ...state.o }, - memo: if (entry.slot >= 0 and value != SOURCE_ERROR) - state.memo.replaceAt(entry.slot, value) else state.memo, - ...state - } - } - pure def publishSource(state: State, source: int): State = { - val entry = state.sources.nth(source) - val localSlot = entry.instance * KEYS + entry.key - finishCaller({ - localValues: if (entry.local) - state.localValues.replaceAt(localSlot, entry.result) else state.localValues, - localExpires: if (entry.local) - state.localExpires.replaceAt(localSlot, state.now + LOCAL_TTL_MS) else state.localExpires, - localWriters: if (entry.local) - state.localWriters.replaceAt(localSlot, source) else state.localWriters, - ...state - }, entry.call, entry.result) - } - // A validated serving hit can warm the active local layer. This publication - // belongs to the foreground read; a dark C0 and a diagnostic source cannot - // use it. Source ownership checks deliberately exclude this separate origin. - pure def publishFreshHit(state: State, call: int, inst: int, key: int, value: int): State = { - val slot = inst * KEYS + key - finishCaller({ - localValues: if (state.policy.local) - state.localValues.replaceAt(slot, value) else state.localValues, - localExpires: if (state.policy.local) - state.localExpires.replaceAt(slot, state.now + LOCAL_TTL_MS) else state.localExpires, - localWriters: if (state.policy.local) - state.localWriters.replaceAt(slot, NO_OWNER) else state.localWriters, - ...state - }, call, value) - } - pure def finishJob(state: State, job: int, outcome: str): State = { - val entry = state.jobs.nth(job) - { - jobs: state.jobs.replaceAt(job, { phase: FINISHED, ...entry }), - o: { shadow: if (entry.timedOut) state.o.shadow else state.o.shadow.append(outcome), ...state.o }, - ...state - } - } - pure def beginWrite(state: State, source: int, job: int, retainedMs: int): State = { - val entry = state.sources.nth(source) - { - work: state.work.append({ source: source, job: job, key: entry.key, - retainedMs: retainedMs, phase: SERIALIZING, stamp: 0 }), - dumps: state.dumps.append(state.work.length()), - jobs: if (job >= 0) state.jobs.replaceAt(job, { - phase: SERIALIZING, ...state.jobs.nth(job) - }) else state.jobs, - o: { dumps: state.o.dumps + 1, ...state.o }, - ...state - } - } + // Guards (may read state) ------------------------------------------------------ + // An ordinary stale-recovery read is excluded: a visible frame past the + // reply's freshness but inside its retention under a serving policy. + def ordinaryStaleCandidate(key: int): bool = s.resolved.layers.remote and Remote::visible(s, key, 1) + and retainedAgeAllowed(s.created.nth(key), Clock::wallOf(s), s.ttls.freshMs, s.ttls.retentionMs) - // A job shares the source result, never the caller's cache-publication path. - // Its C0 payload is acquired once. Later replacement only affects C1. - pure def settleJob(state: State, job: int): State = { - val entry = state.jobs.nth(job) - val result = state.sources.nth(entry.source).result - if (entry.timedOut) finishJob(state, job, "timeout") - else if (result == SOURCE_ERROR) finishJob(state, job, "source_error") - else if (entry.cached == NO_VALUE) beginWrite(state, entry.source, job, entry.retainedMs) - else { - val decoded = { o: { loads: state.o.loads + 1, ...state.o }, ...state } - if (entry.cached == result) finishJob(decoded, job, "match") - else finishJob({ o: { reads: decoded.o.reads + 1, ...decoded.o }, ...decoded }, job, - if (frame(state, entry.key) == entry.cached) "mismatch" else "superseded") - } - } - pure def admit(state: State, source: int, dark: bool, cached: int): State = { - val entry = state.sources.nth(source) - val active = liveJobs(state) - val duplicate = active.exists(i => state.jobs.nth(i).instance == entry.instance - and state.jobs.nth(i).key == entry.key) - val full = active.filter(i => state.jobs.nth(i).instance == entry.instance).size() >= JOB_CAPACITY - if (not(state.policy.shadow)) state - else if (duplicate or full) { - o: { shadow: state.o.shadow.append("dropped"), ...state.o }, ...state - } else { - jobs: state.jobs.append({ source: source, instance: entry.instance, - key: entry.key, dark: dark, cached: cached, admittedAt: state.now, - cachedCreated: state.remoteCreated.nth(entry.key), freshMs: state.policy.freshMs, - policyChoice: state.policy.choice, retainedMs: state.policy.retainedMs, - phase: WAITING_SOURCE, timedOut: false }), - o: { reads: state.o.reads + (if (dark) 1 else 0), ...state.o }, - ...state - } - } - pure def startCaller(state: State, call: int, inst: int, key: int, slot: int): State = { - val source = state.sources.length() - val started = { - sources: state.sources.append({ call: call, instance: inst, key: key, slot: slot, - local: state.policy.local and not(state.policy.serving), - remote: state.policy.serving, retainedMs: state.policy.retainedMs, result: CALL_PENDING }), - calls: state.calls.replaceAt(call, { source: source, ...state.calls.nth(call) }), - o: { loaders: state.o.loaders + 1, sourceScopes: state.o.sourceScopes.append(true), ...state.o }, - ...state - } - if (state.policy.serving) started else admit(started, source, true, fresh(state, key)) - } - pure def servedJob(state: State, inst: int, key: int, value: int): State = { - val source = state.sources.length() - val provisional = { - sources: state.sources.append({ call: NO_OWNER, instance: inst, key: key, - slot: NO_OWNER, local: false, remote: false, retainedMs: 0, result: CALL_PENDING }), - ...state - } - val admitted = admit(provisional, source, false, value) - if (admitted.jobs.length() == state.jobs.length()) { - sources: state.sources, ...admitted - } else { - o: { loaders: state.o.loaders + 1, sourceScopes: state.o.sourceScopes.append(false), ...admitted.o }, - ...admitted - } - } - pure def begin(state: State, choice: int): State = { - val context = choice / KEYS - val key = choice % KEYS - val inst = instance(context) - val slot = if (context < SCOPES and state.policy.request) context * KEYS + key else NO_OWNER - val localSlot = inst * KEYS + key - val requestHit = if (slot >= 0) state.memo.nth(slot) else NO_VALUE - val localHit = if (state.policy.local and localEntryLiveAt(state.now, state.localExpires.nth(localSlot))) - state.localValues.nth(localSlot) else NO_VALUE - val remoteHit = if (state.policy.serving) fresh(state, key) else NO_VALUE - val hit = if (requestHit > NO_VALUE) requestHit else if (localHit > NO_VALUE) localHit else remoteHit - val call = state.calls.length() - val entered = { - calls: state.calls.append({ source: NO_OWNER, hit: hit, slot: slot }), - o: { calls: state.o.calls.append(CALL_PENDING), policyCalls: state.o.policyCalls + 1, ...state.o }, - ...state - } - if (requestHit > NO_VALUE or localHit > NO_VALUE) finishCaller(entered, call, hit) - else { - val read = { - o: { reads: entered.o.reads + (if (state.policy.serving) 1 else 0), - loads: entered.o.loads + (if (remoteHit > NO_VALUE) 1 else 0), ...entered.o }, - ...entered - } - if (remoteHit > NO_VALUE) - servedJob(publishFreshHit(read, call, inst, key, hit), inst, key, hit) - else startCaller(read, call, inst, key, slot) - } - } action beginAt(choice: int): bool = all { - s.calls.length() < MAX_CALLS, - not(Set(COHORT_BELOW, COHORT_AT, COHORT_ABOVE).contains(s.policy.choice)) or choice % KEYS == 0, - not(s.policy.serving and ordinaryStaleCandidate(s, choice % KEYS)), + s.o.calls.length() < MAX_CALLS, + not(cohortCode(s.policy)) or choice % KEYS == 0, + not(ordinaryStaleCandidate(choice % KEYS)), input' = { name: "beginCall", choice: choice }, - s' = begin(s, choice) + s' = Shadow::begin(s, LAYOUT, call(choice), s.resolved, s.ttls, Recovery::ALLOW, + { hook: true, selected: s.shadow, capacity: JOB_CAPACITY, budgetMs: JOB_BUDGET_MS, logging: false }) } action beginCall = { nondet choice = 0.to(14).oneOf() beginAt(choice) } - - pure def settle(state: State, source: int, value: int): State = { - val entry = state.sources.nth(source) - val settled = { sources: state.sources.replaceAt(source, { result: value, ...entry }), ...state } - // The ordinary serving path still classifies its original source error, - // even when acquisition retained no candidate. A dark source never does. - val failed = if (value == SOURCE_ERROR and entry.remote) { - o: { classifications: settled.o.classifications + 1, - recovery: settled.o.recovery.append("miss"), ...settled.o }, ...settled - } else settled - val caller = if (entry.call < 0) failed - else if (value == SOURCE_ERROR) finishCaller(failed, entry.call, value) - else if (entry.remote) beginWrite(settled, source, NO_OWNER, entry.retainedMs) - else publishSource(settled, source) - caller.jobs.indices().filter(i => caller.jobs.nth(i).source == source - and caller.jobs.nth(i).phase == WAITING_SOURCE).fold(caller, (updated, job) => settleJob(updated, job)) - } action resolveAt(choice: int): bool = { val source = (choice - 1) / 2 all { s.sources.indices().contains(source), s.sources.nth(source).result == CALL_PENDING, input' = { name: "resolveLoader", choice: choice }, - s' = settle(s, source, (choice - 1) % 2 + 1) + s' = Shadow::settle(s, LAYOUT, source, (choice - 1) % 2 + 1, false) } } action resolveLoader = { @@ -310,94 +163,46 @@ module dialcache_shadow_layers_conformance { s.sources.indices().contains(choice), s.sources.nth(choice).result == CALL_PENDING, input' = { name: "rejectLoader", choice: choice }, - s' = settle(s, choice, SOURCE_ERROR) + s' = Shadow::settle(s, LAYOUT, choice, SOURCE_ERROR, false) } action rejectLoader = { nondet choice = s.sources.indices().filter(i => s.sources.nth(i).result == CALL_PENDING).oneOf() rejectAt(choice) } + // A propagated timeout settles as a source error; the recovery rules see it + // as a timeout (under ALLOW the same classification). action rejectTimeoutAt(choice: int): bool = all { s.sources.indices().contains(choice), s.sources.nth(choice).result == CALL_PENDING, input' = { name: "rejectTimeout", choice: choice }, - s' = settle(s, choice, SOURCE_ERROR) + s' = Shadow::settle(s, LAYOUT, choice, SOURCE_ERROR, true) } action rejectTimeout = { nondet choice = s.sources.indices().filter(i => s.sources.nth(i).result == CALL_PENDING).oneOf() rejectTimeoutAt(choice) } - - pure def dumpReply(state: State, index: int): State = { - val workIndex = state.dumps.nth(index) - val work = state.work.nth(workIndex) - if (work.job >= 0 and state.jobs.nth(work.job).timedOut) { - work: state.work.replaceAt(workIndex, { phase: FINISHED, ...work }), - ...finishJob(state, work.job, "timeout") - } else { - work: state.work.replaceAt(workIndex, { phase: WRITING, stamp: state.now, ...work }), - writes: state.writes.append(workIndex), - jobs: if (work.job >= 0) state.jobs.replaceAt(work.job, { - phase: WRITING, ...state.jobs.nth(work.job) - }) else state.jobs, - o: { writes: state.o.writes + 1, writeTtls: state.o.writeTtls.append(work.retainedMs), ...state.o }, - ...state - } - } action releaseDumpAt(choice: int): bool = all { - s.dumps.indices().contains(choice), - s.work.nth(s.dumps.nth(choice)).phase == SERIALIZING, + Writes::holdsDump(s, choice), input' = { name: "releaseDump", choice: choice }, - s' = dumpReply(s, choice) + s' = Shadow::releaseDump(s, LAYOUT, choice, s.dumpFailed) } action releaseDump = { - nondet choice = s.dumps.indices().filter(i => s.work.nth(s.dumps.nth(i)).phase == SERIALIZING).oneOf() + nondet choice = s.dumps.indices().map(i => s.dumps.nth(i).dump).oneOf() releaseDumpAt(choice) } - pure def writeReply(state: State, index: int): State = { - val workIndex = state.writes.nth(index) - val work = state.work.nth(workIndex) - val value = state.sources.nth(work.source).result - val stored = { - work: state.work.replaceAt(workIndex, { phase: FINISHED, ...work }), - remoteValues: state.remoteValues.replaceAt(work.key, value), - remoteCreated: state.remoteCreated.replaceAt(work.key, work.stamp), - remoteExpires: state.remoteExpires.replaceAt(work.key, state.now + work.retainedMs), - ...state - } - if (work.job >= 0) finishJob(stored, work.job, "filled") - else publishSource(stored, work.source) - } action releaseWriteAt(choice: int): bool = all { - s.writes.indices().contains(choice), - s.work.nth(s.writes.nth(choice)).phase == WRITING, + Writes::holdsWrite(s, choice), input' = { name: "releaseWrite", choice: choice }, - s' = writeReply(s, choice) + s' = Shadow::releaseWrite(s, LAYOUT, choice, s.writeFailed) } action releaseWrite = { - nondet choice = s.writes.indices().filter(i => s.work.nth(s.writes.nth(i)).phase == WRITING).oneOf() + nondet choice = s.writes.indices().map(i => s.writes.nth(i).write).oneOf() releaseWriteAt(choice) } - - pure def tick(state: State, elapsed: int): State = { - val advanced = { now: state.now + elapsed, ...state } - state.jobs.indices().fold(advanced, (updated, index) => { - val job = updated.jobs.nth(index) - if (job.phase == FINISHED or job.timedOut or deadlinePendingAt(updated.now, job.admittedAt + JOB_BUDGET_MS)) updated - else { - jobs: updated.jobs.replaceAt(index, { - timedOut: true, - phase: if (job.dark and job.phase == WAITING_SOURCE) FINISHED else job.phase, - ...job - }), - o: { shadow: updated.o.shadow.append("timeout"), ...updated.o }, - ...updated - } - }) - } action advanceBy(choice: int): bool = all { s.now + choice <= 600000, input' = { name: "advance", choice: choice }, - s' = tick(s, choice) + s' = Shadow::advance(s, choice) } action advance = { nondet choice = Set(1, JOB_BUDGET_MS, 120000).oneOf() @@ -405,24 +210,15 @@ module dialcache_shadow_layers_conformance { } action setPolicy(choice: int): bool = all { input' = { name: "policy", choice: choice }, - s' = { policy: policyFor(choice), ...s } + s' = { policy: choice, resolved: resolvedFor(choice), ttls: ttlsFor(choice), shadow: shadowFor(choice), ...s } } action policy = { nondet choice = 0.to(SERVED_CHANGED_FILL).oneOf() setPolicy(choice) } - action seedAt(choice: int): bool = { - val key = choice / 4 - val age = if (choice % 4 == 2) 59999 else if (choice % 4 == 3) 60000 else 0 - all { - input' = { name: "seed", choice: choice }, - s' = { - remoteValues: s.remoteValues.replaceAt(key, if (choice % 4 == 1) VALUE_TWO else VALUE_ONE), - remoteCreated: s.remoteCreated.replaceAt(key, s.now - age), - remoteExpires: s.remoteExpires.replaceAt(key, s.now + SEED_TTL_MS), - ...s - } - } + action seedAt(choice: int): bool = all { + input' = { name: "seed", choice: choice }, + s' = Remote::seedAged(s, choice / 4, seedValue(choice), seedAge(choice), SEED_TTL_MS) } action seed = { nondet choice = 0.to(11).oneOf() @@ -431,53 +227,63 @@ module dialcache_shadow_layers_conformance { action step = any { beginCall, resolveLoader, rejectLoader, rejectTimeout, releaseDump, releaseWrite, advance, policy, seed } - // Independent checks use captured source/job facts, not admission helpers. + // Invariants over the library records --------------------------------------- + // A job's identity is its source's (instance, key); the registry is + // pending-only, so every record is a live job. + def jobInstance(i: int): int = s.sources.nth(s.jobs.nth(i).source).instance + def jobKey(i: int): int = s.sources.nth(s.jobs.nth(i).source).key + def owned(source: int): bool = Flights::ownedBy(s, source).size() > 0 val boundedSharedJobRegistry = 0.to(INSTANCES - 1).forall(inst => - s.jobs.indices().filter(i => s.jobs.nth(i).instance == inst - and s.jobs.nth(i).phase != FINISHED).size() <= JOB_CAPACITY) + s.jobs.indices().filter(i => jobInstance(i) == inst).size() <= JOB_CAPACITY) val oneJobPerInstanceKey = s.jobs.indices().forall(a => s.jobs.indices().forall(b => - a == b or s.jobs.nth(a).phase == FINISHED or s.jobs.nth(b).phase == FINISHED - or s.jobs.nth(a).instance != s.jobs.nth(b).instance or s.jobs.nth(a).key != s.jobs.nth(b).key)) - val localPublicationBelongsToCaller = s.localWriters.indices().forall(slot => { - val owner = s.localWriters.nth(slot) - owner < 0 or (s.sources.nth(owner).call >= 0 and s.sources.nth(owner).local - and s.sources.nth(owner).result == s.localValues.nth(slot) - and s.sources.nth(owner).result > CALL_PENDING and s.sources.nth(owner).result != SOURCE_ERROR) - }) + a == b or jobInstance(a) != jobInstance(b) or jobKey(a) != jobKey(b))) + // Every source is a drivers' loader; a source is probed as participating + // exactly when a caller owns it (a served job's detached source is not). val sourcesRemainIndependentOfJobs = s.o.loaders == s.sources.length() - and s.o.sourceScopes == s.sources.foldl(List(), (scopes, source) => scopes.append(source.call >= 0)) - val hitResultsAreImmutable = s.calls.indices().forall(call => - s.calls.nth(call).hit == NO_VALUE or s.o.calls.nth(call) == s.calls.nth(call).hit) - val callerSourceOwnsItsResult = s.calls.indices().forall(call => { - val owner = s.calls.nth(call).source - owner < 0 or s.o.calls.nth(call) == CALL_PENDING - or s.o.calls.nth(call) == s.sources.nth(owner).result + and s.o.sourceScopes.length() == s.sources.length() + and s.sources.indices().forall(i => s.o.sourceScopes.nth(i) == owned(i)) + // A caller its source owns is pending or holds that source's result (a + // remote caller stays pending until its refill's write is released). + val callerSourceOwnsItsResult = s.owners.indices().forall(call => { + val owner = s.owners.nth(call) + owner < 0 or s.o.calls.nth(call) == CALL_PENDING or s.o.calls.nth(call) == s.sources.nth(owner).result }) - val disabledCohortsNeverOwnJobs = s.jobs.indices().forall(i => - not(Set(SERVED_NO_SHADOW, DARK_NO_SHADOW, DARK_INVALID_SHADOW, - COHORT_BELOW, COHORT_AT, SERVED_CHANGED_FILL).contains(s.jobs.nth(i).policyChoice))) + // Only a source that read the remote layer (here: one that captured a + // retention, since every serving reply carries one and no read fails) is + // classified when it fails, and every such failure reports a miss. val darkJobsNeverRecover = { - val ordinaryFailures = s.sources.indices().filter(i => - s.sources.nth(i).remote and s.sources.nth(i).result == SOURCE_ERROR).size() + val ordinaryFailures = s.sources.select(source => source.retentionMs > 0 and source.result == SOURCE_ERROR).length() s.o.classifications == ordinaryFailures and s.o.recovery == 0.to(ordinaryFailures - 1).fold(List(), (out, _) => out.append("miss")) } - val fillKeepsCapturedRetention = s.work.indices().forall(i => s.work.nth(i).job < 0 - or s.work.nth(i).retainedMs == s.jobs.nth(s.work.nth(i).job).retainedMs) - val servedJobsNeverWrite = s.work.indices().forall(i => s.work.nth(i).job < 0 or s.jobs.nth(s.work.nth(i).job).dark) + // A job's held fill carries the retention the reply it was admitted under + // resolved to, capped for this tracked fixture (C18). + def captured(source: int): int = Remote::physicalRetention(s, Shadow::jobOf(s, source).ttls.retentionMs) + val fillKeepsCapturedRetention = s.dumps.indices().forall(i => + not(Shadow::holdsJob(s, s.dumps.nth(i).source)) or s.dumps.nth(i).retentionMs == captured(s.dumps.nth(i).source)) + and s.writes.indices().forall(i => + not(Shadow::holdsJob(s, s.writes.nth(i).source)) or s.writes.nth(i).retentionMs == captured(s.writes.nth(i).source)) + // A served job carries the hit it was admitted with and never fills. + val servedJobsNeverWrite = s.jobs.indices().forall(i => s.jobs.nth(i).dark + or (s.jobs.nth(i).cached > NO_VALUE and s.jobs.nth(i).phase != Shadow::SERIALIZING and s.jobs.nth(i).phase != Shadow::WRITING)) val timedOutDarkSourceWaitReleases = s.jobs.indices().forall(i => - not(s.jobs.nth(i).dark and s.jobs.nth(i).timedOut and s.jobs.nth(i).phase == WAITING_SOURCE)) - val unboundedCallerKeepsPendingSource = s.sources.indices().forall(i => - s.sources.nth(i).call < 0 or s.sources.nth(i).result != CALL_PENDING - or s.o.calls.nth(s.sources.nth(i).call) == CALL_PENDING) - val retainedC0WasFreshWhenAcquired = s.jobs.indices().forall(i => { - val job = s.jobs.nth(i) - job.cached == NO_VALUE or job.admittedAt - job.cachedCreated < job.freshMs - }) - val retentionComesFromAdmissionPolicy = s.jobs.indices().forall(i => { - val job = s.jobs.nth(i) - job.retainedMs == (if (job.policyChoice == DARK_CHANGED_FILL) 180000 else 120000) - }) + not(s.jobs.nth(i).dark and s.jobs.nth(i).timedOut and s.jobs.nth(i).phase == Shadow::WAITING_SOURCE)) + val unboundedCallerKeepsPendingSource = s.owners.indices().forall(call => + s.owners.nth(call) < 0 or s.sources.nth(s.owners.nth(call)).result != CALL_PENDING + or s.o.calls.nth(call) == CALL_PENDING) + // A source no caller owns carries no publication authority. + val detachedSourcesCarryNoAuthority = s.sources.indices().forall(i => owned(i) + or (s.sources.nth(i).localMs == 0 and s.sources.nth(i).retentionMs == 0 and s.sources.nth(i).fence == NO_FENCE)) + // Every pending deadline is a registered job's whose budget has not + // expired, and every such job has exactly one. + val jobBudgetsBelongToLiveJobs = s.deadlines.indices().forall(i => { + val due = s.deadlines.nth(i) + due.kind == Deadlines::JOB and Shadow::holdsJob(s, due.index) and not(Shadow::jobOf(s, due.index).timedOut) + }) and s.jobs.indices().forall(i => s.jobs.nth(i).timedOut + or Deadlines::deadlinesOf(s, Deadlines::JOB, s.jobs.nth(i).source).length() == 1) + // Every held dump or write serializes an accepted result. + val heldWorkHasAcceptedResults = s.dumps.indices().forall(i => accepted(s.sources.nth(s.dumps.nth(i).source).result)) + and s.writes.indices().forall(i => accepted(s.sources.nth(s.writes.nth(i).source).result)) // Each regression uses only public input transitions. Later calls distinguish // real storage reuse/publication from a counter or an internal phase alone. @@ -623,8 +429,11 @@ module dialcache_shadow_layers_conformance { .expect(s.o.calls == List(VALUE_TWO) and s.o.loads == 1 and s.o.reads == 2 and s.o.writes == 0 and s.o.shadow == List("mismatch")) + // The C0 read at exactly the freshness boundary acquires nothing: the job + // holds a dump at settlement instead of decoding and comparing. run expiredC0CanFillAndServeNewValueTest = init .then(setPolicy(DARK_NONE)).then(seedAt(3)).then(beginAt(9)).then(resolveAt(2)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.reads == 1 and s.o.loads == 0 and s.o.dumps == 1 and s.o.shadow == List()) .then(releaseDumpAt(0)).then(releaseWriteAt(0)) .then(setPolicy(SERVED_NO_SHADOW)).then(beginAt(9)) .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.loaders == 1 @@ -637,10 +446,34 @@ module dialcache_shadow_layers_conformance { .then(setPolicy(SERVED_NO_SHADOW)).then(beginAt(9)) .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.reads == 2 and s.o.loaders == 1) + // A local entry inserted for the local TTL expires at that instant exactly + // (the same strict expiry the old text stated): a hit at its insertion, a + // miss exactly the TTL later; the drivers' 60 s advance after the insertion + // is the instant the run distinguishes. + run localEntryExpiresAtItsInsertionTtlTest = init + .then(setPolicy(DARK_INVALID_SHADOW)).then(beginAt(9)).then(resolveAt(1)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.loaders == 1 and s.o.shadow == List()) + .then(beginAt(9)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loaders == 1) + .then(advanceBy(LOCAL_TTL_MS)).then(beginAt(9)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE, CALL_PENDING) and s.o.loaders == 2) + run darkPropagatedTimeoutIsSourceFailureTest = init .then(setPolicy(DARK_NONE)).then(beginAt(9)).then(rejectTimeoutAt(0)) .expect(s.o.calls == List(SOURCE_ERROR) and s.o.shadow == List("source_error")) run servedPropagatedTimeoutPreservesHitTest = init .then(seedAt(0)).then(setPolicy(SERVED_NONE)).then(beginAt(9)).then(rejectTimeoutAt(0)) .expect(s.o.calls == List(VALUE_ONE) and s.o.shadow == List("source_error")) + + // A dark C0 compared against the source: equal decoded values are a match + // with no confirmation read; unequal ones whose C0 bytes were replaced + // before the confirmation read are superseded. Neither fills. + run darkC0EqualToSourceIsAMatchTest = init + .then(setPolicy(DARK_NONE)).then(seedAt(0)).then(beginAt(9)).then(resolveAt(1)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.loads == 1 and s.o.reads == 1 + and s.o.dumps == 0 and s.o.shadow == List("match")) + run darkC0ReplacedBeforeConfirmationIsSupersededTest = init + .then(setPolicy(DARK_NONE)).then(seedAt(0)).then(beginAt(9)).then(seedAt(1)).then(resolveAt(2)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.loads == 1 and s.o.reads == 2 + and s.o.dumps == 0 and s.o.shadow == List("superseded")) } diff --git a/formal/dialcache-shadow-layers-connection.qnt b/formal/dialcache-shadow-layers-connection.qnt new file mode 100644 index 00000000..cf73d25f --- /dev/null +++ b/formal/dialcache-shadow-layers-connection.qnt @@ -0,0 +1,67 @@ +module dialcache_shadow_layers_connection { + import dialcache_shadow_layers_conformance as profile from "./dialcache-shadow-layers-conformance" + import conformance_observations.* from "./conformance-observations" + import encodings.* from "./kernel/encodings" + import remote_frames as Remote from "./kernel/remote-frames" + import flights as Flights from "./kernel/flights" + import shadow as Shadow from "./kernel/shadow" + + // The profile executes; this monitor keeps the state before each step and + // states, one step at a time, what the old text's captured records stated + // over the whole history: a job's admission facts (the policy in force, the + // frame it read) and the writer of a local slot exist only in the pre-state + // of the step that admitted the job or published the value, so the clauses + // read that pre-state instead of a record the kernel does not carry. + var before: profile::State + action init = all { profile::init, before' = profile::INITIAL } + action step = all { before' = profile::s, profile::step } + + pure def owned(state: profile::State, source: int): bool = Flights::ownedBy(state, source).size() > 0 + pure def identityOf(state: profile::State, source: int): int = + state.sources.nth(source).instance * profile::KEYS + state.sources.nth(source).key + // The jobs this step admitted: registered over a source no job held before. + val admitted = profile::s.jobs.indices().filter(i => not(Shadow::holdsJob(before, profile::s.jobs.nth(i).source))) + val lastCall = profile::s.o.calls.length() - 1 + + // A caller no source owns was served by a layer at its release and keeps + // that outcome: no settlement names it (hitResultsAreImmutable). + val servedCallersKeepTheirOutcome = before.o.calls.indices().forall(c => + before.owners.nth(c) >= 0 or profile::s.o.calls.nth(c) == before.o.calls.nth(c)) + // A job is admitted only under a policy whose cohort selects the key + // (disabledCohortsNeverOwnJobs), at a caller's release: the drivers' code + // table spelled here rather than the profile's decoder, so the clause binds + // the decoder too (codes 5, 6, 7 and 13 disable shadow; of the cohort + // codes only 11, the numerator above the boundary, selects). + val jobsAdmittedOnlyWhenSelected = admitted.forall(_ => profile::input.name == "beginCall" + and (before.policy == 11 or not(Set(5, 6, 7, 9, 10, 13).contains(before.policy)))) + // A job captures the TTLs the reply in force at its admission resolved to + // (retentionComesFromAdmissionPolicy: a 180 s retention under the drivers' + // changed-fill codes 8 and 13, 120 s otherwise; the table, not `ttlsFor`). + val jobsCaptureAdmissionRetention = admitted.forall(i => + profile::s.jobs.nth(i).ttls.retentionMs == (if (before.policy == 8 or before.policy == 13) 180000 else 120000)) + // A job's C0, when it has one, is the payload the remote layer held fresh + // for the admitting reply's freshness at admission (retainedC0WasFreshWhenAcquired). + val retainedC0WasFreshWhenAcquired = admitted.forall(i => { + val job = profile::s.jobs.nth(i) + val key = profile::s.sources.nth(job.source).key + val seen = Remote::observe(before, key, 1, before.ttls.freshMs, false) + job.cached == NO_VALUE or (seen.value > NO_VALUE and job.cached == seen.payload) + }) + // A local slot changes only by a publication that belongs to a caller: at + // a release, the remote hit the last caller was served (a decode counted); + // at a settlement, the settled source, which a caller owns and which + // carried local authority, with the value it recorded + // (localPublicationBelongsToCaller); a detached source and a job's fill + // never write it. + val localPublicationBelongsToCaller = profile::s.localValues.indices().forall(slot => + profile::s.localValues.nth(slot) == before.localValues.nth(slot) or { + val value = profile::s.localValues.nth(slot) + if (profile::input.name == "beginCall") + profile::s.o.loads > before.o.loads and value == profile::s.o.calls.nth(lastCall) + else if (profile::input.name == "resolveLoader") { + val source = (profile::input.choice - 1) / 2 + owned(profile::s, source) and identityOf(profile::s, source) == slot + and profile::s.sources.nth(source).localMs > 0 and profile::s.sources.nth(source).result == value + } else false + }) +} diff --git a/formal/dialcache-shadow-validation.qnt b/formal/dialcache-shadow-validation.qnt deleted file mode 100644 index 8ecc9cc3..00000000 --- a/formal/dialcache-shadow-validation.qnt +++ /dev/null @@ -1,405 +0,0 @@ -module dialcache_shadow_validation { - // One detached C0/S/C1 shadow job. Dark C0 reads may overlap the caller - // source. Comparison and filling wait for the accepted source result. - // Selected rules from C47-C54. Policy, capacity and read/comparison outcomes are external - // inputs. Caller commitment, accepted source and job phase belong to DialCache. - // Deadline firing is an abstract environment outcome here; elapsed budgets, - // multiple jobs and capacity retention are checked in conformance profiles. - - // Types and state - - type CallerPath = - NoCallerPath | ServedRemoteHit | RemoteRampedDown | OrdinaryRemoteMiss | EarlierLayerHit - type C0State = C0Unknown | C0Miss | C0Present | C0Undecodable - type JobPhase = JobIdle | JobAdmitted | WaitingForSource | Comparing | Confirming | Filling | JobDone - type ShadowOutcome = - NoShadowOutcome | Match | Mismatch | Superseded | Filled | FillFenced | - DeserializationError | ComparisonError | ConfirmationError | RedisError | - SourceError | TimedOut | Dropped - - type State = { - enabledScope: bool, - remotePolicyValid: bool, - shadowSelected: bool, - metricsHookPresent: bool, - capacityAvailable: bool, - duplicateKeyActive: bool, - callerPath: CallerPath, - callerResultCommitted: bool, - sourceAccepted: bool, - detachedSourceExecutions: int, - c0: C0State, - c0EqualsSource: bool, - c1Present: bool, - c1SameBytesAsC0: bool, - observedFencePresent: bool, - fillTimestampClearsFence: bool, - phase: JobPhase, - outcome: ShadowOutcome, - confirmationReads: int, - fillWrites: int, - repairWritesForPresentC0: int - } - - var s: State - - // Admission predicates; outcome invariants below are independently expressed. - val shadowPathEligible = s.callerPath == ServedRemoteHit or s.callerPath == RemoteRampedDown - val shadowRequested = - s.enabledScope and s.remotePolicyValid and s.shadowSelected and s.metricsHookPresent - val slotAvailable = s.capacityAvailable and not(s.duplicateKeyActive) - - // Initial state - action init = s' = { - enabledScope: true, - remotePolicyValid: true, - shadowSelected: true, - metricsHookPresent: true, - capacityAvailable: true, - duplicateKeyActive: false, - callerPath: NoCallerPath, - callerResultCommitted: false, - sourceAccepted: false, - detachedSourceExecutions: 0, - c0: C0Unknown, - c0EqualsSource: false, - c1Present: false, - c1SameBytesAsC0: false, - observedFencePresent: false, - fillTimestampClearsFence: true, - phase: JobIdle, - outcome: NoShadowOutcome, - confirmationReads: 0, - fillWrites: 0, - repairWritesForPresentC0: 0 - } - - // Environment configuration and caller path - action toggleEnabled = all { - s.callerPath == NoCallerPath, - s' = { enabledScope: not(s.enabledScope), ...s }, - } - - action togglePolicy = all { - s.callerPath == NoCallerPath, - s' = { remotePolicyValid: not(s.remotePolicyValid), ...s }, - } - - action toggleSelection = all { - s.callerPath == NoCallerPath, - s' = { shadowSelected: not(s.shadowSelected), ...s }, - } - - action toggleMetricsHook = all { - s.callerPath == NoCallerPath, - s' = { metricsHookPresent: not(s.metricsHookPresent), ...s }, - } - - action toggleCapacity = all { - s.callerPath == NoCallerPath, - s' = { capacityAvailable: not(s.capacityAvailable), ...s }, - } - - action toggleDuplicate = all { - s.callerPath == NoCallerPath, - s' = { duplicateKeyActive: not(s.duplicateKeyActive), ...s }, - } - - action callerServedRemoteHit = all { - s.callerPath == NoCallerPath, - s' = { callerPath: ServedRemoteHit, callerResultCommitted: true, c0: C0Present, ...s }, - } - - action callerRemoteRampedDown = all { - s.callerPath == NoCallerPath, - s' = { callerPath: RemoteRampedDown, sourceAccepted: false, callerResultCommitted: false, ...s }, - } - - action callerOrdinaryRemoteMiss = all { - s.callerPath == NoCallerPath, - s' = { callerPath: OrdinaryRemoteMiss, sourceAccepted: true, callerResultCommitted: true, ...s }, - } - - action callerEarlierLayerHit = all { - s.callerPath == NoCallerPath, - s' = { callerPath: EarlierLayerHit, callerResultCommitted: true, ...s }, - } - - // Admission - action admitJob = all { - s.phase == JobIdle, - shadowPathEligible, - shadowRequested, - slotAvailable, - s' = { phase: JobAdmitted, ...s }, - } - - action dropJob = all { - s.phase == JobIdle, - shadowPathEligible, - shadowRequested, - not(slotAvailable), - s' = { outcome: Dropped, phase: JobDone, ...s }, - } - - // Source and C0 may complete in either order on the dark path. - action servedHitStartsDetachedSource = all { - s.phase == JobAdmitted, - s.callerPath == ServedRemoteHit, - s.callerResultCommitted, - s' = { detachedSourceExecutions: s.detachedSourceExecutions + 1, phase: WaitingForSource, ...s }, - } - - action rampedDownSourceReady = all { - s.callerPath == RemoteRampedDown, - not(s.sourceAccepted), - // A completed diagnostic job cannot prevent the independent caller result. - s' = { - sourceAccepted: true, - callerResultCommitted: true, - phase: if (s.phase == WaitingForSource and s.c0 == C0Miss) Filling - else if (s.phase == WaitingForSource and s.c0 == C0Present) Comparing - else s.phase, - ...s - }, - } - - // The dark read can complete either before or after the caller source. - action rampedDownObserveMiss = all { - s.phase == JobAdmitted, - s.callerPath == RemoteRampedDown, - s' = { c0: C0Miss, phase: if (s.sourceAccepted) Filling else WaitingForSource, ...s }, - } - - action rampedDownObservePresent = all { - s.phase == JobAdmitted, - s.callerPath == RemoteRampedDown, - s' = { c0: C0Present, phase: if (s.sourceAccepted) Comparing else WaitingForSource, ...s }, - } - - action rampedDownObserveUndecodable = all { - s.phase == JobAdmitted, - s.callerPath == RemoteRampedDown, - s.sourceAccepted, - s' = { c0: C0Undecodable, outcome: DeserializationError, phase: JobDone, ...s }, - } - - action detachedSourceReady = all { - s.phase == WaitingForSource, - s.callerPath == ServedRemoteHit, - s.c0 == C0Present, - s' = { sourceAccepted: true, phase: Comparing, ...s }, - } - - // Comparison and C1 confirmation - action compareEqual = all { - s.phase == Comparing, - s.c0 == C0Present, - s' = { c0EqualsSource: true, outcome: Match, phase: JobDone, ...s }, - } - - action compareDifferent = all { - s.phase == Comparing, - s.c0 == C0Present, - s' = { c0EqualsSource: false, phase: Confirming, confirmationReads: s.confirmationReads + 1, ...s }, - } - - action comparisonFails = all { - s.phase == Comparing, - s' = { outcome: ComparisonError, phase: JobDone, ...s }, - } - - // One C1 byte comparison distinguishes mismatch from a superseded C0. - action confirmationSeesChanged = all { - s.phase == Confirming, - s' = { c1Present: true, c1SameBytesAsC0: false, outcome: Superseded, phase: JobDone, ...s }, - } - - action confirmationSeesAbsent = all { - s.phase == Confirming, - s' = { c1Present: false, outcome: Superseded, phase: JobDone, ...s }, - } - - action confirmationSeesSame = all { - s.phase == Confirming, - s' = { c1Present: true, c1SameBytesAsC0: true, outcome: Mismatch, phase: JobDone, ...s }, - } - - action confirmationFails = all { - s.phase == Confirming, - s' = { outcome: ConfirmationError, phase: JobDone, ...s }, - } - - // Miss filling and failure outcomes - action toggleObservedFence = all { - s.phase == Filling, - s' = { observedFencePresent: not(s.observedFencePresent), ...s }, - } - - action toggleFillTimestamp = all { - s.phase == Filling, - s' = { fillTimestampClearsFence: not(s.fillTimestampClearsFence), ...s }, - } - - // Present/undecodable C0 is diagnostic only; only a semantic miss may fill. - action finishFill = all { - s.phase == Filling, - s.c0 == C0Miss, - s' = { - fillWrites: if (s.observedFencePresent and not(s.fillTimestampClearsFence)) - s.fillWrites else s.fillWrites + 1, - outcome: if (s.observedFencePresent and not(s.fillTimestampClearsFence)) - FillFenced else Filled, - phase: JobDone, - ...s - }, - } - - action darkReadFails = all { - s.phase == JobAdmitted, - s.callerPath == RemoteRampedDown, - s' = { outcome: RedisError, phase: JobDone, ...s }, - } - - action sourceFails = all { - s.phase == WaitingForSource, - not(s.sourceAccepted), - s' = { outcome: SourceError, callerResultCommitted: true, phase: JobDone, ...s }, - } - - action shadowDeadlineFires = all { - s.phase != JobIdle, - s.phase != JobDone, - s' = { outcome: TimedOut, phase: JobDone, ...s }, - } - - // Exploration order - action step = any { - toggleEnabled, - togglePolicy, - toggleSelection, - toggleMetricsHook, - toggleCapacity, - toggleDuplicate, - callerServedRemoteHit, - callerRemoteRampedDown, - callerOrdinaryRemoteMiss, - callerEarlierLayerHit, - rampedDownSourceReady, - darkReadFails, - sourceFails, - shadowDeadlineFires, - admitJob, - dropJob, - servedHitStartsDetachedSource, - rampedDownObserveMiss, - rampedDownObservePresent, - rampedDownObserveUndecodable, - detachedSourceReady, - compareEqual, - compareDifferent, - comparisonFails, - confirmationSeesChanged, - confirmationSeesAbsent, - confirmationSeesSame, - confirmationFails, - toggleObservedFence, - toggleFillTimestamp, - finishFill, - } - - // Invariants - val comparisonAndFillWaitForSource = - (s.phase != Comparing and s.phase != Confirming and s.phase != Filling) or - (s.callerResultCommitted and s.sourceAccepted) - - val completedVerdictRequiresSource = - (s.outcome != Match and s.outcome != Mismatch and s.outcome != Superseded and - s.outcome != Filled and s.outcome != FillFenced) or s.sourceAccepted - - val ordinaryRemoteMissHasNoShadowJob = - s.callerPath != OrdinaryRemoteMiss or s.phase == JobIdle - - val rampedDownDoesNotDuplicateSource = - s.callerPath != RemoteRampedDown or s.detachedSourceExecutions == 0 - - val verdictsRequireSingleConfirmation = - (s.outcome != Mismatch and s.outcome != Superseded) or s.confirmationReads == 1 - - val mismatchMeansSameC1Bytes = - s.outcome != Mismatch or (s.c1Present and s.c1SameBytesAsC0) - - val presentC0IsNeverRepaired = - s.repairWritesForPresentC0 == 0 and - (s.c0 != C0Present and s.c0 != C0Undecodable or s.fillWrites == 0) - - val fillsRequireMiss = - s.fillWrites == 0 or s.c0 == C0Miss - - val fencedFillDoesNotWrite = - s.outcome != FillFenced or s.fillWrites == 0 - - // Deterministic regressions - run darkReadCanPrecedeCallerResultTest = init.then(callerRemoteRampedDown) - .then(admitJob).then(rampedDownObserveMiss) - .expect(not(s.callerResultCommitted) and s.phase == WaitingForSource and s.fillWrites == 0) - .then(rampedDownSourceReady).then(finishFill) - .expect(s.outcome == Filled and s.detachedSourceExecutions == 0) - - run sourceFailureNeverFillsTest = init.then(callerRemoteRampedDown) - .then(admitJob).then(rampedDownObserveMiss).then(sourceFails) - .expect(s.outcome == SourceError and s.fillWrites == 0) - - run deadlineStopsFillTest = init.then(callerRemoteRampedDown) - .then(admitJob).then(rampedDownObserveMiss).then(shadowDeadlineFires) - .expect(s.phase == JobDone and s.fillWrites == 0) - - - action servedComparisonFixture = init.then(callerServedRemoteHit) - .then(admitJob).then(servedHitStartsDetachedSource).then(detachedSourceReady) - - run equalComparisonSkipsConfirmationTest = servedComparisonFixture.then(compareEqual) - .expect(s.outcome == Match and s.confirmationReads == 0 and s.fillWrites == 0 - and s.callerResultCommitted) - - run missingConfirmationSupersedesWithoutRepairTest = servedComparisonFixture - .then(compareDifferent).then(confirmationSeesAbsent) - .expect(s.outcome == Superseded and s.confirmationReads == 1 - and s.fillWrites == 0 and s.callerResultCommitted) - - run changedConfirmationSupersedesWithoutRepairTest = servedComparisonFixture - .then(compareDifferent).then(confirmationSeesChanged) - .expect(s.outcome == Superseded and s.confirmationReads == 1 - and s.fillWrites == 0 and s.callerResultCommitted) - - run identicalConfirmationDiagnosesWithoutRepairTest = servedComparisonFixture - .then(compareDifferent).then(confirmationSeesSame) - .expect(s.outcome == Mismatch and s.confirmationReads == 1 - and s.fillWrites == 0 and s.callerResultCommitted) - - run darkReadFailureStillAllowsCallerResultTest = init.then(callerRemoteRampedDown) - .then(admitJob).then(darkReadFails).then(rampedDownSourceReady) - .expect(s.outcome == RedisError and s.phase == JobDone and s.callerResultCommitted - and s.sourceAccepted and s.fillWrites == 0 and s.detachedSourceExecutions == 0) - - run droppedShadowStillAllowsCallerResultTest = init.then(toggleCapacity) - .then(callerRemoteRampedDown).then(dropJob).then(rampedDownSourceReady) - .expect(s.outcome == Dropped and s.phase == JobDone and s.callerResultCommitted - and s.fillWrites == 0 and s.detachedSourceExecutions == 0) - - run timedOutShadowStillAllowsCallerResultTest = init.then(callerRemoteRampedDown) - .then(admitJob).then(shadowDeadlineFires).then(rampedDownSourceReady) - .expect(s.outcome == TimedOut and s.phase == JobDone and s.callerResultCommitted - and s.fillWrites == 0 and s.detachedSourceExecutions == 0) - - run callerResultCanPrecedeDarkReadTest = init.then(callerRemoteRampedDown) - .then(admitJob).then(rampedDownSourceReady) - .expect(s.callerResultCommitted and s.c0 == C0Unknown and s.fillWrites == 0) - .then(rampedDownObserveMiss).then(finishFill) - .expect(s.outcome == Filled and s.detachedSourceExecutions == 0) - - run undecodablePresentFrameNeverFillsTest = init.then(callerRemoteRampedDown) - .then(admitJob).then(rampedDownSourceReady).then(rampedDownObserveUndecodable) - .expect(s.outcome == DeserializationError and s.fillWrites == 0 - and s.callerResultCommitted) -} diff --git a/formal/dialcache-source-budgets-conformance.qnt b/formal/dialcache-source-budgets-conformance.qnt index 1425ae03..8ff6c7bc 100644 --- a/formal/dialcache-source-budgets-conformance.qnt +++ b/formal/dialcache-source-budgets-conformance.qnt @@ -32,7 +32,7 @@ module dialcache_source_budgets_conformance { // One key on one instance, no persistent request scope, a 1 s local TTL and // no remote layer; every reply enables the local layer with sharing. pure val LAYOUT: Serving::Layout = { - keysPerInstance: 1, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 1, probeSourceScope: false + keysPerInstance: 1, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } pure val LOCAL: Resolution = { layers: { request: false, local: true, remote: false }, coalesce: true } pure val TTLS: Ttls = { localMs: LOCAL_TTL_MS, freshMs: 0, retentionMs: 0 } @@ -56,6 +56,7 @@ module dialcache_source_budgets_conformance { owners: List[int], memoSlots: List[int], held: List[Gate::Held], + deadlines: List[Deadlines::Due], started: List[int], budgets: List[int], settledAt: List[int], @@ -100,6 +101,7 @@ module dialcache_source_budgets_conformance { owners: List(), memoSlots: List(), held: List(), + deadlines: List(), started: List(), budgets: List(), settledAt: List(), diff --git a/formal/dialcache-source-connection.qnt b/formal/dialcache-source-connection.qnt index 8e7fa7f6..d8126879 100644 --- a/formal/dialcache-source-connection.qnt +++ b/formal/dialcache-source-connection.qnt @@ -3,12 +3,15 @@ module dialcache_source_connection { import conformance_observations.* from "./conformance-observations" import cache_contract.* from "./cache-contract" import policy_gate as Gate from "./kernel/policy-gate" + import deadlines as Deadlines from "./kernel/deadlines" // The actual source-budgets transitions are the only executing machine. // Project each source-start event into an immutable reference record using // the preceding external clock and call/policy ownership, not the library's - // started or budgets records. This checks that their abstraction preserves - // source-relative time, owners and accepted outcomes on each step. + // started, budgets or deadline records. This checks that their abstraction + // preserves source-relative time (the recorded origin and, while a bounded + // source is pending, the instant its deadline is due), owners and accepted + // outcomes on each step. var sources: List[SourceExecution] var before: { now: int, calls: int, held: List[Gate::Held], registered: int, budget: int } @@ -36,7 +39,9 @@ module dialcache_source_connection { val sourceOriginsMatchContract = observedSources.length() == profile::s.sources.length() and observedSources.indices().forall(index => { val reference = observedSources.nth(index) - profile::s.started.nth(index) == reference.started and profile::s.budgets.nth(index) == reference.budget + profile::s.started.nth(index) == reference.started and profile::s.budgets.nth(index) == reference.budget and + (profile::s.sources.nth(index).result != CALL_PENDING or reference.budget < 0 or + Deadlines::deadlineOf(profile::s, Deadlines::SOURCE, index) == reference.started + reference.budget) }) val sourceOwnersMatchContract = observedSources.indices().forall(index => { val reference = observedSources.nth(index) diff --git a/formal/differential.mjs b/formal/differential.mjs index e2172634..4de63dc9 100644 --- a/formal/differential.mjs +++ b/formal/differential.mjs @@ -5,11 +5,14 @@ import { tmpdir } from 'node:os'; import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import { isDeepStrictEqual } from 'node:util'; -import { copySources, importClosure, isKernelSource, isQuintSourcePath, root, validateExecution } from './execution.mjs'; +import { copySources, importClosure, isKernelSource, isQuintSourcePath, modelSchedule, root, scanDeclarationBodies, validateExecution } from './execution.mjs'; import { parseWithSourceMap, scheduleHistories, spliceDeclarations } from './generated-fixtures.mjs'; +import { parseShard } from './mutation-reports.mjs'; import { normalizeTraceFiles } from './replay-inputs.mjs'; import { CommandFailure, printGroup, resolveConcurrency, runPool, seconds, spawnBuffered } from './quint-pool.mjs'; import { parseTrace, profiles } from './replay/features.mjs'; +import { localClockDescriptor } from './replay/local-clock.mjs'; +import { effectsDescriptor } from './replay/effects.mjs'; import { generationArguments } from './run-models.mjs'; // Corpus differential for a composed profile (#165). @@ -46,6 +49,21 @@ export const defaultOutput = '.formal-traces/differential'; export const maxBytesPerStateRatio = 1.2; export const advisoryWallRatio = 1.5; export const cursorVariable = 'replayCursor'; +// The explicit-input descriptors the differential replays: the feature +// profiles' (formal/replay/features.mjs) and the local-clock profile's, whose +// driver has its own runner (formal/replay/local-clock.mjs). A descriptor may +// bind an input name to the public action a reference tree declares for it +// (`actionBindings`): the binding exists for the local-clock texts from +// before the wrapper rename (`call` their parametrized action, `callCache` +// the public wrapper) and applies only where the tree's declaration of the +// input name is a parametrized action (`boundAction`). It is transitional: +// once the merge base with main carries the renamed text, delete the +// local-clock descriptor's binding, `boundAction` with its two call sites in +// prepareReplay, the `.d.mts` field and their tests. +// A descriptor may bring its own parser (`parseTrace`) where the profile's +// drivers assert a record the shared parser does not read: the effects +// descriptor reads both the composed and the retired layout into one record. +export const replayDescriptors = { ...profiles, 'local-clock': localClockDescriptor, effects: effectsDescriptor }; const gitShow = (revision, path, cwd) => execFileSync('git', ['show', `${revision}:${path}`], { cwd, encoding: 'utf8', maxBuffer: 1 << 26 }); @@ -69,18 +87,31 @@ export function resolveMergeBase(revision, { cwd = root } = {}) { // The reference manifests are read as recorded at their revision and checked // only for the shape this tool consumes; the working tree's validator applies -// to the working tree's inventory, not to another revision's. +// to the working tree's inventory, not to another revision's. A revision that +// recorded its exported regressions keeps them; one that reads them from the +// Quint text (formal/execution.mjs modelSchedule) has them read from that +// tree's text here. export function readManifests(directory) { const execution = JSON.parse(readFileSync(resolve(directory, 'formal/execution.json'), 'utf8')); const registry = JSON.parse(readFileSync(resolve(directory, 'formal/profiles.json'), 'utf8')); if (!Array.isArray(execution.models) || !execution.settings || !Array.isArray(registry.profiles)) throw new Error(`${directory}: unsupported manifests`); + execution.models = execution.models.map(model => model.regressions !== undefined || typeof model.path !== 'string' ? model + : { ...model, ...modelSchedule(model, scanDeclarationBodies(readFileSync(resolve(directory, model.path), 'utf8'))) }); return { execution, registry }; } function generationModel(manifests, profileId) { const model = manifests.execution.models.find(candidate => candidate.profile === profileId); if (!model || !model.generate || typeof model.path !== 'string' || !Array.isArray(model.invariants)) return undefined; const entry = manifests.registry.profiles.find(candidate => candidate.id === profileId); - return { ...model, behaviorVersion: model.differential?.behaviorVersion ?? 0, schemaVersion: entry?.version ?? null, settings: manifests.execution.settings }; + return { ...model, behaviorVersion: model.differential?.behaviorVersion ?? 0, maxBytesPerStateRatio: model.differential?.maxBytesPerStateRatio ?? null, + schemaVersion: entry?.version ?? null, settings: manifests.execution.settings }; +} +// The bound on trace bytes per state a run applies: the model's own +// declaration (differential.maxBytesPerStateRatio in formal/execution.json) +// when it has one, else the lane's default. +export function bytesBound(model) { + return model.maxBytesPerStateRatio === null || model.maxBytesPerStateRatio === undefined + ? { maxBytesPerStateRatio, source: 'default' } : { maxBytesPerStateRatio: model.maxBytesPerStateRatio, source: 'model' }; } // What to do for one profile given both revisions' manifests. A profile the @@ -92,8 +123,8 @@ export function differentialPlan(referenceManifests, candidateManifests, profile const reference = generationModel(referenceManifests, profileId); if (!candidate && !reference) throw new Error(`No generation profile named ${profileId} in either revision's formal/execution.json`); if (!candidate) return { action: 'skip', reason: 'profile removed: the candidate does not generate it', reference }; - const descriptor = profiles[profileId]; - if (!descriptor || !descriptor.explicitInputs) throw new Error(`Profile ${profileId} has no explicit-input feature descriptor in formal/replay/features.mjs; the differential replays explicit inputs only`); + const descriptor = replayDescriptors[profileId]; + if (!descriptor || !descriptor.explicitInputs) throw new Error(`Profile ${profileId} has no explicit-input replay descriptor (formal/replay/features.mjs or the local-clock descriptor); the differential replays explicit inputs only`); if (!reference) return { action: 'skip', reason: 'new profile: the reference revision does not generate it', candidate, descriptor }; if (reference.behaviorVersion !== candidate.behaviorVersion) { return { action: 'skip', reason: `intended divergence: behaviorVersion ${reference.behaviorVersion} -> ${candidate.behaviorVersion}`, reference, candidate, descriptor }; @@ -200,7 +231,7 @@ export async function generateCorpus(tree, model, { timeoutMs } = {}) { export function loadHistories(directory, descriptor) { if (!existsSync(directory)) return []; return readdirSync(directory).filter(name => name.endsWith('.itf.json')).sort() - .map(name => parseTrace(JSON.parse(readFileSync(resolve(directory, name), 'utf8')), name, descriptor)); + .map(name => (descriptor.parseTrace ?? parseTrace)(JSON.parse(readFileSync(resolve(directory, name), 'utf8')), name, descriptor)); } // A run that stops early still writes its trace: the agreeing prefix plus one @@ -242,12 +273,13 @@ export async function prepareReplay(tree, model, descriptor, histories, { chunk, const moduleName = parsed.modules.at(-1).name; const declarations = new Map(parsed.modules.find(candidate => candidate.name === moduleName).declarations.map(declaration => [declaration.name, declaration])); const source = readFileSync(resolve(tree, model.path), 'utf8'); + const bound = action => boundAction(declarations, descriptor, action); // A history whose input the tree has no public action for cannot be // scheduled: it disagrees at that step; the others are replayed. const verdicts = new Array(histories.length); const scheduled = []; histories.forEach((history, index) => { - const unknown = history.steps.findIndex(step => !declarations.has(step.action)); + const unknown = history.steps.findIndex(step => !declarations.has(bound(step.action))); if (unknown === -1) scheduled.push({ history, index }); else verdicts[index] = { path: history.path, agree: false, step: unknown, action: history.steps[unknown].action, choice: history.steps[unknown].choice, reason: `${moduleName} has no public action ${history.steps[unknown].action} (step ${unknown})` }; @@ -256,7 +288,7 @@ export async function prepareReplay(tree, model, descriptor, histories, { chunk, const workspace = resolve(output, `replay-${position}`); rmSync(workspace, { recursive: true, force: true }); copySources(tree, workspace); - const schedule = scheduleHistories(source, declarations, sourceMap, batch.map(({ history }) => history.steps.map(step => [step.action, step.choice])), + const schedule = scheduleHistories(source, declarations, sourceMap, batch.map(({ history }) => history.steps.map(step => [bound(step.action), step.choice])), { prefix: 'replay', cursor: cursorVariable }); const runs = schedule.schedules.flatMap((entry, index) => [ ...(entry.steps ? [`action replaySchedule${index} = ${entry.step}`] : []), @@ -288,12 +320,25 @@ export async function prepareReplay(tree, model, descriptor, histories, { chunk, return { tasks, collect: results => { for (const [position, verdict] of results.flat()) verdicts[position] = verdict; return verdicts; } }; } +// The public action a tree schedules for an input name: the name itself when +// the tree declares it as a parameterless action; else the descriptor's +// binding for it, when the tree declares that (a reference text from before a +// wrapper was renamed declares the input name as its parametrized action and +// the bound name as the public wrapper); else the name, which the schedule +// then refuses as it would any parametrized declaration. +export function boundAction(declarations, descriptor, action) { + const declaration = declarations.get(action); + if (declaration && declaration.expr?.kind !== 'lambda') return action; + const alternative = descriptor?.actionBindings?.[action]; + return alternative && declarations.has(alternative) ? alternative : action; +} + // The replayed history a trace records. A run refused at its first input or // at init leaves fewer than the two states a trace needs: one recorded state // is the initialization the reference also took, none is a refused init. export function replayedHistory(raw, reference, descriptor) { const recorded = recordedStates(raw); - if (recorded.states.length >= 2) return parseTrace(recorded, reference.path, descriptor); + if (recorded.states.length >= 2) return (descriptor.parseTrace ?? parseTrace)(recorded, reference.path, descriptor); return { path: reference.path, steps: recorded.states.length === 1 ? reference.steps.slice(0, 1) : [] }; } @@ -313,8 +358,11 @@ export function composedProfiles(manifest, { cwd = root } = {}) { // a revision (its Quint sources and manifests exported as recorded), the // candidate is a copy of the working tree with its manifests validated. export function prepare(reference, { cwd = root, output = defaultOutput } = {}) { + // The working tree's manifest is validated as written (the validator refuses + // a manifest that lists the schedule its Quint text states); the manifests + // the run consumes carry that schedule read from the text. + validateExecution(JSON.parse(readFileSync(resolve(cwd, 'formal/execution.json'), 'utf8'))); const candidateManifests = readManifests(cwd); - validateExecution(candidateManifests.execution); const revision = resolveMergeBase(reference, { cwd }); for (const stale of ['reference', 'candidate']) rmSync(resolve(cwd, output, stale), { recursive: true, force: true }); const referenceTree = resolve(cwd, output, 'reference', revision.slice(0, 12)); @@ -334,10 +382,27 @@ export function selectProfiles(prepared) { ...composedProfiles(prepared.candidate.manifests.execution, { cwd: prepared.candidate.tree })])].sort(); } +// The profiles one shard of a sharded run replays (--shard=/; +// DIFFERENTIAL_SHARD in the hosted lane, which runs four): the names sorted, +// then dealt round-robin (positions index-1, index-1+count, ...) rather than +// cut into contiguous slices, so alphabetical neighbours (recovery and +// recovery-read, shadow and shadow-layers) fall to different shards and, with +// four shards, the two heaviest profiles, effects and shadow, do not share one. +// Every name lands in exactly one shard; a shard past the number of profiles is +// empty. +export function shardProfiles(names, index, count) { + for (const [label, value] of [['index', index], ['count', count]]) { + if (!Number.isSafeInteger(value) || value < 1) throw new Error(`Shard ${label} must be a positive integer; got ${String(value)}`); + } + if (index > count) throw new Error(`Shard index ${index} exceeds the shard count ${count}; use 1 <= index <= count`); + return [...names].sort().filter((_, position) => position % count === index - 1); +} + // A generation whose inputs are byte-identical in both revisions is the same // deterministic computation under the pinned Quint and seed: nothing to compare. export function closureSkip(referenceModel, candidateModel, referenceSources, candidateSources) { - const generationInputs = model => ({ settings: model.settings, generate: model.generate, invariants: model.invariants, replayRegressions: model.replayRegressions ?? [] }); + // The exported list is compared as a set: a reference revision may record it in hand order while the candidate derives declaration order. + const generationInputs = model => ({ settings: model.settings, generate: model.generate, invariants: model.invariants, replayRegressions: [...(model.replayRegressions ?? [])].sort() }); return isDeepStrictEqual(referenceSources, candidateSources) && isDeepStrictEqual(generationInputs(referenceModel), generationInputs(candidateModel)) ? 'identical import closure and generation settings' : null; } @@ -383,6 +448,7 @@ export async function runDifferential(profileId, prepared, { chunk = defaultChun disagreed: verdicts.filter(verdict => !verdict.agree).length, disagreements: verdicts.filter(verdict => !verdict.agree).slice(0, 20).map(verdict => ({ direction: name, ...verdict })) }); const referenceSize = bytesPerState(referenceCorpus.directory); const candidateSize = bytesPerState(candidateCorpus.directory); + const bound = bytesBound(candidateModel); return write({ ...withSources, forward: direction('forward', forward, referenceHistories.length - referenceHistories.filter(history => history.path.startsWith('regression:')).length, referenceHistories.filter(history => history.path.startsWith('regression:')).length), @@ -391,20 +457,21 @@ export async function runDifferential(profileId, prepared, { chunk = defaultChun wallRatio: referenceCorpus.generationMs ? candidateCorpus.generationMs / referenceCorpus.generationMs : null, reference: referenceSize, candidate: candidateSize, bytesPerStateRatio: referenceSize.bytesPerState ? candidateSize.bytesPerState / referenceSize.bytesPerState : null, - maxBytesPerStateRatio }, + maxBytesPerStateRatio: bound.maxBytesPerStateRatio, maxBytesPerStateRatioSource: bound.source }, replay: { chunk, wallMs: Math.round(replayMs) }, }); } // The run's verdict: any disagreement in either direction fails, as does trace -// growth beyond the bound. Wall time is advisory: the two generations run -// concurrently and hosted runners are noisy. +// growth beyond the bound (the model's own or the default). Wall time is +// advisory: the two generations run concurrently and hosted runners are noisy. +const boundText = generation => `bound x${generation.maxBytesPerStateRatio.toFixed(2)} (${generation.maxBytesPerStateRatioSource ?? 'default'})`; export function verdict(report) { const reasons = []; if (report.skipped) return { failed: false, reasons: [`skipped: ${report.skipped}`] }; for (const name of ['forward', 'reverse']) if (report[name].disagreed) reasons.push(`${report[name].disagreed} ${name} disagreement(s)`); const ratio = report.generation.bytesPerStateRatio; - if (ratio !== null && ratio > report.generation.maxBytesPerStateRatio) reasons.push(`bytes per state grew x${ratio.toFixed(3)}, above the bound x${report.generation.maxBytesPerStateRatio}`); + if (ratio !== null && ratio > report.generation.maxBytesPerStateRatio) reasons.push(`bytes per state grew x${ratio.toFixed(3)}, above the ${boundText(report.generation)}`); const advisory = report.generation.wallRatio !== null && report.generation.wallRatio > advisoryWallRatio ? [`advisory: generation wall time x${report.generation.wallRatio.toFixed(2)} exceeds x${advisoryWallRatio} (concurrent generations; not gated)`] : []; return { failed: reasons.length > 0, reasons: [...reasons, ...advisory] }; @@ -420,7 +487,7 @@ export function formatReport(report) { ` replay ${seconds(report.replay.wallMs)} at ${report.replay.chunk} per process.`, `generation wall ${seconds(report.generation.referenceMs)} -> ${seconds(report.generation.candidateMs)} (${ratio(report.generation.wallRatio, 2)}, advisory),` + ` bytes/state ${report.generation.reference.bytesPerState.toFixed(0)} -> ${report.generation.candidate.bytesPerState.toFixed(0)}` + - ` (${ratio(report.generation.bytesPerStateRatio, 3)}, bound x${report.generation.maxBytesPerStateRatio})`, + ` (${ratio(report.generation.bytesPerStateRatio, 3)}, ${boundText(report.generation)})`, ]; for (const name of ['forward', 'reverse']) { for (const disagreement of report[name].disagreements) lines.push(` ${name} ${disagreement.path}: ${disagreement.reason}`); @@ -430,22 +497,26 @@ export function formatReport(report) { return lines.join('\n'); } -const usage = `Usage: node formal/differential.mjs | --composed [--reference=] [--chunk=] [--out=] +const usage = `Usage: node formal/differential.mjs | --composed [--shard=/] [--reference=] [--chunk=] [--out=] Generates 's corpus and exported regressions from the merge base with (default origin/main) and from the working tree, each with its own manifest entry and the lane's command; replays every reference history through the working tree's text and every working-tree history through the reference text; fails on any step whose driver-asserted observation differs, on an input -either text refuses, or on trace bytes per state above x${maxBytesPerStateRatio}. +either text refuses, or on trace bytes per state above x${maxBytesPerStateRatio} (or above +the model's own differential.maxBytesPerStateRatio when it declares one). A profile whose differential.behaviorVersion or observation schema version differs between the revisions is reported as an intended divergence and not compared; a profile the reference does not generate is reported as new. A profile whose import closure and generation settings are byte-identical in both revisions is reported as unchanged and not regenerated. --composed selects every profile that imports a kernel module in either revision; one the working -tree no longer generates is reported as removed. Only profiles with an -explicit-input driver descriptor (formal/replay/features.mjs) can be replayed. +tree no longer generates is reported as removed. --shard=/, with +--composed only, replays the index-th of count round-robin shards of those +profiles sorted by name (the hosted lane runs four). Only profiles with an +explicit-input driver descriptor (formal/replay/features.mjs, or the local-clock +descriptor in formal/replay/local-clock.mjs) can be replayed. Reports: report.json under --out (default ${defaultOutput}/).`; @@ -456,13 +527,29 @@ async function main(argv) { const separator = argument.indexOf('='); if (separator === -1) options[argument.slice(2)] = true; else options[argument.slice(2, separator)] = argument.slice(separator + 1); } - if (options.help || (positional.length !== 1 && !options.composed) || (positional.length && options.composed)) { console.log(usage); return 2; } + if (options.help) { console.log(usage); return 2; } + // --shard is refused before any tree is prepared, and parsed by the function + // the runner (formal/validation.mjs) applies to DIFFERENTIAL_SHARD: neither + // accepts a value the other rejects. + if (options.shard !== undefined && !options.composed) throw new Error('--shard applies to --composed only; a single named profile is replayed whole'); + if ((positional.length !== 1 && !options.composed) || (positional.length && options.composed)) { console.log(usage); return 2; } const chunk = options.chunk === undefined ? defaultChunk : Number(options.chunk); if (!Number.isSafeInteger(chunk) || chunk < 1) throw new Error('--chunk must be a positive integer'); + let shard; + if (options.shard !== undefined) { + try { shard = parseShard(options.shard); } + catch { throw new Error(`--shard must be / with 1 <= index <= count (for example 2/4); got ${JSON.stringify(options.shard)}`); } + } const settings = { chunk, ...(typeof options.out === 'string' ? { output: options.out } : {}) }; const prepared = prepare(typeof options.reference === 'string' ? options.reference : 'origin/main', { output: settings.output ?? defaultOutput }); - const selected = options.composed ? selectProfiles(prepared) : positional; - if (!selected.length) { console.log('No profile imports a kernel module in either revision; nothing to replay.'); return 0; } + const composed = options.composed ? selectProfiles(prepared) : positional; + if (!composed.length) { console.log('No profile imports a kernel module in either revision; nothing to replay.'); return 0; } + const selected = shard ? shardProfiles(composed, shard.index, shard.count) : composed; + if (shard) { + const others = composed.filter(profileId => !selected.includes(profileId)); + console.log(`Shard ${shard.index}/${shard.count} covers ${selected.length ? selected.join(', ') : 'no profile'}; left to the other shards: ${others.length ? others.join(', ') : 'none'}.`); + if (!selected.length) { console.log(`Nothing to replay in shard ${shard.index}/${shard.count}: ${composed.length} composed profile(s) fill only the first ${composed.length} shard(s).`); return 0; } + } console.log(`Reference ${prepared.reference.revision.slice(0, 12)}; profiles: ${selected.join(', ')}.`); let failed = false; for (const profileId of selected) { diff --git a/formal/effects-smoke.itf.json b/formal/effects-smoke.itf.json index 5feaea2a..89067c51 100644 --- a/formal/effects-smoke.itf.json +++ b/formal/effects-smoke.itf.json @@ -11,25361 +11,66 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "0" - }, - "acceptedWall": { - "#bigint": "0" - }, - "activeLoader": { - "#bigint": "0" - }, - "activeRead": { - "#bigint": "0" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [], - "deadline": { - "#bigint": "0" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "events": [], - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10000" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "0" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [], - "readStarted": { - "#bigint": "0" - }, - "readStates": [], - "reads": { - "#bigint": "0" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "0" - }, - "sources": [], - "storedTimestamp": { - "#bigint": "0" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100000" - }, - "watermark": { - "#bigint": "0" - }, - "writeTimestamp": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "futureFence" - }, - "mbt::actionTaken": "futureFence", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "0" - }, - "acceptedWall": { - "#bigint": "0" - }, - "activeLoader": { - "#bigint": "0" - }, - "activeRead": { - "#bigint": "0" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [], - "deadline": { - "#bigint": "0" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10000" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "0" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [], - "readStarted": { - "#bigint": "0" - }, - "readStates": [], - "reads": { - "#bigint": "0" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "0" - }, - "sources": [], - "storedTimestamp": { - "#bigint": "0" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100000" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "0" - }, - "acceptedWall": { - "#bigint": "0" - }, - "activeLoader": { - "#bigint": "0" - }, - "activeRead": { - "#bigint": "0" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [], - "deadline": { - "#bigint": "0" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10010" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "0" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [], - "readStarted": { - "#bigint": "0" - }, - "readStates": [], - "reads": { - "#bigint": "0" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "0" - }, - "sources": [], - "storedTimestamp": { - "#bigint": "0" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100010" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "adapterReply" - }, - "mbt::actionTaken": "adapterReply", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "0" - }, - "acceptedWall": { - "#bigint": "0" - }, - "activeLoader": { - "#bigint": "0" - }, - "activeRead": { - "#bigint": "0" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [], - "deadline": { - "#bigint": "0" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10010" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "0" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [], - "readStarted": { - "#bigint": "0" - }, - "readStates": [], - "reads": { - "#bigint": "0" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [], - "storedTimestamp": { - "#bigint": "0" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100010" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "0" - }, - "acceptedWall": { - "#bigint": "0" - }, - "activeLoader": { - "#bigint": "0" - }, - "activeRead": { - "#bigint": "0" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [], - "deadline": { - "#bigint": "0" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "0" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [], - "readStarted": { - "#bigint": "0" - }, - "readStates": [], - "reads": { - "#bigint": "0" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [], - "storedTimestamp": { - "#bigint": "0" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "0" - }, - "acceptedWall": { - "#bigint": "0" - }, - "activeLoader": { - "#bigint": "0" - }, - "activeRead": { - "#bigint": "0" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "3" - }, - "policyCalls": { - "#bigint": "1" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [], - "storedTimestamp": { - "#bigint": "0" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "failRead" - }, - "mbt::actionTaken": "failRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "0" - }, - "acceptedWall": { - "#bigint": "0" - }, - "activeLoader": { - "#bigint": "0" - }, - "activeRead": { - "#bigint": "0" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "policyCalls": { - "#bigint": "1" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "1" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "0" - } - ], - "storedTimestamp": { - "#bigint": "0" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "0" - }, - "acceptedWall": { - "#bigint": "0" - }, - "activeLoader": { - "#bigint": "0" - }, - "activeRead": { - "#bigint": "0" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "policyCalls": { - "#bigint": "1" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "1" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "0" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "0" - }, - "acceptedWall": { - "#bigint": "0" - }, - "activeLoader": { - "#bigint": "0" - }, - "activeRead": { - "#bigint": "0" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "policyCalls": { - "#bigint": "1" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "1" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "0" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "0" - }, - "acceptedWall": { - "#bigint": "0" - }, - "activeLoader": { - "#bigint": "0" - }, - "activeRead": { - "#bigint": "0" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "1" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "1" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "0" - }, - "acceptedWall": { - "#bigint": "0" - }, - "activeLoader": { - "#bigint": "0" - }, - "activeRead": { - "#bigint": "1" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "3" - }, - "policyCalls": { - "#bigint": "2" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "2" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "0" - }, - "acceptedWall": { - "#bigint": "0" - }, - "activeLoader": { - "#bigint": "1" - }, - "activeRead": { - "#bigint": "1" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "policyCalls": { - "#bigint": "2" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "2" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "1" - }, - "activeRead": { - "#bigint": "1" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "5" - }, - "policyCalls": { - "#bigint": "2" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "2" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseDump" - }, - "mbt::actionTaken": "releaseDump", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "1" - }, - "activeRead": { - "#bigint": "1" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "2" - }, - "policyCalls": { - "#bigint": "2" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "2" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "1" - }, - "activeRead": { - "#bigint": "1" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "2" - }, - "policyCalls": { - "#bigint": "3" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "2" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "1" - }, - "activeRead": { - "#bigint": "1" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "2" - }, - "policyCalls": { - "#bigint": "3" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "2" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "failWrite" - }, - "mbt::actionTaken": "failWrite", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "1" - }, - "activeRead": { - "#bigint": "1" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "3" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "2" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "1" - }, - "activeRead": { - "#bigint": "1" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "3" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "2" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100020" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "futureFence" - }, - "mbt::actionTaken": "futureFence", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "1" - }, - "activeRead": { - "#bigint": "1" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "3" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "2" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "1" - }, - "activeRead": { - "#bigint": "2" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "3" - }, - "policyCalls": { - "#bigint": "4" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "3" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "failRead" - }, - "mbt::actionTaken": "failRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "2" - }, - "activeRead": { - "#bigint": "2" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "policyCalls": { - "#bigint": "4" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "3" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "2" - }, - "activeRead": { - "#bigint": "2" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "4" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "3" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "2" - }, - "activeRead": { - "#bigint": "3" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10030" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10020" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "3" - }, - "policyCalls": { - "#bigint": "5" - }, - "readAborts": { - "#bigint": "0" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "4" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100020" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "3" - }, - "activeRead": { - "#bigint": "3" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10030" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "policyCalls": { - "#bigint": "5" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "reads": { - "#bigint": "4" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100030" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "3" - }, - "activeRead": { - "#bigint": "3" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10030" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "5" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10020" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "reads": { - "#bigint": "4" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100030" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "3" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10030" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "3" - }, - "policyCalls": { - "#bigint": "6" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100030" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "3" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10030" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "3" - }, - "policyCalls": { - "#bigint": "7" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100030" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "failRead" - }, - "mbt::actionTaken": "failRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "3" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10030" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "3" - }, - "policyCalls": { - "#bigint": "7" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100030" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "3" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "now": { - "#bigint": "10030" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "3" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100030" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "3" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10030" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "4" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "0" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100030" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "failLoad" - }, - "mbt::actionTaken": "failLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10020" - }, - "acceptedWall": { - "#bigint": "100020" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10030" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100030" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10030" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "5" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100030" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "jumpClock" - }, - "mbt::actionTaken": "jumpClock", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10040" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "5" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100040" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "failDump" - }, - "mbt::actionTaken": "failDump", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10040" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100020" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100040" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10040" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100040" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100040" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "jumpClock" - }, - "mbt::actionTaken": "jumpClock", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10050" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100040" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100050" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10050" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100050" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100050" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10060" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100050" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100060" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10060" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100060" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100060" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10070" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100060" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100070" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10070" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100070" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100070" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10070" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100070" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100070" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10070" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100070" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100070" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10080" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100070" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100080" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10090" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100070" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100090" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10100" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "0" - }, - "replyAt": { - "#bigint": "100010" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100070" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100100" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "adapterReply" - }, - "mbt::actionTaken": "adapterReply", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10100" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100070" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100100" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10100" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100100" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100100" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "jumpClock" - }, - "mbt::actionTaken": "jumpClock", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10110" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100100" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100110" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10120" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100100" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100120" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10120" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100120" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100120" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10120" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100120" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "99120" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10120" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100120" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "99120" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "readBudgetPolicy" - }, - "mbt::actionTaken": "readBudgetPolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10120" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100120" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "99120" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "jumpClock" - }, - "mbt::actionTaken": "jumpClock", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10130" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "100120" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "99130" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10130" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "99130" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "99130" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "jumpClock" - }, - "mbt::actionTaken": "jumpClock", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10140" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "99130" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "99140" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10150" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "99130" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "99150" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10150" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "99150" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "99150" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "jumpClock" - }, - "mbt::actionTaken": "jumpClock", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10160" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "99150" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "99160" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedAt": { - "#bigint": "10030" - }, - "acceptedWall": { - "#bigint": "100030" - }, - "activeLoader": { - "#bigint": "4" - }, - "activeRead": { - "#bigint": "4" - }, - "baseReadBudget": { - "#bigint": "10" - }, - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "deadline": { - "#bigint": "10040" - }, - "decodeStarted": { - "#bigint": "10030" - }, - "dumps": { - "#bigint": "2" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_write", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read_timeout", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_load", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "serialization_dump", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ], - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "now": { - "#bigint": "10160" - }, - "observedFence": { - "#bigint": "0" - }, - "observerFailed": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyCalls": { - "#bigint": "8" - }, - "readAborts": { - "#bigint": "1" - }, - "readBudget": { - "#bigint": "10" - }, - "readBudgets": [ - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "readStarted": { - "#bigint": "10030" - }, - "readStates": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "5" - }, - "refill": { - "#bigint": "1" - }, - "reply": { - "#bigint": "10" - }, - "replyAt": { - "#bigint": "100100" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "storedTimestamp": { - "#bigint": "99150" - }, - "tracked": { - "#bigint": "0" - }, - "wall": { - "#bigint": "98160" - }, - "watermark": { - "#bigint": "100040" - }, - "writeTimestamp": { - "#bigint": "100020" - }, - "writes": { - "#bigint": "1" - } - } - } + {"input":{"choice":{"#bigint":"5"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"futureFence"},"mbt::actionTaken":"futureFence","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"10"},"name":"adapterReply"},"mbt::actionTaken":"adapterReply","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"failRead"},"mbt::actionTaken":"failRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseDump"},"mbt::actionTaken":"releaseDump","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"failWrite"},"mbt::actionTaken":"failWrite","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"futureFence"},"mbt::actionTaken":"futureFence","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"2"},"name":"failRead"},"mbt::actionTaken":"failRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"2"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"4"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"4"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"3"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"4"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"}]}}, + {"input":{"choice":{"#bigint":"3"},"name":"failRead"},"mbt::actionTaken":"failRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"}]}}, + {"input":{"choice":{"#bigint":"4"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"failLoad"},"mbt::actionTaken":"failLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"4"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"jumpClock"},"mbt::actionTaken":"jumpClock","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"failDump"},"mbt::actionTaken":"failDump","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"jumpClock"},"mbt::actionTaken":"jumpClock","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"10"},"name":"adapterReply"},"mbt::actionTaken":"adapterReply","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"jumpClock"},"mbt::actionTaken":"jumpClock","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"readBudgetPolicy"},"mbt::actionTaken":"readBudgetPolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"jumpClock"},"mbt::actionTaken":"jumpClock","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"jumpClock"},"mbt::actionTaken":"jumpClock","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"jumpClock"},"mbt::actionTaken":"jumpClock","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[{"#bigint":"3"}],"budgets":[{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_write","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read_timeout","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"serialization_load","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"serialization_dump","event":"error","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}} ] } diff --git a/formal/execution.json b/formal/execution.json index e1b48926..e6a27737 100644 --- a/formal/execution.json +++ b/formal/execution.json @@ -14,29 +14,6 @@ "test": { "maxSamples": 1 }, - "libraries": [ - "formal/conformance-observations.qnt", - "formal/cohort-boundaries.qnt", - "formal/wire-text.qnt", - "formal/cache-rules.qnt", - "formal/cache-contract.qnt", - "formal/kernel/encodings.qnt", - "formal/kernel/calls.qnt", - "formal/kernel/layer-policy.qnt", - "formal/kernel/request-memo.qnt", - "formal/kernel/local-storage.qnt", - "formal/kernel/remote-frames.qnt", - "formal/kernel/flights.qnt", - "formal/kernel/clock.qnt", - "formal/kernel/policy-gate.qnt", - "formal/kernel/runtime-policy.qnt", - "formal/kernel/serving.qnt", - "formal/kernel/policy-overlay.qnt", - "formal/kernel/config-errors.qnt", - "formal/kernel/receipts.qnt", - "formal/kernel/diagnostics.qnt", - "formal/kernel/deadlines.qnt" - ], "models": [ { "path": "formal/dialcache-core.qnt", @@ -53,20 +30,6 @@ "sourceFailureNeverPublishes", "noLayerPolicySkipsAllStorage", "invalidInvocationPolicyNeverTouchesStorage" - ], - "regressions": [ - "lateResultCannotEnterReplacementScopeTest", - "nestedDisablePreservesMemoTest", - "localReadFailureContinuesToRemoteTest", - "localWriteFailurePreservesSourceAndMemoTest", - "localWriteFailurePreservesRemoteHitTest", - "localReadFailureSuppressesSourcePublicationTest", - "untrackedSourcePublishesToAllParticipatingLayersTest", - "localHitWarmsRequestAndSkipsRemoteTest", - "remoteReadFailureStillPublishesUntrackedLocalAndRequestTest", - "trackedWithoutRemoteStillPublishesLocalTest", - "rejectedSourceNeverPublishesTest", - "invalidBooleanOverlayBypassesAndPreservesMemoTest" ] }, { @@ -77,51 +40,6 @@ "featureLibraryDefaults", "existingLocalEntryKeepsInsertionTtl", "existingRemoteEntryKeepsPhysicalTtl" - ], - "regressions": [ - "policyChangeDuringInvocationTest", - "localTtlMutationIsDetectedTest", - "physicalTtlMutationIsDetectedTest", - "omittedPolicyUsesLibraryDefaultsTest", - "nullProviderRetainsEveryBaselineLeafTest", - "sparseLocalOverridePreservesRemoteAndFeaturesTest", - "explicitOffReplacesInheritedFeaturesTest", - "reenablingDisabledBaselineKeepsDefaultCoalescingTest", - "disablingPolicyDoesNotEvictInsertedEntriesTest", - "wrongOverlayLeafIsDetectedTest" - ] - }, - { - "path": "formal/dialcache-flight-deadlines.qnt", - "invariants": [ - "flightsRequireEligibleCaching", - "oneSourcePerRegisteredFlight", - "fallbackDeadlineStartsWithFallback", - "timedOutSourceCannotPublish", - "publicationRequiresAcceptedSource", - "noFlightWhenCoalescingIneligible", - "abandonedSourceIsNotAFlight", - "requestLayerOwnsOuterFlight", - "cacheHitNeverStartsSourceDeadline", - "outsideSourceHasNoDeadline", - "omittedSourceBudgetUsesSixtySeconds", - "disabledSourceDeadlineNeverTimesOut", - "independentAcceptanceChecksCapturedDeadline" - ], - "regressions": [ - "lateSettlementBeforeTimerTest", - "abandonedSourceMayOverlapNewFlightTest", - "acceptedPublicationOutlivesDeadlineTest", - "delayedLookupKeepsFullSourceBudgetTest", - "deadlineEpochMutationIsDetectedTest", - "lateFollowerKeepsLeaderSourceDeadlineTest", - "inactiveServingLayersKeepConcurrentCallsIndependentTest", - "coalescingDisabledKeepsConcurrentCallsIndependentTest", - "sharedCacheHitDoesNotStartSourceTest", - "outsideCallsIgnoreConfiguredSourceDeadlineTest", - "librarySourceDeadlineIsSixtySecondsTest", - "explicitlyUnboundedEnabledSourceAcceptsLateValueTest", - "keyFailureKeepsEnabledSourceDeadlineTest" ] }, { @@ -130,16 +48,6 @@ "servedSnapshotClearedObservedFence", "staleValueAfterInvalidationIsFenced", "acquiredAfterInvalidationDoesNotServeStale" - ], - "regressions": [ - "acquiredSnapshotSurvivesLaterInvalidationTest", - "acquisitionAfterInvalidationRejectsOldBytesTest", - "staleWriteAtCoveredDelayEqualityRemainsFencedTest", - "freshWriteBeyondBufferBecomesReadableTest", - "readsAndValueWritesDoNotMoveWatermarkTest", - "observedFutureFenceSkipsRefillTest", - "refillAtFenceEqualitySkipsWriteTest", - "laterInvalidationDoesNotRewriteMissFenceTest" ] }, { @@ -154,55 +62,6 @@ "readFailureNeverRetains", "readFailureNeverAttemptsRecovery", "futureFrameIsNeverFreshOrRetained" - ], - "regressions": [ - "servedValueCanAgeTest", - "decodingAtMaxAgeRejectsTest", - "futureFrameIsNotRetainedTest", - "failedReadSkipsRecoveryTest", - "lastFreshAgeSkipsSourceTest", - "firstStaleAgeRetainsWithoutDecodingTest", - "lastRecoveryAgeStillServesTest", - "exactMaximumAgeDoesNotRetainTest", - "invalidFrameNeverBecomesRecoveryCandidateTest", - "fencedFrameNeverBecomesRecoveryCandidateTest", - "acceptedSourceNeverDecodesRetainedBytesTest", - "deniedRecoveryNeverDecodesRetainedBytesTest", - "maximumAgeBeforeDecodeSkipsLoadingTest", - "recoveryDecodeFailureKeepsSourceOutcomeTest", - "retainedBytesSurviveRedisDeletionAndFenceTest", - "rollbackBelowFreshAgeStillRecoversTest", - "rollbackToFutureCandidateRejectsTest", - "initiallyTooOldCannotRecoverAfterRollbackTest", - "initiallyFutureCannotRecoverAfterClockAdvanceTest" - ] - }, - { - "path": "formal/dialcache-shadow-validation.qnt", - "invariants": [ - "comparisonAndFillWaitForSource", - "completedVerdictRequiresSource", - "ordinaryRemoteMissHasNoShadowJob", - "rampedDownDoesNotDuplicateSource", - "verdictsRequireSingleConfirmation", - "mismatchMeansSameC1Bytes", - "presentC0IsNeverRepaired", - "fillsRequireMiss", - "fencedFillDoesNotWrite" - ], - "regressions": [ - "darkReadCanPrecedeCallerResultTest", - "sourceFailureNeverFillsTest", - "deadlineStopsFillTest", - "equalComparisonSkipsConfirmationTest", - "missingConfirmationSupersedesWithoutRepairTest", - "changedConfirmationSupersedesWithoutRepairTest", - "identicalConfirmationDiagnosesWithoutRepairTest", - "darkReadFailureStillAllowsCallerResultTest", - "droppedShadowStillAllowsCallerResultTest", - "timedOutShadowStillAllowsCallerResultTest", - "callerResultCanPrecedeDarkReadTest", - "undecodablePresentFrameNeverFillsTest" ] }, { @@ -218,18 +77,6 @@ "validMissWatermarksArePreserved", "untrackedDecodingIgnoresWatermarks", "unsupportedFramePrecedesEncodingError" - ], - "regressions": [ - "fencedEncodingTest", - "reversedPrecedenceIsDetectedTest", - "malformedWatermarkTest", - "absentValuePreservesWatermarkTest", - "unsupportedFramePreservesWatermarkTest", - "zeroTimestampPreservesWatermarkTest", - "droppedMissWatermarkIsDetectedTest", - "invalidWatermarkReplyPrecedesAbsenceTest", - "untrackedZeroIgnoresInvalidWatermarkReplyTest", - "malformedWatermarkCannotReplaceAbsenceTest" ] }, { @@ -240,225 +87,63 @@ "readableRemoteHasValue", "servedLayerValueMatchesCache" ], - "regressions": [ - "disabledAndRequestCallsKeepTheirOwnLifetimesTest", - "localValueSurvivesSourceChangeTest", - "coalescedPairPublishesOneReusableValueTest", - "invalidationRefillsFromCurrentSourceTest", - "failedReadPreservesPreviouslyStoredBytesTest" - ], "profile": "core", "generate": { "maxSamples": 256, "maxSteps": 30, "traces": 32, "outputDirectory": ".formal-traces/conformance" - }, - "replayRegressions": [ - "disabledAndRequestCallsKeepTheirOwnLifetimesTest", - "localValueSurvivesSourceChangeTest", - "coalescedPairPublishesOneReusableValueTest", - "invalidationRefillsFromCurrentSourceTest", - "failedReadPreservesPreviouslyStoredBytesTest" - ] + } }, { "path": "formal/dialcache-effects-conformance.qnt", "invariants": [ + "oneRequestPerRead", + "measurementsAreNonnegative", + "futureOffsetsArePositiveAtObservingLayer", + "oneSourceDurationPerSettlement", "oneRegisteredSource", "registeredFlightHasPendingCalls", - "writeRequiresAcceptedSource", "registeredReadOwnsFlight", "effectCountsMatchRecords", - "oneRequestPerRead", - "oneSourceDurationPerSettlement", - "measurementsAreNonnegative", - "futureOffsetsArePositiveAtObservingLayer" - ], - "regressions": [ - "unknownReasonKeepsValidFenceTest", - "untrackedReplyCannotCarryFenceTest", - "missDiscriminatorWinsOverFrameFieldsTest", - "frameWithoutMissDiscriminatorIgnoresMetadataTest", - "readDurationIncludesDecodeTest", - "sourceDurationExcludesPublicationTest", - "lateSourceCannotRepeatFailureMetricTest", - "timedOutLoaderOverlapsNewFlightTest", - "acceptedWriteOutlivesDeadlineTest", - "delayedWriteRemainsFencedTest", - "readTimeoutStartsIndependentSourceDeadlineTest", - "lateReadCannotBecomeHitTest", - "acquiredDecodeSurvivesInvalidationAndDeadlineTest", - "readFailureNeverRefillsTest", - "decodeFailureMayRefillTest", - "dumpFailurePreservesSourceTest", - "writeFailurePreservesSourceTest", - "rollbackDuringDumpRechecksObservedFenceTest", - "rollbackDoesNotExtendSourceDeadlineTest", - "observerFailuresCannotReplaceSourceErrorTest", - "libraryReadBudgetIsFiftyMillisecondsTest", - "followerKeepsAcceptedReadBudgetTest", - "lateReadRejectionUsesDeadlineCategoryTest", - "successfulReadClearsDeadlineBeforeDecodeTest", - "readFailureKeepsCategoryAndDeniesRefillTest", - "decodeFailureKeepsCategoryAndAllowsRefillTest", - "dumpFailureKeepsCategoryAndSourceValueTest", - "writeFailureKeepsCategoryAndSourceValueTest", - "observerFailuresCannotPreventCacheHitTest", - "observerFailuresCannotPreventPublicationTest", - "writeStampAfterSerializationClearsInterveningFenceTest", - "instanceReadBudgetOverridesLibraryTest", - "operationReadBudgetOverridesInstanceTest", - "runtimeReadBudgetOverridesOperationTest", - "futureFrameReportsPositiveObservingOffsetTest", - "coalescedFailureKeepsOneLeaderAndFollowerTrailTest", - "nullReplyRefillsAndIsReadableTest", - "primitiveReplyRefillsAndIsReadableTest", - "legacyReplyRefillsAndIsReadableTest", - "kindlessReplyRefillsAndIsReadableTest", - "missingFenceRefillsAndIsReadableTest", - "negativeFenceRefillsAndIsReadableTest", - "fractionalFenceRefillsAndIsReadableTest", - "unsafeFenceRefillsAndIsReadableTest", - "untrackedFencedReplyRefillsAndIsReadableTest", - "expiredZeroFenceReplyRefillsAndIsReadableTest", - "absentReplyWithFutureFenceBlocksRefillTest" + "writeRequiresAcceptedSource", + "acceptedSourcesSettledBeforeTheirDeadline" ], "profile": "effects", + "differential": { + "maxBytesPerStateRatio": 1.45 + }, "generate": { "maxSamples": 4096, "maxSteps": 60, "traces": 512, "outputDirectory": ".formal-traces/effects" - }, - "replayRegressions": [ - "observerFailuresCannotPreventCacheHitTest", - "observerFailuresCannotPreventPublicationTest", - "writeStampAfterSerializationClearsInterveningFenceTest", - "instanceReadBudgetOverridesLibraryTest", - "operationReadBudgetOverridesInstanceTest", - "runtimeReadBudgetOverridesOperationTest", - "futureFrameReportsPositiveObservingOffsetTest", - "coalescedFailureKeepsOneLeaderAndFollowerTrailTest", - "nullReplyRefillsAndIsReadableTest", - "primitiveReplyRefillsAndIsReadableTest", - "legacyReplyRefillsAndIsReadableTest", - "kindlessReplyRefillsAndIsReadableTest", - "missingFenceRefillsAndIsReadableTest", - "negativeFenceRefillsAndIsReadableTest", - "fractionalFenceRefillsAndIsReadableTest", - "unsafeFenceRefillsAndIsReadableTest", - "observerFailuresCannotReplaceSourceErrorTest", - "libraryReadBudgetIsFiftyMillisecondsTest", - "untrackedFencedReplyRefillsAndIsReadableTest", - "readDurationIncludesDecodeTest", - "sourceDurationExcludesPublicationTest", - "lateSourceCannotRepeatFailureMetricTest", - "timedOutLoaderOverlapsNewFlightTest", - "acceptedWriteOutlivesDeadlineTest", - "delayedWriteRemainsFencedTest", - "readTimeoutStartsIndependentSourceDeadlineTest", - "lateReadCannotBecomeHitTest", - "acquiredDecodeSurvivesInvalidationAndDeadlineTest", - "readFailureNeverRefillsTest", - "decodeFailureMayRefillTest", - "dumpFailurePreservesSourceTest", - "writeFailurePreservesSourceTest", - "rollbackDuringDumpRechecksObservedFenceTest", - "rollbackDoesNotExtendSourceDeadlineTest", - "lateReadRejectionUsesDeadlineCategoryTest", - "successfulReadClearsDeadlineBeforeDecodeTest", - "readFailureKeepsCategoryAndDeniesRefillTest", - "decodeFailureKeepsCategoryAndAllowsRefillTest", - "dumpFailureKeepsCategoryAndSourceValueTest", - "writeFailureKeepsCategoryAndSourceValueTest", - "expiredZeroFenceReplyRefillsAndIsReadableTest", - "absentReplyWithFutureFenceBlocksRefillTest" - ] + } }, { "path": "formal/dialcache-recovery-conformance.qnt", "invariants": [ "singleReadPerFlight", - "pendingDecodeHasCall", "writesHaveRetention", - "sourcesMatchEffects", - "onlyRegisteredSourceOwnsDeadline", "agesRequireRecovery", "closedScopesHaveNoMemo", - "recoveredValueWasWithinAcceptedAge" - ], - "regressions": [ - "futureFrameDoesNotCarryMissFenceTest", - "defaultRecoversOwnTimeoutTest", - "explicitDenialReplacesDefaultTest", - "defaultRejectsOrdinaryFailureTest", - "defaultRecoversPropagatedTimeoutTest", - "lateSuccessCannotReplaceRecoveredValueTest", - "failedRecoveryPreservesDeadlineErrorTest", - "recoveredValueMemoizesOnlyInAttachedRequestTest", - "crossRequestRecoveryMemoizesBothScopesTest", - "closedRequestCannotReceiveLateRecoveryMemoTest", - "rollbackCannotLowerInvalidationWatermarkTest", - "rollbackDuringRetainedDecodeRejectsFutureSnapshotTest", - "instanceAllowReplacesTimeoutOnlyDefaultTest", - "instanceDenialReplacesTimeoutOnlyDefaultTest", - "operationDenialReplacesInstanceAllowTest", - "lastFreshReadDoesNotInvokeSourceTest", - "lastRecoveryMillisecondIsServedTest", - "maximumAgeAtReadDoesNotDecodeTest", - "fencedInitialBytesNeverRecoverTest", - "classifierErrorPreservesSourceWithoutDecodeTest", - "freshDecodeFailureCannotBeRetriedAsRecoveryTest", - "initialReadFailureSkipsRecoveryClassificationTest", - "rollbackBelowFreshCeilingStillRecoversTest", - "replacementDoesNotChangeRetainedRecoveryTest", - "maximumAgeBeforeDecodePreservesSourceTest", - "maximumAgeAfterDecodePreservesSourceTest", - "operationAllowReplacesInstanceDenialTest", - "coalescedRecoveryClassifiesAndDecodesOnceTest", - "recoveredValueKeepsOriginalFallbackDiagnosticTest", - "recoveredFlightMemoIsReusedByBothRequestsTest" + "pendingDecodeHasCall", + "sourcesMatchEffects", + "onlyRegisteredSourceOwnsDeadline", + "oneExecution", + "completedCallsHaveNoActiveWork", + "pendingCallersOwnActiveFlights" ], "profile": "recovery", + "differential": { + "maxBytesPerStateRatio": 1.85 + }, "generate": { "maxSamples": 4096, "maxSteps": 60, "traces": 512, "outputDirectory": ".formal-traces/features/recovery" - }, - "replayRegressions": [ - "futureFrameDoesNotCarryMissFenceTest", - "defaultRecoversOwnTimeoutTest", - "explicitDenialReplacesDefaultTest", - "defaultRejectsOrdinaryFailureTest", - "defaultRecoversPropagatedTimeoutTest", - "lateSuccessCannotReplaceRecoveredValueTest", - "failedRecoveryPreservesDeadlineErrorTest", - "recoveredValueMemoizesOnlyInAttachedRequestTest", - "crossRequestRecoveryMemoizesBothScopesTest", - "closedRequestCannotReceiveLateRecoveryMemoTest", - "rollbackCannotLowerInvalidationWatermarkTest", - "rollbackDuringRetainedDecodeRejectsFutureSnapshotTest", - "instanceAllowReplacesTimeoutOnlyDefaultTest", - "instanceDenialReplacesTimeoutOnlyDefaultTest", - "operationDenialReplacesInstanceAllowTest", - "lastFreshReadDoesNotInvokeSourceTest", - "lastRecoveryMillisecondIsServedTest", - "maximumAgeAtReadDoesNotDecodeTest", - "fencedInitialBytesNeverRecoverTest", - "classifierErrorPreservesSourceWithoutDecodeTest", - "freshDecodeFailureCannotBeRetriedAsRecoveryTest", - "initialReadFailureSkipsRecoveryClassificationTest", - "rollbackBelowFreshCeilingStillRecoversTest", - "replacementDoesNotChangeRetainedRecoveryTest", - "maximumAgeBeforeDecodePreservesSourceTest", - "maximumAgeAfterDecodePreservesSourceTest", - "operationAllowReplacesInstanceDenialTest", - "coalescedRecoveryClassifiesAndDecodesOnceTest", - "recoveredValueKeepsOriginalFallbackDiagnosticTest", - "recoveredFlightMemoIsReusedByBothRequestsTest" - ] + } }, { "path": "formal/dialcache-policy-conformance.qnt", @@ -475,131 +160,30 @@ "remoteHitsWarmLocalForTheReplysLocalTtl", "joinsOnlyJoinableFlights" ], - "regressions": [ - "invalidReadBudgetBypassesAllCachingTest", - "invalidLocalRampPreservesRemoteTest", - "invalidRemoteRampPreservesLocalTest", - "invalidRecoveryUsesOrdinaryRetentionTest", - "invalidShadowPreservesNormalServingTest", - "localHitDoesNotRenewInsertionTtlTest", - "wallRollbackDoesNotExtendLocalTtlTest", - "wallRollbackRejectsFutureRemoteFrameTest", - "independentCompletionKeepsRegisteredLeaderTest", - "independentFailureKeepsRegisteredLeaderTest", - "eachSourceKeepsPublicationPolicyTest", - "absentValueIsStoredAndReusedTest", - "independentLocalCallsStillReuseSettledValueTest", - "independentLocalPublicationUsesLastCompletionTest", - "independentRemotePublicationUsesLastCompletionTest", - "providerFailureBypassesAndPreservesExistingLocalTest", - "disablingServingKeepsExistingLocalForReenablementTest", - "increasedFreshTtlCanReusePhysicallyRetainedValueTest", - "exactRemoteFreshBoundaryStartsSourceTest", - "increasedFreshTtlCannotResurrectExpiredStorageTest", - "remoteHitStartsFullLocalInsertionTtlTest", - "remoteHitWarmsLocalForTheReplysLocalTtlTest", - "untrackedReadFailureStillWarmsActiveLocalTest", - "invalidRemoteTtlPreservesLocalServingTest", - "invalidLocalTtlStillServesFreshRemoteTest", - "recoveryAgeEqualToFreshTtlStillServesFreshRemoteTest", - "negativeRecoveryAgeStillServesFreshRemoteTest", - "providerFailureReportsStablePolicyCategoryTest", - "remoteHitBeforeBoundaryDoesNotRenewFreshnessTest", - "falsyRemoteValuesAreServedFromRemoteTest" - ], "profile": "policy", "generate": { "maxSamples": 2048, "maxSteps": 60, "traces": 512, "outputDirectory": ".formal-traces/features/policy" - }, - "replayRegressions": [ - "invalidReadBudgetBypassesAllCachingTest", - "invalidLocalRampPreservesRemoteTest", - "invalidRemoteRampPreservesLocalTest", - "invalidRecoveryUsesOrdinaryRetentionTest", - "invalidShadowPreservesNormalServingTest", - "localHitDoesNotRenewInsertionTtlTest", - "wallRollbackDoesNotExtendLocalTtlTest", - "wallRollbackRejectsFutureRemoteFrameTest", - "independentCompletionKeepsRegisteredLeaderTest", - "independentFailureKeepsRegisteredLeaderTest", - "eachSourceKeepsPublicationPolicyTest", - "absentValueIsStoredAndReusedTest", - "independentLocalCallsStillReuseSettledValueTest", - "independentLocalPublicationUsesLastCompletionTest", - "independentRemotePublicationUsesLastCompletionTest", - "providerFailureBypassesAndPreservesExistingLocalTest", - "disablingServingKeepsExistingLocalForReenablementTest", - "increasedFreshTtlCanReusePhysicallyRetainedValueTest", - "exactRemoteFreshBoundaryStartsSourceTest", - "increasedFreshTtlCannotResurrectExpiredStorageTest", - "remoteHitStartsFullLocalInsertionTtlTest", - "remoteHitWarmsLocalForTheReplysLocalTtlTest", - "untrackedReadFailureStillWarmsActiveLocalTest", - "invalidRemoteTtlPreservesLocalServingTest", - "invalidLocalTtlStillServesFreshRemoteTest", - "recoveryAgeEqualToFreshTtlStillServesFreshRemoteTest", - "negativeRecoveryAgeStillServesFreshRemoteTest", - "providerFailureReportsStablePolicyCategoryTest", - "remoteHitBeforeBoundaryDoesNotRenewFreshnessTest", - "falsyRemoteValuesAreServedFromRemoteTest" - ] + } }, { "path": "formal/dialcache-shadow-conformance.qnt", "invariants": [ "oneSourcePerCaller", - "writesRequireMiss", "writesHaveRetention", + "missingHookHasNoShadowEffects", "agesRequireVerdicts", "warningsRequireMismatch", - "missingHookHasNoShadowEffects", - "warningsRequireValidCapturedPolicy", - "invalidLoggingCannotBeCaptured", "expiredSourceWorkSkipsRedis", - "c0AcquisitionsRespectFreshness" - ], - "regressions": [ - "identicalTextAndBinaryBytesConfirmMismatchTest", - "sameDecodedValueWithDifferentBytesIsSupersededTest", - "binarySnapshotComparesDecodedValueTest", - "slowComparisonTimesOutBeforeConfirmationTest", - "slowComparisonFailureStillTimesOutTest", - "missingHookSkipsDarkJobTest", - "invalidShadowPolicySkipsDarkJobTest", - "admittedComparisonSurvivesPolicyDisableTest", - "explicitEqualityOverridesValuesTest", - "explicitInequalityRequiresConfirmationTest", - "comparisonFailureKeepsCallerTest", - "acceptedLoggingSurvivesPolicyChangeTest", - "ageClampsAfterWallRollbackTest", - "confirmationKeepsOriginalAgeTest", - "invalidLoggingKeepsComparisonWithoutWarningTest", - "sourceWorkBeforeDeadlineStillReadsTest", - "sourceWorkAtDeadlineSkipsDeferredReadTest", - "expiredDeferredJobRetainsSourceRejectionDeadlineTest", - "darkReadErrorCannotReplaceCallerSourceTest", - "sourceErrorDoesNotDecodePresentDarkBytesTest", - "futureDarkBytesFillWithoutDecodingTest", - "fencedDarkBytesCanAdmitNewerFillTest", - "fencedConfirmationNeverRepairsTest", - "futureConfirmationStillComparesBytesTest", - "fillSerializationFailureNeverDispatchesWriteTest", - "fillWriteFailurePreservesCallerResultTest", - "lateFillSerializationCannotDispatchWriteTest", - "lateFillWriteCannotEmitAnotherVerdictTest", - "lateDecodeCannotStartConfirmationTest", - "lateConfirmationCannotEmitAnotherVerdictTest", - "lateDarkReadCannotStartDecodeOrFillTest", - "omittedLoggingKeepsMismatchMetricsOnlyTest", - "explicitFalseLoggingOverridesEnabledDefaultTest", - "confirmationPastFreshnessKeepsOriginalPayloadAndAgeTest", - "confirmationRollbackKeepsPayloadAndClampsAgeTest", - "futureDarkAcquisitionReportsOffsetAndFillsMissTest", - "futureLateDarkReadKeepsTimeoutAndReportsOffsetTest", - "c0AtExactFreshnessBoundaryRefillsTest" + "invalidLoggingCannotBeCaptured", + "fillsRequireMissAndAcceptedSource", + "c0AcquisitionsRespectFreshness", + "budgetsBelongToPendingWork", + "heldEffectsAreTheDrivers", + "oneExecution", + "fillsClearTheirFence" ], "profile": "shadow", "generate": { @@ -608,15 +192,9 @@ "traces": 1024, "outputDirectory": ".formal-traces/features/shadow" }, - "replayRegressions": [ - "omittedLoggingKeepsMismatchMetricsOnlyTest", - "explicitFalseLoggingOverridesEnabledDefaultTest", - "confirmationPastFreshnessKeepsOriginalPayloadAndAgeTest", - "confirmationRollbackKeepsPayloadAndClampsAgeTest", - "futureDarkAcquisitionReportsOffsetAndFillsMissTest", - "futureLateDarkReadKeepsTimeoutAndReportsOffsetTest", - "c0AtExactFreshnessBoundaryRefillsTest" - ] + "differential": { + "maxBytesPerStateRatio": 1.8 + } }, { "path": "formal/dialcache-scope-conformance.qnt", @@ -628,79 +206,36 @@ "memoFollowsLatestSuccessfulSettlement", "registrationFollowsCoalescing" ], - "regressions": [ - "lateSourceCannotPopulateReplacementTest", - "policyReplyAfterCloseBypassesRequestTest", - "nestedCloseAndDisabledBypassKeepOuterMemoTest", - "rejectedFlightAllowsRetryTest", - "sharedFailureHasOneAttributedErrorTest", - "disabledSourceFailureHasNoCacheTrailTest", - "policyClosureFailureIsAttributedWithoutCachingTest", - "absentValueIsMemoizedTest", - "independentRequestMemoUsesLastCompletionTest", - "pendingSourceKeepsRequestPolicyAcrossBypassAndClosureTest", - "rejectedIndependentSourceKeepsMemoizedValueTest", - "independentSourceIsNotRegisteredForLaterSharingTest", - "pendingRequestFlightIsJoinedBeforeMemoReadTest", - "bypassedRequestFailureIsAttributedToLocalTest" - ], "profile": "scope", "generate": { "maxSamples": 1024, "maxSteps": 60, "traces": 256, "outputDirectory": ".formal-traces/features/scope" - }, - "replayRegressions": [ - "lateSourceCannotPopulateReplacementTest", - "policyReplyAfterCloseBypassesRequestTest", - "nestedCloseAndDisabledBypassKeepOuterMemoTest", - "rejectedFlightAllowsRetryTest", - "sharedFailureHasOneAttributedErrorTest", - "disabledSourceFailureHasNoCacheTrailTest", - "policyClosureFailureIsAttributedWithoutCachingTest", - "absentValueIsMemoizedTest", - "independentRequestMemoUsesLastCompletionTest", - "pendingSourceKeepsRequestPolicyAcrossBypassAndClosureTest", - "rejectedIndependentSourceKeepsMemoizedValueTest", - "independentSourceIsNotRegisteredForLaterSharingTest", - "pendingRequestFlightIsJoinedBeforeMemoReadTest", - "bypassedRequestFailureIsAttributedToLocalTest" - ] + } }, { "path": "formal/dialcache-admission-conformance.qnt", "invariants": [ "capacityIsPerInstance", "oneJobPerIdentity", - "registeredCallsArePending", + "registeredFlightsArePending", "callsKeepAcquiredValue", "jobsAreDiagnostic", - "effectsMatchRecords" - ], - "regressions": [ - "coalescedHitAdmitsOneJobTest", - "duplicateDropsBeforeCapacityIsFullTest", - "timeoutRetainsSourceCapacityTest", - "timeoutRetainsDecodeCapacityTest", - "timeoutRetainsConfirmationCapacityTest", - "fullInstanceDoesNotBlockOtherInstanceTest" + "effectsMatchRecords", + "selectionsAwaitTheirHit", + "jobBudgetsBelongToLiveJobs" ], "profile": "admission", + "differential": { + "maxBytesPerStateRatio": 1.65 + }, "generate": { "maxSamples": 1024, "maxSteps": 60, "traces": 128, "outputDirectory": ".formal-traces/features/admission" - }, - "replayRegressions": [ - "coalescedHitAdmitsOneJobTest", - "duplicateDropsBeforeCapacityIsFullTest", - "timeoutRetainsSourceCapacityTest", - "timeoutRetainsDecodeCapacityTest", - "timeoutRetainsConfirmationCapacityTest", - "fullInstanceDoesNotBlockOtherInstanceTest" - ] + } }, { "path": "formal/dialcache-layers-conformance.qnt", @@ -715,49 +250,13 @@ "absentRemoteHasNoAdapterEffects", "sourceOwnershipNeverCrossesKeyOrInstance" ], - "regressions": [ - "absentRemoteMaintenancePreservesLocalReuseTest", - "absentRemotePreservesLocalReuseTest", - "requestMissesShareProcessAndMemoizeSeparatelyTest", - "localReadPromotesBeforeEvictionTest", - "zeroCapacityKeepsSharingWithoutStorageTest", - "trackedSourceWaitsForValidatedReadToWarmLocalTest", - "invalidationGroupsOperationsButPreservesAcquiredCachesTest", - "requestMemoExceedsLocalCapacityTest", - "separateRequestRootsRetainIndependentValuesTest", - "oneInstanceEvictionCannotEvictAnotherInstanceTest", - "pendingSourcesKeepEntityAndOperationIdentityTest", - "settledRequestMemoSurvivesSharedLayerRampDownTest", - "untrackedReadsIgnoreGroupedInvalidationTest", - "trackedWithoutRemotePublishesReusableLocalTest", - "untrackedSourcePublicationIsProbedInAllThreeLayersTest", - "coalescingCallerJoinsPendingFlightBeforeSeededFrameTest" - ], "profile": "layers", "generate": { "maxSamples": 2048, "maxSteps": 80, "traces": 512, "outputDirectory": ".formal-traces/features/layers" - }, - "replayRegressions": [ - "absentRemoteMaintenancePreservesLocalReuseTest", - "absentRemotePreservesLocalReuseTest", - "requestMissesShareProcessAndMemoizeSeparatelyTest", - "localReadPromotesBeforeEvictionTest", - "zeroCapacityKeepsSharingWithoutStorageTest", - "trackedSourceWaitsForValidatedReadToWarmLocalTest", - "invalidationGroupsOperationsButPreservesAcquiredCachesTest", - "requestMemoExceedsLocalCapacityTest", - "separateRequestRootsRetainIndependentValuesTest", - "oneInstanceEvictionCannotEvictAnotherInstanceTest", - "pendingSourcesKeepEntityAndOperationIdentityTest", - "settledRequestMemoSurvivesSharedLayerRampDownTest", - "untrackedReadsIgnoreGroupedInvalidationTest", - "trackedWithoutRemotePublishesReusableLocalTest", - "untrackedSourcePublicationIsProbedInAllThreeLayersTest", - "coalescingCallerJoinsPendingFlightBeforeSeededFrameTest" - ] + } }, { "path": "formal/dialcache-independent-conformance.qnt", @@ -768,20 +267,7 @@ "retainedSnapshotsWereEligible", "abortsAreUnique", "writesKeepCapturedRetention", - "eachSourceKeepsItsFullBudget", - "sourceSettlementsRespectOwnDeadline" - ], - "regressions": [ - "independentReadDeadlinesStartSeparateSourcesTest", - "independentRecoveryKeepsDistinctSnapshotsTest", - "timedOutReadCannotAffectAnotherCallTest", - "acceptedFreshDecodeSurvivesOtherInvalidationTest", - "readFailureCannotBorrowAnotherCallsRefillTest", - "recoveryPolicyIsCapturedPerCallerTest", - "staggeredSourceStartsKeepIndependentBudgetsTest", - "staggeredSourcesExpireAtTheirOwnDeadlineTest", - "independentRecoveryAtCapturedAgeBoundaryTest", - "independentRecoveriesServeDistinctAcquiredSnapshotsTest" + "eachSourceKeepsItsFullBudget" ], "profile": "independent", "generate": { @@ -789,84 +275,20 @@ "maxSteps": 60, "traces": 512, "outputDirectory": ".formal-traces/features/independent" - }, - "replayRegressions": [ - "staggeredSourceStartsKeepIndependentBudgetsTest", - "staggeredSourcesExpireAtTheirOwnDeadlineTest", - "independentRecoveryAtCapturedAgeBoundaryTest", - "independentReadDeadlinesStartSeparateSourcesTest", - "timedOutReadCannotAffectAnotherCallTest", - "readFailureCannotBorrowAnotherCallsRefillTest", - "independentRecoveriesServeDistinctAcquiredSnapshotsTest" - ] + } }, { "path": "formal/dialcache-recovery-read-conformance.qnt", "profile": "recovery-read", "invariants": [ - "freshnessUsesReadSettlement", - "trackedWritesRespectPhysicalCap", - "recoveredResultsNeverPublishShared", - "recoveredAgeUsesLogicalMaximum", "closedContextsStayEmpty", + "selectedShadowNeverAdmitsRecoveredResults", "observationsHaveOwners", - "selectedShadowNeverAdmitsRecoveredResults" - ], - "regressions": [ - "freshnessAfterHeldReadTest", - "trackedEncodingFailureSuppressesRefillTest", - "untrackedEncodingFailureStillPublishesLocalTest", - "trackedPhysicalRetentionExpiresAtCapTest", - "physicalCapDoesNotClampLogicalRecoveryTest", - "compressedRecoveryMemoizesWithoutLocalPublicationTest", - "corruptCompressedRecoveryKeepsOriginalSourceErrorTest", - "retainedCompressedRecoverySurvivesInvalidationTest", - "closedRequestCannotReceiveCompressedRecoveryTest", - "trackedSourceNeedsRemoteValidationBeforeLocalReuseTest", - "ordinaryValueWorkDoesNotCreateMarkerTest", - "ordinaryValueWorkDoesNotExtendMarkerTest", - "failedInvalidationPreservesExistingMarkerTest", - "failedInvalidationDoesNotCreateMarkerTest", - "freshCompressedReadReportsDecompressionTest", - "corruptCompressedReadReportsRawFallbackTest", - "heldReadJustBeforeFreshnessBoundaryStillHitsTest", - "untrackedCompressedRecoveryDoesNotWarmLocalTest", - "compressedRecoveryRechecksMaximumAfterDecodeTest", - "retainedSnapshotSurvivesPhysicalExpiryTest", - "unsafeTimestampSkipsSerializerAndAllowsRefillTest", - "unsupportedVersionSkipsSerializerAndAllowsRefillTest", - "maximumAgeBeforeDecodeKeepsOriginalErrorTest", - "laterInvalidationDoesNotRewriteObservedMissFenceTest", - "recoveredAbsenceSkipsSelectedShadowTest", - "recoveredValueSkipsSelectedShadowTest" - ], - "replayRegressions": [ - "freshnessAfterHeldReadTest", - "trackedEncodingFailureSuppressesRefillTest", - "untrackedEncodingFailureStillPublishesLocalTest", - "trackedPhysicalRetentionExpiresAtCapTest", - "physicalCapDoesNotClampLogicalRecoveryTest", - "compressedRecoveryMemoizesWithoutLocalPublicationTest", - "corruptCompressedRecoveryKeepsOriginalSourceErrorTest", - "retainedCompressedRecoverySurvivesInvalidationTest", - "closedRequestCannotReceiveCompressedRecoveryTest", - "trackedSourceNeedsRemoteValidationBeforeLocalReuseTest", - "ordinaryValueWorkDoesNotCreateMarkerTest", - "ordinaryValueWorkDoesNotExtendMarkerTest", - "failedInvalidationPreservesExistingMarkerTest", - "failedInvalidationDoesNotCreateMarkerTest", - "freshCompressedReadReportsDecompressionTest", - "corruptCompressedReadReportsRawFallbackTest", - "heldReadJustBeforeFreshnessBoundaryStillHitsTest", - "untrackedCompressedRecoveryDoesNotWarmLocalTest", - "compressedRecoveryRechecksMaximumAfterDecodeTest", - "retainedSnapshotSurvivesPhysicalExpiryTest", - "unsafeTimestampSkipsSerializerAndAllowsRefillTest", - "unsupportedVersionSkipsSerializerAndAllowsRefillTest", - "maximumAgeBeforeDecodeKeepsOriginalErrorTest", - "laterInvalidationDoesNotRewriteObservedMissFenceTest", - "recoveredAbsenceSkipsSelectedShadowTest", - "recoveredValueSkipsSelectedShadowTest" + "trackedWritesRespectPhysicalCap", + "effectsMatchOwners", + "completedCallsHaveNoActiveWork", + "oneExecution", + "expiredMarkersFenceNothing" ], "generate": { "maxSamples": 1024, @@ -879,22 +301,14 @@ "path": "formal/dialcache-local-failure-conformance.qnt", "profile": "local-failure", "invariants": [ - "failedReadKeepsPriorLocalValue", - "failedWriteKeepsAcceptedCallerResult", - "sourceErrorsNeverReplaceLocalValue" - ], - "regressions": [ - "localReadFailureFallsThroughAndPreservesOldLocalTest", - "localReadFailureSkipsSourcePublicationButMemoizesTest", - "localWriteFailureKeepsSourceAndRequestMemoTest", - "sourceFailureKeepsPreviouslyAcceptedStorageTest" - ], - "replayRegressions": [ - "localReadFailureFallsThroughAndPreservesOldLocalTest", - "localReadFailureSkipsSourcePublicationButMemoizesTest", - "localWriteFailureKeepsSourceAndRequestMemoTest", - "sourceFailureKeepsPreviouslyAcceptedStorageTest" + "faultedReadNeverUsesLocal", + "faultedSettlementPublishesNothingLocally", + "callsKeepSourceOutcome", + "storageHoldsAcceptedValuesOnly" ], + "differential": { + "maxBytesPerStateRatio": 1.45 + }, "generate": { "maxSamples": 512, "maxSteps": 40, @@ -913,64 +327,6 @@ "retainedValueFollowsSettlementOrder", "sourceEffectsMatch" ], - "regressions": [ - "runtimeTrueEnablesSharingOverFalseDefaultTest", - "inheritedFalseKeepsIndependentMemoizingSourcesTest", - "localCohortEqualityBypassesBeforeAboveSampleCachesTest", - "remoteCohortEqualityBypassesBeforeAboveSampleCachesTest", - "requestAbsenceAndLiteralTextStayDistinctTest", - "localAbsenceAndLiteralTextStayDistinctTest", - "remoteAbsenceAndLiteralTextStayDistinctTest", - "requestFalsyValuesRemainDistinctAndReusableTest", - "localFalsyValuesRemainDistinctAndReusableTest", - "remoteFalsyValuesRemainDistinctAndReusableTest", - "nullProviderInheritsConfiguredServingAndDefaultSharingTest", - "omittedRampAndSharingUseLibraryDefaultsTest", - "reenablingSharingUsesTheOmittedTrueDefaultTest", - "falseRequestLeafPreservesMemoForReenablementTest", - "invalidCoalesceBypassesWithoutReplacingRemoteTest", - "invalidRequestLocalBypassesWithoutReplacingRemoteTest", - "explicitNullCoalesceBypassesWithoutReplacingRemoteTest", - "explicitNullRequestLocalBypassesWithoutReplacingRemoteTest", - "runtimeLocalTtlWithoutRampActivatesLayerTest", - "runtimeRemoteTtlWithoutRampActivatesLayerTest", - "disabledBaselineRampedUpKeepsDefaultSharingTest", - "fullFeatureKillSwitchKeepsOmittedSharingAndRetainedMemoTest", - "runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", - "runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest", - "remoteHitPromotesIntoNewlyEnabledLocalLayerTest", - "disabledSharingDoesNotJoinRegisteredFlightTest", - "defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest" - ], - "replayRegressions": [ - "runtimeTrueEnablesSharingOverFalseDefaultTest", - "inheritedFalseKeepsIndependentMemoizingSourcesTest", - "localCohortEqualityBypassesBeforeAboveSampleCachesTest", - "remoteCohortEqualityBypassesBeforeAboveSampleCachesTest", - "requestAbsenceAndLiteralTextStayDistinctTest", - "localAbsenceAndLiteralTextStayDistinctTest", - "remoteAbsenceAndLiteralTextStayDistinctTest", - "requestFalsyValuesRemainDistinctAndReusableTest", - "localFalsyValuesRemainDistinctAndReusableTest", - "remoteFalsyValuesRemainDistinctAndReusableTest", - "nullProviderInheritsConfiguredServingAndDefaultSharingTest", - "omittedRampAndSharingUseLibraryDefaultsTest", - "reenablingSharingUsesTheOmittedTrueDefaultTest", - "falseRequestLeafPreservesMemoForReenablementTest", - "invalidCoalesceBypassesWithoutReplacingRemoteTest", - "invalidRequestLocalBypassesWithoutReplacingRemoteTest", - "explicitNullCoalesceBypassesWithoutReplacingRemoteTest", - "explicitNullRequestLocalBypassesWithoutReplacingRemoteTest", - "runtimeLocalTtlWithoutRampActivatesLayerTest", - "runtimeRemoteTtlWithoutRampActivatesLayerTest", - "disabledBaselineRampedUpKeepsDefaultSharingTest", - "fullFeatureKillSwitchKeepsOmittedSharingAndRetainedMemoTest", - "runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", - "runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest", - "remoteHitPromotesIntoNewlyEnabledLocalLayerTest", - "disabledSharingDoesNotJoinRegisteredFlightTest", - "defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest" - ], "generate": { "maxSamples": 1024, "maxSteps": 60, @@ -984,66 +340,16 @@ "invariants": [ "boundedSharedJobRegistry", "oneJobPerInstanceKey", - "localPublicationBelongsToCaller", "sourcesRemainIndependentOfJobs", - "hitResultsAreImmutable", "callerSourceOwnsItsResult", - "disabledCohortsNeverOwnJobs", "darkJobsNeverRecover", "fillKeepsCapturedRetention", "servedJobsNeverWrite", "timedOutDarkSourceWaitReleases", "unboundedCallerKeepsPendingSource", - "retainedC0WasFreshWhenAcquired", - "retentionComesFromAdmissionPolicy" - ], - "regressions": [ - "darkSourcePublishesLocalBeforeShadowWriteTest", - "darkSourcePublishesRequestBeforeShadowWriteTest", - "darkPresentC0NeverBecomesLocalPublicationTest", - "darkPresentC0NeverBecomesRequestPublicationTest", - "deduplicatedJobKeepsIndependentCallerSourcesTest", - "darkFailureDoesNotUseEligibleStaleBytesTest", - "invalidShadowKeepsLocalPublicationTest", - "unboundedCallerSurvivesDarkJobDeadlineTest", - "servedAndDarkJobsShareCapacityButNotSourceOwnershipTest", - "fullMixedInstanceDoesNotBlockAnotherInstanceTest", - "servedDiagnosticSourceDoesNotPopulateLocalTest", - "validatedRemoteHitStopsFurtherShadowTest", - "ordinaryServingMissDoesNotAdmitDiagnosticSourceTest", - "shadowCohortBelowDoesNotAdmitTest", - "shadowCohortEqualityDoesNotAdmitTest", - "shadowCohortAboveAdmitsTest", - "darkFillRetainsPolicyThroughSerializationTest", - "retainedFreshC0StillComparesAfterFreshnessBoundaryTest", - "expiredC0CanFillAndServeNewValueTest", - "acquiredMissDoesNotRereadBeforeFillTest", - "darkPropagatedTimeoutIsSourceFailureTest", - "servedPropagatedTimeoutPreservesHitTest" - ], - "replayRegressions": [ - "darkSourcePublishesLocalBeforeShadowWriteTest", - "darkSourcePublishesRequestBeforeShadowWriteTest", - "darkPresentC0NeverBecomesLocalPublicationTest", - "darkPresentC0NeverBecomesRequestPublicationTest", - "deduplicatedJobKeepsIndependentCallerSourcesTest", - "darkFailureDoesNotUseEligibleStaleBytesTest", - "invalidShadowKeepsLocalPublicationTest", - "unboundedCallerSurvivesDarkJobDeadlineTest", - "servedAndDarkJobsShareCapacityButNotSourceOwnershipTest", - "fullMixedInstanceDoesNotBlockAnotherInstanceTest", - "servedDiagnosticSourceDoesNotPopulateLocalTest", - "validatedRemoteHitStopsFurtherShadowTest", - "ordinaryServingMissDoesNotAdmitDiagnosticSourceTest", - "shadowCohortBelowDoesNotAdmitTest", - "shadowCohortEqualityDoesNotAdmitTest", - "shadowCohortAboveAdmitsTest", - "darkFillRetainsPolicyThroughSerializationTest", - "retainedFreshC0StillComparesAfterFreshnessBoundaryTest", - "expiredC0CanFillAndServeNewValueTest", - "acquiredMissDoesNotRereadBeforeFillTest", - "darkPropagatedTimeoutIsSourceFailureTest", - "servedPropagatedTimeoutPreservesHitTest" + "detachedSourcesCarryNoAuthority", + "jobBudgetsBelongToLiveJobs", + "heldWorkHasAcceptedResults" ], "generate": { "maxSamples": 1024, @@ -1055,21 +361,10 @@ { "path": "formal/dialcache-local-clock-conformance.qnt", "invariants": [ - "localReadsUseCommonWholeMilliseconds", - "readsNeverRenewLocalInsertion", - "publicCallsPreserveProbeResults" - ], - "regressions": [ - "fractionalInsertionExpiresAtWholeMillisecondTest", - "fractionalConstructionKeepsCommonInstanceGridTest", - "nonzeroOriginKeepsWholeMillisecondBoundaryTest", - "integerInsertionRetainsFullTtlTest" - ], - "replayRegressions": [ - "fractionalInsertionExpiresAtWholeMillisecondTest", - "fractionalConstructionKeepsCommonInstanceGridTest", - "nonzeroOriginKeepsWholeMillisecondBoundaryTest", - "integerInsertionRetainsFullTtlTest" + "clockIsOnTheGrid", + "callsServeLiveEntriesOrRunTheSource", + "publicCallsMatchSources", + "noProviderMakesNoPolicyCall" ], "profile": "local-clock", "generate": { @@ -1090,30 +385,6 @@ "followersKeepTheirOwnersOutcome", "onlyEnabledValidCallsResolvePolicy" ], - "regressions": [ - "outsideAndInvalidOutsideCallsIgnoreDeadlineAndSharingTest", - "defaultSourceBudgetExpiresAtSixtySecondsTest", - "unboundedEnabledSourcePublishesAfterSixtySecondsTest", - "lateFollowerUsesLeadersRemainingBudgetTest", - "heldPolicyDoesNotSpendSourceBudgetTest", - "invalidKeyStillKeepsEnabledSourceDeadlineTest", - "abandonedSourceCannotReplaceSuccessfulRetryTest", - "localEntryExpiresAfterItsTtlTest", - "rejectedSourceLeavesPublishedLocalEntryTest", - "republishedEqualValueRestampsLocalExpiryTest" - ], - "replayRegressions": [ - "outsideAndInvalidOutsideCallsIgnoreDeadlineAndSharingTest", - "defaultSourceBudgetExpiresAtSixtySecondsTest", - "unboundedEnabledSourcePublishesAfterSixtySecondsTest", - "lateFollowerUsesLeadersRemainingBudgetTest", - "heldPolicyDoesNotSpendSourceBudgetTest", - "invalidKeyStillKeepsEnabledSourceDeadlineTest", - "abandonedSourceCannotReplaceSuccessfulRetryTest", - "localEntryExpiresAfterItsTtlTest", - "rejectedSourceLeavesPublishedLocalEntryTest", - "republishedEqualValueRestampsLocalExpiryTest" - ], "generate": { "maxSamples": 1024, "maxSteps": 60, @@ -1131,15 +402,6 @@ "acceptedDurationWithinCeiling", "writerRejectsInvalidNumericDomain" ], - "regressions": [ - "allFrameVectorsTest", - "maximalSubpartConsumesAcceptedPrefixOnceTest", - "malformedSurrogateBytesRemainSeparateErrorsTest", - "payloadUnpairedSurrogateUsesReplacementTest", - "trackedFencePrecedesEncodingErrorTest", - "untrackedIgnoresMalformedWatermarkTest", - "physicalDurationRoundsUpWithinBoundTest" - ], "vectorExport": { "generator": "formal/generate-frame-vectors.mjs", "artifact": "formal/quint-frame-vectors.json", @@ -1165,20 +427,6 @@ "outputIsCanonicalDecimalString", "finiteRetentionIsExact" ], - "regressions": [ - "absentMarkerGetsRetentionFloorTest", - "futureCutoffDoesNotMoveBackwardsTest", - "longBufferExtendsRequiredRetentionTest", - "persistentMalformedStringStaysPersistentTest", - "wrongTypeLongTtlIsNotInheritedTest", - "wrongTypePersistenceIsNotInheritedTest", - "rejectedFractionPreservesOrderedListTest", - "rejectedUnsafeSumPreservesPersistentMalformedTextTest", - "maximumBufferAndTimestampSumAreAcceptedTest", - "decimalZerosAreCanonicalizedTest", - "newlineAndPlusAreNotDecimalGrammarTest", - "emptyStringRetentionIsPreservedTest" - ], "vectorExport": { "generator": "formal/generate-invalidation-vectors.mjs", "artifact": "formal/quint-invalidation-vectors.json", @@ -1200,19 +448,6 @@ "normalizedIntegersRetainExactMagnitude", "cohortNumeratorsAreUnsignedAndBoundariesStrict" ], - "regressions": [ - "allCasesTest", - "encodingSeparatesReservedDelimitersTest", - "surrogatePairEncodesOneFourByteScalarTest", - "malformedUtf16RejectsInsteadOfReplacementTest", - "bracesDependOnEntityTrackingTest", - "normalizedNamesUseUtf16OrderingTest", - "trackedArgumentsDoNotChangeWatermarkTest", - "normalizedPrimitivesPreserveFalsyAndOmittedValuesTest", - "signedBigintsPreserveEveryDecimalDigitTest", - "orderedKeyArgumentsRetainDuplicatesTest", - "publishedCohortNumeratorsRemainStableTest" - ], "vectorExport": { "generator": "formal/generate-key-vectors.mjs", "artifact": "formal/quint-key-vectors.json", @@ -1237,19 +472,6 @@ "compressionUsesByteThresholdAndStrictShrink", "unknownZeroPrefixPassesThroughUnchanged" ], - "regressions": [ - "allEnvelopeVectorsTest", - "escapedCompressedMarkerRemainsLiteralTest", - "unknownLegacyZeroPrefixRemainsUntouchedTest", - "corruptCompressionPreservesMarkedBytesTest", - "disabledNewWritesStillReadLegacyCompressionTest", - "decoderLimitKeepsRawBytesTest", - "utf8ThresholdCountsBytesTest", - "compressionTieKeepsRawRepresentationTest", - "shrinkComparedWithEscapedRawBytesTest", - "thresholdPrecedesWriteLimitTest", - "writeLimitPrecedesCompressionTest" - ], "vectorExport": { "generator": "formal/generate-envelope-vectors.mjs", "artifact": "formal/quint-envelope-vectors.json", @@ -1273,23 +495,20 @@ "sourceBoundaryIsExclusive", "fenceBoundaryIsExclusive" ], - "regressions": [ - "exactBoundariesRejectTest", - "rollbackCanRecoverRetainedBytesTest", - "futureAgeRejectsTest" - ], "symbolic": { "maxSteps": 1, "timeoutMs": 120000 } }, { - "path": "formal/dialcache-recovery-connection.qnt", + "path": "formal/dialcache-recovery-read-connection.qnt", "invariants": [ "retainedSnapshotMatchesAcquisition", - "recoveryReturnMatchesAcquiredContract" - ], - "regressions": [] + "recoveryReturnMatchesAcquiredContract", + "freshnessUsesReadSettlement", + "recoveredResultsNeverPublishShared", + "sourcesCarryCappedAdmittedRetention" + ] }, { "path": "formal/dialcache-source-connection.qnt", @@ -1298,34 +517,35 @@ "sourceOwnersMatchContract", "acceptedSourcesMatchContract", "followerKeepsAcquiredOwner" - ], - "regressions": [] + ] }, { - "path": "formal/dialcache-legacy-recovery-connection.qnt", + "path": "formal/dialcache-recovery-connection.qnt", "invariants": [ - "flightKeepsAcquiredSnapshot", - "flightRecoveryMatchesContract" - ], - "regressions": [] + "recoveredValueWasWithinAcceptedAge", + "recoveredFlightCompletesEveryOwner", + "retainedSnapshotMatchesAcquisition", + "recoveredResultsNeverPublishShared", + "retainedCandidateWindow" + ] }, { "path": "formal/dialcache-independent-connection.qnt", "invariants": [ "independentSnapshotsMatchAcquisition", "independentRecoveryMatchesContract", - "independentSourceMatchesTimerContract", "independentSourceOriginsMatchContract" - ], - "regressions": [] + ] }, { - "path": "formal/dialcache-effects-connection.qnt", + "path": "formal/dialcache-shadow-layers-connection.qnt", "invariants": [ - "effectsDeadlineMatchesSourceStart", - "effectsPublicationMatchesAcceptedSource" - ], - "regressions": [] + "servedCallersKeepTheirOutcome", + "jobsAdmittedOnlyWhenSelected", + "jobsCaptureAdmissionRetention", + "retainedC0WasFreshWhenAcquired", + "localPublicationBelongsToCaller" + ] } ], "symbolic": { @@ -1337,15 +557,6 @@ } }, "challenges": [ - { - "id": "source-deadline-epoch", - "contract": "C23", - "source": "formal/dialcache-flight-deadlines.qnt", - "model": "formal/dialcache-flight-deadlines.qnt", - "invariant": "fallbackDeadlineStartsWithFallback", - "before": "fallbackDeadline: s.now + FALLBACK_TIMEOUT,", - "after": "fallbackDeadline: FALLBACK_TIMEOUT," - }, { "id": "recovery-inclusive-maximum", "contract": "C45", @@ -1353,7 +564,12 @@ "model": "formal/dialcache-rule-checks.qnt", "invariant": "recoveryBoundaryIsExclusive", "before": "created <= observed and observed - created < ceiling", - "after": "created <= observed and observed - created <= ceiling" + "after": "created <= observed and observed - created <= ceiling", + "nativeMutants": { + "kind": "mapped", + "mutant": "M01", + "text": "M01 is the observable native site of cache-rules.qnt ageBeforeCeiling becoming inclusive, as measured by dialcache-rule-checks.qnt recoveryBoundaryIsExclusive: the post-decode serving check in both ports accepts a retained candidate at exactly the maximum age. Earlier ceiling sites are masked by the post-decode recheck because ages only grow, so this is the one single-site inclusive edit; recovery/maximumAgeAfterDecodePreservesSourceTest already detects it in both ports." + } }, { "id": "recovery-future-candidate", @@ -1362,17 +578,55 @@ "model": "formal/dialcache-rule-checks.qnt", "invariant": "recoveryBoundaryIsExclusive", "before": "created <= observed and observed - created < ceiling", - "after": "observed - created < ceiling" + "after": "observed - created < ceiling", + "nativeMutants": { + "kind": "mapped", + "mutant": "M40", + "text": "M40 is the native twin of cache-rules.qnt ageBeforeCeiling losing its created-before-observed clause, as measured by dialcache-rule-checks.qnt recoveryBoundaryIsExclusive: both ports classify a frame dated after the reader clock as a valid frame of age zero instead of rejecting it as future. The future clause is implemented once and shared by serving, recovery and shadow reads, so a recovery-only edit is not expressible and the shared edit is the faithful twin.", + "crossContract": "M40 sits on C40.future-rejected because the shared frameAge future clause is the cache-rules ageBeforeCeiling rule; C45's replay rollbackDuringRetainedDecodeRejectsFutureSnapshotTest and witness rollback-rejects-retained-future detect the same edit on the recovery path." + } }, { - "id": "legacy-recovery-inclusive-maximum", + "id": "recovery-connection-inclusive-maximum", "contract": "C45", "source": "formal/cache-rules.qnt", - "model": "formal/dialcache-recovery-conformance.qnt", + "model": "formal/dialcache-recovery-connection.qnt", "invariant": "recoveredValueWasWithinAcceptedAge", "before": "created <= observed and observed - created < ceiling", "after": "created <= observed and observed - created <= ceiling", - "measures": "Repeats the recovery-inclusive-maximum fault against recovery-conformance: the same shared-rule mutation must also be caught by that model's own invariant." + "measures": "Repeats the recovery-inclusive-maximum fault against the recovery connection model: the same shared-rule mutation must also be caught by that monitor's own clause.", + "reproducer": { + "kind": "exported-regression", + "run": "maximumAgeBeforeDecodePreservesSourceTest", + "model": "formal/dialcache-recovery-conformance.qnt", + "failure": "s.o.calls == List(SOURCE_ERROR) and s.o.loads == 0 and s.o.reads == 1 and s.o.recovery == List(\"miss\")", + "family": "inclusive-maximum-boundary", + "profiles": [ + "formal/dialcache-recovery-connection.qnt", + "recovery", + "policy", + "independent", + "recovery-read", + "shadow-layers", + "shadow" + ], + "exclusions": { + "scope": "The request-only projection has no frames and no clock, so no age judgment is evaluated.", + "source-budgets": "The local projection has no remote frames; local expiry is localEntryLiveAt, not ageBeforeCeiling.", + "layers": "Frames are seeded at age 0 under a 60 s freshness and the clock moves 1 ms per tick, so no history reaches an age boundary.", + "core": "No scheduled history reaches an exact age boundary: every regression passes under the mutant (measured 2026-09-20).", + "effects": "Frames are stamped at the wall clock and read within 600 ms under a 60 s freshness, and classifier NONE retains no snapshot, so no age judgment meets a boundary (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "admission": "Composes the remote freshness judgment, but every frame is stamped at a wall clock that only advances and is read within 600 ms under a 60 s freshness, so no read meets an age boundary or observes a future stamp.", + "local-failure": "Composes the remote freshness judgment (ageBeforeCeiling), but its wall clock never moves and every frame is stamped at the current instant, so a frame's age is always 0 and never meets a ceiling (re-measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "local-clock": "Composes the local projection with no remote layer; its closure reaches cache-rules through wholeMs and localEntryLiveAt only, so ageBeforeCeiling is never evaluated (re-measured 2026-09-20 over the composed text).", + "runtime-boundaries": "No scheduled history reaches an exact age boundary: every regression passes under the mutant (measured 2026-09-20)." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M01", + "text": "Same native fault as recovery-inclusive-maximum: M01 makes the post-decode serving maximum inclusive in both ports, which is cache-rules.qnt ageBeforeCeiling becoming inclusive as measured here by dialcache-recovery-connection.qnt recoveredValueWasWithinAcceptedAge over the snapshot a served recovery decode settles from. recovery/maximumAgeAfterDecodePreservesSourceTest and witness recovery:exact-maximum-after-decode-rejects already detect it in both ports." + } }, { "id": "policy-inclusive-local-expiry", @@ -1389,23 +643,28 @@ "family": "inclusive-expiry-boundary", "profiles": [ "policy", - "source-budgets" + "source-budgets", + "recovery-read", + "shadow-layers", + "local-clock" ], "exclusions": { "core": "Does not import the kernel library, so the mutated local storage is never executed; its own local expiry is stated in its own text.", - "effects": "Does not import the kernel library, so the mutated local storage is never executed; its own local expiry is stated in its own text.", - "recovery": "Does not import the kernel library, so the mutated local storage is never executed; its own local expiry is stated in its own text.", - "shadow": "Does not import the kernel library, so the mutated local storage is never executed; its own local expiry is stated in its own text.", - "admission": "Does not import the kernel library, so the mutated local storage is never executed; its own local expiry is stated in its own text.", - "independent": "Does not import the kernel library, so the mutated local storage is never executed; its own local expiry is stated in its own text.", - "recovery-read": "Does not import the kernel library, so the mutated local storage is never executed; its own local expiry is stated in its own text.", - "local-failure": "Does not import the kernel library, so the mutated local storage is never executed; its own local expiry is stated in its own text.", - "shadow-layers": "Does not import the kernel library, so the mutated local storage is never executed; its own local expiry is stated in its own text.", - "local-clock": "Does not import the kernel library, so the mutated local storage is never executed; its own local expiry is stated in its own text.", + "effects": "The local layer is off (capacity 0 and no local TTL), so the mutated local lookup never serves an entry.", + "recovery": "The local layer is off: capacity 0 and no local TTL, so local expiry is never judged.", + "shadow": "Composes local storage, but every reply leaves the local layer off and the capacity is 0, so no local entry is ever written or read.", + "admission": "The local layer is off in every reply and local storage is declared empty, so the mutated local storage rule is never executed.", + "independent": "Composes local storage, but every reply leaves the local layer off and the capacity is 0, so the mutated lookup is never executed and no local entry is ever written.", + "local-failure": "Composes local storage, but its clock never advances (now stays 0 against a 60 s local TTL), so no read meets an entry at its expiry instant.", "scope": "Composes the request-only projection, which never reads local storage.", "layers": "Composes local storage, but its 60 s entries never reach their insertion expiry within the bound of 1 ms ticks.", "runtime-boundaries": "Composes local storage, but no input advances the clock, so no entry reaches its expiry." } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M18", + "text": "M18 is the native twin of kernel/local-storage.qnt localValue replacing localEntryLiveAt with an inclusive comparison against the entry's expiry: both ports serve a local entry at the exact millisecond its insertion TTL elapses. policy/localHitDoesNotRenewInsertionTtlTest step 10 and source-budgets/localEntryExpiresAfterItsTtlTest detect it in both ports." } }, { @@ -1414,8 +673,13 @@ "source": "formal/cache-rules.qnt", "model": "formal/dialcache-rule-checks.qnt", "invariant": "localGridUsesWholeMilliseconds", - "before": "localEntryLiveAt(observedTicks / ticksPerMs, insertedTicks / ticksPerMs + ttlMs)", - "after": "observedTicks - insertedTicks < ttlMs * ticksPerMs" + "before": "localEntryLiveAt(wholeMs(observedTicks, ticksPerMs), wholeMs(insertedTicks, ticksPerMs) + ttlMs)", + "after": "observedTicks - insertedTicks < ttlMs * ticksPerMs", + "nativeMutants": { + "kind": "mapped", + "mutant": "M19", + "text": "M19 is the native twin of cache-rules.qnt localEntryLiveOnGrid being replaced by a comparison on raw ticks, as measured by dialcache-rule-checks.qnt localGridUsesWholeMilliseconds: both ports compute local insertion and expiry on the precise clock instead of the whole-millisecond grid. The feature-profile driver clocks are integer, so only the local-clock profile observes it; local-clock/fractionalInsertionExpiresAtWholeMillisecondTest step 7 detects both ports." + } }, { "id": "source-inclusive-deadline", @@ -1424,7 +688,12 @@ "model": "formal/dialcache-rule-checks.qnt", "invariant": "sourceBoundaryIsExclusive", "before": "pure def deadlinePendingAt(observed: int, deadline: int): bool = observed < deadline", - "after": "pure def deadlinePendingAt(observed: int, deadline: int): bool = observed <= deadline" + "after": "pure def deadlinePendingAt(observed: int, deadline: int): bool = observed <= deadline", + "nativeMutants": { + "kind": "mapped", + "mutant": "M35", + "text": "M35 is the native twin of cache-rules.qnt deadlinePendingAt becoming inclusive, as measured by dialcache-rule-checks.qnt sourceBoundaryIsExclusive: both ports accept a settlement observed at exactly the elapsed deadline. Timer-delivered regressions do not distinguish it from the unchanged timer path, so the effects jumpClock histories (effects/lateReadCannotBecomeHitTest, lateReadRejectionUsesDeadlineCategoryTest and the late-resolve and late-reject witnesses) are the expected evidence." + } }, { "id": "fence-inclusive-timestamp", @@ -1433,7 +702,12 @@ "model": "formal/dialcache-rule-checks.qnt", "invariant": "fenceBoundaryIsExclusive", "before": "pure def fenceAllows(created: int, watermark: int): bool = created > watermark", - "after": "pure def fenceAllows(created: int, watermark: int): bool = created >= watermark" + "after": "pure def fenceAllows(created: int, watermark: int): bool = created >= watermark", + "nativeMutants": { + "kind": "mapped", + "mutant": "M06", + "text": "M06 is exactly cache-rules.qnt fenceAllows becoming inclusive, as measured by dialcache-rule-checks.qnt fenceBoundaryIsExclusive: the tracked decoders of both ports accept a frame stamped exactly at its observed watermark. The equal-timestamp row of the generated tracked decode vectors already detects it in both ports." + } }, { "id": "profile-source-wrong-clock", @@ -1441,8 +715,13 @@ "source": "formal/kernel/deadlines.qnt", "model": "formal/dialcache-source-connection.qnt", "invariant": "sourceOriginsMatchContract", - "before": "started: state.started.append(state.now),", - "after": "started: state.started.append(0)," + "before": "at: state.now + budget }), ...state }", + "after": "at: budget }), ...state }", + "nativeMutants": { + "kind": "mapped", + "mutant": "M33", + "text": "Same native fault as source-deadline-epoch: M33 judges a source settlement against a budget anchored at the clock origin rather than the source start, which is kernel/deadlines.qnt due registering a deadline at the bare budget instead of the current instant plus the budget, so deliver expires a source, and arrival rejects its late result, at the origin plus its budget. source-budgets/heldPolicyDoesNotSpendSourceBudgetTest is the expected evidence in both ports." + } }, { "id": "profile-source-wrong-owner", @@ -1451,97 +730,255 @@ "model": "formal/dialcache-source-connection.qnt", "invariant": "sourceOwnersMatchContract", "before": "owners: state.owners.replaceAt(caller, index),", - "after": "owners: state.owners.replaceAt(caller, 0)," + "after": "owners: state.owners.replaceAt(caller, 0),", + "nativeMutants": { + "kind": "model-only", + "text": "The fault rewrites kernel/flights.qnt registerSource to record every source-starting caller as the owner of source 0, so finish (finishOwnedCalls and ownedBy) never completes a caller from the source it started; the connection monitor sourceOwnersMatchContract checks this bookkeeping against a reference captured at start. Neither port has an owners table: the starter awaits the promise its own run returned (TypeScript src/dialcache.ts singleFlightProcess and singleFlightRequestLocal) or its own goroutine result (Go go/engine.go singleFlight), and followers await the flight they looked up by key, so a caller cannot be bound to any source other than the one it started or joined. A wrong-key lookup is the C11 identity fault (M20), not this one." + } }, { "id": "profile-recovery-wrong-snapshot", "contract": "C44", - "source": "formal/dialcache-recovery-read-conformance.qnt", - "model": "formal/dialcache-recovery-connection.qnt", + "source": "formal/kernel/recovery.qnt", + "model": "formal/dialcache-recovery-read-connection.qnt", "invariant": "retainedSnapshotMatchesAcquisition", - "before": "candidateCreated: s.created,", - "after": "candidateCreated: s.created + 1," + "before": "created: created,", + "after": "created: created + 1,", + "reproducer": { + "kind": "exported-regression", + "run": "compressedRecoveryRechecksMaximumAfterDecodeTest", + "model": "formal/dialcache-recovery-read-conformance.qnt", + "failure": "s.o.calls == List(SOURCE_ERROR) and s.io.sourceErrors == List(1) and s.o.recovery == List(\"miss\") and s.o.dumps == 0 and s.o.writes == 0", + "family": "wrong-snapshot-stamp", + "profiles": [ + "formal/dialcache-recovery-read-connection.qnt", + "recovery-read", + "independent", + "recovery" + ], + "exclusions": { + "core": "Does not import the kernel library, so the mutated candidate retention is never executed; its own snapshot capture is stated in its own text.", + "effects": "Classifier NONE: no snapshot is retained, so the mutated candidate retention is never executed.", + "shadow": "Composes remote_io with Recovery::NONE and no caller read: no snapshot is ever retained and no recovery decode is held.", + "admission": "Passes Recovery::NONE at every read settlement, so no snapshot is retained and no recovery decode is held; the mutated text is never executed.", + "local-failure": "Composes the layered traversal without the recovery module (no stale-on-error snapshot is retained), so the mutated candidate retention is never executed.", + "shadow-layers": "Composes recovery on the atomic path, but its guard excludes every stale candidate, so no snapshot holds a candidate and neither its stamp nor its maximum is ever consulted.", + "local-clock": "Composes the local projection without the recovery module, so the mutated candidate retention is never executed.", + "policy": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "layers": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "runtime-boundaries": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "scope": "Composes the request-only projection, which has no remote layer and dispatches no held read.", + "source-budgets": "Composes the local projection, which has no remote layer and dispatches no held read." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M43", + "text": "M43 is the native twin of kernel/recovery.qnt retain stamping the retained candidate one millisecond after the acquired frame, checked by dialcache-recovery-read-connection.qnt retainedSnapshotMatchesAcquisition: both ports retain the stale candidate with a timestamp one millisecond later than the frame they acquired. recovery-read/compressedRecoveryRechecksMaximumAfterDecodeTest, recovery/maximumAgeAfterDecodePreservesSourceTest and the millisecond diagnostic ages are the evidence." + } }, { "id": "recovery-read-wrong-admission-policy", "contract": "C45", - "source": "formal/dialcache-recovery-read-conformance.qnt", - "model": "formal/dialcache-recovery-connection.qnt", + "source": "formal/kernel/remote-io.qnt", + "model": "formal/dialcache-recovery-read-connection.qnt", "invariant": "retainedSnapshotMatchesAcquisition", - "before": "scope: context, acceptedFresh: s.freshMs, acceptedMaximum: s.maximumMs,", - "after": "scope: context, acceptedFresh: s.freshMs, acceptedMaximum: s.maximumMs + 1," - }, - { - "id": "legacy-recovery-wrong-snapshot", - "contract": "C44", - "source": "formal/dialcache-recovery-conformance.qnt", - "model": "formal/dialcache-legacy-recovery-connection.qnt", - "invariant": "flightKeepsAcquiredSnapshot", - "before": "candidateCreated: s.created,", - "after": "candidateCreated: s.created + 1," + "before": "holdRead(registered, state.sources.length(), effectiveTtls(judged.effective, ttls), budget)", + "after": "holdRead(registered, state.sources.length(), { retentionMs: ttls.retentionMs + 1, ...effectiveTtls(judged.effective, ttls) }, budget)", + "reproducer": { + "kind": "exported-regression", + "run": "compressedRecoveryRechecksMaximumAfterDecodeTest", + "model": "formal/dialcache-recovery-read-conformance.qnt", + "failure": "s.o.calls == List(SOURCE_ERROR) and s.io.sourceErrors == List(1) and s.o.recovery == List(\"miss\") and s.o.dumps == 0 and s.o.writes == 0", + "family": "wrong-admission-policy", + "profiles": [ + "formal/dialcache-recovery-read-connection.qnt", + "recovery-read", + "independent", + "recovery", + "effects" + ], + "exclusions": { + "core": "Does not import the kernel library, so the mutated read dispatch is never executed; its own admission capture is stated in its own text.", + "shadow": "Composes remote_io, but every reply leaves the remote layer off, so the caller never dispatches a read; the job's read is the shadow module's.", + "admission": "Composes the held read dispatch, but every read serves a hit (the three keys always hold a frame fresh for the 60 s TTL inside the 600 ms bound) and Recovery::NONE retains no snapshot, so the retention the held read carries reaches only a served job's fill authority, which a served job never writes (measured 2026-09-20: every scheduled invariant and regression passes under the mutant).", + "local-failure": "Composes the layered release with inline remote reads (serving.release), never remote_io's held read dispatch or decode, so the mutated text is never executed.", + "shadow-layers": "Composes the atomic release (remote_writes), never remote_io's held read dispatch or decode, so the mutated text is never executed.", + "local-clock": "Composes the local projection with no remote layer, so remote_io is never executed.", + "policy": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "layers": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "runtime-boundaries": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "scope": "Composes the request-only projection, which has no remote layer and dispatches no held read.", + "source-budgets": "Composes the local projection, which has no remote layer and dispatches no held read." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M45", + "text": "M45 is the native twin of kernel/remote-io.qnt dispatchRead recording a recovery maximum one unit above the reply's on the held read, checked by dialcache-recovery-read-connection.qnt retainedSnapshotMatchesAcquisition: both ports admit the call with a recovery maximum one second above the configured value, one second being the smallest configurable unit. recovery-read/compressedRecoveryRechecksMaximumAfterDecodeTest and independent/independentRecoveryAtCapturedAgeBoundaryTest are the evidence." + } }, { "id": "independent-wrong-admission-policy", "contract": "C45", - "source": "formal/dialcache-independent-conformance.qnt", + "source": "formal/kernel/remote-io.qnt", "model": "formal/dialcache-independent-connection.qnt", "invariant": "independentSnapshotsMatchAcquisition", - "before": "source: NO_SOURCE, phase: READ_PENDING, maxAge: x.maxAge,", - "after": "source: NO_SOURCE, phase: READ_PENDING, maxAge: SHORT_RETENTION_MS," + "before": "holdRead(registered, state.sources.length(), effectiveTtls(judged.effective, ttls), budget)", + "after": "holdRead(registered, state.sources.length(), { retentionMs: 2000, ...effectiveTtls(judged.effective, ttls) }, budget)", + "reproducer": { + "kind": "exported-regression", + "run": "recoveryPolicyIsCapturedPerCallerTest", + "model": "formal/dialcache-independent-conformance.qnt", + "failure": "s.o.calls == List(VALUE_ONE, SOURCE_ERROR) and s.io.sourceErrors == List(0, 2) and s.o.recovery == List(\"served\", \"miss\")", + "family": "wrong-admission-policy", + "profiles": [ + "formal/dialcache-independent-connection.qnt", + "independent", + "recovery-read", + "recovery", + "effects" + ], + "exclusions": { + "core": "Does not import the kernel library, so the mutated read dispatch is never executed; its own admission capture is stated in its own text.", + "shadow": "Composes remote_io, but every reply leaves the remote layer off, so the caller never dispatches a read; the job's read is the shadow module's.", + "admission": "Composes the held read dispatch, but every read serves a hit (the three keys always hold a frame fresh for the 60 s TTL inside the 600 ms bound) and Recovery::NONE retains no snapshot, so the retention the held read carries reaches only a served job's fill authority, which a served job never writes (measured 2026-09-20: every scheduled invariant and regression passes under the mutant).", + "local-failure": "Composes the layered release with inline remote reads (serving.release), never remote_io's held read dispatch or decode, so the mutated text is never executed.", + "shadow-layers": "Composes the atomic release (remote_writes), never remote_io's held read dispatch or decode, so the mutated text is never executed.", + "local-clock": "Composes the local projection with no remote layer, so remote_io is never executed.", + "policy": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "layers": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "runtime-boundaries": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "scope": "Composes the request-only projection, which has no remote layer and dispatches no held read.", + "source-budgets": "Composes the local projection, which has no remote layer and dispatches no held read." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M46", + "text": "M46 is the native twin of kernel/remote-io.qnt dispatchRead recording a fixed retention on the held read instead of the reply's effective TTLs (the maximum its snapshot is retained under): the ports have no constant to substitute for a generic policy, so admitting with the static default while ignoring the runtime overlay is the faithful analog. independent/independentRecoveryAtCapturedAgeBoundaryTest and recovery-read/physicalCapDoesNotClampLogicalRecoveryTest are the expected evidence." + } }, { "id": "independent-wrong-recovered-value", "contract": "C43", - "source": "formal/dialcache-independent-conformance.qnt", + "source": "formal/kernel/remote-io.qnt", "model": "formal/dialcache-independent-connection.qnt", "invariant": "independentRecoveryMatchesContract", - "before": "call.error else load.value)", - "after": "call.error else VALUE_TWO)" - }, - { - "id": "effects-source-wrong-clock", - "contract": "C23", - "source": "formal/dialcache-effects-conformance.qnt", - "model": "formal/dialcache-effects-connection.qnt", - "invariant": "effectsDeadlineMatchesSourceStart", - "before": "activeLoader: x.sources.length(), deadline: x.now + SOURCE_BUDGET_MS,", - "after": "activeLoader: x.sources.length(), deadline: SOURCE_BUDGET_MS," + "before": "if (outcome.served) Payloads::valueOf(snapshot.candidate) else settled.sources.nth(held.flight).result)", + "after": "if (outcome.served) VALUE_TWO else settled.sources.nth(held.flight).result)", + "nativeMutants": { + "kind": "mapped", + "mutant": "M41", + "text": "M41 is the native twin of kernel/remote-io.qnt settleLoad completing a served recovery with a constant other than the retained candidate: both ports decode the retained candidate and then serve an undefined or zero value, the only wrong constant expressible for a generic value type. independent/independentRecoveriesServeDistinctAcquiredSnapshotsTest and recovery/coalescedRecoveryClassifiesAndDecodesOnceTest are the expected evidence." + } }, { "id": "effects-wrong-acceptance-receipt", "contract": "C25", - "source": "formal/dialcache-effects-conformance.qnt", - "model": "formal/dialcache-effects-connection.qnt", - "invariant": "effectsPublicationMatchesAcceptedSource", - "before": "acceptedAt: s.now, acceptedWall: s.wall,", - "after": "acceptedAt: s.now + 1, acceptedWall: s.wall," + "source": "formal/kernel/metrics.qnt", + "model": "formal/dialcache-effects-conformance.qnt", + "invariant": "measurementsAreNonnegative", + "before": "{ dumpStarted: loaders.dumpStarted.append(after.now), ...loaders }", + "after": "{ dumpStarted: loaders.dumpStarted.append(after.now + 1), ...loaders }", + "reproducer": { + "kind": "exported-regression", + "run": "sourceDurationExcludesPublicationTest", + "failure": "amounts(\"fallback\") == List(0) and amounts(\"serialization\") == List(10)", + "family": "measurement-receipt", + "profiles": [ + "effects" + ], + "exclusions": { + "core": "Does not import metrics; the mutated text is never executed.", + "recovery": "Does not import metrics; the mutated text is never executed.", + "policy": "Does not import metrics; the mutated text is never executed.", + "shadow": "Does not import metrics; the mutated text is never executed.", + "scope": "Does not import metrics; the mutated text is never executed.", + "admission": "Does not import metrics; the mutated text is never executed.", + "layers": "Does not import metrics; the mutated text is never executed.", + "independent": "Does not import metrics; the mutated text is never executed.", + "recovery-read": "Does not import metrics; the mutated text is never executed.", + "local-failure": "Does not import metrics; the mutated text is never executed.", + "runtime-boundaries": "Does not import metrics; the mutated text is never executed.", + "shadow-layers": "Does not import metrics; the mutated text is never executed.", + "local-clock": "Does not import metrics; the mutated text is never executed.", + "source-budgets": "Does not import metrics; the mutated text is never executed." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M36", + "text": "M36 is the native twin of kernel/metrics.qnt stamping the dump's hold one millisecond late: the serialization-start stamp both ports take one millisecond late is the only native acceptance receipt, and the dump duration comes out one millisecond short. effects/sourceDurationExcludesPublicationTest (dump amount 0.009 instead of 0.010) is the expected evidence in both ports." + } }, { - "id": "legacy-recovery-strands-followers", + "id": "recovery-strands-followers", "contract": "C24", - "source": "formal/dialcache-recovery-conformance.qnt", - "model": "formal/dialcache-legacy-recovery-connection.qnt", - "invariant": "flightRecoveryMatchesContract", - "before": "...finishPendingCalls(s.o, result)", - "after": "...{ calls: s.o.calls.replaceAt(s.o.calls.indices().filter(i => s.o.calls.nth(i) == CALL_PENDING).fold(s.o.calls.length(), (first, i) => if (i < first) i else first), result), ...s.o }" + "source": "formal/kernel/serving.qnt", + "model": "formal/dialcache-recovery-conformance.qnt", + "invariant": "pendingCallersOwnActiveFlights", + "before": "o: { calls: finishOwnedCalls(state.o.calls, state.owners, index, value), ...state.o },", + "after": "o: { calls: state.o.calls.indices().fold(state.o.calls, (out, c) => if (state.owners.nth(c) == index and c == Flights::ownedBy(state, index).fold(state.owners.length(), (m, x) => if (x < m) x else m)) out.replaceAt(c, value) else out), ...state.o },", + "reproducer": { + "kind": "exported-regression", + "run": "crossRequestRecoveryMemoizesBothScopesTest", + "failure": "s.memo == List(VALUE_ONE, VALUE_ONE) and s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_ONE) and s.d.coalesced == List(\"process\", \"request_local\") and s.o.loads == 1", + "family": "stranded-followers", + "profiles": [ + "recovery", + "layers", + "policy", + "scope", + "runtime-boundaries", + "source-budgets", + "admission", + "effects" + ], + "exclusions": { + "independent": "Coalescing is off in every reply: every flight has one owner, so completing the first owner completes them all.", + "recovery-read": "One execution at a time: no follower ever joins a flight, so every flight has one owner.", + "shadow-layers": "Coalescing is off in every reply: every flight has one owner.", + "core": "Does not import the kernel library, so the mutated completion is never executed; its own completion rule is stated in its own text.", + "shadow": "Coalescing is off and one caller runs at a time: every flight has one owner.", + "local-failure": "Composes serving.complete through local_faults.settle, but admits one source at a time (no call begins while a source is pending), so every flight has one owner and the mutant's minimum-owner fold finishes the same call (measured 2026-09-20: every scheduled invariant and regression passes under the mutant).", + "local-clock": "Composes serving.complete through serving.callLocal, whose inline source settles in the step that starts it, so no flight ever gains a second owner and the mutant's minimum-owner fold finishes the same call (measured 2026-09-20: every scheduled invariant and regression passes under the mutant)." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M34", + "text": "M34 is the native twin of kernel/serving.qnt complete finishing only the flight's first owner instead of every caller it owns: both ports stop followers of a joined flight from receiving the accepted value while errors still propagate. Followers get an undefined or zero value rather than staying pending because a blocked follower would deadlock synctest; recovery/crossRequestRecoveryMemoizesBothScopesTest and coalescedRecoveryClassifiesAndDecodesOnceTest are the evidence." + } }, { "id": "independent-source-wrong-clock", "contract": "C23", - "source": "formal/dialcache-independent-conformance.qnt", + "source": "formal/kernel/deadlines.qnt", "model": "formal/dialcache-independent-connection.qnt", "invariant": "independentSourceOriginsMatchContract", - "before": "startedAt: x.now, settledAt: -1, outcome: CALL_PENDING }),\n timers: x.timers.append({ read: false, index: x.sources.length(), at: x.now + SOURCE_BUDGET_MS }),", - "after": "startedAt: 0, settledAt: -1, outcome: CALL_PENDING }),\n timers: x.timers.append({ read: false, index: x.sources.length(), at: SOURCE_BUDGET_MS })," + "before": "at: state.now + budget }), ...state }", + "after": "at: budget }), ...state }", + "measures": "Repeats the profile-source-wrong-clock fault against the independent connection: the same deadline mutation, reached through the held read and loader deadlines instead of the local source list, must also be caught by that monitor's origins clause.", + "nativeMutants": { + "kind": "mapped", + "mutant": "M33", + "text": "Same native fault as source-deadline-epoch: M33 judges a source settlement against a budget anchored at the clock origin rather than the source start, which is kernel/deadlines.qnt due registering a deadline at the bare budget instead of the current instant plus the budget, so every read and loader deadline is measured from the origin. independent/staggeredSourceStartsKeepIndependentBudgetsTest is the expected evidence in both ports." + } }, { "id": "independent-source-wrong-owner", "contract": "C24", - "source": "formal/dialcache-independent-conformance.qnt", + "source": "formal/kernel/flights.qnt", "model": "formal/dialcache-independent-connection.qnt", "invariant": "independentSourceOriginsMatchContract", - "before": "sources: x.sources.append({ caller: caller, active: true, pending: true,", - "after": "sources: x.sources.append({ caller: 0, active: true, pending: true," + "before": "owners: state.owners.replaceAt(caller, index),", + "after": "owners: state.owners.replaceAt(caller, 0),", + "measures": "Repeats the profile-source-wrong-owner fault against the independent connection: the same registry mutation, reached through remote_io's read dispatch instead of the local release, must also be caught by that monitor's origins clause.", + "nativeMutants": { + "kind": "model-only", + "text": "The fault rewrites kernel/flights.qnt registerSource to record every caller as the owner of flight 0, so the flight a caller's own read dispatched never completes it and flight 0 completes every caller; the connection monitor independentSourceOriginsMatchContract finds no owner for any other flight's loader. With coalesce false each port caller awaits the promise or goroutine of the source it started itself (TypeScript src/dialcache.ts finishRedisChain through callFallback and withFallbackTimeout; Go go/engine.go execution.source returning into GetOrLoad), so no registry exists that could route a settlement to another caller." + } }, { "id": "tracked-read-inclusive-fence", @@ -1551,7 +988,12 @@ "invariant": "servedSnapshotClearedObservedFence", "before": "pure def fenceAllows(created: int, watermark: int): bool = created > watermark", "after": "pure def fenceAllows(created: int, watermark: int): bool = created >= watermark", - "measures": "Repeats the fence-inclusive-timestamp fault against tracked-invalidation: the same shared-rule mutation must also be caught by that model's own invariant." + "measures": "Repeats the fence-inclusive-timestamp fault against tracked-invalidation: the same shared-rule mutation must also be caught by that model's own invariant.", + "nativeMutants": { + "kind": "mapped", + "mutant": "M06", + "text": "Same native fault as fence-inclusive-timestamp: M06 makes the tracked decode fence inclusive in both ports, which is cache-rules.qnt fenceAllows becoming inclusive as measured here by dialcache-tracked-invalidation.qnt servedSnapshotClearedObservedFence. The equal-timestamp tracked decode vector and recovery-read/laterInvalidationDoesNotRewriteObservedMissFenceTest already detect it in both ports." + } }, { "id": "policy-inclusive-remote-freshness", @@ -1567,43 +1009,68 @@ "failure": "s.o.calls == List(VALUE_ONE, CALL_PENDING) and s.o.loaders == 2 and s.o.loads == 0 and s.expires.nth(0) == DEFAULT_RETENTION_MS", "family": "inclusive-freshness-boundary", "profiles": [ - "policy" + "policy", + "independent", + "recovery-read", + "shadow-layers", + "recovery", + "shadow" ], "exclusions": { "core": "Does not import the kernel library, so the mutated freshness judgment is never executed; its own freshness rule is stated in its own text.", - "effects": "Does not import the kernel library, so the mutated freshness judgment is never executed; its own freshness rule is stated in its own text.", - "recovery": "Does not import the kernel library, so the mutated freshness judgment is never executed; its own freshness rule is stated in its own text.", - "shadow": "Does not import the kernel library, so the mutated freshness judgment is never executed; its own freshness rule is stated in its own text.", - "admission": "Does not import the kernel library, so the mutated freshness judgment is never executed; its own freshness rule is stated in its own text.", - "independent": "Does not import the kernel library, so the mutated freshness judgment is never executed; its own freshness rule is stated in its own text.", - "recovery-read": "Does not import the kernel library, so the mutated freshness judgment is never executed; its own freshness rule is stated in its own text.", - "local-failure": "Does not import the kernel library, so the mutated freshness judgment is never executed; its own freshness rule is stated in its own text.", - "shadow-layers": "Does not import the kernel library, so the mutated freshness judgment is never executed; its own freshness rule is stated in its own text.", - "local-clock": "Does not import the kernel library, so the mutated freshness judgment is never executed; its own freshness rule is stated in its own text.", + "effects": "Frames are stamped at the wall clock and read within 600 ms under a 60 s freshness, so no read meets the freshness boundary (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "admission": "Composes the remote freshness judgment, but every frame is stamped at a wall clock that only advances and is read within 600 ms under a 60 s freshness, so no read meets an age boundary or observes a future stamp.", + "local-failure": "Composes the remote freshness judgment, but its wall clock never moves and every frame is stamped at the current instant, so a frame's age is always 0 and never meets the fresh boundary.", + "local-clock": "Composes the local projection with no remote layer, so the freshness judgment is never executed.", "scope": "Composes the request-only projection, which never reads a remote frame.", "source-budgets": "Composes the local projection, which never reads a remote frame.", "layers": "Composes remote frames, but its 60 s freshness is never reached within the bound of 1 ms ticks.", "runtime-boundaries": "Composes remote frames, but no input advances the clock, so no frame ages to its freshness boundary." } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M30", + "text": "M30 is the native twin of kernel/remote-frames.qnt fresh replacing freshAgeAllowed with an inclusive age comparison: both ports serve a remote frame whose age equals the fresh TTL as a hit. Without stale-on-error retention the maximum-age check runs first and masks the flip, as the model's retained masks it when retention equals freshness; policy/exactRemoteFreshBoundaryStartsSourceTest with the 5 s retention fixture and witness policy:remote-exact-fresh-boundary-miss are the evidence." } }, { "id": "shadow-inclusive-c0-freshness", "contract": "C22", - "source": "formal/dialcache-shadow-conformance.qnt", + "source": "formal/kernel/shadow.qnt", "model": "formal/dialcache-shadow-conformance.qnt", "invariant": "c0AcquisitionsRespectFreshness", - "before": "val acquired = if (freshAgeAllowed(s.created, s.wall, FRESHNESS_MS)) snapshot else NO_PAYLOAD", - "after": "val acquired = if (s.created <= s.wall and s.wall - s.created <= FRESHNESS_MS) snapshot else NO_PAYLOAD", + "before": "pure def acquired(observed: Remote::Observed): int = if (observed.value > NO_VALUE) observed.payload else NO_VALUE", + "after": "pure def acquired(observed: Remote::Observed): int = observed.payload", "reproducer": { "kind": "exported-regression", "run": "c0AtExactFreshnessBoundaryRefillsTest", "failure": "s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.loads == 1 and s.o.dumps == 1", "family": "inclusive-freshness-boundary", "profiles": [ - "shadow" + "shadow", + "shadow-layers" ], - "exclusions": {} + "exclusions": { + "core": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "effects": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "scope": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "recovery": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "policy": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "admission": "Every reply enables the remote layer, so no dark C0 read is made and the mutated acquisition is never applied.", + "layers": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "independent": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "recovery-read": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "local-failure": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "runtime-boundaries": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "local-clock": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "source-budgets": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M31", + "text": "M31 is the native twin of kernel/shadow.qnt acquired keeping a dark C0 from a visible frame remote_frames.observe declined for the reply's freshness: both ports acquire a dark C0 frame whose age equals the fresh TTL instead of treating it as expired. shadow/c0AtExactFreshnessBoundaryRefillsTest (the second job acquires C0, decodes it and never fills) is the expected evidence in both ports." } }, { @@ -1613,7 +1080,11 @@ "model": "formal/dialcache-core.qnt", "invariant": "failedLocalReadSkipsReuseAndPublication", "before": "val localHit = localReadEligible and s.localHasValue", - "after": "val localHit = s.callLocal and s.localHasValue" + "after": "val localHit = s.callLocal and s.localHasValue", + "nativeMutants": { + "kind": "model-only", + "text": "The core model keeps localHasValue apart from the environment flag localReadHealthy, so the fault in dialcache-core.qnt localHit serves a value through a read the environment declared failed. In both ports the failed read is the harness seam and yields no value: TypeScript spies LocalCache.prototype.getWithResolvedConfig in test/formal/behavior-driver.ts and throws before delegation, so DialCache.readLocalWithResolvedConfig in src/dialcache.ts returns a disabled result with reason config_error; Go panics in behaviorLocalFaultClock.ElapsedMS (go/behavior_driver_test.go) inside Cache.localGet (go/cache.go) and callSafely returns the zero localResult. No decision point could return the stored value from a failed read; a Go-only bypass of the seam has no TypeScript twin and would test the harness. Moving either seam must re-trigger this review." + } }, { "id": "core-tracked-fallback-warms-local", @@ -1622,7 +1093,12 @@ "model": "formal/dialcache-core.qnt", "invariant": "trackedRemoteFallbackSuppressesLocalPublication", "before": " remoteHasValue: true,\n localWriteFailures: if (localWriteFails and not(s.callTracked)) s.localWriteFailures + 1 else s.localWriteFailures,\n localHasValue: if (localWriteEligible and not(s.callTracked)) true else s.localHasValue,\n localWrites: if (localWriteEligible and not(s.callTracked)) s.localWrites + 1 else s.localWrites,", - "after": " remoteHasValue: true,\n localWriteFailures: if (localWriteFails) s.localWriteFailures + 1 else s.localWriteFailures,\n localHasValue: if (localWriteEligible) true else s.localHasValue,\n localWrites: if (localWriteEligible) s.localWrites + 1 else s.localWrites," + "after": " remoteHasValue: true,\n localWriteFailures: if (localWriteFails) s.localWriteFailures + 1 else s.localWriteFailures,\n localHasValue: if (localWriteEligible) true else s.localHasValue,\n localWrites: if (localWriteEligible) s.localWrites + 1 else s.localWrites,", + "nativeMutants": { + "kind": "mapped", + "mutant": "M10", + "text": "M10 is exactly dialcache-core.qnt finishRemotePublication removing the not-tracked condition from its local write conjuncts: both ports publish an unvalidated tracked source value directly into local storage. layers/trackedSourceWaitsForValidatedReadToWarmLocalTest and recovery-read/trackedSourceNeedsRemoteValidationBeforeLocalReuseTest already detect it in both ports." + } }, { "id": "runtime-policy-coalesce-defaults-off", @@ -1631,7 +1107,12 @@ "model": "formal/dialcache-runtime-policy.qnt", "invariant": "featureLibraryDefaults", "before": "coalesce: inherit(runtime.coalesce, baseline.coalesce, 1),", - "after": "coalesce: inherit(runtime.coalesce, baseline.coalesce, 0)," + "after": "coalesce: inherit(runtime.coalesce, baseline.coalesce, 0),", + "nativeMutants": { + "kind": "mapped", + "mutant": "M28", + "text": "M28 is the native twin of dialcache-runtime-policy.qnt resolve changing the coalesce library default from on to off: both ports treat an omitted static coalesce leaf as no sharing while an explicit true still shares. runtime-boundaries/omittedRampAndSharingUseLibraryDefaultsTest and source-budgets/lateFollowerUsesLeadersRemainingBudgetTest are the expected evidence in both ports." + } }, { "id": "runtime-policy-physical-ttl-ignores-recovery", @@ -1640,7 +1121,12 @@ "model": "formal/dialcache-runtime-policy.qnt", "invariant": "existingRemoteEntryKeepsPhysicalTtl", "before": " remotePhysicalTtlAtInsert:\n if (s.snapshot.recoveryAge > s.snapshot.remoteTtl) s.snapshot.recoveryAge\n else s.snapshot.remoteTtl,", - "after": " remotePhysicalTtlAtInsert: s.snapshot.remoteTtl," + "after": " remotePhysicalTtlAtInsert: s.snapshot.remoteTtl,", + "nativeMutants": { + "kind": "mapped", + "mutant": "M32", + "text": "M32 is the native twin of dialcache-runtime-policy.qnt insertRemoteEntry setting the physical TTL to the fresh TTL instead of the larger of recovery age and fresh TTL: both ports write every remote frame with the fresh TTL, ignoring stale-on-error retention. policy/eachSourceKeepsPublicationPolicyTest and every recovery-profile write are the evidence, since the drivers compare writeTtls on each step." + } }, { "id": "stale-recovery-inclusive-served-maximum", @@ -1649,7 +1135,12 @@ "model": "formal/dialcache-stale-recovery.qnt", "invariant": "servedStaleIsStrictlyWithinMaxAge", "before": "recoveryAgeAllowed(s.candidateCreatedAt, s.now, MAX_RECOVERY_AGE)", - "after": "recoveryAgeAllowed(s.candidateCreatedAt, s.now, MAX_RECOVERY_AGE + 1)" + "after": "recoveryAgeAllowed(s.candidateCreatedAt, s.now, MAX_RECOVERY_AGE + 1)", + "nativeMutants": { + "kind": "mapped", + "mutant": "M01", + "text": "M01 makes the post-decode serving maximum inclusive in both ports, the boundary dialcache-stale-recovery.qnt candidateWithinRecoveryAge widens by one to gate the serve-stale transitions. recovery/maximumAgeAfterDecodePreservesSourceTest and witness recovery:exact-maximum-after-decode-rejects already detect it in both ports." + } }, { "id": "stale-recovery-candidate-stamped-at-read", @@ -1658,25 +1149,91 @@ "model": "formal/dialcache-stale-recovery.qnt", "invariant": "retainedCandidateWasEligible", "before": "candidateCreatedAt: if (candidateAtInitialRead) s.frameCreatedAt else s.candidateCreatedAt,", - "after": "candidateCreatedAt: if (candidateAtInitialRead) s.now else s.candidateCreatedAt," + "after": "candidateCreatedAt: if (candidateAtInitialRead) s.now else s.candidateCreatedAt,", + "nativeMutants": { + "kind": "mapped", + "mutant": "M44", + "text": "M44 is the native twin of dialcache-stale-recovery.qnt performInitialRead stamping the candidate with the read time instead of the frame's creation: both ports retain the stale candidate with its timestamp replaced by the wall clock at read time. M43 shares the anchor with a different wrong behavior and stays distinct; recovery/maximumAgeAfterDecodePreservesSourceTest, recovery-read/compressedRecoveryRechecksMaximumAfterDecodeTest and witness recovery:expired-during-decode are the evidence." + } }, { - "id": "shadow-validation-fenced-fill-writes", + "id": "shadow-fenced-fill-writes", "contract": "C53", - "source": "formal/dialcache-shadow-validation.qnt", - "model": "formal/dialcache-shadow-validation.qnt", - "invariant": "fencedFillDoesNotWrite", - "before": " fillWrites: if (s.observedFencePresent and not(s.fillTimestampClearsFence))\n s.fillWrites else s.fillWrites + 1,", - "after": " fillWrites: s.fillWrites + 1," + "source": "formal/kernel/remote-writes.qnt", + "model": "formal/dialcache-shadow-conformance.qnt", + "invariant": "fillsClearTheirFence", + "before": "if (not(Remote::writeAllowed(state, held.fence))) dropped", + "after": "if (false) dropped", + "nativeMutants": { + "kind": "mapped", + "mutant": "M04", + "text": "M04 is the native twin of kernel/remote-writes.qnt dispatch skipping the fence recheck at dump release: both ports skip the post-serialization fence recheck in the write routine the shadow fill also uses, so a fenced dark fill writes and reports filled instead of fill_fenced. shadow/fenceRejudgedAtDumpReleaseAfterRollbackTest (a dump released after a wall rollback below the fence dispatches no write) is the expected evidence in both ports.", + "crossContract": "M04 skips the post-serialization fence in the caller write routine (C34.second-fence); the shadow fill reaches the same line through putForShadow (TS) and putRemote (Go), so under it a fenced dark fill writes and reports filled instead of fill_fenced (witness shadow:outcome:fill_fenced)." + }, + "reproducer": { + "kind": "exported-regression", + "run": "fenceRejudgedAtDumpReleaseAfterRollbackTest", + "failure": "s.o.shadow == List(\"fill_fenced\") and s.o.writes == 0", + "family": "fence-recheck-at-dispatch", + "profiles": [ + "shadow", + "effects" + ], + "exclusions": { + "core": "Does not compose remote_writes, so the mutated dispatch is never executed.", + "scope": "Does not compose remote_writes, so the mutated dispatch is never executed.", + "recovery": "Does not compose remote_writes, so the mutated dispatch is never executed.", + "policy": "Does not compose remote_writes, so the mutated dispatch is never executed.", + "admission": "Composes the held shadow lifecycle for served jobs, which always carry a C0 and never fill, so no dump is ever held and the mutated dispatch is never executed.", + "layers": "Does not compose remote_writes, so the mutated dispatch is never executed.", + "independent": "Does not compose remote_writes, so the mutated dispatch is never executed.", + "recovery-read": "Does not compose remote_writes, so the mutated dispatch is never executed.", + "local-failure": "Does not compose remote_writes, so the mutated dispatch is never executed.", + "runtime-boundaries": "Does not compose remote_writes, so the mutated dispatch is never executed.", + "shadow-layers": "Composes remote_writes::dispatch but never raises a watermark (no invalidate input), so every fence is NO_FENCE and the recheck never refuses a write.", + "local-clock": "Does not compose remote_writes, so the mutated dispatch is never executed.", + "source-budgets": "Does not compose remote_writes, so the mutated dispatch is never executed." + } + } }, { - "id": "shadow-validation-fill-before-source", + "id": "shadow-fill-before-source", "contract": "C49", - "source": "formal/dialcache-shadow-validation.qnt", - "model": "formal/dialcache-shadow-validation.qnt", - "invariant": "comparisonAndFillWaitForSource", - "before": "s' = { c0: C0Miss, phase: if (s.sourceAccepted) Filling else WaitingForSource, ...s },", - "after": "s' = { c0: C0Miss, phase: Filling, ...s }," + "source": "formal/kernel/shadow.qnt", + "model": "formal/dialcache-shadow-conformance.qnt", + "invariant": "fillsRequireMissAndAcceptedSource", + "before": "if (sourceOf(waiting, job).result != CALL_PENDING) settleJobHeld(waiting, layout, source) else waiting", + "after": "if (sourceOf(waiting, job).result != CALL_PENDING) settleJobHeld(waiting, layout, source) else fill(waiting, layout, jobOf(waiting, source))", + "nativeMutants": { + "kind": "mapped", + "mutant": "M47", + "text": "M47 is the native twin of kernel/shadow.qnt settleJobRead filling at once when the job's source is still pending instead of waiting for it: both ports continue dark shadow work without waiting for the caller's source, comparing and filling with an undefined or zero value. shadow/darkReadBeforeSourceWaitsForItTest (no dump while the loader is held) and shadow-layers/darkSourcePublishesLocalBeforeShadowWriteTest are the expected evidence." + }, + "reproducer": { + "kind": "exported-regression", + "run": "darkReadBeforeSourceWaitsForItTest", + "failure": "s.o.calls == List(CALL_PENDING) and s.o.shadow == List() and s.o.dumps == 0 and s.o.loads == 0", + "family": "fill-before-source", + "profiles": [ + "shadow" + ], + "exclusions": { + "core": "Does not compose the shadow module, so the mutated C0 read settlement is never executed.", + "effects": "Does not compose the shadow module, so the mutated C0 read settlement is never executed.", + "scope": "Does not compose the shadow module, so the mutated C0 read settlement is never executed.", + "recovery": "Does not compose the shadow module, so the mutated C0 read settlement is never executed.", + "policy": "Does not compose the shadow module, so the mutated C0 read settlement is never executed.", + "admission": "Composes the held shadow lifecycle for served jobs only, whose C0 is the payload the hit served: no job ever holds a C0 read, so the acquisition arm the fault mutates is never executed.", + "layers": "Does not compose the shadow module, so the mutated C0 read settlement is never executed.", + "independent": "Does not compose the shadow module, so the mutated C0 read settlement is never executed.", + "recovery-read": "Does not compose the shadow module, so the mutated C0 read settlement is never executed.", + "local-failure": "Does not compose the shadow module, so the mutated C0 read settlement is never executed.", + "runtime-boundaries": "Does not compose the shadow module, so the mutated C0 read settlement is never executed.", + "shadow-layers": "Composes the atomic lifecycle: the dark C0 read is made at the release and the job waits in the registry until remote_writes::settle, so the held read settlement the fault mutates is never executed.", + "local-clock": "Does not compose the shadow module, so the mutated C0 read settlement is never executed.", + "source-budgets": "Does not compose the shadow module, so the mutated C0 read settlement is never executed." + } + } }, { "id": "redis-protocol-inclusive-fence", @@ -1685,7 +1242,12 @@ "model": "formal/dialcache-redis-protocol.qnt", "invariant": "fenceCanPrecedeEncodingError", "before": "st.watermarkState == ValidWatermark and not(fenceAllows(st.frameTimestamp, st.watermarkValue)))", - "after": "st.watermarkState == ValidWatermark and st.frameTimestamp < st.watermarkValue)" + "after": "st.watermarkState == ValidWatermark and st.frameTimestamp < st.watermarkValue)", + "nativeMutants": { + "kind": "mapped", + "mutant": "M06", + "text": "M06 makes the tracked decode fence inclusive in both ports, the exact site of dialcache-redis-protocol.qnt classify inlining a strict timestamp-below-watermark test in place of not fenceAllows in its WatermarkFenced branch. The generated tracked decode vectors and the redis-protocol fence-before-encoding-error ordering vectors already detect it in both ports." + } }, { "id": "redis-protocol-untracked-fence", @@ -1694,7 +1256,12 @@ "model": "formal/dialcache-redis-protocol.qnt", "invariant": "untrackedDecodingIgnoresWatermarks", "before": " else if (st.tracked and st.watermarkReply == BufferReply and\n st.watermarkState == ValidWatermark", - "after": " else if (st.watermarkReply == BufferReply and\n st.watermarkState == ValidWatermark" + "after": " else if (st.watermarkReply == BufferReply and\n st.watermarkState == ValidWatermark", + "nativeMutants": { + "kind": "mapped", + "mutant": "M52", + "text": "M52 is the native twin of dialcache-redis-protocol.qnt classify dropping the tracked condition from its WatermarkFenced branch: both ports read and apply the entity watermark fence on untracked keys, the TypeScript twin one step earlier at read-request construction because its untracked decoder receives no watermark. Go TestProtocolDecoders untracked vectors (345 and its siblings) and the TypeScript witness layers:untracked-ignores-watermark plus layers replays are the expected evidence." + } }, { "id": "frame-vectors-inclusive-fence", @@ -1703,7 +1270,12 @@ "model": "formal/dialcache-frame-vectors.qnt", "invariant": "trackedHitsStrictlyClearValidFence", "before": "else if (request.tracked and fence >= 0 and not(fenceAllows(timestamp, fence)))", - "after": "else if (request.tracked and fence >= 0 and timestamp < fence)" + "after": "else if (request.tracked and fence >= 0 and timestamp < fence)", + "nativeMutants": { + "kind": "mapped", + "mutant": "M06", + "text": "M06 makes the tracked decode fence inclusive in both ports, the fault dialcache-frame-vectors.qnt decode inlines as a strict timestamp-below-fence test. The exported quint-frame-vectors trackedDecodeVectors are the very rows that detect M06 in both ports." + } }, { "id": "invalidation-transition-cutoff-moves-backwards", @@ -1730,7 +1302,12 @@ "model": "formal/dialcache-key-protocol.qnt", "invariant": "keyAcceptanceRespectsTextAndHashTagDomain", "before": "not(key.tracked) or (not(containsBrace(key.keyType)) and not(containsBrace(key.id)))", - "after": "not(containsBrace(key.keyType)) and not(containsBrace(key.id))" + "after": "not(containsBrace(key.keyType)) and not(containsBrace(key.id))", + "nativeMutants": { + "kind": "mapped", + "mutant": "M50", + "text": "M50 is the native twin of dialcache-key-protocol.qnt validKey dropping its untracked disjunct: both ports reject braces in keyType and id for untracked keys as well as tracked ones. quint-key-vectors 050, 052, 062, 064, 411 and 413 (untracked keys with braces expected valid) are the expected evidence in both ports." + } }, { "id": "cohort-inclusive-threshold", @@ -1739,7 +1316,12 @@ "model": "formal/dialcache-key-protocol.qnt", "invariant": "cohortNumeratorsAreUnsignedAndBoundariesStrict", "before": "pure def cohortAdmits(sample: int, threshold: int): bool =\n sample < threshold", - "after": "pure def cohortAdmits(sample: int, threshold: int): bool =\n sample <= threshold" + "after": "pure def cohortAdmits(sample: int, threshold: int): bool =\n sample <= threshold", + "nativeMutants": { + "kind": "mapped", + "mutant": "M51", + "text": "M51 is the native twin of cohort-boundaries.qnt cohortAdmits becoming inclusive: both ports admit a key whose cohort sample equals the configured ramp. The rampVectors pin hash samples, not admission, so detection is behavioral through runtime-boundaries/localCohortEqualityBypassesBeforeAboveSampleCachesTest and remoteCohortEqualityBypassesBeforeAboveSampleCachesTest, whose fixture ramps equal the driver key's FNV numerators." + } }, { "id": "envelope-vectors-tie-compresses", @@ -1748,7 +1330,12 @@ "model": "formal/dialcache-envelope-vectors.qnt", "invariant": "compressionUsesByteThresholdAndStrictShrink", "before": "else if (codecBytes + 1 >= escaped.length()) { outcome: \"not_smaller\", ...uncompressed }", - "after": "else if (codecBytes + 1 > escaped.length()) { outcome: \"not_smaller\", ...uncompressed }" + "after": "else if (codecBytes + 1 > escaped.length()) { outcome: \"not_smaller\", ...uncompressed }", + "nativeMutants": { + "kind": "mapped", + "mutant": "M55", + "text": "M55 is the native twin of dialcache-envelope-vectors.qnt selectWrite treating a size tie as smaller: both ports store a compressed payload whose marked size ties the escaped raw size. The compressionWriteVectors tie rows, which record per-binding codec sizes, are the expected evidence in both ports." + } }, { "id": "envelope-vectors-escape-misses-binary-marker", @@ -1757,7 +1344,12 @@ "model": "formal/dialcache-envelope-vectors.qnt", "invariant": "escapeConsumesExactlyOnePrefix", "before": "if (raw.length() > 1 and raw.nth(1) <= 2)", - "after": "if (raw.length() > 1 and raw.nth(1) <= 1)" + "after": "if (raw.length() > 1 and raw.nth(1) <= 1)", + "nativeMutants": { + "kind": "mapped", + "mutant": "M53", + "text": "M53 is the native twin of dialcache-envelope-vectors.qnt readEnvelope lowering the escapable marker range to exclude the binary-zstd marker: both ports leave the escape prefix in place before an escaped binary-zstd marker. Envelope vectors 008, 003 and 013 are the expected evidence in both ports." + } }, { "id": "conformance-local-hit-returns-source", @@ -1766,7 +1358,12 @@ "model": "formal/dialcache-conformance.qnt", "invariant": "servedLayerValueMatchesCache", "before": " lastResult: s.localValue,", - "after": " lastResult: s.sourceVersion," + "after": " lastResult: s.sourceVersion,", + "nativeMutants": { + "kind": "mapped", + "mutant": "M17", + "text": "M17 is the native reading of dialcache-conformance.qnt localCall recording the environment's sourceVersion as the result of a local hit: no port can read that version without invoking the loader, so the twin is a hit that returns something other than the stored value while loader counts stay unchanged. core/localValueSurvivesSourceChangeTest detects both ports in the generated cohort." + } }, { "id": "conformance-remote-miss-skips-publication", @@ -1775,25 +1372,90 @@ "model": "formal/dialcache-conformance.qnt", "invariant": "servedLayerValueMatchesCache", "before": " remoteLoaderCalls: s.remoteLoaderCalls + 1,\n remoteReadable: true,\n remoteValue: s.sourceVersion,", - "after": " remoteLoaderCalls: s.remoteLoaderCalls + 1,\n remoteValue: s.sourceVersion," + "after": " remoteLoaderCalls: s.remoteLoaderCalls + 1,\n remoteValue: s.sourceVersion,", + "nativeMutants": { + "kind": "mapped", + "mutant": "M38", + "text": "M38 is the native twin of dialcache-conformance.qnt remoteCall dropping remoteReadable from its miss branch: both ports skip the Redis publication after a semantic miss, including a decode failure, so only retained-candidate misses refill. core/invalidationRefillsFromCurrentSourceTest (redisWrites 3 and a later hit) and effects/nullReplyRefillsAndIsReadableTest are the expected evidence in both ports." + } }, { "id": "effects-fenced-source-publishes", "contract": "C34", - "source": "formal/dialcache-effects-conformance.qnt", + "source": "formal/kernel/serving.qnt", "model": "formal/dialcache-effects-conformance.qnt", "invariant": "writeRequiresAcceptedSource", - "before": "else if (s.refill == REFILL_DENIED or not(fenceAllows(s.wall, s.observedFence))) {", - "after": "else if (s.refill == REFILL_DENIED) {" + "before": "accepted(value) and refillAllowed(state, source.retentionMs, source.fence)", + "after": "accepted(value) and source.retentionMs > 0", + "reproducer": { + "kind": "exported-regression", + "run": "absentReplyWithFutureFenceBlocksRefillTest", + "failure": "s.o.calls == List(VALUE_ONE) and s.o.dumps == 0 and s.o.writes == 0", + "family": "first-fence-check", + "profiles": [ + "effects", + "recovery", + "recovery-read" + ], + "exclusions": { + "core": "Does not import the kernel library, so the mutated refill authority is never executed; its own fence check is stated in its own text.", + "policy": "Composes refills, but no scheduled regression and no sampled history at 2000 x 40 settles an accepted source while its fence is at or ahead of the wall clock (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "shadow": "Every reply leaves the remote layer off, so no caller source refills; the dark fill judges its fence through refillAllowed, which the mutant leaves intact.", + "scope": "The request-only projection never refills the remote layer, so refills is never judged.", + "admission": "Every read serves a hit and a served job's detached source never fills, so refills is never judged for a refill.", + "layers": "Composes refills, but no scheduled regression and no sampled history at 2000 x 40 settles an accepted source while its fence is at or ahead of the wall clock (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "independent": "Composes refills, but no scheduled regression and no sampled history at 2000 x 40 settles an accepted source while its fence is at or ahead of the wall clock (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "local-failure": "Composes refills, but no scheduled regression and no sampled history at 2000 x 40 settles an accepted source while its fence is at or ahead of the wall clock (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "runtime-boundaries": "Composes refills, but no scheduled regression and no sampled history at 2000 x 40 settles an accepted source while its fence is at or ahead of the wall clock (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "shadow-layers": "Composes refills, but no scheduled regression and no sampled history at 2000 x 40 settles an accepted source while its fence is at or ahead of the wall clock (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "local-clock": "The local projection has no remote layer, so refills is never judged.", + "source-budgets": "The local projection never refills the remote layer, so refills is never judged." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M39", + "text": "M39 is the native twin of kernel/serving.qnt refills dropping the fence half of refillAllowed: both ports drop the pre-serialization fence check, so a source accepted behind an observed fence is serialized while the post-serialization recheck still blocks the write. effects/absentReplyWithFutureFenceBlocksRefillTest (dumps 0 becomes 1) and witness effects:normalized-fence-blocks-publication are the expected evidence in both ports." + } }, { "id": "effects-late-source-accepted", "contract": "C25", - "source": "formal/dialcache-effects-conformance.qnt", + "source": "formal/kernel/deadlines.qnt", "model": "formal/dialcache-effects-conformance.qnt", - "invariant": "writeRequiresAcceptedSource", - "before": " else if (not(deadlinePendingAt(s.now, s.deadline))) {\n phase: IDLE, calls: finishPendingCalls(s.calls, CALL_TIMEOUT), ...measured\n }", - "after": " else if (false) {\n phase: IDLE, calls: finishPendingCalls(s.calls, CALL_TIMEOUT), ...measured\n }" + "invariant": "acceptedSourcesSettledBeforeTheirDeadline", + "before": "else if (reached(state, SOURCE, ordinal)) DEADLINE_ERROR else value", + "after": "else if (false) DEADLINE_ERROR else value", + "reproducer": { + "kind": "exported-regression", + "run": "lateSourceResultIsADeadlineErrorTest", + "failure": "s.o.calls == List(DEADLINE_ERROR) and s.o.dumps == 0 and errorReasons == List(\"fallback\") and amounts(\"fallback\") == List(10)", + "family": "late-acceptance", + "profiles": [ + "effects", + "shadow" + ], + "exclusions": { + "core": "Does not import the kernel library, so the mutated arrival is never executed; its own deadline rule is stated in its own text.", + "recovery": "Composes the budgeted lifecycle, but no scheduled regression and no sampled history at 2000 x 40 resolves a loader after its deadline was reached undelivered: its late results are timer-delivered or drained (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "policy": "Does not compose the deadlines module: its sources have no budget, so arrival never runs.", + "scope": "Composes the request-only projection, which registers no deadline (deadlines reaches its closure through diagnostics alone), so arrival never runs.", + "admission": "Composes the budgeted lifecycle, but no scheduled regression and no sampled history at 2000 x 40 resolves a loader after its deadline was reached undelivered: its late results are timer-delivered or drained (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "layers": "Does not compose the deadlines module: its sources have no budget, so arrival never runs.", + "independent": "Composes the budgeted lifecycle, but no scheduled regression and no sampled history at 2000 x 40 resolves a loader after its deadline was reached undelivered: its late results are timer-delivered or drained (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "recovery-read": "Does not compose the deadlines module: its sources have no budget, so arrival never runs.", + "local-failure": "Does not compose the deadlines module: its sources have no budget, so arrival never runs.", + "runtime-boundaries": "Does not compose the deadlines module: its sources have no budget, so arrival never runs.", + "shadow-layers": "Composes the budgeted lifecycle, but no scheduled regression and no sampled history at 2000 x 40 resolves a loader after its deadline was reached undelivered: its late results are timer-delivered or drained (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "local-clock": "Does not compose the deadlines module: its sources have no budget, so arrival never runs.", + "source-budgets": "Its late settlements are delivered deadlines: arrival never finds a reached deadline undelivered (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant)." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M03", + "text": "M03 is the native twin of kernel/deadlines.qnt arrival accepting a result whose deadline was reached undelivered: both ports accept an externally settled result after its elapsed deadline when the timer has not run. effects/lateSourceResultIsADeadlineErrorTest and the late-resolve and late-reject witnesses are the expected evidence in both ports." + } }, { "id": "scope-late-source-repopulates-closed-memo", @@ -1802,7 +1464,11 @@ "model": "formal/dialcache-scope-conformance.qnt", "invariant": "closedScopesHaveNoMemo", "before": "if (slot < 0 or state.closed.nth(slot / keysPerScope)) state else {", - "after": "if (slot < 0) state else {" + "after": "if (slot < 0) state else {", + "nativeMutants": { + "kind": "unobservable", + "text": "The closure guard on the memo write (TypeScript RequestLocalCache.set in src/context.ts; Go the owner-live check before the memo write in the run closure of go/engine.go GetOrLoad) is the native line of kernel/request-memo.qnt memoize memoizing into a closed scope, but removing it changes no public history: both ports re-check closure on the memo read (TypeScript RequestLocalCache.read in src/context.ts; the same Go run closure serves the memo only while the owner is live) and bypass closed scopes at admission, mirroring the kernel's admission bypass. Measured once while this table was authored, the edit survived every scope and layers history in both ports; the model detects the fault only through the state invariant closedScopesHaveNoMemo, so the challenge is unobservable rather than mapped." + } }, { "id": "scope-source-error-memoized", @@ -1811,7 +1477,12 @@ "model": "formal/dialcache-scope-conformance.qnt", "invariant": "memoFollowsLatestSuccessfulSettlement", "before": "if (not(accepted(value))) settled else Flights::ownedBy(state, index).fold(settled, (out, call) =>", - "after": "Flights::ownedBy(state, index).fold(settled, (out, call) =>" + "after": "Flights::ownedBy(state, index).fold(settled, (out, call) =>", + "nativeMutants": { + "kind": "mapped", + "mutant": "M25", + "text": "M25 is the native form of kernel/serving.qnt finish memoizing a non-accepted value by dropping its accepted guard: neither port's memo can hold an error, so the request in-flight registry is the only request-scoped error carrier, and keeping a rejected request-local flight registered makes a later same-scope caller receive the rejection instead of retrying. scope/rejectedFlightAllowsRetryTest and the witnesses scope:rejected-flight-retry and shared-rejection are the expected evidence." + } }, { "id": "scope-nested-close-evicts-outer-memo", @@ -1828,51 +1499,106 @@ "family": "nested-close-evicts-outer-memo", "profiles": [ "scope", - "layers" + "layers", + "recovery-read" ], "exclusions": { "core": "Composes no kernel module, so request_memo.closeScope is never executed.", - "effects": "Composes no kernel module, so request_memo.closeScope is never executed.", - "recovery": "Composes no kernel module, so request_memo.closeScope is never executed.", + "effects": "No request scope (persistentContexts 0), so request_memo.closeScope never runs.", + "recovery": "Closes a scope only through closeScope while the other scope's memo is empty in every scheduled history, so clearing every row clears exactly the closing scope's (measured 2026-09-20).", "policy": "Has no request scopes (persistentContexts 0 and no closeScope input), so the memo fold the fault mutates is never executed.", - "shadow": "Composes no kernel module, so request_memo.closeScope is never executed.", - "admission": "Composes no kernel module, so request_memo.closeScope is never executed.", - "independent": "Composes no kernel module, so request_memo.closeScope is never executed.", - "recovery-read": "Composes no kernel module, so request_memo.closeScope is never executed.", - "local-failure": "Composes no kernel module, so request_memo.closeScope is never executed.", + "shadow": "No request scope (persistentContexts 0) and no closeScope input.", + "admission": "No scope is persistent (persistentContexts 0) and no input closes one, so request_memo.closeScope is never executed.", + "independent": "Composes the layered traversal with persistentContexts 0 and no closeScope input, so request_memo.closeScope is never executed.", + "local-failure": "Composes the request memo but has no closeScope input.", "runtime-boundaries": "One persistent scope owns the only memo row, so a close that clears every row clears exactly its own.", - "shadow-layers": "Composes no kernel module, so request_memo.closeScope is never executed.", - "local-clock": "Composes no kernel module, so request_memo.closeScope is never executed.", + "shadow-layers": "Composes the request memo but has no closeScope input.", + "local-clock": "Composes the local projection with no request scope (persistentContexts 0) and no closeScope input.", "source-budgets": "Composes the local projection with no request scope: no input opens or closes a scope and every reply disables the request layer, so request_memo.closeScope is never executed." } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M15", + "text": "M15 is the native reading of kernel/request-memo.qnt closeScope clearing every memo row instead of only the closing context's: a completed nested enable evicts the enclosing request's memo while the outer scope stays open. A nested handle can only reach its own enclosing row, so the port fault evicts one outer row rather than all rows; scope/nestedCloseAndDisabledBypassKeepOuterMemoTest step 11 detects both ports." } }, { "id": "admission-duplicate-key-admitted", "contract": "C54", - "source": "formal/dialcache-admission-conformance.qnt", + "source": "formal/kernel/shadow.qnt", "model": "formal/dialcache-admission-conformance.qnt", "invariant": "oneJobPerIdentity", - "before": "val admitted = entry.selected and not(duplicate or full)", - "after": "val admitted = entry.selected and not(full)" + "before": "duplicate(state, instance, key) or full(state, instance, capacity)", + "after": "full(state, instance, capacity)", + "reproducer": { + "kind": "exported-regression", + "run": "duplicateDropsBeforeCapacityIsFullTest", + "failure": "s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loaders == 1 and s.o.shadow == List(\"dropped\")", + "family": "duplicate-key-admitted", + "profiles": [ + "admission", + "shadow-layers" + ], + "exclusions": { + "core": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "effects": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "recovery": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "policy": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "shadow": "Composes the shadow module, but admits one job at a time (a call begins only after the previous job drained), so busy is judged against an empty registry and the mutated judgment never changes an admission.", + "scope": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "layers": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "independent": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "recovery-read": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "local-failure": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "runtime-boundaries": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "local-clock": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "source-budgets": "Does not compose the shadow module, so the mutated admission judgment is never executed." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M48", + "text": "M48 is the native twin of kernel/shadow.qnt busy judged without its duplicate disjunct (admitServed and the dark arm of admitJobs both consult it): both ports admit a shadow job for an identity that already has a live job, subject only to capacity. admission/duplicateDropsBeforeCapacityIsFullTest and shadow-layers/deduplicatedJobKeepsIndependentCallerSourcesTest are the expected evidence in both ports." + } }, { "id": "admission-capacity-off-by-one", "contract": "C54", - "source": "formal/dialcache-admission-conformance.qnt", + "source": "formal/kernel/shadow.qnt", "model": "formal/dialcache-admission-conformance.qnt", "invariant": "capacityIsPerInstance", - "before": " ).size() >= JOBS_PER_INSTANCE\n val admitted", - "after": " ).size() > JOBS_PER_INSTANCE\n val admitted", + "before": "state.jobs.select(job => sourceOf(state, job).instance == instance).length() >= capacity", + "after": "state.jobs.select(job => sourceOf(state, job).instance == instance).length() > capacity", "reproducer": { "kind": "exported-regression", "run": "fullInstanceDoesNotBlockOtherInstanceTest", "failure": "s.o.loaders == 2 and s.o.shadow == List(\"dropped\")", "family": "capacity-off-by-one", "profiles": [ - "admission" + "admission", + "shadow-layers" ], - "exclusions": {} + "exclusions": { + "core": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "effects": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "recovery": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "policy": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "shadow": "Composes the shadow module, but admits one job at a time (a call begins only after the previous job drained), so full is judged against an empty registry and the mutated comparison never changes an admission.", + "scope": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "layers": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "independent": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "recovery-read": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "local-failure": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "runtime-boundaries": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "local-clock": "Does not compose the shadow module, so the mutated admission judgment is never executed.", + "source-budgets": "Does not compose the shadow module, so the mutated admission judgment is never executed." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M49", + "text": "M49 is the native twin of kernel/shadow.qnt full comparing the instance's live jobs strictly against its capacity: both ports admit one shadow job beyond the per-instance capacity. admission/fullInstanceDoesNotBlockOtherInstanceTest and shadow-layers/fullMixedInstanceDoesNotBlockAnotherInstanceTest are the expected evidence in both ports." } }, { @@ -1882,7 +1608,12 @@ "model": "formal/dialcache-layers-conformance.qnt", "invariant": "sourceOwnershipNeverCrossesKeyOrInstance", "before": "pure def identity(layout: Layout, call: Call): int = call.instance * layout.keysPerInstance + call.key", - "after": "pure def identity(layout: Layout, call: Call): int = call.key" + "after": "pure def identity(layout: Layout, call: Call): int = call.key", + "nativeMutants": { + "kind": "mapped", + "mutant": "M20", + "text": "M20 is the native twin of kernel/serving.qnt identity dropping the instance term from the flight identity: both ports register process flights in one process-wide registry, so a pending flight on one instance is joined from another. The C11.distinct-keys quintReplay survives, so detection rests on sampled layers histories and the witness layers:different-instances-own-distinct-flights credited under C08.instance-capacity." + } }, { "id": "layers-late-memo-into-closed-scope", @@ -1892,61 +1623,262 @@ "invariant": "closedScopesHaveNoMemo", "before": "if (slot < 0 or state.closed.nth(slot / keysPerScope)) state else {", "after": "if (slot < 0) state else {", - "measures": "The layers model measures this fault across keys and instances; scope-late-source-repopulates-closed-memo measures it where nested handles memoize into their outer lifetime's row and a replacement request opens beside a closed root." + "measures": "The layers model measures this fault across keys and instances; scope-late-source-repopulates-closed-memo measures it where nested handles memoize into their outer lifetime's row and a replacement request opens beside a closed root.", + "nativeMutants": { + "kind": "unobservable", + "text": "The closure guard on the memo write (TypeScript RequestLocalCache.set in src/context.ts; Go the owner-live check before the memo write in the run closure of go/engine.go GetOrLoad) is the native line of kernel/request-memo.qnt memoize memoizing into a closed scope, but removing it changes no public history: both ports re-check closure on the memo read (TypeScript RequestLocalCache.read in src/context.ts; the same Go run closure serves the memo only while the owner is live) and bypass closed scopes at admission, mirroring the kernel's admission bypass. Measured once while this table was authored, the edit survived every scope and layers history in both ports; the model detects the fault only through the state invariant closedScopesHaveNoMemo, so the challenge is unobservable rather than mapped." + } }, { "id": "independent-fresh-frame-retained", "contract": "C40", - "source": "formal/dialcache-independent-conformance.qnt", + "source": "formal/kernel/recovery.qnt", "model": "formal/dialcache-independent-conformance.qnt", "invariant": "retainedSnapshotsWereEligible", - "before": "retainedAgeAllowed(x.created, x.wall, FRESH_AGE_MS, call.maxAge)", - "after": "recoveryAgeAllowed(x.created, x.wall, call.maxAge)" + "before": "val stale = visible and retainedAgeAllowed(created, Clock::wallOf(state), ttls.freshMs, ttls.retentionMs)", + "after": "val stale = visible", + "nativeMutants": { + "kind": "model-only", + "text": "The fault drops the age window from kernel/recovery.qnt retain, so a visible frame the read declined is retained whatever its age. A fresh frame never reaches retain, so the candidate retained under the fault is one past the maximum, consulted only through validCandidate's maximum recheck at loader failure and at decode settlement: no observation changes and only retainedSnapshotsWereEligible sees it; the former literal mutant (retainedAgeAllowed to recoveryAgeAllowed) is equivalent here for the same reason. In both ports retention and serving are mutually exclusive (TypeScript src/internal/redis-cache.ts getWithResolvedConfig returns hit or retained by comparing the age with the fresh age; Go go/engine.go readServing returns kind hit before recover) and the maximum is rechecked before and after decode, so no single edit retains an out-of-window frame a later check does not reject." + } }, { "id": "independent-deadline-settles-at-start", "contract": "C24", - "source": "formal/dialcache-independent-conformance.qnt", - "model": "formal/dialcache-independent-conformance.qnt", - "invariant": "sourceSettlementsRespectOwnDeadline", - "before": "sources: x.sources.replaceAt(index, { active: false, settledAt: x.now, outcome: DEADLINE_ERROR, ...source }),", - "after": "sources: x.sources.replaceAt(index, { active: false, settledAt: source.startedAt, outcome: DEADLINE_ERROR, ...source })," + "source": "formal/kernel/deadlines.qnt", + "model": "formal/dialcache-independent-connection.qnt", + "invariant": "independentSourceOriginsMatchContract", + "before": "val moved = Clock::advance(current, earliestDue(current, target) - current.now)", + "after": "val moved = Clock::advance(current, target - current.now)", + "reproducer": { + "kind": "exported-regression", + "run": "readExpiryStartsItsLoaderAtTheReadsDueInstantTest", + "model": "formal/dialcache-independent-conformance.qnt", + "failure": "s.o.calls == List(DEADLINE_ERROR) and s.io.aborted == List(0) and s.o.loaders == 1 and s.o.loads == 0 and s.now == 1000", + "family": "deadline-delivery-instant", + "profiles": [ + "formal/dialcache-independent-connection.qnt", + "independent" + ], + "exclusions": { + "core": "Does not compose the deadlines module: its sources have no budget and its own deadline delivery is stated in its own text.", + "effects": "Every deadline is a multiple of the 10 ms step from the origin, so the earliest due instant and the advance's target coincide (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "recovery": "Its one source deadline is 10 ms and every scheduled history that reaches it advances by exactly 10 ms or by 1000 ms with the candidate still inside its maximum, so delivering at the target yields the same channels (measured 2026-09-20).", + "policy": "Does not compose the deadlines module: its sources have no budget.", + "shadow": "Composes deadlines' delivery for a source deadline and a job budget registered at one instant, whose expiries read no clock, so delivering at the target instead of each due instant yields the same channels (measured 2026-09-20 over the composed text: every scheduled invariant and regression passes under the mutant).", + "scope": "Does not compose the deadlines module: its sources have no budget.", + "admission": "Composes deadlines' delivery for job budgets only: a job's expiry reads no clock and every budget is the same 10 ms, so registration order is due order and delivering at the target instead of each due instant yields the same labels in the same order (measured 2026-09-20: every scheduled invariant and regression passes under the mutant).", + "layers": "Does not compose the deadlines module: its sources have no budget.", + "recovery-read": "Does not compose the deadlines module: its sources have no budget and its own deadline delivery is stated in its own text.", + "local-failure": "Does not compose the deadlines module: its sources have no budget and no deadline is ever delivered.", + "runtime-boundaries": "Does not compose the deadlines module: its sources have no budget.", + "shadow-layers": "Composes deadlines' delivery for job budgets whose expiry reads no clock and whose registration order is job order, so delivering at the target instead of each due instant yields the same labels in the same order.", + "local-clock": "Does not compose the deadlines module: its sources have no budget and no deadline is ever delivered.", + "source-budgets": "Composes the budgeted local lifecycle, whose deliveries inside one advance complete the same sources with the same deadline error whichever instants the fold visits, and no delivery there starts further bounded work; only its private settledAt history sees the instant." + } + }, + "nativeMutants": { + "kind": "model-only", + "text": "The fault makes kernel/deadlines.qnt deliver move the clocks straight to the advance's target instead of visiting each due instant, so a deadline is delivered at the end of the advance rather than at its own instant: a loader a read expiry starts is stamped at the wrong instant and its deadline registered from there, which the monitor's origins clause (the read's own due instant plus the budget) rejects. The former text measured this rule through the settledAt it stamped at expiry, which the held shape does not carry. Neither port records when a deadline error settled (TypeScript src/internal/deadline.ts withMonotonicDeadline rejects on the timer or on a late result; Go go/deadline.go awaitDeadline returns its timeout error), and the nearest observable, the fallback duration metric, is emitted for every outcome, so an edit there would be a different, broader fault." + } }, { "id": "recovery-read-inclusive-maximum", "contract": "C45", - "source": "formal/dialcache-recovery-read-conformance.qnt", - "model": "formal/dialcache-recovery-read-conformance.qnt", - "invariant": "recoveredAgeUsesLogicalMaximum", - "before": "recoveryAgeAllowed(x.candidateCreated, x.wall, x.acceptedMaximum)", - "after": "recoveryAgeAllowed(x.candidateCreated, x.wall, x.acceptedMaximum + 1)" + "source": "formal/kernel/recovery.qnt", + "model": "formal/dialcache-recovery-read-connection.qnt", + "invariant": "recoveryReturnMatchesAcquiredContract", + "before": "snapshot.maximum", + "after": "snapshot.maximum + 1", + "reproducer": { + "kind": "exported-regression", + "run": "compressedRecoveryRechecksMaximumAfterDecodeTest", + "model": "formal/dialcache-recovery-read-conformance.qnt", + "failure": "s.o.calls == List(SOURCE_ERROR) and s.io.sourceErrors == List(1) and s.o.recovery == List(\"miss\") and s.o.dumps == 0 and s.o.writes == 0", + "family": "inclusive-maximum-boundary", + "profiles": [ + "formal/dialcache-recovery-read-connection.qnt", + "recovery-read", + "independent", + "recovery" + ], + "exclusions": { + "core": "Does not import the kernel library, so the mutated recovery age check is never executed; its own maximum-age rule is stated in its own text.", + "effects": "Classifier NONE: no snapshot is retained and no recovery decode is held, so the mutated recovery age check is never executed.", + "shadow": "Composes remote_io with Recovery::NONE and no caller read: no snapshot is ever retained and no recovery decode is held.", + "admission": "Passes Recovery::NONE at every read settlement, so no snapshot is retained and no recovery decode is held; the mutated text is never executed.", + "local-failure": "Composes the layered traversal without the recovery module (no stale-on-error snapshot is retained), so the mutated recovery age check is never executed.", + "shadow-layers": "Composes recovery on the atomic path, but its guard excludes every stale candidate, so no snapshot holds a candidate and neither its stamp nor its maximum is ever consulted.", + "local-clock": "Composes the local projection without the recovery module, so the mutated recovery age check is never executed.", + "policy": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "layers": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "runtime-boundaries": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "scope": "Composes the request-only projection, which has no remote layer and dispatches no held read.", + "source-budgets": "Composes the local projection, which has no remote layer and dispatches no held read." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M01", + "text": "M01 makes the post-decode serving maximum inclusive in both ports, the observable site of kernel/recovery.qnt validCandidate calling recoveryAgeAllowed with the snapshot's maximum plus one, checked by dialcache-recovery-read-connection.qnt recoveryReturnMatchesAcquiredContract; a pre-decode flip alone is masked in the ports by the post-decode recheck. recovery-read/compressedRecoveryRechecksMaximumAfterDecodeTest and witness recovery:exact-maximum-after-decode-rejects are the evidence." + } }, { "id": "recovery-read-recovery-warms-local", "contract": "C43", - "source": "formal/dialcache-recovery-read-conformance.qnt", - "model": "formal/dialcache-recovery-read-conformance.qnt", + "source": "formal/kernel/remote-io.qnt", + "model": "formal/dialcache-recovery-read-connection.qnt", "invariant": "recoveredResultsNeverPublishShared", - "before": " localValue: if (served and not(recovery)) value else s.localValue,\n localExpires: if (served and not(recovery)) s.now + LOCAL_TTL_MS else s.localExpires,\n localVersion: s.localVersion + (if (served and not(recovery)) 1 else 0),", - "after": " localValue: if (served) value else s.localValue,\n localExpires: if (served) s.now + LOCAL_TTL_MS else s.localExpires,\n localVersion: s.localVersion + (if (served) 1 else 0)," + "before": "complete(Recovery::recordOutcome(settled, outcome.label), layout, held.flight,", + "after": "complete(Recovery::recordOutcome(if (outcome.served) Serving::warm(settled, layout, settled.sources.nth(held.flight), Payloads::valueOf(snapshot.candidate), 1000) else settled, outcome.label), layout, held.flight,", + "reproducer": { + "kind": "exported-regression", + "run": "untrackedCompressedRecoveryDoesNotWarmLocalTest", + "model": "formal/dialcache-recovery-read-conformance.qnt", + "failure": "s.o.calls == List(VALUE_ONE, CALL_PENDING) and s.o.reads == 2 and s.localValues == List(NO_VALUE) and s.o.dumps == 0 and s.o.writes == 0", + "family": "recovery-warms-local", + "profiles": [ + "formal/dialcache-recovery-read-connection.qnt", + "recovery-read" + ], + "exclusions": { + "core": "Does not import the kernel library, so the mutated recovery-decode settlement is never executed; its own recovery publication rule is stated in its own text.", + "effects": "Classifier NONE: no snapshot is retained and no recovery decode is held, so the mutated recovery-decode settlement is never executed.", + "recovery": "Local capacity is 0: Local::putLocal stores nothing, so the mutated warm changes no channel.", + "shadow": "Composes remote_io with Recovery::NONE and no caller read: no snapshot is ever retained and no recovery decode is held.", + "admission": "Passes Recovery::NONE at every read settlement, so no snapshot is retained and no recovery decode is held; the mutated text is never executed.", + "independent": "Composes the held remote lifecycle with a local capacity of 0 and replies that leave the local layer off, so the mutated warm stores nothing.", + "local-failure": "Composes the layered release with inline remote reads (serving.release), never remote_io's held read dispatch or decode, so the mutated recovery-decode settlement is never executed.", + "shadow-layers": "Composes the atomic release (remote_writes), never remote_io's held read dispatch or decode, so the mutated text is never executed.", + "local-clock": "Composes the local projection with no remote layer, so remote_io is never executed.", + "policy": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "layers": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "runtime-boundaries": "Composes the atomic layered release (serving.release), which observes the remote frame at release and never dispatches a held read through remote_io.", + "scope": "Composes the request-only projection, which has no remote layer and dispatches no held read.", + "source-budgets": "Composes the local projection, which has no remote layer and dispatches no held read." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M42", + "text": "M42 is the native twin of kernel/remote-io.qnt settleLoad warming local storage with a served recovery candidate, checked by dialcache-recovery-read-connection.qnt recoveredResultsNeverPublishShared: both ports publish a recovered stale value into process-local storage. The recovery profile has no local TTL, so detection rests on the recovery-read profile; recovery-read/untrackedCompressedRecoveryDoesNotWarmLocalTest and compressedRecoveryMemoizesWithoutLocalPublicationTest are the evidence." + } + }, + { + "id": "recovery-read-tracked-retention-uncapped", + "contract": "C37", + "source": "formal/kernel/serving.qnt", + "model": "formal/dialcache-recovery-read-conformance.qnt", + "invariant": "trackedWritesRespectPhysicalCap", + "before": "retentionMs: if (refills) Remote::physicalRetention(state, ttls.retentionMs) else 0", + "after": "retentionMs: if (refills) ttls.retentionMs else 0", + "reproducer": { + "kind": "exported-regression", + "run": "trackedPhysicalRetentionExpiresAtCapTest", + "failure": "s.o.writeTtls == List(3600000)", + "family": "tracked-retention-cap", + "profiles": [ + "recovery-read" + ], + "exclusions": { + "core": "Does not import the kernel library, so the mutated refill authority is never executed; its own retention rule is stated in its own text.", + "effects": "The 60 s retention is below the tracked cap, so the mutated cap never binds.", + "recovery": "Every retention (2000, 5000) is under the tracked cap, so capped and raw retention coincide.", + "shadow": "Every retention (60 s) is under the tracked cap, so capped and raw retention coincide (measured 2026-09-20 over the composed text: every regression passes under the mutant).", + "admission": "Every retention (60000 ms) is under the one-hour physical cap, so the capped and raw retention coincide.", + "independent": "Composes serving.authority, but its retentions (2000 and 5000 ms) are under the one-hour cap, so capped and raw retention coincide.", + "local-failure": "Composes serving.authority with tracking off, so the physical retention is the raw retention and the capped and uncapped texts coincide.", + "shadow-layers": "Every retention (120000, 180000) is under the tracked cap, so capped and raw retention coincide for callers and jobs alike.", + "local-clock": "Composes the local projection, whose sources capture a local TTL only (serving.startLocalSource), so the refill authority is never executed.", + "policy": "Composes serving.authority, but every retention it resolves (2000, 4000 or 5000 ms) is under the one-hour cap, so capped and raw retention coincide.", + "layers": "Composes serving.authority, but its 60000 ms retention is under the one-hour cap, so capped and raw retention coincide.", + "runtime-boundaries": "Composes serving.authority, but its 120000 ms retention is written for an untracked entity, which the cap never applies to.", + "scope": "Composes the request-only projection, which never reaches serving.authority.", + "source-budgets": "Composes the local projection, which never reaches serving.authority." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M56", + "text": "M56 is the native twin of kernel/serving.qnt authority capturing a tracked refill's retention uncapped instead of through remote_frames.physicalRetention: both ports write a tracked value for its full configured retention above one hour instead of clamping it to the hour. recovery-read/trackedPhysicalRetentionExpiresAtCapTest (observed write TTL 14400000 against 3600000) is the expected evidence in both ports." + } }, { "id": "local-failure-write-fault-publishes", "contract": "C27", - "source": "formal/dialcache-local-failure-conformance.qnt", + "source": "formal/kernel/local-faults.qnt", "model": "formal/dialcache-local-failure-conformance.qnt", - "invariant": "failedWriteKeepsAcceptedCallerResult", - "before": "localValue: if (x.localMiss and not(x.failed)) value else x.localValue,", - "after": "localValue: if (x.localMiss) value else x.localValue," + "invariant": "faultedSettlementPublishesNothingLocally", + "before": " val publishing = if (state.localFailed) { sources: state.sources.replaceAt(index, { localMs: 0, ...source }), ...state } else state", + "after": " val publishing = state", + "nativeMutants": { + "kind": "model-only", + "text": "The fault in kernel/local-faults.qnt settle commits a local write the environment flagged failed: the settlement keeps the source's captured local TTL under an armed fault, so serving.publish warms the slot. In both ports the write and its failure are one operation: the TypeScript driver spy on LocalCache.prototype.put (test/formal/behavior-driver.ts) throws before delegation, so putLocalFailOpen in src/dialcache.ts only logs and records cache_write; Go's Cache.localPut in go/cache.go evaluates the panicking Clock.ElapsedMS while building the entry before simplelru.Add, and execution.putLocal in go/engine.go recovers through callSafely. Nothing can commit the entry after the storage operation threw. local-failure/localWriteFailureKeepsSourceAndRequestMemoTest pins the model site (calls 1,1,0 with two loaders, not a hit on the dropped value)." + }, + "reproducer": { + "kind": "exported-regression", + "run": "localWriteFailureKeepsSourceAndRequestMemoTest", + "failure": "s.o.calls == List(VALUE_ONE, VALUE_ONE, CALL_PENDING) and s.o.loaders == 2 and s.o.writes == 1", + "family": "local-write-fault-publishes", + "profiles": [ + "local-failure" + ], + "exclusions": { + "core": "Does not import the kernel library, so the mutated definition is never executed; its own rule is stated in its own text.", + "effects": "Does not compose local_faults, so the mutated definition is never executed.", + "recovery": "Does not compose the local fault switch (local_faults): its drivers inject no local storage fault, so the mutated settlement is never executed.", + "policy": "Does not compose the local fault switch (local_faults): its drivers inject no local storage fault, so the mutated settlement is never executed.", + "shadow": "Composes local storage, but every reply leaves the local layer off and the capacity is 0, so no local entry is ever written or read.", + "scope": "Does not compose the local fault switch (local_faults): its drivers inject no local storage fault, so the mutated settlement is never executed.", + "admission": "Does not compose the local fault switch (local_faults).", + "layers": "Does not compose the local fault switch (local_faults): its drivers inject no local storage fault, so the mutated settlement is never executed.", + "independent": "Does not compose the local fault switch (local_faults): its drivers inject no local storage fault, so the mutated settlement is never executed.", + "recovery-read": "Does not compose the local fault switch (local_faults): its drivers inject no local storage fault, so the mutated settlement is never executed.", + "runtime-boundaries": "Does not compose the local fault switch (local_faults): its drivers inject no local storage fault, so the mutated settlement is never executed.", + "shadow-layers": "Does not compose the local fault switch (local_faults): its drivers inject no local storage fault, so the mutated settlement is never executed.", + "local-clock": "Does not compose the local fault switch (local_faults): its drivers inject no local storage fault, so the mutated settlement is never executed.", + "source-budgets": "Does not compose the local fault switch (local_faults): its drivers inject no local storage fault, so the mutated settlement is never executed." + } + } }, { "id": "local-failure-source-error-published", "contract": "C27", - "source": "formal/dialcache-local-failure-conformance.qnt", + "source": "formal/kernel/serving.qnt", "model": "formal/dialcache-local-failure-conformance.qnt", - "invariant": "sourceErrorsNeverReplaceLocalValue", - "before": "s' = complete(recordPublication(s, SOURCE_ERROR), SOURCE_ERROR)", - "after": "s' = acquired(s, SOURCE_ERROR)" + "invariant": "storageHoldsAcceptedValuesOnly", + "before": " if (accepted(value)) warm(frames, layout, source, value, source.localMs) else frames", + "after": " warm(frames, layout, source, value, source.localMs)", + "nativeMutants": { + "kind": "mapped", + "mutant": "M37", + "text": "M37 is the native twin of kernel/serving.qnt publish warming local storage without the accepted judgment: both ports publish a rejected source's result into process-local storage before rethrowing. local-failure/rejectedSourceDoesNotSeedLocalTest is the portable evidence: the transient call after the rejection reads remote and starts its own source (calls 3,0 with two loaders and two reads) instead of serving the stored error." + }, + "reproducer": { + "kind": "exported-regression", + "run": "rejectedSourceDoesNotSeedLocalTest", + "failure": "s.o.calls == List(SOURCE_ERROR, CALL_PENDING) and s.o.loaders == 2 and s.o.reads == 2", + "family": "source-error-published", + "profiles": [ + "local-failure", + "policy" + ], + "exclusions": { + "core": "Does not import the kernel library, so the mutated definition is never executed; its own rule is stated in its own text.", + "effects": "No local TTL: warm with localMs 0 stores nothing whatever the value, so the mutated local publication is never observable.", + "recovery": "Composes serving.publish only through remote_io.settleLoader, which publishes a settled value only when it is already accepted and classifies a rejected one without publishing, so the removed acceptance gate never decides (measured 2026-09-20: every scheduled invariant and regression passes under the mutant).", + "shadow": "Composes local storage, but every reply leaves the local layer off and the capacity is 0, so no local entry is ever written or read.", + "scope": "Composes the request-only projection, whose sources settle through serving.settleRequest, never serving.publish.", + "admission": "Composes serving.publish only for a job's detached source, whose local TTL is 0, so the mutated warm stores nothing.", + "layers": "Composes the layered shape and reaches the mutated warm when a source is rejected while local storage participates, but none of its scheduled invariants or exported regressions reads the local slot between that rejection and the next publication (measured under the mutant at 2000 x 40 and over its exported regressions).", + "independent": "Composes serving.publish, but every reply leaves the local layer off and the capacity is 0, so the mutated warm stores nothing.", + "recovery-read": "Composes the layered shape and reaches the mutated warm when a source is rejected while local storage participates, but none of its scheduled invariants or exported regressions reads the local slot between that rejection and the next publication (measured under the mutant at 2000 x 40 and over its exported regressions).", + "runtime-boundaries": "Composes the layered shape and reaches the mutated warm when a source is rejected while local storage participates, but none of its scheduled invariants or exported regressions reads the local slot between that rejection and the next publication (measured under the mutant at 2000 x 40 and over its exported regressions).", + "shadow-layers": "Composes the layered shape and reaches the mutated warm when a source is rejected while local storage participates, but none of its scheduled invariants or exported regressions reads the local slot between that rejection and the next publication (measured under the mutant at 2000 x 40 and over its exported regressions).", + "local-clock": "Composes the local projection, which settles through serving.settleLocal, never serving.publish; its inline sources never fail besides.", + "source-budgets": "Composes the local projection, whose sources settle through serving.settleLocal, never serving.publish." + } + } }, { "id": "runtime-boundaries-inclusive-cohort", @@ -1955,7 +1887,12 @@ "model": "formal/dialcache-runtime-boundaries-conformance.qnt", "invariant": "equalAndLowerCohortsNeverTraverse", "before": "or cohortAdmits(sample, thresholdForRelation(sample, cohortRelation(policy)))", - "after": "or sample <= thresholdForRelation(sample, cohortRelation(policy))" + "after": "or sample <= thresholdForRelation(sample, cohortRelation(policy))", + "nativeMutants": { + "kind": "mapped", + "mutant": "M51", + "text": "Same native fault as cohort-inclusive-threshold: M51 makes the serving-layer cohort comparison inclusive in both ports, which is kernel/runtime-policy.qnt admits inlining an inclusive comparison in place of cohortAdmits. runtime-boundaries/localCohortEqualityBypassesBeforeAboveSampleCachesTest and remoteCohortEqualityBypassesBeforeAboveSampleCachesTest are the expected evidence in both ports." + } }, { "id": "runtime-boundaries-inherited-sharing-ignores-default", @@ -1964,34 +1901,102 @@ "model": "formal/dialcache-runtime-boundaries-conformance.qnt", "invariant": "inheritedDisabledSharingNeverJoins", "before": "or (sharingMode(policy) == INHERIT_SHARING and baseline.coalesce)", - "after": "or sharingMode(policy) == INHERIT_SHARING" + "after": "or sharingMode(policy) == INHERIT_SHARING", + "nativeMutants": { + "kind": "mapped", + "mutant": "M27", + "text": "M27 is the native twin of kernel/runtime-policy.qnt resolve dropping the baseline coalesce condition from its inherit-sharing disjunct: both ports capture the operation's coalesce default as true, so an omitted runtime leaf or a null provider inherits sharing over a configured false. runtime-boundaries/inheritedFalseKeepsIndependentMemoizingSourcesTest and the independent profile replays whose fixture sets coalesce false are the expected evidence." + } }, { "id": "shadow-layers-inclusive-c0-freshness", "contract": "C22", - "source": "formal/dialcache-shadow-layers-conformance.qnt", - "model": "formal/dialcache-shadow-layers-conformance.qnt", + "source": "formal/kernel/shadow.qnt", + "model": "formal/dialcache-shadow-layers-connection.qnt", "invariant": "retainedC0WasFreshWhenAcquired", - "before": "if (freshAgeAllowed(state.remoteCreated.nth(key), state.now, state.policy.freshMs)) frame(state, key) else NO_VALUE", - "after": "if (freshAgeAllowed(state.remoteCreated.nth(key), state.now, state.policy.freshMs + 1)) frame(state, key) else NO_VALUE" + "before": "pure def acquired(observed: Remote::Observed): int = if (observed.value > NO_VALUE) observed.payload else NO_VALUE", + "after": "pure def acquired(observed: Remote::Observed): int = observed.payload", + "reproducer": { + "kind": "exported-regression", + "run": "expiredC0CanFillAndServeNewValueTest", + "model": "formal/dialcache-shadow-layers-conformance.qnt", + "failure": "s.o.calls == List(VALUE_TWO) and s.o.reads == 1 and s.o.loads == 0 and s.o.dumps == 1 and s.o.shadow == List()", + "family": "c0-freshness-boundary", + "profiles": [ + "formal/dialcache-shadow-layers-connection.qnt", + "shadow-layers", + "shadow" + ], + "exclusions": { + "core": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "effects": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "recovery": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "policy": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "scope": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "admission": "Every reply enables the remote layer, so no dark C0 read is made and the mutated acquisition is never applied.", + "layers": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "independent": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "recovery-read": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "local-failure": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "runtime-boundaries": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "local-clock": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed.", + "source-budgets": "Does not compose the shadow module, so the mutated dark C0 acquisition is never executed." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M31", + "text": "Same native fault as shadow-inclusive-c0-freshness: M31 makes the dark C0 acquisition inclusive in both ports, which is kernel/shadow.qnt acquired keeping a dark C0 from a visible frame remote_frames.observe declined for the reply's freshness (the boundary itself is remote_frames' own partition), checked by dialcache-shadow-layers-connection.qnt retainedC0WasFreshWhenAcquired. shadow-layers/expiredC0CanFillAndServeNewValueTest (seed age equal to the fresh TTL) is the expected evidence." + }, + "measures": "Repeats the shadow-inclusive-c0-freshness fault against the shadow-layers connection model: the same acquisition mutation must also be caught by that monitor's own clause." }, { "id": "shadow-layers-fill-uses-current-retention", "contract": "C18", - "source": "formal/dialcache-shadow-layers-conformance.qnt", + "source": "formal/kernel/shadow.qnt", "model": "formal/dialcache-shadow-layers-conformance.qnt", "invariant": "fillKeepsCapturedRetention", - "before": "else if (entry.cached == NO_VALUE) beginWrite(state, entry.source, job, entry.retainedMs)", - "after": "else if (entry.cached == NO_VALUE) beginWrite(state, entry.source, job, state.policy.retainedMs)" + "before": "else update(Writes::holdDump(state, job.source, authority.retentionMs, authority.fence), { phase: SERIALIZING, ...job })", + "after": "else update(Writes::holdDump(state, job.source, sourceOf(state, job).retentionMs, authority.fence), { phase: SERIALIZING, ...job })", + "reproducer": { + "kind": "exported-regression", + "run": "darkFillRetainsPolicyThroughSerializationTest", + "failure": "s.o.writeTtls == List(120000) and s.o.shadow == List(\"filled\")", + "family": "captured-fill-retention", + "profiles": [ + "shadow-layers", + "shadow" + ], + "exclusions": { + "core": "Does not compose the shadow module, so the mutated fill dump is never executed.", + "effects": "Does not compose the shadow module, so the mutated fill dump is never executed.", + "recovery": "Does not compose the shadow module, so the mutated fill dump is never executed.", + "policy": "Does not compose the shadow module, so the mutated fill dump is never executed.", + "scope": "Does not compose the shadow module, so the mutated fill dump is never executed.", + "admission": "Served jobs always carry a C0 and never fill, so the mutated fill is never reached.", + "layers": "Does not compose the shadow module, so the mutated fill dump is never executed.", + "independent": "Does not compose the shadow module, so the mutated fill dump is never executed.", + "recovery-read": "Does not compose the shadow module, so the mutated fill dump is never executed.", + "local-failure": "Does not compose the shadow module, so the mutated fill dump is never executed.", + "runtime-boundaries": "Does not compose the shadow module, so the mutated fill dump is never executed.", + "local-clock": "Does not compose the shadow module, so the mutated fill dump is never executed.", + "source-budgets": "Does not compose the shadow module, so the mutated fill dump is never executed." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M29", + "text": "M29 is the native twin of kernel/shadow.qnt fill holding the dark fill's dump with the source's retention (0 for a dark source) instead of the retention the job captured at admission: both ports re-resolve the runtime policy at fill time and write the dark fill with the retention then in force. Detection most likely fires on the extra provider call before writeTtls diverge; shadow-layers/darkFillRetainsPolicyThroughSerializationTest is the expected evidence." + } }, { "id": "local-clock-precise-ttl", "contract": "C09", - "source": "formal/dialcache-local-clock-conformance.qnt", + "source": "formal/kernel/clock.qnt", "model": "formal/dialcache-local-clock-conformance.qnt", - "invariant": "localReadsUseCommonWholeMilliseconds", - "before": "entry.value != EMPTY_ENTRY and localEntryLiveOnGrid(ticks, entry.insertedTicks, LOCAL_TTL_MS, TICKS_PER_MS)", - "after": "entry.value != EMPTY_ENTRY and ticks - entry.insertedTicks < LOCAL_TTL_MS * TICKS_PER_MS", + "invariant": "clockIsOnTheGrid", + "before": " { ticks: state.ticks + ticks, now: wholeMs(state.ticks + ticks, ticksPerMs), ...state }", + "after": " { ticks: state.ticks + ticks, now: wholeMs(state.ticks + ticks + ticksPerMs / 2, ticksPerMs), ...state }", "reproducer": { "kind": "exported-regression", "run": "fractionalInsertionExpiresAtWholeMillisecondTest", @@ -2000,17 +2005,68 @@ "profiles": [ "local-clock" ], - "exclusions": {} + "exclusions": { + "core": "Does not import the kernel library, so the mutated definition is never executed; its own rule is stated in its own text.", + "effects": "Does not compose the fractional clock, so the mutated definition is never executed.", + "recovery": "Never composes the fractional clock (clock.advanceTicks): its clock moves through diagnostics.advance and clock.shiftWall on the whole-millisecond grid, so the mutated projection is never executed.", + "policy": "Advances its clock in whole milliseconds through clock.advance and never composes the fractional clock, so the mutated projection is never executed.", + "shadow": "Does not compose the fractional clock.", + "scope": "Advances its clock in whole milliseconds through clock.advance and never composes the fractional clock, so the mutated projection is never executed.", + "admission": "Advances its clock in whole milliseconds through clock.advance and never composes the fractional clock.", + "layers": "Advances its clock in whole milliseconds through clock.advance and never composes the fractional clock, so the mutated projection is never executed.", + "independent": "Advances its clock in whole milliseconds through clock.advance and never composes the fractional clock, so the mutated projection is never executed.", + "recovery-read": "Advances its clock in whole milliseconds through clock.advance and never composes the fractional clock, so the mutated projection is never executed.", + "local-failure": "Has no elapsed-time input and never composes the fractional clock (clock.advanceTicks), so the mutated projection is never executed.", + "runtime-boundaries": "Advances its clock in whole milliseconds through clock.advance and never composes the fractional clock, so the mutated projection is never executed.", + "shadow-layers": "Advances its clock in whole milliseconds through clock.advance and never composes the fractional clock, so the mutated projection is never executed.", + "source-budgets": "Advances its clock in whole milliseconds through clock.advance and never composes the fractional clock, so the mutated projection is never executed." + } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M19", + "text": "Same native fault as local-precise-grid: M19 replaces the whole-millisecond grid with the precise clock for local insertion and expiry in both ports, which is kernel/clock.qnt advanceTicks leaving the floor grid (a fill at 0.7 ms lands on grid instant 1, expiring at 1001 ms). The feature-profile driver clocks are integer, so only local-clock observes it; local-clock/fractionalInsertionExpiresAtWholeMillisecondTest step 7 (calls 1,1,1 with one loader instead of 1,1,2 with two) detects both ports." } }, { "id": "local-clock-hit-renews-insertion", "contract": "C09", - "source": "formal/dialcache-local-clock-conformance.qnt", - "model": "formal/dialcache-local-clock-conformance.qnt", - "invariant": "readsNeverRenewLocalInsertion", - "before": "entries: if (hit) s.entries else s.entries.replaceAt(instance, { value: offered, insertedTicks: s.ticks }),", - "after": "entries: s.entries.replaceAt(instance, { value: if (hit) previous.value else offered, insertedTicks: s.ticks })," + "source": "formal/kernel/local-storage.qnt", + "model": "formal/dialcache-policy-conformance.qnt", + "invariant": "localHitsRespectInsertionExpiry", + "before": " { lru: state.lru.replaceAt(instance, touch(state.lru.nth(instance), key)), ...state }", + "after": " { lru: state.lru.replaceAt(instance, touch(state.lru.nth(instance), key)), localExpires: state.localExpires.replaceAt(instance, state.now + 1000), ...state }", + "nativeMutants": { + "kind": "mapped", + "mutant": "M11", + "text": "M11 is the native twin of kernel/local-storage.qnt promote re-stamping the insertion expiry on a hit instead of renewing recency alone: both ports refresh the insertion time on every hit while keeping the value. policy/localHitDoesNotRenewInsertionTtlTest and local-clock/fractionalInsertionExpiresAtWholeMillisecondTest already detect it in both ports. promote has no TTL parameter, so the mutant stamps a literal second, the local-clock TTL." + }, + "reproducer": { + "kind": "exported-regression", + "model": "formal/dialcache-local-clock-conformance.qnt", + "run": "fractionalInsertionExpiresAtWholeMillisecondTest", + "failure": "s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_TWO) and s.o.loaders == 2", + "family": "local-hit-renews-insertion", + "profiles": [ + "policy", + "local-clock", + "source-budgets", + "recovery-read" + ], + "exclusions": { + "core": "Does not import the kernel library, so the mutated definition is never executed; its own rule is stated in its own text.", + "effects": "The local layer is off (capacity 0 and no local TTL), so the mutated promotion never runs.", + "recovery": "The local layer is off: capacity 0 and no local TTL, so no local entry is ever written or hit and the mutated renewal is never executed.", + "shadow": "Composes local storage, but every reply leaves the local layer off and the capacity is 0, so no local entry is ever written or read.", + "scope": "Composes the request-only projection, which never reads local storage.", + "admission": "The local layer is off in every reply and local storage is declared empty, so the mutated local storage rule is never executed.", + "layers": "Composes local storage, but its 60 s entries never reach their insertion expiry within the bound of 1 ms ticks, so a renewed insertion is invisible.", + "independent": "Composes local storage, but every reply leaves the local layer off and the capacity is 0, so no local hit is ever served.", + "local-failure": "Composes local storage, but no input advances the clock, so a renewed insertion is invisible.", + "runtime-boundaries": "Composes local storage, but no input advances the clock, so a renewed insertion is invisible.", + "shadow-layers": "Composes local storage; its one expiry regression reads the entry again only after the advances that expire it, with no hit in between, so a renewed insertion is invisible (measured under the mutant at 2000 x 40 and over its exported regressions)." + } + } }, { "id": "source-budgets-outside-call-has-deadline", @@ -2019,7 +2075,12 @@ "model": "formal/dialcache-source-budgets-conformance.qnt", "invariant": "outsideSourcesHaveNoDeadline", "before": "pure def admissionBudget(state: Budgeted[r], call: Call): int = if (call.keyFailed) state.sourceBudget else UNBOUNDED", - "after": "pure def admissionBudget(state: Budgeted[r], call: Call): int = state.sourceBudget" + "after": "pure def admissionBudget(state: Budgeted[r], call: Call): int = state.sourceBudget", + "nativeMutants": { + "kind": "mapped", + "mutant": "M14", + "text": "M14 is the native twin of kernel/deadlines.qnt admissionBudget returning the source budget instead of UNBOUNDED for a call whose key did not fail: both ports bound the disabled or outside bypass source with the configured fallback deadline. source-budgets/outsideAndInvalidOutsideCallsIgnoreDeadlineAndSharingTest detects both ports at its advance(100) step." + } }, { "id": "source-budgets-settled-flight-stays-registered", @@ -2028,7 +2089,12 @@ "model": "formal/dialcache-source-budgets-conformance.qnt", "invariant": "registeredWorkIsNotAbandoned", "before": "processFlights: state.processFlights.foldl(List(), (out, owner) => out.append(if (owner == index) NO_OWNER else owner)),", - "after": "processFlights: state.processFlights," + "after": "processFlights: state.processFlights,", + "nativeMutants": { + "kind": "mapped", + "mutant": "M26", + "text": "M26 is the native twin of kernel/flights.qnt forgetSource leaving processFlights unchanged instead of clearing the settled index: neither port removes a settled process flight from the registry, so later same-key callers join finished work. Joiners get the settled flight's stale outcome rather than stranding, since a blocked follower would deadlock synctest; source-budgets/defaultSourceBudgetExpiresAtSixtySecondsTest and policy/independentCompletionKeepsRegisteredLeaderTest are the evidence." + } }, { "id": "stale-recovery-future-candidate", @@ -2049,22 +2115,27 @@ "formal/dialcache-stale-recovery.qnt", "recovery", "policy", - "shadow" + "shadow", + "recovery-read", + "effects" ], "exclusions": { "core": "Evaluates no age judgment from cache-rules, so ageBeforeCeiling is unreachable.", - "effects": "Uses only deadlinePendingAt and fenceAllows from cache-rules; no age judgment is evaluated.", "scope": "Evaluates no age judgment from cache-rules, so ageBeforeCeiling is unreachable.", - "admission": "Uses only deadlinePendingAt from cache-rules; no age judgment is evaluated.", + "admission": "Composes the remote freshness judgment, but every frame is stamped at a wall clock that only advances and is read within 600 ms under a 60 s freshness, so no read meets an age boundary or observes a future stamp.", "layers": "Frames are stamped from a wall clock that only moves with the monotonic clock (no rollback input), so no history observes a future stamp.", "independent": "Seeds stamp frames at the wall minus a non-negative age and the clock only advances, so no history observes a future stamp.", - "recovery-read": "Seeds stamp frames at the wall minus a non-negative age and the wall only advances; the unsafe-timestamp seed is rejected as an unsupported frame before any age judgment, so no history observes a future stamp.", - "local-failure": "Evaluates no age judgment from cache-rules, so ageBeforeCeiling is unreachable.", + "local-failure": "Composes the remote freshness judgment (ageBeforeCeiling through freshAgeAllowed), but its wall clock never moves and every frame is stamped at the current instant, so no history observes a future stamp.", "runtime-boundaries": "Frames are stamped from a wall clock that only moves with the monotonic clock (no rollback input), so no history observes a future stamp.", - "shadow-layers": "Remote frames are stamped from the monotonic job clock at write time or seeded at a non-negative age, so no history observes a future stamp.", - "local-clock": "Uses only localEntryLiveOnGrid from cache-rules; no age judgment is evaluated.", + "shadow-layers": "Frames are stamped with the wall clock at write release (remote_writes.dispatch) or seeded at a non-negative age; the skew is 0 and never shifts, so no history observes a future stamp.", + "local-clock": "Composes the local projection with no remote layer; its closure reaches cache-rules through wholeMs and localEntryLiveAt only, so ageBeforeCeiling is never evaluated.", "source-budgets": "Uses only localEntryLiveAt and sourceAcceptsAt from cache-rules; no age judgment is evaluated." } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M40", + "text": "Same native fault as recovery-future-candidate: M40 classifies a frame dated after the reader clock as a valid frame of age zero in both ports, which is cache-rules.qnt ageBeforeCeiling losing its created-before-observed clause as measured on the read receipt by dialcache-stale-recovery.qnt futureFrameIsNeverFreshOrRetained. policy/wallRollbackRejectsFutureRemoteFrameTest, effects/futureFrameReportsPositiveObservingOffsetTest and witness policy:rollback-rejects-future-remote are the evidence." } }, { @@ -2085,6 +2156,11 @@ ], "exclusions": {}, "scope": "Envelope handling is a deterministic transform with no replayed input history: the vector model exports its cases to quint-envelope-vectors.json and both codecs are checked against that artifact, not through a driver profile. The run pins the unknown zero-prefix payload (bytes 0, 3, 255) that the fault would unescape." + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M54", + "text": "M54 is the native twin of dialcache-envelope-vectors.qnt readEnvelope dropping its marker guard: both ports strip a leading zero byte even when the next byte is not an envelope marker. M53 shares the anchor with a different edit and stays a distinct entry; envelope vectors 009 (0003 stays 0003) and 010 are the expected evidence in both ports." } }, { @@ -2093,32 +2169,37 @@ "source": "formal/kernel/deadlines.qnt", "model": "formal/dialcache-source-budgets-conformance.qnt", "invariant": "acceptedSourceRespectsItsOwnStart", - "before": "not(sourceAcceptsAt(state.started.nth(index), state.now, state.budgets.nth(index)))", - "after": "state.budgets.nth(index) >= 0 and state.now > state.started.nth(index) + state.budgets.nth(index)", + "before": "pure def dueAt(now: int, d: Due): bool = not(deadlinePendingAt(now, d.at))", + "after": "pure def dueAt(now: int, d: Due): bool = now > d.at", "reproducer": { "kind": "exported-regression", "run": "defaultSourceBudgetExpiresAtSixtySecondsTest", "failure": "s.o.calls == List(DEADLINE_ERROR, CALL_PENDING) and s.o.loaders == 2", "family": "inclusive-deadline-boundary", "profiles": [ - "source-budgets" + "source-budgets", + "independent", + "shadow-layers", + "recovery", + "admission", + "shadow", + "effects" ], "exclusions": { "core": "does not compose the deadlines module: its sources have no budget", - "effects": "does not compose the deadlines module: its sources have no budget", - "recovery": "does not compose the deadlines module: its sources have no budget", "policy": "does not compose the deadlines module: its sources have no budget", - "shadow": "does not compose the deadlines module: its sources have no budget", "scope": "does not compose the deadlines module: its sources have no budget", - "admission": "does not compose the deadlines module: its sources have no budget", "layers": "does not compose the deadlines module: its sources have no budget", - "independent": "does not compose the deadlines module: its sources have no budget", "recovery-read": "does not compose the deadlines module: its sources have no budget", "local-failure": "does not compose the deadlines module: its sources have no budget", "runtime-boundaries": "does not compose the deadlines module: its sources have no budget", - "shadow-layers": "does not compose the deadlines module: its sources have no budget", "local-clock": "does not compose the deadlines module: its sources have no budget" } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M35", + "text": "Same native fault as source-inclusive-deadline: M35 accepts a settlement observed at exactly the elapsed deadline in both ports, which is kernel/deadlines.qnt dueAt replacing not deadlinePendingAt with a strict comparison. The declared reproducer source-budgets/defaultSourceBudgetExpiresAtSixtySecondsTest cannot distinguish it: its advance delivers the timer at exactly 60000 ms and the unchanged timer path still times the source out; the effects jumpClock histories are the portable evidence." } }, { @@ -2141,18 +2222,23 @@ ], "exclusions": { "core": "Does not import the kernel library, so the mutated traversal order is never executed; its own order is stated in its own text.", - "effects": "Does not import the kernel library, so the mutated traversal order is never executed; its own order is stated in its own text.", - "recovery": "Does not import the kernel library, so the mutated traversal order is never executed; its own order is stated in its own text.", - "shadow": "Does not import the kernel library, so the mutated traversal order is never executed; its own order is stated in its own text.", - "admission": "Does not import the kernel library, so the mutated traversal order is never executed; its own order is stated in its own text.", - "independent": "Does not import the kernel library, so the mutated traversal order is never executed; its own order is stated in its own text.", - "recovery-read": "Does not import the kernel library, so the mutated traversal order is never executed; its own order is stated in its own text.", - "local-failure": "Does not import the kernel library, so the mutated traversal order is never executed; its own order is stated in its own text.", - "shadow-layers": "Does not import the kernel library, so the mutated traversal order is never executed; its own order is stated in its own text.", - "local-clock": "Does not import the kernel library, so the mutated traversal order is never executed; its own order is stated in its own text.", + "effects": "No request memo: the memo value is always absent, so the two traversal orders coincide.", + "recovery": "No scheduled history admits a caller into a scope holding a memo while another scope's flight is pending, so the reordered arms decide alike (measured 2026-09-20).", + "shadow": "Every reply leaves every layer off and coalescing off: decide's join and serve arms are never taken.", + "admission": "Composes decide with the remote layer unobserved and no memo or local layer, so no layer value can precede a join and the reordered arms decide alike.", + "independent": "Composes decide with coalesce false, so no process owner is ever looked up, and with no request memo and no local layer no layer value can precede a join.", + "recovery-read": "One execution at a time: no caller is released while a flight is pending, so decide's join arms are never taken.", + "local-failure": "Composes serving.decide, but admits one source at a time (no call begins while a source is pending), so no flight is ever joinable and the join arms are never taken.", + "shadow-layers": "Coalescing is off in every reply: decide's join arms are never taken and the request registry is never written.", + "local-clock": "Composes serving.decide over the local projection, but an inline source settles in the step that starts it, so no flight is pending at any admission and the join arms are never taken.", "scope": "Composes the request-only projection, which passes no layer values to the decision, so no layer hit can precede a join.", "source-budgets": "Its replies always coalesce and its bypass sources warm nothing, so a live entry and a pending registered flight never coexist." } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M21", + "text": "M21 is the native twin of kernel/serving.qnt decide moving JoinsProcess below the memo, local and remote branches: both ports serve a live local entry before joining the pending process flight registered for the key. policy/independentCompletionKeepsRegisteredLeaderTest step 9 detects both ports, as does runtime-boundaries/defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest." } }, { @@ -2170,23 +2256,28 @@ "family": "join-ignores-coalesce", "profiles": [ "policy", - "runtime-boundaries" + "runtime-boundaries", + "admission" ], "exclusions": { "core": "Does not import the kernel library, so the mutated join conjunct is never executed; its own coalescing rule is stated in its own text.", - "effects": "Does not import the kernel library, so the mutated join conjunct is never executed; its own coalescing rule is stated in its own text.", - "recovery": "Does not import the kernel library, so the mutated join conjunct is never executed; its own coalescing rule is stated in its own text.", - "shadow": "Does not import the kernel library, so the mutated join conjunct is never executed; its own coalescing rule is stated in its own text.", - "admission": "Does not import the kernel library, so the mutated join conjunct is never executed; its own coalescing rule is stated in its own text.", - "independent": "Does not import the kernel library, so the mutated join conjunct is never executed; its own coalescing rule is stated in its own text.", - "recovery-read": "Does not import the kernel library, so the mutated join conjunct is never executed; its own coalescing rule is stated in its own text.", - "local-failure": "Does not import the kernel library, so the mutated join conjunct is never executed; its own coalescing rule is stated in its own text.", - "shadow-layers": "Does not import the kernel library, so the mutated join conjunct is never executed; its own coalescing rule is stated in its own text.", - "local-clock": "Does not import the kernel library, so the mutated join conjunct is never executed; its own coalescing rule is stated in its own text.", + "effects": "Every reply coalesces, so the dropped conjunct is always true.", + "recovery": "Coalescing is on in every reply, so the conjunct the fault removes is always true and no history observes it.", + "shadow": "Every reply leaves every layer off and coalescing off: decide's join and serve arms are never taken.", + "independent": "Composes decide with coalesce false and registers its flights unshared, so the process registry never names an owner and the dropped conjunct changes no decision.", + "recovery-read": "One execution at a time: no caller is released while a flight is pending, so decide's join arms are never taken.", + "local-failure": "Composes serving.decide, but admits one source at a time (no call begins while a source is pending), so no flight is ever joinable and the join arms are never taken.", + "shadow-layers": "Coalescing is off in every reply: decide's join arms are never taken and the request registry is never written.", + "local-clock": "Composes serving.decide over the local projection, but an inline source settles in the step that starts it, so no flight is pending at any admission and the join arms are never taken.", "layers": "Its replies always coalesce, so the conjunct the fault removes is always true and no history observes it.", "scope": "Composes the request-only projection, whose process join requires a shared layer this shape never has.", "source-budgets": "Its replies always coalesce, so the conjunct the fault removes is always true and no history observes it." } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M22", + "text": "M22 is the native twin of kernel/serving.qnt decide dropping the coalesce condition from its process-owner conjunction: both ports let a non-coalescing caller join a pending process flight while registration still respects coalesce. policy/independentCompletionKeepsRegisteredLeaderTest step 5 and policy/independentFailureKeepsRegisteredLeaderTest detect both ports." } }, { @@ -2203,24 +2294,29 @@ "failure": "s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_TWO, VALUE_TWO) and s.o.loaders == 2", "family": "local-publication-never-replaces", "profiles": [ - "source-budgets" + "source-budgets", + "local-clock" ], "exclusions": { "core": "Composes no kernel module, so serving.settleLocal is never executed.", - "effects": "Composes no kernel module, so serving.settleLocal is never executed.", - "recovery": "Composes no kernel module, so serving.settleLocal is never executed.", + "effects": "Composes the held remote lifecycle: its loaders settle through remote_io, never the local projection's settleLocal, so the mutated text is never executed.", + "recovery": "Composes the held remote lifecycle, whose loaders settle through remote_io.settleLoader, so serving.settleLocal is never executed.", "policy": "Composes no kernel module, so serving.settleLocal is never executed.", - "shadow": "Composes no kernel module, so serving.settleLocal is never executed.", + "shadow": "Composes local storage, but every reply leaves the local layer off and the capacity is 0, so no local entry is ever written or read, and publishes through serving.publish, never settleLocal.", "scope": "Composes the request-only projection without local storage: its sources settle through serving.settleRequest.", - "admission": "Composes no kernel module, so serving.settleLocal is never executed.", + "admission": "Composes the layered shape, which settles through remote_io and serving.publish, never serving.settleLocal.", "layers": "Composes the layered traversal: its sources settle through serving.settle, not the local projection.", - "independent": "Composes no kernel module, so serving.settleLocal is never executed.", - "recovery-read": "Composes no kernel module, so serving.settleLocal is never executed.", - "local-failure": "Composes no kernel module, so serving.settleLocal is never executed.", + "independent": "Composes the layered shape: its loaders settle through remote_io and serving.publish, never the local projection's settleLocal.", + "recovery-read": "Composes the layered shape, which publishes through serving.publish, never serving.settleLocal.", + "local-failure": "Composes the layered shape, which publishes through serving.publish, never serving.settleLocal.", "runtime-boundaries": "Composes the layered traversal: its sources settle through serving.settle, not the local projection.", - "shadow-layers": "Composes no kernel module, so serving.settleLocal is never executed.", - "local-clock": "Composes no kernel module, so serving.settleLocal is never executed." + "shadow-layers": "Composes the layered shape, which publishes through serving.publish, never serving.settleLocal." } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M23", + "text": "M23 is the native twin of kernel/serving.qnt settleLocal warming a slot only when it holds NO_VALUE: both ports make a local publication skip a slot that is already occupied, even by an expired entry. The declared reproducer source-budgets/localEntryExpiresAfterItsTtlTest does not transfer natively because both ports purge an expired entry at the read that starts the source; policy/independentLocalPublicationUsesLastCompletionTest is the portable evidence (calls 1,2,2 instead of 1,2,1)." } }, { @@ -2241,41 +2337,37 @@ ], "exclusions": { "core": "Composes no kernel module, so serving.settleLocal is never executed.", - "effects": "Composes no kernel module, so serving.settleLocal is never executed.", - "recovery": "Composes no kernel module, so serving.settleLocal is never executed.", + "effects": "Composes the held remote lifecycle: its loaders settle through remote_io, never the local projection's settleLocal, so the mutated text is never executed.", + "recovery": "Composes the held remote lifecycle, whose loaders settle through remote_io.settleLoader, so serving.settleLocal is never executed.", "policy": "Composes no kernel module, so serving.settleLocal is never executed.", - "shadow": "Composes no kernel module, so serving.settleLocal is never executed.", + "shadow": "Composes local storage, but every reply leaves the local layer off and the capacity is 0, so no local entry is ever written or read, and publishes through serving.publish, never settleLocal.", "scope": "Composes the request-only projection without local storage: its sources settle through serving.settleRequest.", - "admission": "Composes no kernel module, so serving.settleLocal is never executed.", + "admission": "Composes the layered shape, which settles through remote_io and serving.publish, never serving.settleLocal.", "layers": "Composes the layered traversal: its sources settle through serving.settle, not the local projection.", - "independent": "Composes no kernel module, so serving.settleLocal is never executed.", - "recovery-read": "Composes no kernel module, so serving.settleLocal is never executed.", - "local-failure": "Composes no kernel module, so serving.settleLocal is never executed.", + "independent": "Composes the layered shape: its loaders settle through remote_io and serving.publish, never the local projection's settleLocal.", + "recovery-read": "Composes the layered shape, which publishes through serving.publish, never serving.settleLocal.", + "local-failure": "Composes the layered shape, which publishes through serving.publish, never serving.settleLocal.", "runtime-boundaries": "Composes the layered traversal: its sources settle through serving.settle, not the local projection.", - "shadow-layers": "Composes no kernel module, so serving.settleLocal is never executed.", - "local-clock": "Composes no kernel module, so serving.settleLocal is never executed." + "shadow-layers": "Composes the layered shape, which publishes through serving.publish, never serving.settleLocal.", + "local-clock": "Composes the local projection through serving.settleLocal, but its inline sources never fail (every offered value is accepted), so the failed-settlement arm is never taken." } + }, + "nativeMutants": { + "kind": "mapped", + "mutant": "M24", + "text": "M24 is the native twin of kernel/serving.qnt settleLocal writing NO_VALUE and a zero expiry into the slot on its not-accepted branch: both ports clear the key's local entry when a source settlement fails. The declared reproducer source-budgets/rejectedSourceLeavesPublishedLocalEntryTest does not transfer natively because its failing source is an outside bypass, so the policy regression independentFailureKeepsSettledLocalValueTest is the portable evidence." } } ], "reproducerBacklog": [ - "source-deadline-epoch", "recovery-inclusive-maximum", "recovery-future-candidate", - "legacy-recovery-inclusive-maximum", "local-precise-grid", "source-inclusive-deadline", "fence-inclusive-timestamp", "profile-source-wrong-clock", "profile-source-wrong-owner", - "profile-recovery-wrong-snapshot", - "recovery-read-wrong-admission-policy", - "legacy-recovery-wrong-snapshot", - "independent-wrong-admission-policy", "independent-wrong-recovered-value", - "effects-source-wrong-clock", - "effects-wrong-acceptance-receipt", - "legacy-recovery-strands-followers", "independent-source-wrong-clock", "independent-source-wrong-owner", "tracked-read-inclusive-fence", @@ -2285,8 +2377,6 @@ "runtime-policy-physical-ttl-ignores-recovery", "stale-recovery-inclusive-served-maximum", "stale-recovery-candidate-stamped-at-read", - "shadow-validation-fenced-fill-writes", - "shadow-validation-fill-before-source", "redis-protocol-inclusive-fence", "redis-protocol-untracked-fence", "frame-vectors-inclusive-fence", @@ -2298,25 +2388,18 @@ "envelope-vectors-escape-misses-binary-marker", "conformance-local-hit-returns-source", "conformance-remote-miss-skips-publication", - "effects-fenced-source-publishes", - "effects-late-source-accepted", "scope-late-source-repopulates-closed-memo", "scope-source-error-memoized", - "admission-duplicate-key-admitted", "layers-process-flight-crosses-instance", "layers-late-memo-into-closed-scope", "independent-fresh-frame-retained", - "independent-deadline-settles-at-start", - "recovery-read-inclusive-maximum", - "recovery-read-recovery-warms-local", - "local-failure-write-fault-publishes", - "local-failure-source-error-published", "runtime-boundaries-inclusive-cohort", "runtime-boundaries-inherited-sharing-ignores-default", - "shadow-layers-inclusive-c0-freshness", - "shadow-layers-fill-uses-current-retention", - "local-clock-hit-renews-insertion", "source-budgets-outside-call-has-deadline", "source-budgets-settled-flight-stays-registered" + ], + "nativeMutantBacklog": [ + "invalidation-transition-cutoff-moves-backwards", + "invalidation-transition-inclusive-buffer-limit" ] } diff --git a/formal/execution.mjs b/formal/execution.mjs index d38b2c7f..777fe060 100644 --- a/formal/execution.mjs +++ b/formal/execution.mjs @@ -162,6 +162,30 @@ export function classifyRuns(declarations) { return runs; } +// The schedule a model's text states, read off its declarations rather than +// listed in the manifest. Every run a model declares is a scheduled +// regression, in declaration order. A profile model exports its public-only +// runs as replay regressions, so what the ports replay is exactly what the +// text lets them replay; its state-patching runs stay model-only. +export function modelSchedule(model, bodies) { + const regressions = [...bodies].filter(([, { kind }]) => kind === 'run').map(([name]) => name); + return model.profile === undefined ? { regressions } : { regressions, replayRegressions: classifyRuns(bodies).publicOnly }; +} +// Every Quint source no scheduled model claims is a helper library, in the +// sorted order quintSources lists them. +export function libraryPaths(manifest, files = quintSources()) { + const claimed = new Set(manifest.models.map(model => model.path)); + return files.filter(path => !claimed.has(path)); +} +// The manifest with its schedule: `libraries`, and each model's `regressions` +// and (for a profile model) `replayRegressions`. Tools that run, export or +// account for the schedule read it through here; the manifest carries only +// what a person decides. Validate the manifest first (validateExecution). +export function scheduleExecution(manifest = readExecution(), { readSource = read, scanSource = scanDeclarationBodies, files = quintSources() } = {}) { + return { ...manifest, libraries: libraryPaths(manifest, files), + models: manifest.models.map(model => ({ ...model, ...modelSchedule(model, scanSource(readSource(model.path))) })) }; +} + // The checkpoint of a reproducer is the one top-level `.expect(...)` in the // cited run's chain whose condition is the declared `failure` text, compared // token by token so spacing does not matter. Returns the chain before that @@ -169,8 +193,8 @@ export function classifyRuns(declarations) { // must still pass and the second must fail: the failure then belongs to the // declared expectation, not to a step the fault disables or a later check. const opens = ['{', '(', '['], shuts = ['}', ')', ']']; -export function reproducerCheckpoint(source, run, failure) { - const declaration = scanDeclarationBodies(source).get(run); +export function reproducerCheckpoint(source, run, failure, declarations = scanDeclarationBodies(source)) { + const declaration = declarations.get(run); if (declaration?.kind !== 'run') throw new Error(`${run} is not a run declaration`); const { body, spans } = declaration; const wanted = tokenize(typeof failure === 'string' ? failure : '').tokens; @@ -226,7 +250,7 @@ export const contractIds = text => [...text.matchAll(/^\| ([CWEB]\d{2}) \|/gm)]. // because no other profile executes that text. const reproducerKinds = ['exported-regression', 'model-run']; const reproducerFields = ['kind', 'run', 'model', 'failure', 'family', 'profiles', 'exclusions', 'scope']; -function validateReproducer(challenge, model, { models, libraries, profileIds, publicOnly, readSource }) { +function validateReproducer(challenge, model, { models, libraries, profileIds, publicOnly, source, scanned }) { const { id, reproducer } = challenge; if (!reproducer || typeof reproducer !== 'object' || Array.isArray(reproducer)) throw new Error(`${id}: invalid reproducer`); const unknown = Object.keys(reproducer).filter(key => !reproducerFields.includes(key)); @@ -240,7 +264,7 @@ function validateReproducer(challenge, model, { models, libraries, profileIds, p } if (typeof run !== 'string' || !cited.regressions.includes(run)) throw new Error(`${id}: reproducer run is not a scheduled regression of ${cited.path}: ${run}`); if (!nonEmptyText(failure)) throw new Error(`${id}: reproducer failure must state the expect condition the fault breaks`); - try { reproducerCheckpoint(readSource(cited.path), run, failure); } + try { reproducerCheckpoint(source(cited.path), run, failure, scanned(cited.path)); } catch (error) { throw new Error(`${id}: ${error.message}`); } if (!isSlug(family)) throw new Error(`${id}: reproducer family must be a fault family slug`); const own = model.profile ?? model.path; @@ -271,27 +295,185 @@ function validateReproducer(challenge, model, { models, libraries, profileIds, p } } +// Every challenge names the native mutant that injects its fault into both +// ports, or explains why none exists. `mapped`: the mutant's TypeScript and Go +// sections both require generated detection, so the weekly lanes fail if the +// corpus stops detecting it in either port. `unobservable`: a port line +// exists, but the port checks the same condition again at a later point, so +// no public history distinguishes the fault; the text names the line and the +// later check. `model-only`: the fault rewrites model bookkeeping no port line +// carries; the text names the port code it examined. `crossContract` is the +// one reason a mapped mutant may sit on a semantic case that does not list +// the challenge's contract. The challenge text says why the mutant is the same +// fault as the model's; the port-side account lives once on the catalog entry. +export const nativeMutantKinds = ['mapped', 'unobservable', 'model-only']; +const nativeMutantFields = ['kind', 'text', 'mutant', 'crossContract']; +const nativeMutantTextLimits = { mapped: 500, unobservable: 900, 'model-only': 900 }; + +// One catalog of native mutants, each entry a fault described once and +// injected into both ports: `typescript` and `go` sections hold that port's +// exact-anchor edits and required detections. One id grammar serves the +// catalog, the measurers and --only. +export const mutantCatalogPath = 'formal/mutations.json'; +export const mutantIdPattern = /^M\d{2,}$/; +// Where a port's edits may point and which cohorts its detections may require. +export const mutantPorts = { + typescript: { label: 'TypeScript', edit: /^src\/[\w/-]+\.ts$/, cohorts: ['ordinary', 'generated', 'portable'] }, + go: { label: 'Go', edit: /^go\/[\w-]+\.go$/, cohorts: ['ordinary', 'generated', 'fixed', 'portable'] }, +}; +const mutantFields = ['id', 'case', 'description', 'rationale', 'typescript', 'go']; + +// The catalog's schema: ids, cases, descriptions, the rationale that carries +// the port-side account, and both ports' sections with edits inside their +// port and known cohorts. Anchors are checked separately (checkMutantAnchors), +// so validating the manifest never depends on src/ or go/ text. +export function readMutantCatalog(readText = read) { + const refuse = detail => { throw new Error(`Mutant catalog: ${detail}`); }; + const caseContracts = new Map(JSON.parse(readText('formal/semantic-cases.json')).cases.map(entry => [entry.id, entry.contracts])); + const parsed = JSON.parse(readText(mutantCatalogPath)); + if (parsed.schemaVersion !== 1 || !Array.isArray(parsed.mutations) || !parsed.mutations.length) refuse(`expected the versioned catalog ${mutantCatalogPath}`); + const mutations = new Map(); + for (const mutation of parsed.mutations) { + const { id } = mutation; + if (typeof id !== 'string' || !mutantIdPattern.test(id) || mutations.has(id)) refuse(`invalid or duplicate mutant id ${id}`); + const unknown = Object.keys(mutation).filter(key => !mutantFields.includes(key)); + if (unknown.length) refuse(`${id} has unsupported field ${unknown.join(', ')}`); + if (!caseContracts.has(mutation.case)) refuse(`${id} cites unknown case ${mutation.case}`); + if (!nonEmptyText(mutation.description)) refuse(`${id} has no description`); + if (!nonEmptyText(mutation.rationale)) refuse(`${id} has no rationale naming the port lines it edits`); + for (const [port, { label, edit: editPath, cohorts }] of Object.entries(mutantPorts)) { + const section = mutation[port]; + if (!section || typeof section !== 'object' || Array.isArray(section)) refuse(`${id} has no ${label} section`); + const extra = Object.keys(section).filter(key => !['edits', 'requiredDetections'].includes(key)); + if (extra.length) refuse(`${id} ${label} section has unsupported field ${extra.join(', ')}`); + if (!Array.isArray(section.requiredDetections) || section.requiredDetections.some(cohort => !cohorts.includes(cohort))) refuse(`${id} requires an unknown ${label} cohort`); + if (!Array.isArray(section.edits) || !section.edits.length) refuse(`${id} has no ${label} edits`); + for (const edit of section.edits) { + if (typeof edit?.path !== 'string' || !editPath.test(edit.path) || edit.path.endsWith('_test.go')) refuse(`${id} edits ${edit?.path} outside the ${label} port`); + if (!nonEmptyText(edit.before) || typeof edit.after !== 'string' || edit.before === edit.after) refuse(`${id} has an empty or unchanged edit in ${edit.path}`); + } + } + mutations.set(id, mutation); + } + return { mutations, caseContracts }; +} + +// The port view of a catalog entry: what one measurer applies and gates. +export function mutantsForPort(catalog, port) { + return [...catalog.mutations.values()].map(mutation => ({ id: mutation.id, case: mutation.case, description: mutation.description, ...mutation[port] })); +} + +// Every anchor still matches the port text exactly once when the entry's +// edits are applied in order, so a refactor that moves an anchored line fails +// the audit, the pull request's test suite and the measurers, never the Quint +// lanes. Returns the original text of every edited file, which the measurers +// restore after each mutant. `readText` reads a repository-relative path, so +// a measurement checks its workspace copy. +export function checkMutantAnchors(catalog, readText = read) { + const sources = new Map(); + const source = path => { if (!sources.has(path)) sources.set(path, readText(path)); return sources.get(path); }; + for (const mutation of catalog.mutations.values()) { + for (const port of Object.keys(mutantPorts)) { + const texts = new Map(); + for (const edit of mutation[port].edits) { + const current = texts.get(edit.path) ?? source(edit.path); + if (current.split(edit.before).length !== 2) throw new Error(`Mutant anchor drift: ${mutation.id}: anchor must match exactly once in ${edit.path}; review the ${mutantPorts[port].label} port or the catalog`); + texts.set(edit.path, current.replace(edit.before, () => edit.after)); + } + } + } + return sources; +} + +const portPath = /\b(?:src|go)\/[\w./-]+/; +function validateNativeMutants(challenge, { catalog }) { + const { id, nativeMutants: native } = challenge; + if (!native || typeof native !== 'object' || Array.isArray(native)) throw new Error(`${id}: invalid nativeMutants`); + const unknown = Object.keys(native).filter(key => !nativeMutantFields.includes(key)); + if (unknown.length) throw new Error(`${id}: unsupported nativeMutants field ${unknown.join(', ')}`); + const { kind, text, mutant, crossContract } = native; + if (!nativeMutantKinds.includes(kind)) throw new Error(`${id}: nativeMutants kind must be one of ${nativeMutantKinds.join(', ')}`); + if (!nonEmptyText(text)) throw new Error(`${id}: nativeMutants text must say why the mutant is the same fault or explain why none exists`); + // The text carries the why; the where lives on the catalog entry. A ceiling + // keeps the port-side account from creeping back into every citing challenge. + if (text.length > nativeMutantTextLimits[kind]) throw new Error(`${id}: nativeMutants text exceeds ${nativeMutantTextLimits[kind]} characters; the port-side account belongs in the mutant's rationale`); + if (kind !== 'mapped') { + if (mutant !== undefined || crossContract !== undefined) throw new Error(`${id}: ${kind} nativeMutants name no mutant`); + // An explanation names the port code it examined, so a reader can check it. + if (!portPath.test(text)) throw new Error(`${id}: ${kind} nativeMutants text must name the port file it examined`); + return; + } + if (typeof mutant !== 'string') throw new Error(`${id}: mapped nativeMutants need a mutant id`); + const entry = catalog.mutations.get(mutant); + if (!entry) throw new Error(`${id}: ${mutant} is not in the mutant catalog`); + if (!text.includes(mutant)) throw new Error(`${id}: nativeMutants text must name ${mutant}`); + if (!Object.keys(mutantPorts).every(port => entry[port].requiredDetections.includes('generated'))) throw new Error(`${id}: ${mutant} must require generated detection in both ports`); + const outside = !catalog.caseContracts.get(entry.case).includes(challenge.contract); + if (outside && !nonEmptyText(crossContract)) throw new Error(`${id}: ${mutant} is on case ${entry.case} which does not list ${challenge.contract}; add a crossContract reason`); + if (!outside && crossContract !== undefined) throw new Error(`${id}: crossContract note for in-contract mutant ${mutant}`); +} + +// Challenges that predate the native-mutant requirement. The cutoff fault +// lives only in the Lua invalidation script (src/internal/redis-scripts.ts, +// go/redis_adapter.go), which no in-process cohort executes. The buffer-limit +// fault has client-side lines in both ports (src/internal/duration.ts +// assertSupportedFutureBufferMs, go/cache.go Invalidate), but no generated +// history invalidates with the maximum buffer, so a mapped mutant would lack +// its required detection; it closes when a profile exposes the buffer as an +// input and an exported regression reaches the bound. The list may only +// shrink: a new challenge maps to a native mutant or explains why none exists, +// and listing it here instead is a reviewed change to this constant, never a +// manifest edit. +export const grandfatheredNativeMutantBacklog = Object.freeze([ + 'invalidation-transition-cutoff-moves-backwards', + 'invalidation-transition-inclusive-buffer-limit', +]); + +// Which challenges cite each mutant, in manifest order. The mutation reports +// print it beside every measured mutant. +export function challengesByMutant(manifest) { + const index = new Map(); + for (const challenge of manifest.challenges) { + const mutant = challenge.nativeMutants?.mutant; + if (mutant === undefined) continue; + if (!index.has(mutant)) index.set(mutant, []); + index.get(mutant).push(challenge.id); + } + return index; +} + +// A backlog is the exact set of challenges lacking one field, reported and +// frozen: it cannot hide a challenge that has the field or never existed, and +// only the grandfathered ids may sit in it, so it only shrinks. +function validateBacklog(challenges, ids, { name, listed, present, grandfathered, missing, has, lacks, requirement }) { + if (!Array.isArray(listed)) throw new Error(missing); + const backlog = new Set(listed); + if (backlog.size !== listed.length) throw new Error(`Duplicate challenge ids in ${name}`); + for (const id of backlog) { + if (!ids.has(id)) throw new Error(`${name} names an unknown challenge: ${id}`); + } + const frozen = new Set(grandfathered); + for (const challenge of challenges) { + const inBacklog = backlog.has(challenge.id); + if (present(challenge) && inBacklog) throw new Error(`${challenge.id}: ${has} and is listed in ${name}`); + if (!present(challenge) && !inBacklog) throw new Error(`${challenge.id}: ${lacks} and is not listed in ${name}`); + if (inBacklog && !frozen.has(challenge.id)) throw new Error(`${challenge.id}: ${requirement}; ${name} only grandfathers the challenges that predate the requirement`); + } + return backlog.size; +} + // Challenges that predate the reproducer requirement. The backlog may only // shrink: a new challenge must carry a reproducer, and listing it here instead // is a reviewed change to this constant, never a manifest edit. export const grandfatheredReproducerBacklog = Object.freeze([ - 'source-deadline-epoch', 'recovery-inclusive-maximum', 'recovery-future-candidate', - 'legacy-recovery-inclusive-maximum', 'local-precise-grid', 'source-inclusive-deadline', 'fence-inclusive-timestamp', 'profile-source-wrong-clock', 'profile-source-wrong-owner', - 'profile-recovery-wrong-snapshot', - 'recovery-read-wrong-admission-policy', - 'legacy-recovery-wrong-snapshot', - 'independent-wrong-admission-policy', 'independent-wrong-recovered-value', - 'effects-source-wrong-clock', - 'effects-wrong-acceptance-receipt', - 'legacy-recovery-strands-followers', 'independent-source-wrong-clock', 'independent-source-wrong-owner', 'tracked-read-inclusive-fence', @@ -301,8 +483,6 @@ export const grandfatheredReproducerBacklog = Object.freeze([ 'runtime-policy-physical-ttl-ignores-recovery', 'stale-recovery-inclusive-served-maximum', 'stale-recovery-candidate-stamped-at-read', - 'shadow-validation-fenced-fill-writes', - 'shadow-validation-fill-before-source', 'redis-protocol-inclusive-fence', 'redis-protocol-untracked-fence', 'frame-vectors-inclusive-fence', @@ -314,39 +494,30 @@ export const grandfatheredReproducerBacklog = Object.freeze([ 'envelope-vectors-escape-misses-binary-marker', 'conformance-local-hit-returns-source', 'conformance-remote-miss-skips-publication', - 'effects-fenced-source-publishes', - 'effects-late-source-accepted', 'scope-late-source-repopulates-closed-memo', 'scope-source-error-memoized', - 'admission-duplicate-key-admitted', 'layers-process-flight-crosses-instance', 'layers-late-memo-into-closed-scope', 'independent-fresh-frame-retained', - 'independent-deadline-settles-at-start', - 'recovery-read-inclusive-maximum', - 'recovery-read-recovery-warms-local', - 'local-failure-write-fault-publishes', - 'local-failure-source-error-published', 'runtime-boundaries-inclusive-cohort', 'runtime-boundaries-inherited-sharing-ignores-default', - 'shadow-layers-inclusive-c0-freshness', - 'shadow-layers-fill-uses-current-retention', - 'local-clock-hit-renews-insertion', 'source-budgets-outside-call-has-deadline', 'source-budgets-settled-flight-stays-registered', ]); // Compiling semantic faults, checked against independent model obligations. // Every scheduled model carries at least one challenge or an explicit waiver. -// Every challenge carries a reproducer or is listed in the reported backlog. -function validateChallenges(manifest, { readSource, contracts, sources, profileIds, publicOnly, grandfathered = grandfatheredReproducerBacklog }) { - const { challenges, reproducerBacklog } = manifest; +// Every challenge carries a reproducer or is listed in the reported backlog, +// and maps to native mutants in both ports or is listed in that backlog. +function validateChallenges(manifest, { source, scanned, contracts, sources, profileIds, publicOnly, catalog, + grandfathered = grandfatheredReproducerBacklog, grandfatheredNative = grandfatheredNativeMutantBacklog }) { + const { challenges, reproducerBacklog, nativeMutantBacklog } = manifest; if (!Array.isArray(challenges) || !challenges.length) throw new Error('Model property challenge catalog is missing'); - if (!Array.isArray(reproducerBacklog)) throw new Error('Challenge reproducer backlog is missing'); const models = new Map(manifest.models.map(model => [model.path, model])); const fields = ['id', 'contract', 'source', 'model', 'invariant', 'before', 'after']; - const optional = ['measures', 'reproducer']; + const optional = ['measures', 'reproducer', 'nativeMutants']; const ids = new Set(), faults = new Map(), challengedModels = new Set(); + const kinds = { mapped: 0, unobservable: 0, 'model-only': 0 }; let reproducers = 0; for (const challenge of challenges) { if (!challenge || typeof challenge !== 'object' || fields.some(key => typeof challenge[key] !== 'string' || !challenge[key])) { @@ -362,35 +533,36 @@ function validateChallenges(manifest, { readSource, contracts, sources, profileI if (!model) throw new Error(`${challenge.id}: challenged model is not scheduled: ${challenge.model}`); if (!model.invariants.includes(challenge.invariant)) throw new Error(`${challenge.id}: ${challenge.invariant} is not a scheduled invariant of ${challenge.model}`); if (challenge.before === challenge.after) throw new Error(`${challenge.id}: mutation must change the source`); - if (readSource(challenge.source).split(challenge.before).length !== 2) throw new Error(`${challenge.id}: mutation anchor must match exactly once in ${challenge.source}`); + if (source(challenge.source).split(challenge.before).length !== 2) throw new Error(`${challenge.id}: mutation anchor must match exactly once in ${challenge.source}`); const fault = JSON.stringify([challenge.source, challenge.before, challenge.after]); if (faults.has(fault) && !nonEmptyText(challenge.measures)) { - throw new Error(`${challenge.id}: repeats the fault of ${faults.get(fault)} without a measures note`); + throw new Error(`${challenge.id}: repeats the fault of ${faults.get(fault).id} without a measures note`); } if (challenge.measures !== undefined && (!nonEmptyText(challenge.measures) || !faults.has(fault))) { throw new Error(`${challenge.id}: a measures note is only for a repeated fault`); } - if (!faults.has(fault)) faults.set(fault, challenge.id); challengedModels.add(challenge.model); if (challenge.reproducer !== undefined) { - validateReproducer(challenge, model, { models, libraries: manifest.libraries, profileIds, publicOnly, readSource }); + validateReproducer(challenge, model, { models, libraries: manifest.libraries, profileIds, publicOnly, source, scanned }); reproducers++; } + if (challenge.nativeMutants !== undefined) { + validateNativeMutants(challenge, { catalog }); + kinds[challenge.nativeMutants.kind]++; + } + // One fault, one native mapping: a repeated fault measured against another + // invariant names the same kind and mutant. The text and any crossContract + // reason speak for the challenge's own contract and may differ. + const native = challenge.nativeMutants === undefined ? null + : JSON.stringify([challenge.nativeMutants.kind, challenge.nativeMutants.mutant ?? null]); + if (faults.has(fault) && faults.get(fault).native !== native) throw new Error(`${challenge.id}: maps the fault of ${faults.get(fault).id} differently`); + if (!faults.has(fault)) faults.set(fault, { id: challenge.id, native }); } - // The backlog is the exact set of challenges without a reproducer: it can be - // reported, and it cannot hide a challenge that has one or never existed. - const backlog = new Set(reproducerBacklog); - if (backlog.size !== reproducerBacklog.length) throw new Error('Duplicate challenge ids in reproducerBacklog'); - for (const id of backlog) { - if (!ids.has(id)) throw new Error(`reproducerBacklog names an unknown challenge: ${id}`); - } - const grandfatheredIds = new Set(grandfathered); - for (const challenge of challenges) { - const listed = backlog.has(challenge.id); - if (challenge.reproducer !== undefined && listed) throw new Error(`${challenge.id}: has a reproducer and is listed in reproducerBacklog`); - if (challenge.reproducer === undefined && !listed) throw new Error(`${challenge.id}: has no reproducer and is not listed in reproducerBacklog`); - if (listed && !grandfatheredIds.has(challenge.id)) throw new Error(`${challenge.id}: new challenges must carry a reproducer; reproducerBacklog only grandfathers the challenges that predate the requirement`); - } + const reproducerBacklogSize = validateBacklog(challenges, ids, { name: 'reproducerBacklog', listed: reproducerBacklog, present: challenge => challenge.reproducer !== undefined, + grandfathered, missing: 'Challenge reproducer backlog is missing', has: 'has a reproducer', lacks: 'has no reproducer', requirement: 'new challenges must carry a reproducer' }); + const nativeBacklogSize = validateBacklog(challenges, ids, { name: 'nativeMutantBacklog', listed: nativeMutantBacklog, present: challenge => challenge.nativeMutants !== undefined, + grandfathered: grandfatheredNative, missing: 'Challenge native-mutant backlog is missing', has: 'has nativeMutants', lacks: 'has no nativeMutants', + requirement: 'new challenges must map to a native mutant in both ports or explain why none exists' }); const waived = []; for (const model of manifest.models) { if (model.challengeWaiver !== undefined) { @@ -400,19 +572,30 @@ function validateChallenges(manifest, { readSource, contracts, sources, profileI throw new Error(`${model.path}: scheduled invariants have no model property challenge and no challengeWaiver`); } } + // Catalog mutants no challenge cites are reported, not gated: the catalog + // may carry faults for rules the models do not challenge. + const cited = challengesByMutant(manifest); + const unmappedMutants = [...catalog.mutations.keys()].filter(id => !cited.has(id)).length; return { challenges: challenges.length, distinctFaults: faults.size, challengedModels: challengedModels.size, waivedModels: waived.length, - reproducers, reproducerBacklog: backlog.size }; + reproducers, reproducerBacklog: reproducerBacklogSize, + nativeMutants: { mapped: kinds.mapped, unobservable: kinds.unobservable, modelOnly: kinds['model-only'], backlog: nativeBacklogSize }, + unmappedMutants }; } export function validateExecution(manifest = readExecution(), { readSource = read, + scanSource = scanDeclarationBodies, grandfathered = grandfatheredReproducerBacklog, + grandfatheredNative = grandfatheredNativeMutantBacklog, + catalog = readMutantCatalog(), files = quintSources(), profiles = JSON.parse(read('formal/profiles.json')).profiles, contracts = contractIds(read('formal/CONTRACTS.md')), } = {}) { - if (manifest.schemaVersion !== 1 || !Array.isArray(manifest.models) || !manifest.models.length || - !Array.isArray(manifest.libraries)) throw new Error('Unsupported model execution manifest'); + if (manifest.schemaVersion !== 1 || !Array.isArray(manifest.models) || !manifest.models.length) throw new Error('Unsupported model execution manifest'); + // The schedule is read from the Quint text (modelSchedule, libraryPaths); a + // manifest that lists it again is a copy the text would contradict. + if (manifest.libraries !== undefined) throw new Error('libraries are read from the Quint sources: every source no scheduled model claims; delete the list'); if (!Array.isArray(profiles) || !profiles.length || profiles.some(profile => typeof profile.id !== 'string' || !/^[a-z][a-z-]*$/.test(profile.id)) || new Set(profiles.map(profile => profile.id)).size !== profiles.length) throw new Error('Invalid execution profile IDs'); @@ -425,19 +608,30 @@ export function validateExecution(manifest = readExecution(), { if (check.outputDirectory !== '.formal-traces/verification') throw new Error('Unsupported verification output directory'); // Scheduled models live at formal/; helper libraries live there or, for the - // kernel library's concern modules, at formal/kernel/. Kernel modules are - // never scheduled on their own: a composed profile executes them, and a - // fault in one is measured through the profiles that compose it. - const paths = [...manifest.models.map(model => model.path), ...manifest.libraries]; + // kernel library's concern modules, at formal/kernel/, and are every Quint + // source no model claims. Kernel modules are never scheduled on their own: + // a composed profile executes them, and a fault in one is measured through + // the profiles that compose it. + const modelPaths = manifest.models.map(model => model.path); if (manifest.models.some(model => typeof model.path !== 'string' || !/^formal\/[\w-]+\.qnt$/.test(model.path)) || - manifest.libraries.some(path => typeof path !== 'string' || !isQuintSourcePath(path)) || - new Set(paths).size !== paths.length || !sameMembers(paths, files)) throw new Error('Model/library file inventory changed; review the execution schedule'); - const profileIds = [], outputDirectories = new Set([check.outputDirectory]), publicOnly = new Map(); + new Set(modelPaths).size !== modelPaths.length || modelPaths.some(path => !files.includes(path))) throw new Error('Model/library file inventory changed; review the execution schedule'); + const libraries = libraryPaths(manifest, files); + if (libraries.some(path => !isQuintSourcePath(path))) throw new Error('Model/library file inventory changed; review the execution schedule'); + const paths = [...modelPaths, ...libraries]; + // One pass reads and scans each source once: the model and library loops, + // the challenge anchors and every reproducer checkpoint share these memos, + // so a pass costs one scan per file rather than one per citation. They live + // in the pass, not the module, because callers hand in temporary sources; a + // caller validating many times may pass a `scanSource` memoized by text. + const texts = new Map(), scans = new Map(); + const source = path => { if (!texts.has(path)) texts.set(path, readSource(path)); return texts.get(path); }; + const scanned = path => { if (!scans.has(path)) scans.set(path, scanSource(source(path))); return scans.get(path); }; + const profileIds = [], outputDirectories = new Set([check.outputDirectory]), publicOnly = new Map(), schedules = new Map(); let invariants = 0, regressions = 0, generatedTraces = 0; let exportedRegressionTraces = 0, generatedVectors = 0, vectorModels = 0; const vectorPaths = new Set(); for (const model of manifest.models) { - const bodies = scanDeclarationBodies(readSource(model.path)); + const bodies = scanned(model.path); const declarations = new Map([...bodies].map(([name, { kind }]) => [name, kind])); if (declarations.get('init') !== 'action' || declarations.get('step') !== 'action') throw new Error(`${model.path}: scheduled model needs init and step actions`); names(model.invariants, `${model.path} invariants`); @@ -451,22 +645,30 @@ export function validateExecution(manifest = readExecution(), { for (const name of model.invariants) { if (declarations.get(name) !== 'val') throw new Error(`${model.path}: scheduled invariant is not a declared val: ${name}`); } - names(model.regressions, `${model.path} regressions`, true); - const declaredRuns = [...declarations].filter(([, kind]) => kind === 'run').map(([name]) => name); - if (model.regressions.some(name => !name.endsWith('Test')) || !sameMembers(model.regressions, declaredRuns)) { - throw new Error(`${model.path}: regression schedule must exactly name every run and retain the Test suffix`); - } + if (model.regressions !== undefined || model.replayRegressions !== undefined) throw new Error(`${model.path}: regressions and replayRegressions are read from the model's runs; delete the lists`); + const schedule = modelSchedule(model, bodies); + const unsuffixed = schedule.regressions.filter(name => !name.endsWith('Test')); + if (unsuffixed.length) throw new Error(`${model.path}: every run is a scheduled regression and must keep the Test suffix: ${unsuffixed.join(', ')}`); + schedules.set(model.path, schedule); invariants += model.invariants.length; - regressions += model.regressions.length; + regressions += schedule.regressions.length; if (model.propertyChallenge !== undefined) throw new Error(`${model.path}: property challenges live in the manifest challenges catalog`); // A composed profile's declared behavior: bumping behaviorVersion says its // observable behavior changed on purpose, so the corpus differential // reports that profile instead of comparing it against the reference. + // maxBytesPerStateRatio is the profile's own bound on trace growth for the + // differential, in place of the lane's default: a composition that must + // carry more state per trace than its predecessor declares it, with the + // reason recorded in the kernel README's record table. if (model.differential !== undefined) { - if (!model.differential || typeof model.differential !== 'object' || Array.isArray(model.differential) || model.generate === undefined || - Object.keys(model.differential).join() !== 'behaviorVersion') throw new Error(`${model.path}: unsupported differential settings`); - const { behaviorVersion } = model.differential; - if (!Number.isSafeInteger(behaviorVersion) || behaviorVersion < 1) throw new Error(`${model.path}: differential.behaviorVersion must be a positive integer`); + const settings = model.differential, known = ['behaviorVersion', 'maxBytesPerStateRatio']; + if (!settings || typeof settings !== 'object' || Array.isArray(settings) || model.generate === undefined || + !Object.keys(settings).length || Object.keys(settings).some(key => !known.includes(key))) throw new Error(`${model.path}: unsupported differential settings`); + const { behaviorVersion, maxBytesPerStateRatio } = settings; + if (behaviorVersion !== undefined && (!Number.isSafeInteger(behaviorVersion) || behaviorVersion < 1)) throw new Error(`${model.path}: differential.behaviorVersion must be a positive integer`); + if (maxBytesPerStateRatio !== undefined && (typeof maxBytesPerStateRatio !== 'number' || !Number.isFinite(maxBytesPerStateRatio) || maxBytesPerStateRatio < 1)) { + throw new Error(`${model.path}: differential.maxBytesPerStateRatio must be a finite number of at least 1`); + } } if (model.profile !== undefined || model.generate !== undefined) { const profile = profiles.find(profile => profile.id === model.profile); @@ -483,22 +685,13 @@ export function validateExecution(manifest = readExecution(), { outputDirectories.add(generation.outputDirectory); generatedTraces += generation.traces; } - if (model.replayRegressions !== undefined) { - names(model.replayRegressions, `${model.path} replay regressions`); - exportedRegressionTraces += model.replayRegressions.length; - if (!model.profile || declarations.get('input') !== 'var' || - model.replayRegressions.some(name => !model.regressions.includes(name))) throw new Error(`${model.path}: replay regressions need declared input and scheduled tests`); - } if (model.profile !== undefined) { - // Every deterministic history a driver could replay must be exported, and - // an exported history must never patch model state behind the driver. - const runs = classifyRuns(bodies); - publicOnly.set(model.path, runs.publicOnly); - const exported = new Set(model.replayRegressions ?? []); - const unexported = runs.publicOnly.filter(name => !exported.has(name)); - const patched = runs.patching.filter(name => exported.has(name)); - if (unexported.length) throw new Error(`${model.path}: public-only runs are not exported as replay regressions: ${unexported.join(', ')}`); - if (patched.length) throw new Error(`${model.path}: state-patching runs cannot be replay regressions: ${patched.join(', ')}`); + // A profile records every public command in `input`; its public-only + // runs are the histories both ports replay (modelSchedule), so a driver + // can replay every deterministic history and never sees a patched state. + if (declarations.get('input') !== 'var') throw new Error(`${model.path}: exported replay regressions need a declared input variable`); + exportedRegressionTraces += schedule.replayRegressions.length; + publicOnly.set(model.path, schedule.replayRegressions); } if (model.vectorExport !== undefined) { const vector = model.vectorExport; @@ -507,7 +700,7 @@ export function validateExecution(manifest = readExecution(), { || !/^formal\/quint-[\w-]+-vectors\.json$/.test(vector.artifact) || !Array.isArray(vector.sources) || new Set(vector.sources).size !== vector.sources.length || !vector.sources.includes(model.path) || !vector.sources.includes(vector.generator) - || vector.sources.some(path => path !== model.path && path !== vector.generator && !manifest.libraries.includes(path))) { + || vector.sources.some(path => path !== model.path && path !== vector.generator && !libraries.includes(path))) { throw new Error(`${model.path}: invalid vector export boundary`); } positiveInteger(vector.cases, `${model.path} vector cases`); @@ -518,27 +711,35 @@ export function validateExecution(manifest = readExecution(), { for (const path of vector.sources) read(path); } } - for (const path of manifest.libraries) { - const declarations = scanDeclarations(readSource(path)); - if ([...declarations.values()].some(kind => ['action', 'run', 'var'].includes(kind))) throw new Error(`${path}: a stateful model cannot be classified as a pure helper library`); + // A Quint source with actions, runs or state is a model: it runs only when + // the manifest schedules it, so it may not sit unscheduled among the libraries. + for (const path of libraries) { + if ([...scanned(path).values()].some(({ kind }) => ['action', 'run', 'var'].includes(kind))) throw new Error(`${path}: a stateful Quint source must be a scheduled model; a helper library declares no actions, runs or state`); } - // A kernel module exists to be composed: one no scheduled model reaches is - // never typechecked or executed by any lane, so it may not stay listed. + // A library exists to be imported: one no scheduled model reaches, directly + // or through another library, is never typechecked or executed by any lane, + // so it may not stay in the tree. This is also the inventory tripwire: a + // stray or half-deleted stateless source at formal/ is refused here rather + // than admitted as a library by the directory listing. const reached = new Set(manifest.models.flatMap(model => importClosure(model.path))); - const orphans = manifest.libraries.filter(path => isKernelSource(path) && !reached.has(path)); - if (orphans.length) throw new Error(`Kernel modules no scheduled model imports: ${orphans.join(', ')}; compose them or delete them`); + const orphans = libraries.filter(path => !reached.has(path)); + if (orphans.length) throw new Error(`Quint libraries no scheduled model imports: ${orphans.join(', ')}; import them from a scheduled model or delete them`); if (!sameMembers(profileIds, profiles.map(profile => profile.id))) throw new Error('Generated profile inventory differs from claim registry'); - const challenges = validateChallenges(manifest, { readSource, contracts, sources: new Set(paths), profileIds: new Set(profileIds), publicOnly, grandfathered }); - return { models: manifest.models.length, libraries: manifest.libraries.length, profiles: profileIds.length, invariants, regressions, generatedTraces, exportedRegressionTraces, vectorModels, generatedVectors, ...challenges }; + const scheduled = { ...manifest, libraries, models: manifest.models.map(model => ({ ...model, ...schedules.get(model.path) })) }; + const challenges = validateChallenges(scheduled, { source, scanned, contracts, sources: new Set(paths), profileIds: new Set(profileIds), publicOnly, catalog, grandfathered, grandfatheredNative }); + return { models: manifest.models.length, libraries: libraries.length, profiles: profileIds.length, invariants, regressions, generatedTraces, exportedRegressionTraces, vectorModels, generatedVectors, ...challenges }; } -// Call after validateExecution: coverage links must name checks that run, not -// merely declarations that happen to exist in a model or a comment. +// Over a scheduled manifest (scheduleExecution) after validateExecution: +// coverage links must name checks that run, not merely declarations that +// happen to exist in a model or a comment. export function scheduledProperties(manifest) { return new Set(manifest.models.flatMap(model => [...model.invariants, ...model.regressions].map(name => `${model.path}:${name}`))); } +// The audit entry point also anchors every catalog edit in the port text. if (process.argv[1] === fileURLToPath(import.meta.url)) { - console.log(JSON.stringify(validateExecution(process.argv.includes('--stdin') - ? JSON.parse(readFileSync(0, 'utf8')) : undefined), null, 2)); + const summary = validateExecution(process.argv.includes('--stdin') ? JSON.parse(readFileSync(0, 'utf8')) : undefined); + const catalog = readMutantCatalog(); + console.log(JSON.stringify({ ...summary, mutantAnchors: { mutants: catalog.mutations.size, files: checkMutantAnchors(catalog).size } }, null, 2)); } diff --git a/formal/fixture-recipes.json b/formal/fixture-recipes.json index 886adf33..e1362724 100644 --- a/formal/fixture-recipes.json +++ b/formal/fixture-recipes.json @@ -20,40 +20,29 @@ "redisWrites": true }, "effects": { - "acceptedAt": true, - "acceptedWall": true, - "activeLoader": true, - "activeRead": true, - "baseReadBudget": true, - "calls": true, - "deadline": true, - "decodeStarted": true, - "dumps": true, - "events": true, - "invalidations": true, - "loaders": true, - "loads": true, - "now": true, - "observedFence": true, - "observerFailed": true, - "phase": true, - "policyCalls": true, - "readAborts": true, - "readBudget": true, - "readBudgets": true, - "readStarted": true, - "readStates": true, - "reads": true, - "refill": true, - "reply": true, - "replyAt": true, - "sources": true, - "storedTimestamp": true, - "tracked": true, - "wall": true, - "watermark": true, - "writeTimestamp": true, - "writes": true + "o": { + "calls": true, + "classifications": true, + "comparisons": true, + "dumps": true, + "invalidations": true, + "loaders": true, + "loads": true, + "maintenance": true, + "policyCalls": true, + "reads": true, + "recovery": true, + "shadow": true, + "sourceScopes": true, + "writeTtls": true, + "writes": true + }, + "io": { + "aborted": true, + "budgets": true, + "sourceErrors": true + }, + "events": true }, "scope": { "o": { @@ -208,100 +197,16 @@ "sourceErrors": true } }, - "recovery-read": { - "acceptedFresh": true, - "acceptedMaximum": true, - "activeSource": true, - "canRecover": true, - "canWrite": true, - "candidate": true, - "candidateCreated": true, - "closed": true, - "compression": true, - "created": true, - "expires": true, - "frame": true, - "freshMs": true, + "independent-shadow": { + "deadlines": true, + "drained": true, "io": { "aborted": true, "budgets": true, "sourceErrors": true }, - "localExpires": true, - "localValue": true, - "localVersion": true, - "markerExpires": true, - "markers": true, - "maximumMs": true, - "memo": true, - "now": true, - "o": { - "calls": true, - "classifications": true, - "comparisons": true, - "dumps": true, - "invalidations": true, - "loaders": true, - "loads": true, - "maintenance": true, - "policyCalls": true, - "reads": true, - "recovery": true, - "shadow": true, - "sourceScopes": true, - "writeTtls": true, - "writes": true - }, - "observedFence": true, - "phase": true, - "readReceipts": true, - "recoveryReceipts": true, - "scope": true, - "tracked": true, - "wall": true, - "watermark": true, - "writeFailed": true, - "writeReceipts": true - }, - "local-failure": { - "acceptedRemote": true, - "failed": true, - "localBefore": true, - "localMiss": true, - "localValue": true, - "memo": true, - "o": { - "calls": true, - "classifications": true, - "comparisons": true, - "dumps": true, - "invalidations": true, - "loaders": true, - "loads": true, - "maintenance": true, - "policyCalls": true, - "reads": true, - "recovery": true, - "shadow": true, - "sourceScopes": true, - "writeTtls": true, - "writes": true - }, - "pending": true, - "readFailed": true, - "receipts": true, - "remoteEnabled": true, - "remoteValue": true, - "scope": true - }, - "shadow-layers": { - "calls": true, - "dumps": true, - "jobs": true, - "localExpires": true, - "localValues": true, - "localWriters": true, - "memo": true, + "loaders": true, + "loads": true, "now": true, "o": { "calls": true, @@ -320,54 +225,12 @@ "writeTtls": true, "writes": true }, - "policy": { - "choice": true, - "freshMs": true, - "local": true, - "request": true, - "retainedMs": true, - "serving": true, - "shadow": true - }, - "remoteCreated": true, - "remoteExpires": true, - "remoteValues": true, - "sources": true, - "work": true, - "writes": true - }, - "local-clock": { - "constructed": true, - "entries": true, - "fills": true, - "o": { - "calls": true, - "classifications": true, - "comparisons": true, - "dumps": true, - "invalidations": true, - "loaders": true, - "loads": true, - "maintenance": true, - "policyCalls": true, - "reads": true, - "recovery": true, - "shadow": true, - "sourceScopes": true, - "writeTtls": true, - "writes": true - }, - "probes": true, - "ticks": true - }, - "effects-13": { - "calls": true, + "owners": true, + "readBudget": true, "reads": true, - "loaders": true, - "loads": true, - "dumps": true, - "writes": true, - "events": true + "retained": true, + "sources": true, + "ttls": true }, "layers": { "capacity": true, @@ -405,174 +268,7 @@ "tracked": true, "watermark": true }, - "recovery": { - "acceptedMaxAge": true, - "candidate": true, - "candidateCreated": true, - "classifier": true, - "created": true, - "deadline": true, - "expires": true, - "frame": true, - "loadFailed": true, - "maxAge": true, - "now": true, - "phase": true, - "readFailed": true, - "wall": true, - "watermark": true, - "o": { - "calls": true, - "reads": true, - "loads": true, - "loaders": true, - "classifications": true, - "dumps": true, - "writes": true, - "recovery": true, - "shadow": true - }, - "d": { - "ages": true - } - }, - "shadow-16": { - "abandoned": true, - "c0": true, - "created": true, - "deadline": true, - "frame": true, - "loadFailed": true, - "now": true, - "phase": true, - "readFailed": true, - "wall": true, - "watermark": true, - "writeFailed": true, - "o": { - "calls": true, - "reads": true, - "loads": true, - "loaders": true, - "classifications": true, - "dumps": true, - "writes": true, - "recovery": true, - "shadow": true - }, - "d": { - "ages": true - } - }, - "recovery-17": { - "acceptedMaxAge": true, - "activeLoader": true, - "attached": true, - "canRecover": true, - "canWrite": true, - "candidate": true, - "candidateCreated": true, - "classifier": true, - "closed": true, - "created": true, - "d": { - "ages": true, - "coalesced": true, - "fallbackErrors": true, - "warnings": true - }, - "deadline": true, - "expires": true, - "frame": true, - "instanceClassifier": true, - "loadFailed": true, - "maxAge": true, - "memo": true, - "now": true, - "o": { - "calls": true, - "classifications": true, - "comparisons": true, - "dumps": true, - "invalidations": true, - "loaders": true, - "loads": true, - "maintenance": true, - "policyCalls": true, - "reads": true, - "recovery": true, - "shadow": true, - "sourceScopes": true, - "writeTtls": true, - "writes": true - }, - "observedFence": true, - "phase": true, - "readFailed": true, - "request": true, - "sourceError": true, - "sources": true, - "wall": true, - "watermark": true - }, - "shadow-18": { - "abandoned": true, - "acceptedInvalidLog": true, - "acceptedLog": true, - "c0": true, - "c0Created": true, - "comparator": true, - "comparisonMs": true, - "created": true, - "d": { - "ages": true, - "coalesced": true, - "configErrors": true, - "fallbackErrors": true, - "warnings": true - }, - "deadline": true, - "defaultLog": true, - "dumpFailed": true, - "fence": true, - "frame": true, - "hook": true, - "invalidLog": true, - "invalidShadow": true, - "loadFailed": true, - "log": true, - "mismatchAuthorizations": true, - "now": true, - "o": { - "calls": true, - "classifications": true, - "comparisons": true, - "dumps": true, - "invalidations": true, - "loaders": true, - "loads": true, - "maintenance": true, - "policyCalls": true, - "reads": true, - "recovery": true, - "shadow": true, - "sourceScopes": true, - "writeTtls": true, - "writes": true - }, - "phase": true, - "readFailed": true, - "shadowActive": true, - "source": true, - "sourcePending": true, - "sourceValue": true, - "sourceWorkMs": true, - "wall": true, - "watermark": true, - "writeFailed": true, - "writeStamp": true - }, - "recovery-read-19": { + "recovery-read": { "o": { "calls": true, "classifications": true, @@ -1320,7 +1016,7 @@ ["beginCall", 2], ["beginCall", 0] ], - "projection": "local-failure" + "projection": "observations" } ] }, @@ -1363,7 +1059,7 @@ ["policy", 12], ["beginCall", 9] ], - "projection": "shadow-layers" + "projection": "observations" } ] }, @@ -1389,12 +1085,9 @@ ["call", 1], ["call", 3] ], - "projection": "local-clock" + "projection": "observations" } - ], - "actionBindings": { - "call": "callCache" - } + ] }, { "path": "formal/source-budgets-smoke.itf.json", @@ -1425,32 +1118,32 @@ { "id": "observerFailuresCannotPreventCacheHitTest", "regression": "observerFailuresCannotPreventCacheHitTest", - "projection": "effects-13" + "projection": "effects" }, { "id": "observerFailuresCannotPreventPublicationTest", "regression": "observerFailuresCannotPreventPublicationTest", - "projection": "effects-13" + "projection": "effects" }, { "id": "observerFailuresCannotReplaceSourceErrorTest", "regression": "observerFailuresCannotReplaceSourceErrorTest", - "projection": "effects-13" + "projection": "effects" }, { "id": "writeStampAfterSerializationClearsInterveningFenceTest", "regression": "writeStampAfterSerializationClearsInterveningFenceTest", - "projection": "effects-13" + "projection": "effects" }, { "id": "futureFrameReportsPositiveObservingOffsetTest", "regression": "futureFrameReportsPositiveObservingOffsetTest", - "projection": "effects-13" + "projection": "effects" }, { "id": "coalescedFailureKeepsOneLeaderAndFollowerTrailTest", "regression": "coalescedFailureKeepsOneLeaderAndFollowerTrailTest", - "projection": "effects-13" + "projection": "effects" } ] }, @@ -1647,9 +1340,9 @@ ["releaseLoad", -1] ], "startState": 0, - "projection": "recovery", - "integers": "native", - "choices": false + "projection": "scope", + "integers": "itf", + "choices": true }, { "id": "fenced-read-does-not-retain", @@ -1665,10 +1358,10 @@ ["beginCall", 0], ["rejectLoader", 1] ], - "startState": 4, - "projection": "recovery", - "integers": "native", - "choices": false + "startState": 0, + "projection": "scope", + "integers": "itf", + "choices": true }, { "id": "future-read-preserves-source-error", @@ -1683,10 +1376,10 @@ ["beginCall", 7], ["advance", 4000] ], - "startState": 3, - "projection": "recovery", - "integers": "native", - "choices": false + "startState": 0, + "projection": "scope", + "integers": "itf", + "choices": true }, { "id": "classifier-error-keeps-error-without-decode", @@ -1699,9 +1392,9 @@ ["rejectLoader", 0] ], "startState": 0, - "projection": "recovery", - "integers": "native", - "choices": false + "projection": "scope", + "integers": "itf", + "choices": true }, { "id": "maximum-age-read-preserves-source-error", @@ -1732,10 +1425,10 @@ ["joinCall", 0], ["rejectLoader", 3] ], - "startState": 18, - "projection": "recovery", - "integers": "native", - "choices": false + "startState": 0, + "projection": "scope", + "integers": "itf", + "choices": true }, { "id": "fenced-c1-supersedes-without-repair", @@ -1759,10 +1452,10 @@ ["releaseLoad", -1], ["releaseRead", -1] ], - "startState": 7, - "projection": "shadow-16", - "integers": "native", - "choices": false + "startState": 0, + "projection": "shadow", + "integers": "itf", + "choices": true } ] }, @@ -1794,9 +1487,9 @@ ["releaseLoad", -1] ], "startState": 0, - "projection": "recovery-17", + "projection": "scope", "integers": "itf", - "choices": false + "choices": true }, { "id": "last-recovery-age-serves", @@ -1822,10 +1515,10 @@ ["joinCall", 0], ["releaseLoad", -1] ], - "startState": 7, - "projection": "recovery-17", + "startState": 0, + "projection": "scope", "integers": "itf", - "choices": false + "choices": true }, { "id": "exact-maximum-after-decode-rejects", @@ -1849,9 +1542,9 @@ ["releaseLoad", -1] ], "startState": 0, - "projection": "recovery-17", + "projection": "scope", "integers": "itf", - "choices": false + "choices": true }, { "id": "failed-fresh-decode-is-not-recovery", @@ -1882,10 +1575,10 @@ ["joinCall", 0], ["rejectLoader", 2] ], - "startState": 13, - "projection": "recovery-17", + "startState": 0, + "projection": "scope", "integers": "itf", - "choices": false + "choices": true }, { "id": "classifier-error-keeps-error-without-decode", @@ -1898,9 +1591,9 @@ ["rejectLoader", 0] ], "startState": 0, - "projection": "recovery-17", + "projection": "scope", "integers": "itf", - "choices": false + "choices": true }, { "id": "same-c1-bytes-confirm-mismatch", @@ -1945,10 +1638,10 @@ ["reencode", 8], ["releaseRead", -1] ], - "startState": 27, - "projection": "shadow-18", + "startState": 0, + "projection": "shadow", "integers": "itf", - "choices": false + "choices": true }, { "id": "different-c1-bytes-supersede", @@ -1995,10 +1688,10 @@ ["seed", 3], ["releaseRead", -1] ], - "startState": 30, - "projection": "shadow-18", + "startState": 0, + "projection": "shadow", "integers": "itf", - "choices": false + "choices": true }, { "id": "late-shadow-dump-cannot-dispatch-write", @@ -2064,10 +1757,10 @@ ["dumpFault", 1], ["releaseDump", -1] ], - "startState": 47, - "projection": "shadow-18", + "startState": 0, + "projection": "shadow", "integers": "itf", - "choices": false + "choices": true }, { "id": "fill-write-error-preserves-caller", @@ -2089,10 +1782,10 @@ ["writeFault", 1], ["releaseWrite", -1] ], - "startState": 2, - "projection": "shadow-18", + "startState": 0, + "projection": "shadow", "integers": "itf", - "choices": false + "choices": true }, { "id": "dark-read-error-still-allows-source-result", @@ -2129,10 +1822,10 @@ ["writeFault", 0], ["resolveLoader", 1] ], - "startState": 22, - "projection": "shadow-18", + "startState": 0, + "projection": "shadow", "integers": "itf", - "choices": false + "choices": true } ] }, @@ -2160,6 +1853,11 @@ "id": "sourceFailureKeepsPreviouslyAcceptedStorageTest", "regression": "sourceFailureKeepsPreviouslyAcceptedStorageTest", "projection": "observations" + }, + { + "id": "rejectedSourceDoesNotSeedLocalTest", + "regression": "rejectedSourceDoesNotSeedLocalTest", + "projection": "observations" } ] }, @@ -2188,122 +1886,122 @@ { "id": "closedRequestCannotReceiveCompressedRecoveryTest", "regression": "closedRequestCannotReceiveCompressedRecoveryTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "compressedRecoveryMemoizesWithoutLocalPublicationTest", "regression": "compressedRecoveryMemoizesWithoutLocalPublicationTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "compressedRecoveryRechecksMaximumAfterDecodeTest", "regression": "compressedRecoveryRechecksMaximumAfterDecodeTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "corruptCompressedReadReportsRawFallbackTest", "regression": "corruptCompressedReadReportsRawFallbackTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "corruptCompressedRecoveryKeepsOriginalSourceErrorTest", "regression": "corruptCompressedRecoveryKeepsOriginalSourceErrorTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "failedInvalidationDoesNotCreateMarkerTest", "regression": "failedInvalidationDoesNotCreateMarkerTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "failedInvalidationPreservesExistingMarkerTest", "regression": "failedInvalidationPreservesExistingMarkerTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "freshCompressedReadReportsDecompressionTest", "regression": "freshCompressedReadReportsDecompressionTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "freshnessAfterHeldReadTest", "regression": "freshnessAfterHeldReadTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "heldReadJustBeforeFreshnessBoundaryStillHitsTest", "regression": "heldReadJustBeforeFreshnessBoundaryStillHitsTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "laterInvalidationDoesNotRewriteObservedMissFenceTest", "regression": "laterInvalidationDoesNotRewriteObservedMissFenceTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "maximumAgeBeforeDecodeKeepsOriginalErrorTest", "regression": "maximumAgeBeforeDecodeKeepsOriginalErrorTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "ordinaryValueWorkDoesNotCreateMarkerTest", "regression": "ordinaryValueWorkDoesNotCreateMarkerTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "ordinaryValueWorkDoesNotExtendMarkerTest", "regression": "ordinaryValueWorkDoesNotExtendMarkerTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "physicalCapDoesNotClampLogicalRecoveryTest", "regression": "physicalCapDoesNotClampLogicalRecoveryTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "retainedCompressedRecoverySurvivesInvalidationTest", "regression": "retainedCompressedRecoverySurvivesInvalidationTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "retainedSnapshotSurvivesPhysicalExpiryTest", "regression": "retainedSnapshotSurvivesPhysicalExpiryTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "trackedEncodingFailureSuppressesRefillTest", "regression": "trackedEncodingFailureSuppressesRefillTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "trackedPhysicalRetentionExpiresAtCapTest", "regression": "trackedPhysicalRetentionExpiresAtCapTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "trackedSourceNeedsRemoteValidationBeforeLocalReuseTest", "regression": "trackedSourceNeedsRemoteValidationBeforeLocalReuseTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "unsafeTimestampSkipsSerializerAndAllowsRefillTest", "regression": "unsafeTimestampSkipsSerializerAndAllowsRefillTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "unsupportedVersionSkipsSerializerAndAllowsRefillTest", "regression": "unsupportedVersionSkipsSerializerAndAllowsRefillTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "untrackedCompressedRecoveryDoesNotWarmLocalTest", "regression": "untrackedCompressedRecoveryDoesNotWarmLocalTest", - "projection": "recovery-read-19" + "projection": "recovery-read" }, { "id": "untrackedEncodingFailureStillPublishesLocalTest", "regression": "untrackedEncodingFailureStillPublishesLocalTest", - "projection": "recovery-read-19" + "projection": "recovery-read" } ] }, @@ -2563,6 +2261,11 @@ "regression": "independentLocalPublicationUsesLastCompletionTest", "projection": "policy-observations" }, + { + "id": "independentFailureKeepsSettledLocalValueTest", + "regression": "independentFailureKeepsSettledLocalValueTest", + "projection": "policy-observations" + }, { "id": "independentRemotePublicationUsesLastCompletionTest", "regression": "independentRemotePublicationUsesLastCompletionTest", @@ -2725,6 +2428,295 @@ "projection": "policy-observations" } ] + }, + { + "path": "test/fixtures/layers-witnesses.json", + "model": "formal/dialcache-layers-conformance.qnt", + "format": "named-map", + "recipes": [ + { + "id": "trackedWithoutRemotePublishesReusableLocalTest", + "regression": "trackedWithoutRemotePublishesReusableLocalTest", + "projection": "observations" + } + ] + }, + { + "path": "test/fixtures/independent-witnesses.json", + "model": "formal/dialcache-independent-conformance.qnt", + "format": "named-map", + "recipes": [ + { + "id": "staggeredSourceStartsKeepIndependentBudgetsTest", + "regression": "staggeredSourceStartsKeepIndependentBudgetsTest", + "projection": "independent" + }, + { + "id": "staggeredSourcesExpireAtTheirOwnDeadlineTest", + "regression": "staggeredSourcesExpireAtTheirOwnDeadlineTest", + "projection": "independent" + }, + { + "id": "independentReadDeadlinesStartSeparateSourcesTest", + "regression": "independentReadDeadlinesStartSeparateSourcesTest", + "projection": "independent" + }, + { + "id": "timedOutReadCannotAffectAnotherCallTest", + "regression": "timedOutReadCannotAffectAnotherCallTest", + "projection": "independent" + }, + { + "id": "readFailureCannotBorrowAnotherCallsRefillTest", + "regression": "readFailureCannotBorrowAnotherCallsRefillTest", + "projection": "independent" + }, + { + "id": "independentRecoveryAtCapturedAgeBoundaryTest", + "regression": "independentRecoveryAtCapturedAgeBoundaryTest", + "projection": "independent" + }, + { + "id": "independentRecoveriesServeDistinctAcquiredSnapshotsTest", + "regression": "independentRecoveriesServeDistinctAcquiredSnapshotsTest", + "projection": "independent" + }, + { + "id": "acquiredFreshDecodeSurvivesInvalidation", + "actions": [ + [ + "init", + -1 + ], + [ + "seed", + 0 + ], + [ + "beginCall", + -1 + ], + [ + "releaseRead", + 0 + ], + [ + "invalidate", + -1 + ], + [ + "releaseLoad", + 0 + ] + ], + "projection": "independent" + }, + { + "id": "lateSourceDoesNotAffectOtherCall", + "actions": [ + [ + "init", + -1 + ], + [ + "invalidate", + -1 + ], + [ + "beginCall", + -1 + ], + [ + "releaseRead", + 0 + ], + [ + "beginCall", + -1 + ], + [ + "advance", + 10 + ], + [ + "rejectLoader", + 0 + ] + ], + "projection": "independent" + }, + { + "id": "failedRecoveryKeepsSourceError", + "actions": [ + [ + "init", + -1 + ], + [ + "beginCall", + -1 + ], + [ + "releaseRead", + 0 + ], + [ + "rejectLoader", + 0 + ], + [ + "failLoad", + 0 + ] + ], + "projection": "independent" + } + ] + }, + { + "path": "test/fixtures/independent-shadow-witnesses.json", + "model": "formal/dialcache-independent-conformance.qnt", + "format": "named-map", + "recipes": [ + { + "id": "shadowWalk", + "actions": [ + [ + "init", + -1 + ], + [ + "policy", + 1 + ], + [ + "beginCall", + -1 + ], + [ + "policy", + 2 + ], + [ + "beginCall", + -1 + ], + [ + "beginCall", + -1 + ], + [ + "releaseRead", + 0 + ], + [ + "failRead", + 1 + ], + [ + "advance", + 5 + ], + [ + "rejectLoader", + 0 + ], + [ + "invalidate", + -1 + ], + [ + "releaseLoad", + 0 + ], + [ + "advance", + 5 + ], + [ + "releaseRead", + 2 + ], + [ + "seed", + 2 + ], + [ + "resolveLoader", + 5 + ], + [ + "rejectLoader", + 1 + ], + [ + "beginCall", + -1 + ], + [ + "releaseRead", + 3 + ], + [ + "resolveLoader", + 8 + ], + [ + "beginCall", + -1 + ], + [ + "releaseRead", + 4 + ], + [ + "invalidate", + -1 + ], + [ + "advance", + 1000 + ], + [ + "advance", + 5 + ], + [ + "failLoad", + 1 + ], + [ + "seed", + 1 + ], + [ + "beginCall", + -1 + ], + [ + "releaseRead", + 5 + ], + [ + "rejectLoader", + 5 + ], + [ + "failLoad", + 2 + ], + [ + "advance", + 10 + ], + [ + "invalidate", + -1 + ] + ], + "projection": "independent-shadow" + } + ] } ] } diff --git a/formal/generate-envelope-vectors.mjs b/formal/generate-envelope-vectors.mjs index 447c7441..a74748f6 100644 --- a/formal/generate-envelope-vectors.mjs +++ b/formal/generate-envelope-vectors.mjs @@ -4,7 +4,11 @@ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'; import { resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; +import { encodeJson } from './compact-json.mjs'; + const root = fileURLToPath(new URL('../', import.meta.url)); +// The corpus header stays indented; every vector row is one line. +const encode = corpus => encodeJson(corpus, path => path.length === 2 && typeof path[1] === 'number'); export const model = 'formal/dialcache-envelope-vectors.qnt'; export const generator = 'formal/generate-envelope-vectors.mjs'; export const artifact = 'formal/quint-envelope-vectors.json'; @@ -130,7 +134,7 @@ if (process.argv[1] === fileURLToPath(import.meta.url)) { if (run.status !== 0) process.exit(run.status ?? 1); const generated = { schemaVersion: 3, provenance: { model, sourceSha256: sourceHashes() }, ...vectorsFromTrace(JSON.parse(readFileSync(history, 'utf8'))) }; - const encoded = JSON.stringify(generated, null, 2) + '\n'; + const encoded = encode(generated); if (process.argv[2] === '--write') writeFileSync(resolve(root, artifact), encoded); else if (readFileSync(resolve(root, artifact), 'utf8') !== encoded) throw new Error('Quint envelope vectors changed; review and regenerate'); console.log(`Verified ${expectedCases} Quint envelope/compression primitive cases`); diff --git a/formal/generate-frame-vectors.mjs b/formal/generate-frame-vectors.mjs index 280c2001..ecb5eb04 100644 --- a/formal/generate-frame-vectors.mjs +++ b/formal/generate-frame-vectors.mjs @@ -4,7 +4,11 @@ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'; import { resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; +import { encodeJson } from './compact-json.mjs'; + const root = fileURLToPath(new URL('../', import.meta.url)); +// The corpus header stays indented; every vector row is one line. +const encode = corpus => encodeJson(corpus, path => path.length === 2 && typeof path[1] === 'number'); export const model = 'formal/dialcache-frame-vectors.qnt'; export const generator = 'formal/generate-frame-vectors.mjs'; export const artifact = 'formal/quint-frame-vectors.json'; @@ -124,7 +128,7 @@ if (process.argv[1] === fileURLToPath(import.meta.url)) { if (run.status !== 0) process.exit(run.status ?? 1); const generated = { schemaVersion: 3, provenance: { model, sourceSha256: sourceHashes() }, ...vectorsFromTrace(JSON.parse(readFileSync(history, 'utf8'))) }; - const encoded = JSON.stringify(generated, null, 2) + '\n'; + const encoded = encode(generated); if (process.argv[2] === '--write') writeFileSync(resolve(root, artifact), encoded); else if (readFileSync(resolve(root, artifact), 'utf8') !== encoded) throw new Error('Quint frame vectors changed; review and regenerate'); console.log(`Verified ${expectedCases} Quint frame/text/duration primitive cases`); diff --git a/formal/generate-invalidation-vectors.mjs b/formal/generate-invalidation-vectors.mjs index e9c06cf5..dc2d4e2b 100644 --- a/formal/generate-invalidation-vectors.mjs +++ b/formal/generate-invalidation-vectors.mjs @@ -4,7 +4,11 @@ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'; import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; +import { encodeJson } from './compact-json.mjs'; + const root = fileURLToPath(new URL('../', import.meta.url)); +// The corpus header stays indented; every vector row is one line. +const encode = corpus => encodeJson(corpus, path => path.length === 2 && typeof path[1] === 'number'); export const model = 'formal/dialcache-invalidation-transition.qnt'; export const generator = 'formal/generate-invalidation-vectors.mjs'; export const artifact = 'formal/quint-invalidation-vectors.json'; @@ -116,7 +120,7 @@ export function generateInvalidationVectors(mode) { if (result.status !== 0) throw new Error(`Quint invalidation export failed: ${result.status}`); const vectors = vectorsFromTrace(JSON.parse(readFileSync(output, 'utf8'))); const corpus = { schemaVersion: 2, provenance: { model, sourceSha256: sourceHashes() }, vectors }; - const serialized = JSON.stringify(corpus, null, 2) + '\n'; + const serialized = encode(corpus); if (mode === '--write') writeFileSync(resolve(root, artifact), serialized); else if (readFileSync(resolve(root, artifact), 'utf8') !== serialized) throw new Error('Committed invalidation predictions differ from fresh Quint output'); console.log(`Quint invalidation vectors: ${vectors.length} complete input combinations ${mode === '--check' ? 'verified' : 'written'}`); diff --git a/formal/generate-key-vectors.mjs b/formal/generate-key-vectors.mjs index fd4d277b..b509bb9d 100644 --- a/formal/generate-key-vectors.mjs +++ b/formal/generate-key-vectors.mjs @@ -4,7 +4,11 @@ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'; import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; +import { encodeJson } from './compact-json.mjs'; + const root = fileURLToPath(new URL('../', import.meta.url)); +// The corpus header stays indented; every vector row is one line. +const encode = corpus => encodeJson(corpus, path => path.length === 2 && typeof path[1] === 'number'); export const model = 'formal/dialcache-key-protocol.qnt'; export const generator = 'formal/generate-key-vectors.mjs'; export const artifact = 'formal/quint-key-vectors.json'; @@ -166,7 +170,7 @@ export function generateKeyVectors(mode) { if (result.status !== 0) throw new Error(`Quint key export failed: ${result.status}`); const groups = vectorsFromTrace(JSON.parse(readFileSync(output, 'utf8'))); const corpus = { schemaVersion: 3, provenance: { model, sourceSha256: sourceHashes() }, ...groups }; - const serialized = JSON.stringify(corpus, null, 2) + '\n'; + const serialized = encode(corpus); if (mode === '--write') writeFileSync(resolve(root, artifact), serialized); else if (readFileSync(resolve(root, artifact), 'utf8') !== serialized) throw new Error('Committed key predictions differ from fresh Quint output'); console.log(`Quint key vectors: ${expectedCases} computed inputs ${mode === '--check' ? 'verified' : 'written'}`); diff --git a/formal/generated-fixtures.lock.json b/formal/generated-fixtures.lock.json index 4b8e7dd2..dddbdee6 100644 --- a/formal/generated-fixtures.lock.json +++ b/formal/generated-fixtures.lock.json @@ -1,77 +1,91 @@ { "schemaVersion": 1, "quintVersion": "0.32.0", + "settings": { + "backend": "rust", + "seed": "0xd1a1ca" + }, "inputs": { - "formal/cache-contract.qnt": "a6cba8e60f15d8b14dd5ec22b5c8173c0f6927f5f0c6f621bb48f0ea697a451b", - "formal/cache-rules.qnt": "c439080cebd85942a9b7516076d295f18a53bf06be0e66287a35e37ded72ef17", + "formal/cache-rules.qnt": "cc37125b108b6e51011cfa4ff5c0561bb9498cbedd3ffefb0cabd79f3975216c", "formal/cohort-boundaries.qnt": "700f0b9ee734f2511b3c7f10138b9636cef93bc1045b653479a05be1766e3407", + "formal/compact-json.mjs": "fe180d42ea438f915a011accf79728701fd51222877d39adbda8ea3ebf3f4bfb", "formal/conformance-observations.qnt": "76e26fb0c5802a13c63f0819071b5326b1586cab187c73d8b204ec7da70f5c2f", - "formal/dialcache-admission-conformance.qnt": "5fa092c302a54ecef517cf2dec44d6298f065188b203fcc4390fda694540f206", + "formal/dialcache-admission-conformance.qnt": "504da4f58b8f83e8aa0c642e63f4e5dace00c4a30887339787182572c47a045a", "formal/dialcache-conformance.qnt": "3e91cad0afa6ba44353d651078fdf6284df0354ca82de0e3712dfe4f243244d7", - "formal/dialcache-effects-conformance.qnt": "7d4f2fbade8c5cb9e2fdf9a44d71a90e10ecd868bb69db1c1b33b7bc7a166617", - "formal/dialcache-independent-conformance.qnt": "996035f7725ea655f46e95dedeb67eb50e42c6a9ed363a51ca0b19bf130f2327", - "formal/dialcache-layers-conformance.qnt": "31fab0e6e27b6b023b84b9377f3d7c17a3335772182fe817d5e8651a66ca3a87", - "formal/dialcache-local-clock-conformance.qnt": "82dd9fa04eeb73f039c088e403eb5dfb79e67a5fc283de4763be037989047666", - "formal/dialcache-local-failure-conformance.qnt": "d17bc0d4c6ca5b3c63fe9eefde415d7c49d8c151a320e49b19a82d1be5a61faf", - "formal/dialcache-policy-conformance.qnt": "51b3caf6944a07538a25ee17edb32fac7e750ac5728637ba7f49a213661b1a70", - "formal/dialcache-recovery-conformance.qnt": "538b7a4fd0a82ecd4fa31daa03baf4e03ec78e6ef571f67dc9b7f80926864284", - "formal/dialcache-recovery-read-conformance.qnt": "d0c44bb21c10ccdb854902af2db07e3bbb19cdf9a395b7cc7fef839970ab1a72", - "formal/dialcache-runtime-boundaries-conformance.qnt": "3f6bef23aa1acc6753338ba58b91b0147c3efd80dded429a18367cb33bc1bdf6", - "formal/dialcache-scope-conformance.qnt": "e3a6a660ff8d77a4f702c5b8479fd1fbd6d5c591e981b204a155a37b18d699ce", - "formal/dialcache-shadow-conformance.qnt": "d0d95566594189a89401fe498f7b341c2864c3d62ea240e09aa427a7d8340425", - "formal/dialcache-shadow-layers-conformance.qnt": "ab17225b4650ce706da5926ddc7dd49bc4255b00ee826a785168b72d051b9d8b", - "formal/dialcache-source-budgets-conformance.qnt": "bee0b564a12de2b5c857a9f377df5c693c83e19252e88fe92cae5624cf8b91f8", - "formal/execution.json": "feee09a3487deb2694f8784b7e8d2d0ee28050dae03ac43ac2613608ce5ab1c6", - "formal/execution.mjs": "ed67921ac19e3412b12a4f086a3cd834ede58d9413eafb7c9830423edcfe51ad", - "formal/fixture-recipes.json": "8d071d16a8e375fe7194aec2d529b1dd883d92c12995612afe3713b484998f4d", - "formal/generated-fixtures.mjs": "fcef898e1125686589a69c8065d8f883ac5aeb2a469ba7e260e95c6a9a9a78ed", + "formal/dialcache-effects-conformance.qnt": "5d3beba2da8b00c3aa44435d12093da0c91114d82df77cbc6265180524bb61bb", + "formal/dialcache-independent-conformance.qnt": "3533ec3bce4ef1c713c034130654b5cd7eb824d3371b58fe796e31e5b70cdf75", + "formal/dialcache-layers-conformance.qnt": "641b28d78a7480cf996a3208c9f06aeed5a1a6f8f1e4d42b8b6316f1dd4a1c4d", + "formal/dialcache-local-clock-conformance.qnt": "be5ff65ab487d716eb4e4f35f6e85a42edb129da616525024711334fc3256754", + "formal/dialcache-local-failure-conformance.qnt": "02ecbb32957b4c51de7d6e2b4701ddd6f0088cd475f3cb428f463019deaec47e", + "formal/dialcache-policy-conformance.qnt": "0d137e68206188abef3657ddfd05cd9333e6daf0dd92a5078ac682af1c06b027", + "formal/dialcache-recovery-conformance.qnt": "eb00ba4dfe335614b05d2b2697de2cf00a6f7f6904b49e8631ee4fe12e0a9e57", + "formal/dialcache-recovery-read-conformance.qnt": "a56873dbc4be99b9209f2b6895fb228ff09323c4e5bdfcc93e461374213a1a2d", + "formal/dialcache-runtime-boundaries-conformance.qnt": "80b33bf9efb34998e30b59df5872a797709cdb4842e47c59b8470e656c3b3d07", + "formal/dialcache-scope-conformance.qnt": "7cde548402db5767ad3175baa9266f0c318b68c4cda4eb5b3f7727c350c24e1b", + "formal/dialcache-shadow-conformance.qnt": "46133911278ddef4d6957ed3c43d4c6f33d0bb91adae334ed19fe9def5c3f5a7", + "formal/dialcache-shadow-layers-conformance.qnt": "132de6c45260f368cd42dba12064690e3821c04724024bfb90b3fa494097e6f2", + "formal/dialcache-source-budgets-conformance.qnt": "fb9707785725add09358fb8c0c7cb764f86cd42e659ed1f4cc459fd5afe93574", + "formal/fixture-recipes.json": "a7b59202b9466c2f63dae527143c1aec34fda8b174e7e99bea5f58717620f741", + "formal/generated-fixtures.mjs": "f73a527cbbc0178be167c11ff8ff21985f05976379ae4054d5f61caa889e34c2", + "formal/kernel/adapter-replies.qnt": "490e1d65552a174f728aae973f92525ff616b0cf26253873c9fe1804aef7da7d", "formal/kernel/calls.qnt": "856c2d7249ea053aaf3a18bb5d235350b5d35e1100f4b4421efa20aceba9767f", - "formal/kernel/clock.qnt": "e46ce9026e6e5ab1b358b0287e8ba5b5904a064e78355c0abbd1554562bb47a4", + "formal/kernel/clock.qnt": "bb46798dd221141a0a0a3f8a0dc9fccf998a68fd9e24be54f12c43b6cad0845a", + "formal/kernel/compression.qnt": "d31ae67c1f33c3f32d9fb5db65a9db48c65ea9119184ec88fe8a35680506158b", "formal/kernel/config-errors.qnt": "5f69ec3e8414360460ec2a3df61cfedbb3217277f31acb48ca005f8a8332a664", - "formal/kernel/deadlines.qnt": "812652bfc00afbafbf683a745dbb939f25ffd9e6a8f14b16d2d9e4076989f547", - "formal/kernel/diagnostics.qnt": "e0ecf34e8fa4167663d9ca03180d3e95c3ae3de5ff01b1b0cd9de06f60594259", + "formal/kernel/deadlines.qnt": "155211176f92930fb3f7855216e55bd583a6378934b04219a15e7af5ab86c5b7", + "formal/kernel/diagnostics.qnt": "8a1f1571d59384f9b09caa07a5b08cf1a84abbd26337299f29d97c071d1023d9", "formal/kernel/encodings.qnt": "8d8e0ae81ac8560f8f2376a6208a50f8ca33251158ca9c3bbaaf769e18c5b0c7", - "formal/kernel/flights.qnt": "3470a615c1a038ae08d93ac2903e10e7e4241d558489c14662e548ada286c1b0", - "formal/kernel/layer-policy.qnt": "754eb8af07a95cfe7e04ce2c8530b3ce4face18ed06ec8e84b660319b9b386e8", + "formal/kernel/flights.qnt": "98dbef3fd07c0496330c63c1f6d632de63fd77f5627e25f6d7a18f4aaef06fc4", + "formal/kernel/instances.qnt": "addff9c66e28d7ee057c5f73bae5baab67344e53769f33825e45cf6e9c68e7f7", + "formal/kernel/layer-policy.qnt": "e81760252b0fefd5f0ee021333b962c4d4a6cc3801b2bec07f0d3cc00c7a9f62", + "formal/kernel/local-faults.qnt": "9df433694ed10dc0d2a60b108f3d659bf5c2d0df6f5e76e833e425972e0e5843", "formal/kernel/local-storage.qnt": "7a1880954c1d1fad43039e04e3e051ab8788d2ee508667c9ed217a6361ef39a5", - "formal/kernel/policy-gate.qnt": "8d33b0aaeb50b1dce239d01a6ce76bcb5dc579878b79a5506ad83798cb9de40d", + "formal/kernel/markers.qnt": "cd2401b187f981326468723a83f0d78413d5509408690520edb0dc1e6928f927", + "formal/kernel/metrics.qnt": "92d00b2351c0a3659fe4f0c2eedc77b456ef60ef400bb6079ba8f6a8e7f3506e", + "formal/kernel/payloads.qnt": "8a471a4d467a2c96234044cbfe23ff0cb7db8f2ddde11d17eccb0f077137e7db", + "formal/kernel/policy-gate.qnt": "89fc6675d2d7d0b64c912f85b5066a13884e37e0fc5a1df44551552461476313", "formal/kernel/policy-overlay.qnt": "67c21286676aa255034a2c8160a34d228bcfa8aaa8d7ab48c1f7eee461a0a0c5", - "formal/kernel/receipts.qnt": "d754a146b1394d25eab6f9fb8f88b345dac0ca1b10d76cf2baa1ef73b2f986d5", - "formal/kernel/remote-frames.qnt": "7aa86e71f9ee6a7441ee18e556bca22014b7ff966ff5afaff2ab79fabd28a8a0", + "formal/kernel/receipts.qnt": "d73f8ce5293f4b782d3bf12c0ee68c94068d256a931ed415e33f862ef88eec07", + "formal/kernel/recovery.qnt": "af804a4ec6f8766c5931cb05bc173d9be7687e23c009e91d07de713ebbeee8bf", + "formal/kernel/remote-frames.qnt": "30e20de689bc9e6b10cb59e2084f6f4d302c6237a6fb09ad51a92b9338ac5850", + "formal/kernel/remote-io.qnt": "c95c66357d9c8b4dd7208bbcb9f3077d2d46a1376e28b01a08c0d990c73c44ee", + "formal/kernel/remote-writes.qnt": "4c4433b90c6bf0fced73074715c55c423218084e22596764a58b65e31c0bb8f3", "formal/kernel/request-memo.qnt": "e7897bfe9949a4d31b8138b35c32a7df0939e81e1f9c13739340a794a3d5073f", "formal/kernel/runtime-policy.qnt": "41ebb180f8b8b561d0db43b237abbee04e69613521436f6c624241cfece536ae", - "formal/kernel/serving.qnt": "f3e669099d0cff1b6d243c8822ea07e66b90ec283475646c9a5bac094c173f00", - "formal/profiles.json": "b8fa4f399a163bc8793bf76b6ba3503a415fcf3c8509cf98d964e4f067e6660f", - "formal/wire-text.qnt": "c78f8c674f4e1470b0d2b605b209d82e3aab0e35fb4e0efae813247bf093eb27" + "formal/kernel/serving.qnt": "4d338ac2bdf1fec67947d510219ccd2ca3907387b2ac04a76e399266a7a5588c", + "formal/kernel/shadow.qnt": "6f1557580943c69ce4356b7c99ccde45067ec8dccb584102279775cf0c2e9a19" }, "artifacts": { - "formal/conformance-smoke.itf.json": "71bebff79478858f8578b77e0cd7f914ba79552fd490c69a1a5e8583dd63eed4", - "formal/effects-smoke.itf.json": "c4c34c4b3ca4af2accd4b6ae14d7bd7fc263da779ebe4bb1bb9997d7477be4de", - "formal/scope-smoke.itf.json": "ad2e95b0e2e65084d186ea98c059376e52bcdc64cb5d170b6ffd59826123ca34", - "formal/recovery-smoke.itf.json": "9d1944978851bf4b4740863ada0196f005cae4e95c91e259c673a8dc0197c8d4", - "formal/policy-smoke.itf.json": "5120ac314765e268d9f33bdacbd164ef3c14699bc3f9babd5ddc11efa5bd5d5f", - "test/fixtures/policy-shadow-witnesses.json": "8e2c279851b54eefec6e13d7720b3babecd56f32c165e36199e6b5c8b80733da", - "formal/shadow-smoke.itf.json": "1eb269629755bcd41f26aadce34547b114584155461d125c5c4b9fe8e5b516d9", - "formal/admission-smoke.itf.json": "4b79d1ddb7075649e4fb71eb91f2097bf13c674b2718ea95f014d40691984f2d", - "formal/layers-smoke.itf.json": "d0c44b5604988865e572da70e8189e749ba5e485c5aac7cd3185bbb709ecfd97", - "formal/independent-smoke.itf.json": "cc17edba464ee60f9377c4b4bbc5605aa012018b58e603f49e25c2c6df649b4d", - "formal/recovery-read-smoke.itf.json": "fcf7ac12c7f62b9be79bd09b2705ba7938b2dc370e531cf92333725143dc3d51", - "formal/local-failure-smoke.itf.json": "464c60d6edd5497e7b4d50d4fb8a605c191e38218a6aabe8475010e5ebf8e6e2", - "formal/runtime-boundaries-smoke.itf.json": "7369264bcebd5b882bf9423788f2ee6e6304120f51f69f54024b3d434f882ce8", - "formal/shadow-layers-smoke.itf.json": "8d4ab8395660b100f910097b3384892fe86e788fa1e79cceab61c9beaaea9d8d", - "formal/local-clock-smoke.itf.json": "54396bd3f220c2c9495fee9d15fa222bba693314b1b52df45481b34876bd0f8b", - "formal/source-budgets-smoke.itf.json": "0494f54c72b8ad613ccfd5f0d96109c3361cef5f7dafc3288993e772efb494e9", - "test/fixtures/effects-authority-witnesses.json": "99ec84ae3f19a95433972f98b80a1505e9cb2f69d8c9c292a3feaef9c0c752f5", - "test/fixtures/formal-runtime-boundary-witnesses.json": "4b172c8010e5739c334ff0631f02632daf47f173572064b812f3a6e015bed2e1", - "test/fixtures/formal-runtime-witness-boundaries.json": "b626d42f5547ff0dfad6ac6a4e5a64dfea5c1ed9cae247bd7b29345825115c7f", - "test/fixtures/formal-witness-attribution.json": "93c09590bbb033f3cf91ad82600a996b140ac22b421fa1a859348ed97b4b0143", - "test/fixtures/formal-witness-boundaries.json": "675e6f3a6e1c5ee929cf2a124285f145da4cf1aff5b7d7a0633007961e5b20e0", - "test/fixtures/local-failure-witnesses.json": "a910e088add94f8294f2d984678d5e2ebe1fc7199132ea8351dd34f70e467250", - "test/fixtures/recovery-admission-witnesses.json": "8538b8a82b409295ba01ff9f429b21e61cca21eef6ad3b08cb1e4f1408f8ea83", - "test/fixtures/recovery-read-witnesses.json": "5925594aae6a3d54c495b8d94173484594bb75479dcaa1c5e3e19e5c645a572f", - "test/fixtures/shadow-diagnostics-witnesses.json": "a5c0fd8aba474d75b325e8c229e394792153d125f6ebd514767a4b1b63fecdf9", - "test/fixtures/shadow-layers-witnesses.json": "ce5b362357fd3dd1ba7dbc08099ab0cb4b97042a8362e096cb84c73d088d8612", - "test/fixtures/source-budgets-witnesses.json": "d1a9a0156102d805da4f11f6ec3d1c81950aac73681c34cc0eee15a4174a8df1", - "test/fixtures/policy-witnesses.json": "53f9602f51c3e27164c4fdf6d6d54d0a0e707327fd76938e22ed7eadbeba0e04" + "formal/conformance-smoke.itf.json": "be38ab847b7a5d4c15914bd6bd2fd2fd72cb2fc9af7edb15ba209c53f2ccfa37", + "formal/effects-smoke.itf.json": "e51789d570eeebcfad925490bbefa40984d93dcb3acf726d43f874d0bb5a3ad0", + "formal/scope-smoke.itf.json": "a93118370e7a8c7d179a6574d03c0266ad4159fd5a280b4102c68c3c0581a4f1", + "formal/recovery-smoke.itf.json": "271533467ef14f601539f25e6820f4d3caef47647e73334d4d3e3bcd873526ed", + "formal/policy-smoke.itf.json": "220721c7cccbca75744ca074f3640d58d22dc56880e7d108a4285c6b217ff416", + "test/fixtures/policy-shadow-witnesses.json": "56fc7a11c6dfdcd0e6ee6aa6aa912e8be6190a340cf3c3f68060f81a994cef34", + "formal/shadow-smoke.itf.json": "b0f1cd43eea69462d3335e35f5942d83aef2bc68d62aca4aa1de99820be0678e", + "formal/admission-smoke.itf.json": "489ce73e9424fdf871a5c4f4241bf164d1dbe0d0aba666a27120ee151d57f0b8", + "formal/layers-smoke.itf.json": "3c16a6fd42b1e2a8842cc67c6919a2d949a761f9e5ec0d278c89b76de825bb6c", + "formal/independent-smoke.itf.json": "a71cd898d333091b61dd2363eaad3ec4c60bf2b77d01fcc60af06d56620b00e2", + "formal/recovery-read-smoke.itf.json": "d97060965b663776ecd362144fd901f09fbd627a9668e0c1326c4c0be579c0d9", + "formal/local-failure-smoke.itf.json": "96235fe6501850456db52a08a7d51e025d2b3c3188139a6865757aeea3b41b41", + "formal/runtime-boundaries-smoke.itf.json": "70dc458fa5c3c55010d20ed57e32a691363ffb6f4c38ad5a109fb3a74e056a1b", + "formal/shadow-layers-smoke.itf.json": "c306392e52a2c2770c182eda48a9d475c94944d3bb2069b813a324a82189952b", + "formal/local-clock-smoke.itf.json": "f5bafd7b9975404dcde752754a010ae63afacf12f9e1602cda47b34ef43e976c", + "formal/source-budgets-smoke.itf.json": "b013caea2b7044c92fcff17ff32e8628d5352b3aa15f195ad0722b6134c7fef7", + "test/fixtures/effects-authority-witnesses.json": "3bdaab7457460f276a8f303763f193571316f547af3a768ae9f001f5695c12ff", + "test/fixtures/formal-runtime-boundary-witnesses.json": "206114f8df2e9dd4a44430eec3bb406a5f187e2370c78dc3d4875e1a9439d450", + "test/fixtures/formal-runtime-witness-boundaries.json": "5cc67bcf29c72392fd8c0582131e28f77a340d872d5e72026868456f16287f99", + "test/fixtures/formal-witness-attribution.json": "a226222715a111da40ad7a83c311658de617ef1d10a95c91eba6d33a03980ef9", + "test/fixtures/formal-witness-boundaries.json": "8872340525759b398a0879132851ba417d6bf15a74053bd1cd4129c8785c6d7f", + "test/fixtures/local-failure-witnesses.json": "7186c5e8804c8141c8126bc1e9fceb56e7f824c95cfc2d90d7466055aa9e3f80", + "test/fixtures/recovery-admission-witnesses.json": "8c882fa66566a72c296a34d232346110976491af8f818568b08cd461b1b96bf5", + "test/fixtures/recovery-read-witnesses.json": "7c186cfc1456256076e43ce2c8004ba2ed745e54c238855ec39aec471806cad8", + "test/fixtures/shadow-diagnostics-witnesses.json": "39c826d79a3ddf1c289a9f793830881e24e047d52f96ba4524dd4bb28a3010cc", + "test/fixtures/shadow-layers-witnesses.json": "b3aaea2fad153a51954ccf04a34e135cf7d9f7452bb3e5119c976b0756f20c6b", + "test/fixtures/source-budgets-witnesses.json": "62450b73fbb0ed14332ff5bb5d1fbe60f135aa010695c0f4bb03f93a29dadcb9", + "test/fixtures/policy-witnesses.json": "96a4ca1c17f90f5185b9119bc0900014fca15f41dff34fac6b58bcba277ce6c4", + "test/fixtures/layers-witnesses.json": "2b3d3e70da715b103b3fcbca6754a251b7e1091b872295ab42df15e20dab0962", + "test/fixtures/independent-witnesses.json": "d89a21165ac3b401343fd8bebf0f34eaa629f3fdf260ddfe4a3f26b53bac99c9", + "test/fixtures/independent-shadow-witnesses.json": "c28fc3adb21499dc2fb5f3d2ba431d64d46035eb833bf3f548b19a4a8a72356a" } } diff --git a/formal/generated-fixtures.mjs b/formal/generated-fixtures.mjs index de468538..cfd631a3 100644 --- a/formal/generated-fixtures.mjs +++ b/formal/generated-fixtures.mjs @@ -4,15 +4,19 @@ import { mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'nod import { basename, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import { isDeepStrictEqual } from 'node:util'; -import { copySources, readExecution, root, validateExecution } from './execution.mjs'; +import { encodeJson } from './compact-json.mjs'; +import { copySources, importClosure, readExecution, root, scheduleExecution, validateExecution } from './execution.mjs'; import { resolveConcurrency, runPool, spawnBuffered } from './quint-pool.mjs'; const recipePath = 'formal/fixture-recipes.json'; const lockPath = 'formal/generated-fixtures.lock.json'; const generator = 'formal/generated-fixtures.mjs'; +const encoder = 'formal/compact-json.mjs'; const read = path => readFileSync(resolve(root, path), 'utf8'); const json = path => JSON.parse(read(path)); -const encode = value => JSON.stringify(value, null, 2) + '\n'; +// Every history state, excerpt step and excerpt initial state is one line. +const record = path => ['states', 'steps'].includes(path.at(-2)) || path.at(-1) === 'initialState'; +const encode = value => encodeJson(value, record); const hash = value => createHash('sha256').update(value).digest('hex'); const integer = value => ({ '#bigint': String(value) }); const identifier = value => typeof value === 'string' && /^[A-Za-z_]\w*$/.test(value); @@ -25,8 +29,7 @@ export function validateRecipes(book, execution = readExecution()) { for (const artifact of book.artifacts) { if (typeof artifact.path !== 'string' || !/^(formal\/[\w-]+-smoke\.itf|test\/fixtures\/[\w-]+)\.json$/.test(artifact.path) || paths.has(artifact.path)) fail('Invalid/duplicate fixture path'); paths.add(artifact.path); - if (Object.keys(artifact).some(key => !['path', 'model', 'format', 'recipes', 'actionBindings'].includes(key))) fail('Unexpected artifact recipe field'); - for (const [name, target] of Object.entries(artifact.actionBindings ?? {})) if (!identifier(name) || !identifier(target)) fail('Invalid public action binding'); + if (Object.keys(artifact).some(key => !['path', 'model', 'format', 'recipes'].includes(key))) fail('Unexpected artifact recipe field'); if (!['smoke', 'named-map', 'named-list', 'excerpts'].includes(artifact.format) || !Array.isArray(artifact.recipes) || !artifact.recipes.length) fail('Invalid fixture format'); if (artifact.format === 'smoke' && artifact.recipes.length !== 1) fail('Smoke must select exactly one history'); const ids = new Set(); @@ -173,7 +176,7 @@ export function spliceDeclarations(source, lines) { return `${source.slice(0, end)}\n${lines.join('\n')}\n${source.slice(end)}`; } -async function exportModel(model, requests, directory, settings) { +async function exportModel(model, requests, directory, settings, exported) { const source = read(model), name = /^module\s+(\w+)\s*\{/.exec(source)?.[1]; if (!name) fail('Unsupported Quint module'); const { parsed, sourceMap } = await parseWithSourceMap(model, directory, execute); @@ -192,8 +195,7 @@ async function exportModel(model, requests, directory, settings) { for (const request of named) { const regression = request.recipe.regression; if (declarations.get(regression)?.qualifier !== 'run') fail(`Missing named Quint run ${regression}`); - const scheduled = readExecution().models.find(m => m.path === model)?.replayRegressions ?? []; - if (!scheduled.includes(regression)) fail(`Fixture run is not a scheduled public-action replay: ${regression}`); + if (!exported.includes(regression)) fail(`Fixture run is not a scheduled public-action replay: ${regression}`); request.run = regression; } if (named.length) await execute(['test', input, `--backend=${settings.backend}`, '--max-samples=1', `--seed=${settings.seed}`, @@ -201,9 +203,8 @@ async function exportModel(model, requests, directory, settings) { for (const [i, request] of requests.entries()) { if (request.recipe.regression) continue; const calls = request.recipe.actions.map(([action, choice]) => { - const selectedAction = request.artifact.actionBindings?.[action] ?? action; - if (!publicActions.has(selectedAction)) fail(`Action is not exposed by the model's step: ${selectedAction}`); - return [selectedAction, choice]; + if (!publicActions.has(action)) fail(`Action is not exposed by the model's step: ${action}`); + return [action, choice]; }); const { declarations: additions, schedules: [schedule] } = scheduleHistories(source, declarations, sourceMap, [calls], { prefix: 'fixture', cursor: 'fixtureCursor' }); request.run = `fixtureHistory${i}`; @@ -227,14 +228,21 @@ async function exportModel(model, requests, directory, settings) { } } +// What the fixture bytes depend on: the recipes, this generator with its +// encoder, and every Quint source a recipe model reaches through its imports. +// The Quint settings the export runs with are recorded beside them. The +// manifest, the profile registry and libraries no recipe model imports are +// not inputs: editing them cannot change a fixture, so they do not invalidate one. function inputs(book) { - const execution = readExecution(); - return Object.fromEntries([...new Set([recipePath, generator, 'formal/execution.mjs', 'formal/execution.json', 'formal/profiles.json', - ...execution.libraries, ...book.artifacts.flatMap(a => a.recipes.map(r => r.model ?? a.model))])].sort().map(path => [path, hash(read(path))])); + const models = new Set(book.artifacts.flatMap(a => a.recipes.map(r => r.model ?? a.model))); + return Object.fromEntries([...new Set([recipePath, generator, encoder, ...[...models].flatMap(model => importClosure(model))])].sort() + .map(path => [path, hash(read(path))])); } -export function verifyFixtures(book = validateRecipes(json(recipePath))) { +const exportSettings = execution => ({ backend: execution.settings.backend, seed: execution.settings.seed }); +export function verifyFixtures(book = validateRecipes(json(recipePath)), execution = readExecution()) { const lock = json(lockPath); - if (lock.schemaVersion !== 1 || lock.quintVersion !== '0.32.0' || !isDeepStrictEqual(lock.inputs, inputs(book))) fail('Generated fixture inputs changed; regenerate and review'); + if (lock.schemaVersion !== 1 || lock.quintVersion !== '0.32.0' || !isDeepStrictEqual(lock.settings, exportSettings(execution)) || + !isDeepStrictEqual(lock.inputs, inputs(book))) fail('Generated fixture inputs changed; regenerate and review'); const expected = Object.fromEntries(book.artifacts.map(a => [a.path, hash(read(a.path))])); if (!isDeepStrictEqual(lock.artifacts, expected)) fail('Generated fixture content changed; regenerate and review'); return { artifacts: book.artifacts.length, histories: book.artifacts.reduce((n, a) => n + a.recipes.length, 0) }; @@ -242,7 +250,8 @@ export function verifyFixtures(book = validateRecipes(json(recipePath))) { export async function generateFixtures(mode, { concurrency = resolveConcurrency() } = {}) { const execution = readExecution(); validateExecution(execution); const book = validateRecipes(json(recipePath), execution); - if (mode === '--verify') return verifyFixtures(book); + if (mode === '--verify') return verifyFixtures(book, execution); + const scheduled = scheduleExecution(execution); if (!['--check', '--write'].includes(mode)) fail('Use --write, --check or --verify'); const version = spawnSync('quint', ['--version'], { encoding: 'utf8' }); if (version.status !== 0 || version.stdout.trim() !== '0.32.0') fail('Fixture export requires Quint 0.32.0'); @@ -257,7 +266,7 @@ export async function generateFixtures(mode, { concurrency = resolveConcurrency( await runPool([...groups].map(([model, requests]) => async () => { const directory = resolve(root, '.formal-traces/fixture-build', basename(model, '.qnt')); rmSync(directory, { recursive: true, force: true }); mkdirSync(directory, { recursive: true }); - await exportModel(model, requests, directory, execution.settings); + await exportModel(model, requests, directory, execution.settings, scheduled.models.find(m => m.path === model).replayRegressions); console.log(`Quint fixtures: ${basename(model)} (${requests.length} histories)`); }), { concurrency }); const requests = [...groups.values()].flat(), outputs = new Map(); @@ -278,13 +287,14 @@ export async function generateFixtures(mode, { concurrency = resolveConcurrency( ? Object.fromEntries(artifact.recipes.map((r, i) => [r.id, entries[i]])) : entries; outputs.set(artifact.path, encode(output)); } - const lock = { schemaVersion: 1, quintVersion: '0.32.0', inputs: inputs(book), artifacts: Object.fromEntries([...outputs].map(([path, text]) => [path, hash(text)])) }; + const lock = { schemaVersion: 1, quintVersion: '0.32.0', settings: exportSettings(execution), inputs: inputs(book), + artifacts: Object.fromEntries([...outputs].map(([path, text]) => [path, hash(text)])) }; outputs.set(lockPath, encode(lock)); for (const [path, output] of outputs) { if (mode === '--write') writeFileSync(resolve(root, path), output); else if (read(path) !== output) fail(`${path}: fresh Quint output differs; run --write and review`); } - return verifyFixtures(book); + return verifyFixtures(book, execution); } if (process.argv[1] === fileURLToPath(import.meta.url)) { if (process.argv.length !== 3) fail('Usage: node formal/generated-fixtures.mjs --write|--check|--verify'); diff --git a/formal/go-mutations.json b/formal/go-mutations.json deleted file mode 100644 index 0c588bd1..00000000 --- a/formal/go-mutations.json +++ /dev/null @@ -1,290 +0,0 @@ -{ - "schemaVersion": 1, - "mutations": [ - { - "id": "M01", - "case": "C45.maximum-age-exclusive", - "description": "Accept a retained candidate at the exact maximum age after decoding", - "typescriptMutation": "M01", - "edits": [ - { - "path": "go/engine.go", - "before": "age, valid = x.frameAge(frame, \"remote\")\n\tif !valid || age >= maxAge {", - "after": "age, valid = x.frameAge(frame, \"remote\")\n\tif !valid || age > maxAge {" - } - ], - "requiredDetections": [ - "generated", - "portable" - ], - "typescriptRequiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M02", - "case": "C45.recheck-after-decode", - "description": "Reuse the pre-decode age instead of observing age after asynchronous decoding", - "typescriptMutation": "M02", - "edits": [ - { - "path": "go/engine.go", - "before": "age, valid = x.frameAge(frame, \"remote\")", - "after": "// Fault injection: retain the pre-decode age and validity." - } - ], - "requiredDetections": [ - "generated", - "portable" - ], - "typescriptRequiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M03", - "case": "C25.late-source-rejected", - "description": "Accept an externally settled result after its elapsed deadline when the timer has not run", - "typescriptMutation": "M03", - "edits": [ - { - "path": "go/deadline.go", - "before": "case <-p.done:\n\t\t\ttimer.Stop()\n\t\t\tif elapsedNow(clock)-started < duration {", - "after": "case <-p.done:\n\t\t\ttimer.Stop()\n\t\t\tif true {" - } - ], - "requiredDetections": [ - "generated", - "portable" - ], - "typescriptRequiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M04", - "case": "C34.second-fence", - "description": "Skip the tracked fence recheck after serialization", - "typescriptMutation": "M04", - "edits": [ - { - "path": "go/engine.go", - "before": "if fence != nil && uint64(stamp) <= *fence {", - "after": "if false && fence != nil && uint64(stamp) <= *fence {" - } - ], - "requiredDetections": [ - "generated", - "portable" - ], - "typescriptRequiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M05", - "case": "C03.detached-bypass", - "description": "Treat a detached context whose outer scope closed as still enabled", - "typescriptMutation": "M05", - "edits": [ - { - "path": "go/cache.go", - "before": "return state.enabled && state.owner != nil && state.owner.live", - "after": "return state.enabled" - } - ], - "requiredDetections": [ - "generated", - "portable" - ], - "typescriptRequiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M06", - "case": "W04.strict-fence", - "description": "Accept a tracked frame timestamp equal to its watermark", - "typescriptMutation": "M06", - "edits": [ - { - "path": "go/protocol.go", - "before": "if tracked && fence != nil && stamp <= *fence {", - "after": "if tracked && fence != nil && stamp < *fence {" - } - ], - "requiredDetections": [ - "generated", - "portable" - ], - "typescriptRequiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M07", - "case": "C51.changed-confirmation", - "description": "Confirm an unequal shadow result even when C1 contains different payload bytes", - "typescriptMutation": "M07", - "edits": [ - { - "path": "go/shadow.go", - "before": "confirmation.Kind == \"miss\" || !bytes.Equal(frame.Payload, confirmation.Frame.Payload)", - "after": "confirmation.Kind == \"miss\" || false && !bytes.Equal(frame.Payload, confirmation.Frame.Payload)" - } - ], - "requiredDetections": [ - "generated", - "portable" - ], - "typescriptRequiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M08", - "case": "C60.invalid-logging-policy", - "description": "Enable mismatch logging after a malformed runtime logging flag", - "typescriptMutation": "M08", - "edits": [ - { - "path": "go/policy.go", - "before": "resolved.Shadow.LogMismatches = flag\n\t\t\tresolved.Shadow.LoggingConfigError = !valid", - "after": "resolved.Shadow.LogMismatches = flag || !valid\n\t\t\tresolved.Shadow.LoggingConfigError = !valid" - } - ], - "requiredDetections": [ - "generated", - "portable" - ], - "typescriptRequiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M09", - "case": "C60.logging-default-off", - "description": "Enable mismatch logging when its flag is omitted", - "typescriptMutation": "M09", - "edits": [ - { - "path": "go/policy.go", - "before": "resolved := ResolvedPolicy{Coalesce: true, RemoteReadTimeout: defaults.RemoteReadTimeout}", - "after": "resolved := ResolvedPolicy{Coalesce: true, RemoteReadTimeout: defaults.RemoteReadTimeout, Shadow: ResolvedShadow{LogMismatches: true}}" - } - ], - "requiredDetections": [ - "generated", - "portable" - ], - "typescriptRequiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M10", - "case": "C31.tracked-no-local-fill", - "description": "Publish an unvalidated tracked source value directly into local storage", - "typescriptMutation": "M10", - "edits": [ - { - "path": "go/engine.go", - "before": "if localMiss && !x.op.Identity.Tracked {", - "after": "if localMiss {" - } - ], - "requiredDetections": [ - "generated", - "portable" - ], - "typescriptRequiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M11", - "case": "C09.fixed-local-ttl", - "description": "Renew the local insertion TTL on every cache hit", - "typescriptMutation": "M11", - "edits": [ - { - "path": "go/cache.go", - "before": "\tc.local.Get(key)\n\treturn item.value, true", - "after": "\titem.insertedMS = c.options.Clock.ElapsedMS()\n\tc.local.Add(key, item)\n\treturn item.value, true" - } - ], - "requiredDetections": [ - "generated", - "portable" - ], - "typescriptRequiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M12", - "case": "W02.sorted-arguments", - "description": "Reverse the prescribed argument-name ordering", - "typescriptMutation": "M12", - "edits": [ - { - "path": "go/protocol.go", - "before": "return utf16Less(result[i][0], result[j][0])", - "after": "return utf16Less(result[j][0], result[i][0])" - } - ], - "requiredDetections": [ - "generated", - "portable" - ], - "typescriptRequiredDetections": [ - "generated", - "portable" - ] - }, - { - "id": "M13", - "case": "C54.expired-before-start", - "description": "Dispatch dark shadow reads after the job deadline already elapsed before deferred work starts", - "typescriptMutation": "M13", - "edits": [ - { - "path": "go/shadow.go", - "before": "if expired() {\n\t\t\treturn out(\"timeout\")\n\t\t}\n\t\tfill := false", - "after": "if false && expired() {\n\t\t\treturn out(\"timeout\")\n\t\t}\n\t\tfill := false" - } - ], - "requiredDetections": [ - "generated", - "portable" - ], - "typescriptRequiredDetections": [ - "ordinary", - "generated", - "portable" - ] - } - ] -} diff --git a/formal/go-parity.json b/formal/go-parity.json index ce5b7b2f..1ba54403 100644 --- a/formal/go-parity.json +++ b/formal/go-parity.json @@ -1,5 +1,5 @@ { - "schemaVersion": 1, + "schemaVersion": 2, "status": "finite-portable-contract-inventory", "target": "Go parity with the readable Quint behavioral contract and interoperable wire wrapper rules; exact native compressed bytes remain an explicit boundary", "authority": { @@ -8,3137 +8,782 @@ "counts": "Inventory counts establish accounting completeness only; they are not semantic coverage percentages or proof of parity." }, "inputs": { - "semanticCasesSha256": "7054107347f57a452e17de99f74310553b7af4350363c674e70ff8184d0610be", - "executionSha256": "feee09a3487deb2694f8784b7e8d2d0ee28050dae03ac43ac2613608ce5ab1c6", - "sourceAuditSha256": "33a25f92da00ccbd2e17a8c39fe546a039b7ba38ff39f707b40a02bc93b0b8ef", - "quintCaseAuditSha256": "dcb576948a68a066e43259d4bee2b3cdadbe82e657ae9af99e4b21ed7b95dbb3", + "semanticCasesSha256": "5bfe68e355c8334ad2f6e17b973618ff2c8c2a13b19c391940945e9d3b99643d", + "executionSha256": "0e4cf73d4db0cde21783c1d7b8ca515893ff55233a9e895ec626449c4cd8608e", + "sourceAuditSha256": "fded3982e16d256ab526bd7f17f93b04206b21291b539494301da1e4abf0b93b", "featureCoverageSha256": "d238aee55d22387616cc05a6f55a14af227daa00b416dec7378a97b47ec093f9", - "coverageWitnessesSha256": "8fc8ab123150fdec059f5b75f84172d39af80d08d7a4211fa88c63c5a3f2874b", - "profilesSha256": "b8fa4f399a163bc8793bf76b6ba3503a415fcf3c8509cf98d964e4f067e6660f" + "coverageWitnessesSha256": "7af7916b26c4cf11bddc546fc0f72688de6a3a1e726245eeea2661fdc9c3fcc0", + "profilesSha256": "5e28e00d4927c8908938fe4c8a279b1804963138b5d944bc944e4c16d74c6146" }, "inventory": { "behavioralCases": 240, - "withRequiredGeneratedWitnesses": 225, - "withoutRequiredGeneratedWitnesses": [ - "C09.insertion-age", - "C13.remote-last-writer", - "C16.null-inherits", - "C16.ttl-implies-ramp", - "C17.library-defaults", - "C16.explicit-null-leaf", - "C31.local-only-publication", - "C20.invalid-coalesce", - "C20.invalid-request-local", - "C06.absent-distinct-from-text", - "C24.independent-source-budgets", - "C16.runtime-enables-coalescing", - "C19.exact-serving-cohort", - "C16.reenable-default-coalescing", - "C17.explicit-feature-kill-switch" - ], + "withRequiredGeneratedWitnesses": 240, + "withoutRequiredGeneratedWitnesses": [], "wireCases": 22, "sourceFiles": 27, "sourceDeclarations": 772, "casesWithScheduledChecks": 262, - "requiredWitnesses": 435, - "casesWithQuintRegressionReplay": 168, + "requiredWitnesses": 440, + "casesWithQuintRegressionReplay": 174, "casesWithQuintGeneratedVectors": 22, "withoutModelDrivenReplay": [], - "quintModels": 32, - "scheduledInvariants": 219, - "scheduledRegressions": 417, + "quintModels": 30, + "scheduledInvariants": 213, + "scheduledRegressions": 413, "quintGeneratedProtocolVectors": 1343, "quintGeneratedInvalidationVectors": 288, - "caseReferencedWitnesses": 285, - "exportedRegressionHistories": 250 + "caseReferencedWitnesses": 306, + "exportedRegressionHistories": 310 }, - "profiles": [ - { - "id": "core", - "version": 1, - "model": "formal/dialcache-conformance.qnt", - "smoke": "formal/conformance-smoke.itf.json", - "plannedTraces": 32, - "scheduledRegressions": [ - "disabledAndRequestCallsKeepTheirOwnLifetimesTest", - "localValueSurvivesSourceChangeTest", - "coalescedPairPublishesOneReusableValueTest", - "invalidationRefillsFromCurrentSourceTest", - "failedReadPreservesPreviouslyStoredBytesTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [] - }, - { - "id": "effects", - "version": 2, - "model": "formal/dialcache-effects-conformance.qnt", - "smoke": "formal/effects-smoke.itf.json", - "plannedTraces": 512, - "scheduledRegressions": [ - "observerFailuresCannotPreventCacheHitTest", - "observerFailuresCannotPreventPublicationTest", - "writeStampAfterSerializationClearsInterveningFenceTest", - "instanceReadBudgetOverridesLibraryTest", - "operationReadBudgetOverridesInstanceTest", - "runtimeReadBudgetOverridesOperationTest", - "futureFrameReportsPositiveObservingOffsetTest", - "coalescedFailureKeepsOneLeaderAndFollowerTrailTest", - "nullReplyRefillsAndIsReadableTest", - "primitiveReplyRefillsAndIsReadableTest", - "legacyReplyRefillsAndIsReadableTest", - "kindlessReplyRefillsAndIsReadableTest", - "missingFenceRefillsAndIsReadableTest", - "negativeFenceRefillsAndIsReadableTest", - "fractionalFenceRefillsAndIsReadableTest", - "unsafeFenceRefillsAndIsReadableTest", - "observerFailuresCannotReplaceSourceErrorTest", - "libraryReadBudgetIsFiftyMillisecondsTest", - "untrackedFencedReplyRefillsAndIsReadableTest", - "readDurationIncludesDecodeTest", - "sourceDurationExcludesPublicationTest", - "lateSourceCannotRepeatFailureMetricTest", - "timedOutLoaderOverlapsNewFlightTest", - "acceptedWriteOutlivesDeadlineTest", - "delayedWriteRemainsFencedTest", - "readTimeoutStartsIndependentSourceDeadlineTest", - "lateReadCannotBecomeHitTest", - "acquiredDecodeSurvivesInvalidationAndDeadlineTest", - "readFailureNeverRefillsTest", - "decodeFailureMayRefillTest", - "dumpFailurePreservesSourceTest", - "writeFailurePreservesSourceTest", - "rollbackDuringDumpRechecksObservedFenceTest", - "rollbackDoesNotExtendSourceDeadlineTest", - "lateReadRejectionUsesDeadlineCategoryTest", - "successfulReadClearsDeadlineBeforeDecodeTest", - "readFailureKeepsCategoryAndDeniesRefillTest", - "decodeFailureKeepsCategoryAndAllowsRefillTest", - "dumpFailureKeepsCategoryAndSourceValueTest", - "writeFailureKeepsCategoryAndSourceValueTest", - "expiredZeroFenceReplyRefillsAndIsReadableTest", - "absentReplyWithFutureFenceBlocksRefillTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/effects.mjs", - "formal/replay/witnesses/effects-authority.mjs" - ] - }, - { - "id": "scope", - "version": 2, - "model": "formal/dialcache-scope-conformance.qnt", - "smoke": "formal/scope-smoke.itf.json", - "plannedTraces": 256, - "scheduledRegressions": [ - "lateSourceCannotPopulateReplacementTest", - "policyReplyAfterCloseBypassesRequestTest", - "nestedCloseAndDisabledBypassKeepOuterMemoTest", - "rejectedFlightAllowsRetryTest", - "sharedFailureHasOneAttributedErrorTest", - "disabledSourceFailureHasNoCacheTrailTest", - "policyClosureFailureIsAttributedWithoutCachingTest", - "absentValueIsMemoizedTest", - "independentRequestMemoUsesLastCompletionTest", - "pendingSourceKeepsRequestPolicyAcrossBypassAndClosureTest", - "rejectedIndependentSourceKeepsMemoizedValueTest", - "independentSourceIsNotRegisteredForLaterSharingTest", - "pendingRequestFlightIsJoinedBeforeMemoReadTest", - "bypassedRequestFailureIsAttributedToLocalTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/scope.mjs" - ] - }, - { - "id": "recovery", - "version": 1, - "model": "formal/dialcache-recovery-conformance.qnt", - "smoke": "formal/recovery-smoke.itf.json", - "plannedTraces": 512, - "scheduledRegressions": [ - "futureFrameDoesNotCarryMissFenceTest", - "defaultRecoversOwnTimeoutTest", - "explicitDenialReplacesDefaultTest", - "defaultRejectsOrdinaryFailureTest", - "defaultRecoversPropagatedTimeoutTest", - "lateSuccessCannotReplaceRecoveredValueTest", - "failedRecoveryPreservesDeadlineErrorTest", - "recoveredValueMemoizesOnlyInAttachedRequestTest", - "crossRequestRecoveryMemoizesBothScopesTest", - "closedRequestCannotReceiveLateRecoveryMemoTest", - "rollbackCannotLowerInvalidationWatermarkTest", - "rollbackDuringRetainedDecodeRejectsFutureSnapshotTest", - "instanceAllowReplacesTimeoutOnlyDefaultTest", - "instanceDenialReplacesTimeoutOnlyDefaultTest", - "operationDenialReplacesInstanceAllowTest", - "lastFreshReadDoesNotInvokeSourceTest", - "lastRecoveryMillisecondIsServedTest", - "maximumAgeAtReadDoesNotDecodeTest", - "fencedInitialBytesNeverRecoverTest", - "classifierErrorPreservesSourceWithoutDecodeTest", - "freshDecodeFailureCannotBeRetriedAsRecoveryTest", - "initialReadFailureSkipsRecoveryClassificationTest", - "rollbackBelowFreshCeilingStillRecoversTest", - "replacementDoesNotChangeRetainedRecoveryTest", - "maximumAgeBeforeDecodePreservesSourceTest", - "maximumAgeAfterDecodePreservesSourceTest", - "operationAllowReplacesInstanceDenialTest", - "coalescedRecoveryClassifiesAndDecodesOnceTest", - "recoveredValueKeepsOriginalFallbackDiagnosticTest", - "recoveredFlightMemoIsReusedByBothRequestsTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/recovery.mjs", - "formal/replay/witnesses/labels.mjs", - "formal/replay/witnesses/recovery-shadow.mjs" - ] - }, - { - "id": "policy", - "version": 3, - "model": "formal/dialcache-policy-conformance.qnt", - "smoke": "formal/policy-smoke.itf.json", - "plannedTraces": 512, - "scheduledRegressions": [ - "invalidReadBudgetBypassesAllCachingTest", - "invalidLocalRampPreservesRemoteTest", - "invalidRemoteRampPreservesLocalTest", - "invalidRecoveryUsesOrdinaryRetentionTest", - "invalidShadowPreservesNormalServingTest", - "localHitDoesNotRenewInsertionTtlTest", - "wallRollbackDoesNotExtendLocalTtlTest", - "wallRollbackRejectsFutureRemoteFrameTest", - "independentCompletionKeepsRegisteredLeaderTest", - "independentFailureKeepsRegisteredLeaderTest", - "eachSourceKeepsPublicationPolicyTest", - "absentValueIsStoredAndReusedTest", - "independentLocalCallsStillReuseSettledValueTest", - "independentLocalPublicationUsesLastCompletionTest", - "independentRemotePublicationUsesLastCompletionTest", - "providerFailureBypassesAndPreservesExistingLocalTest", - "disablingServingKeepsExistingLocalForReenablementTest", - "increasedFreshTtlCanReusePhysicallyRetainedValueTest", - "exactRemoteFreshBoundaryStartsSourceTest", - "increasedFreshTtlCannotResurrectExpiredStorageTest", - "remoteHitStartsFullLocalInsertionTtlTest", - "remoteHitWarmsLocalForTheReplysLocalTtlTest", - "untrackedReadFailureStillWarmsActiveLocalTest", - "invalidRemoteTtlPreservesLocalServingTest", - "invalidLocalTtlStillServesFreshRemoteTest", - "recoveryAgeEqualToFreshTtlStillServesFreshRemoteTest", - "negativeRecoveryAgeStillServesFreshRemoteTest", - "providerFailureReportsStablePolicyCategoryTest", - "remoteHitBeforeBoundaryDoesNotRenewFreshnessTest", - "falsyRemoteValuesAreServedFromRemoteTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/policy.mjs", - "formal/replay/witnesses/labels.mjs" - ] - }, - { - "id": "shadow", - "version": 3, - "model": "formal/dialcache-shadow-conformance.qnt", - "smoke": "formal/shadow-smoke.itf.json", - "plannedTraces": 1024, - "scheduledRegressions": [ - "omittedLoggingKeepsMismatchMetricsOnlyTest", - "explicitFalseLoggingOverridesEnabledDefaultTest", - "confirmationPastFreshnessKeepsOriginalPayloadAndAgeTest", - "confirmationRollbackKeepsPayloadAndClampsAgeTest", - "futureDarkAcquisitionReportsOffsetAndFillsMissTest", - "futureLateDarkReadKeepsTimeoutAndReportsOffsetTest", - "c0AtExactFreshnessBoundaryRefillsTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/shadow.mjs", - "formal/replay/witnesses/labels.mjs", - "formal/replay/witnesses/recovery-shadow.mjs", - "formal/replay/witnesses/shadow-diagnostics.mjs", - "formal/replay/witnesses/public-prefix.mjs" - ] - }, - { - "id": "admission", - "version": 1, - "model": "formal/dialcache-admission-conformance.qnt", - "smoke": "formal/admission-smoke.itf.json", - "plannedTraces": 128, - "scheduledRegressions": [ - "coalescedHitAdmitsOneJobTest", - "duplicateDropsBeforeCapacityIsFullTest", - "timeoutRetainsSourceCapacityTest", - "timeoutRetainsDecodeCapacityTest", - "timeoutRetainsConfirmationCapacityTest", - "fullInstanceDoesNotBlockOtherInstanceTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/admission.mjs" - ] - }, - { - "id": "layers", - "version": 2, - "model": "formal/dialcache-layers-conformance.qnt", - "smoke": "formal/layers-smoke.itf.json", - "plannedTraces": 512, - "scheduledRegressions": [ - "absentRemoteMaintenancePreservesLocalReuseTest", - "absentRemotePreservesLocalReuseTest", - "requestMissesShareProcessAndMemoizeSeparatelyTest", - "localReadPromotesBeforeEvictionTest", - "zeroCapacityKeepsSharingWithoutStorageTest", - "trackedSourceWaitsForValidatedReadToWarmLocalTest", - "invalidationGroupsOperationsButPreservesAcquiredCachesTest", - "requestMemoExceedsLocalCapacityTest", - "separateRequestRootsRetainIndependentValuesTest", - "oneInstanceEvictionCannotEvictAnotherInstanceTest", - "pendingSourcesKeepEntityAndOperationIdentityTest", - "settledRequestMemoSurvivesSharedLayerRampDownTest", - "untrackedReadsIgnoreGroupedInvalidationTest", - "trackedWithoutRemotePublishesReusableLocalTest", - "untrackedSourcePublicationIsProbedInAllThreeLayersTest", - "coalescingCallerJoinsPendingFlightBeforeSeededFrameTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/layers.mjs", - "formal/replay/witnesses/runtime.mjs" - ] - }, - { - "id": "independent", - "version": 2, - "model": "formal/dialcache-independent-conformance.qnt", - "smoke": "formal/independent-smoke.itf.json", - "plannedTraces": 512, - "scheduledRegressions": [ - "staggeredSourceStartsKeepIndependentBudgetsTest", - "staggeredSourcesExpireAtTheirOwnDeadlineTest", - "independentRecoveryAtCapturedAgeBoundaryTest", - "independentReadDeadlinesStartSeparateSourcesTest", - "timedOutReadCannotAffectAnotherCallTest", - "readFailureCannotBorrowAnotherCallsRefillTest", - "independentRecoveriesServeDistinctAcquiredSnapshotsTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/independent.mjs" - ] - }, - { - "id": "recovery-read", - "version": 1, - "model": "formal/dialcache-recovery-read-conformance.qnt", - "smoke": "formal/recovery-read-smoke.itf.json", - "plannedTraces": 256, - "scheduledRegressions": [ - "freshnessAfterHeldReadTest", - "trackedEncodingFailureSuppressesRefillTest", - "untrackedEncodingFailureStillPublishesLocalTest", - "trackedPhysicalRetentionExpiresAtCapTest", - "physicalCapDoesNotClampLogicalRecoveryTest", - "compressedRecoveryMemoizesWithoutLocalPublicationTest", - "corruptCompressedRecoveryKeepsOriginalSourceErrorTest", - "retainedCompressedRecoverySurvivesInvalidationTest", - "closedRequestCannotReceiveCompressedRecoveryTest", - "trackedSourceNeedsRemoteValidationBeforeLocalReuseTest", - "ordinaryValueWorkDoesNotCreateMarkerTest", - "ordinaryValueWorkDoesNotExtendMarkerTest", - "failedInvalidationPreservesExistingMarkerTest", - "failedInvalidationDoesNotCreateMarkerTest", - "freshCompressedReadReportsDecompressionTest", - "corruptCompressedReadReportsRawFallbackTest", - "heldReadJustBeforeFreshnessBoundaryStillHitsTest", - "untrackedCompressedRecoveryDoesNotWarmLocalTest", - "compressedRecoveryRechecksMaximumAfterDecodeTest", - "retainedSnapshotSurvivesPhysicalExpiryTest", - "unsafeTimestampSkipsSerializerAndAllowsRefillTest", - "unsupportedVersionSkipsSerializerAndAllowsRefillTest", - "maximumAgeBeforeDecodeKeepsOriginalErrorTest", - "laterInvalidationDoesNotRewriteObservedMissFenceTest", - "recoveredAbsenceSkipsSelectedShadowTest", - "recoveredValueSkipsSelectedShadowTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/labels.mjs", - "formal/replay/witnesses/recovery-read.mjs", - "formal/replay/witnesses/recovery-admission.mjs", - "formal/replay/witnesses/public-prefix.mjs" - ] - }, - { - "id": "local-failure", - "version": 1, - "model": "formal/dialcache-local-failure-conformance.qnt", - "smoke": "formal/local-failure-smoke.itf.json", - "plannedTraces": 128, - "scheduledRegressions": [ - "localReadFailureFallsThroughAndPreservesOldLocalTest", - "localReadFailureSkipsSourcePublicationButMemoizesTest", - "localWriteFailureKeepsSourceAndRequestMemoTest", - "sourceFailureKeepsPreviouslyAcceptedStorageTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/labels.mjs", - "formal/replay/witnesses/local-failure.mjs", - "formal/replay/witnesses/public-prefix.mjs" - ] - }, - { - "id": "runtime-boundaries", - "version": 1, - "model": "formal/dialcache-runtime-boundaries-conformance.qnt", - "smoke": "formal/runtime-boundaries-smoke.itf.json", - "plannedTraces": 256, - "scheduledRegressions": [ - "runtimeTrueEnablesSharingOverFalseDefaultTest", - "inheritedFalseKeepsIndependentMemoizingSourcesTest", - "localCohortEqualityBypassesBeforeAboveSampleCachesTest", - "remoteCohortEqualityBypassesBeforeAboveSampleCachesTest", - "requestAbsenceAndLiteralTextStayDistinctTest", - "localAbsenceAndLiteralTextStayDistinctTest", - "remoteAbsenceAndLiteralTextStayDistinctTest", - "requestFalsyValuesRemainDistinctAndReusableTest", - "localFalsyValuesRemainDistinctAndReusableTest", - "remoteFalsyValuesRemainDistinctAndReusableTest", - "nullProviderInheritsConfiguredServingAndDefaultSharingTest", - "omittedRampAndSharingUseLibraryDefaultsTest", - "reenablingSharingUsesTheOmittedTrueDefaultTest", - "falseRequestLeafPreservesMemoForReenablementTest", - "invalidCoalesceBypassesWithoutReplacingRemoteTest", - "invalidRequestLocalBypassesWithoutReplacingRemoteTest", - "explicitNullCoalesceBypassesWithoutReplacingRemoteTest", - "explicitNullRequestLocalBypassesWithoutReplacingRemoteTest", - "runtimeLocalTtlWithoutRampActivatesLayerTest", - "runtimeRemoteTtlWithoutRampActivatesLayerTest", - "disabledBaselineRampedUpKeepsDefaultSharingTest", - "fullFeatureKillSwitchKeepsOmittedSharingAndRetainedMemoTest", - "runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", - "runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest", - "remoteHitPromotesIntoNewlyEnabledLocalLayerTest", - "disabledSharingDoesNotJoinRegisteredFlightTest", - "defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/labels.mjs", - "formal/replay/witnesses/runtime-boundaries.mjs" - ] - }, - { - "id": "shadow-layers", - "version": 1, - "model": "formal/dialcache-shadow-layers-conformance.qnt", - "smoke": "formal/shadow-layers-smoke.itf.json", - "plannedTraces": 256, - "scheduledRegressions": [ - "darkSourcePublishesLocalBeforeShadowWriteTest", - "darkSourcePublishesRequestBeforeShadowWriteTest", - "darkPresentC0NeverBecomesLocalPublicationTest", - "darkPresentC0NeverBecomesRequestPublicationTest", - "deduplicatedJobKeepsIndependentCallerSourcesTest", - "darkFailureDoesNotUseEligibleStaleBytesTest", - "invalidShadowKeepsLocalPublicationTest", - "unboundedCallerSurvivesDarkJobDeadlineTest", - "servedAndDarkJobsShareCapacityButNotSourceOwnershipTest", - "fullMixedInstanceDoesNotBlockAnotherInstanceTest", - "servedDiagnosticSourceDoesNotPopulateLocalTest", - "validatedRemoteHitStopsFurtherShadowTest", - "ordinaryServingMissDoesNotAdmitDiagnosticSourceTest", - "shadowCohortBelowDoesNotAdmitTest", - "shadowCohortEqualityDoesNotAdmitTest", - "shadowCohortAboveAdmitsTest", - "darkFillRetainsPolicyThroughSerializationTest", - "retainedFreshC0StillComparesAfterFreshnessBoundaryTest", - "expiredC0CanFillAndServeNewValueTest", - "acquiredMissDoesNotRereadBeforeFillTest", - "darkPropagatedTimeoutIsSourceFailureTest", - "servedPropagatedTimeoutPreservesHitTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/labels.mjs", - "formal/replay/witnesses/shadow-layers.mjs", - "formal/replay/witnesses/public-prefix.mjs" - ] - }, - { - "id": "local-clock", - "version": 1, - "model": "formal/dialcache-local-clock-conformance.qnt", - "smoke": "formal/local-clock-smoke.itf.json", - "plannedTraces": 128, - "scheduledRegressions": [ - "fractionalInsertionExpiresAtWholeMillisecondTest", - "fractionalConstructionKeepsCommonInstanceGridTest", - "nonzeroOriginKeepsWholeMillisecondBoundaryTest", - "integerInsertionRetainsFullTtlTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/local-clock.mjs" - ] - }, - { - "id": "source-budgets", - "version": 1, - "model": "formal/dialcache-source-budgets-conformance.qnt", - "smoke": "formal/source-budgets-smoke.itf.json", - "plannedTraces": 256, - "scheduledRegressions": [ - "outsideAndInvalidOutsideCallsIgnoreDeadlineAndSharingTest", - "defaultSourceBudgetExpiresAtSixtySecondsTest", - "unboundedEnabledSourcePublishesAfterSixtySecondsTest", - "lateFollowerUsesLeadersRemainingBudgetTest", - "heldPolicyDoesNotSpendSourceBudgetTest", - "invalidKeyStillKeepsEnabledSourceDeadlineTest", - "abandonedSourceCannotReplaceSuccessfulRetryTest", - "localEntryExpiresAfterItsTtlTest", - "rejectedSourceLeavesPublishedLocalEntryTest", - "republishedEqualValueRestampsLocalExpiryTest" - ], - "status": "executable-profile-schedule", - "witnessSources": [ - "formal/witnesses.mjs", - "formal/replay/witnesses/index.mjs", - "formal/replay/witnesses/trace.mjs", - "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/labels.mjs", - "formal/replay/witnesses/source-budgets.mjs", - "formal/replay/witnesses/public-prefix.mjs" - ] - } - ], "cases": [ { "id": "C01.no-cache-plumbing", - "contracts": [ - "C01" - ], - "rule": "disabled calls bypass policy and caches", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-core.qnt:passThroughSkipsCacheMachinery", - "formal/dialcache-conformance.qnt:disabledAndRequestCallsKeepTheirOwnLifetimesTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "disabled-bypass", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "disabled calls bypass policy and caches" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "core/disabledAndRequestCallsKeepTheirOwnLifetimesTest" - ], - "generatedVectors": [] + } }, { "id": "C01.no-deadline", - "contracts": [ - "C01" - ], - "rule": "outside calls have no fallback deadline or sharing", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-flight-deadlines.qnt:outsideSourceHasNoDeadline", - "formal/dialcache-flight-deadlines.qnt:outsideCallsIgnoreConfiguredSourceDeadlineTest", - "formal/dialcache-source-budgets-conformance.qnt:outsideSourcesHaveNoDeadline", - "formal/dialcache-source-budgets-conformance.qnt:outsideAndInvalidOutsideCallsIgnoreDeadlineAndSharingTest" - ], - "requiredGenerated": [ - { - "profile": "source-budgets", - "witness": "outside-calls-skip-source-deadlines-sharing-and-publication", - "model": "formal/dialcache-source-budgets-conformance.qnt" - } - ], - "fixedRegressions": [ - "outside calls have no fallback deadline or sharing" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "source-budgets/outsideAndInvalidOutsideCallsIgnoreDeadlineAndSharingTest" - ], - "generatedVectors": [] + } }, { "id": "C02.nested-memo", - "contracts": [ - "C02" - ], - "rule": "nested enable and disable preserve outer memo", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-core.qnt:nestedDisablePreservesMemoTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "nested-memo-hit", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "nested enable and disable preserve outer memo" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C02.reenabled-memo", - "contracts": [ - "C02" - ], - "rule": "reenabling inside disabled scope reuses memo and preserves siblings", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-scope-conformance.qnt:nestedCloseAndDisabledBypassKeepOuterMemoTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "reenabled-memo-hit", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "reenabling inside disabled scope reuses memo and preserves siblings" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "scope/nestedCloseAndDisabledBypassKeepOuterMemoTest" - ], - "generatedVectors": [] + } }, { "id": "C03.late-publication", - "contracts": [ - "C03" - ], - "rule": "late old-scope value cannot enter a replacement scope", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-core.qnt:requestValueBelongsToCurrentScope", - "formal/dialcache-core.qnt:lateResultCannotEnterReplacementScopeTest", - "formal/dialcache-scope-conformance.qnt:closedScopesHaveNoMemo", - "formal/dialcache-scope-conformance.qnt:lateSourceCannotPopulateReplacementTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "replacement-miss-after-late-source", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "late old-scope value cannot enter a replacement scope", - "closed scope cannot be repopulated by late work" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "scope/lateSourceCannotPopulateReplacementTest" - ], - "generatedVectors": [] + } }, { "id": "C03.detached-bypass", - "contracts": [ - "C03" - ], - "rule": "Calls using a closed outer context bypass caching", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-core.qnt:passThroughSkipsCacheMachinery" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "detached-bypass", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C04.pending-policy", - "contracts": [ - "C04" - ], - "rule": "policy resolution after scope closure is pass-through", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-scope-conformance.qnt:policyReplyAfterCloseBypassesRequestTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "policy-reply-after-close", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "policy resolution after scope closure is pass-through" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "scope/policyReplyAfterCloseBypassesRequestTest" - ], - "generatedVectors": [] + } }, { "id": "C05.participating-publication", - "contracts": [ - "C05" - ], - "rule": "untracked source fills remote local and request layers", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-core.qnt:untrackedSourcePublishesToAllParticipatingLayersTest", - "formal/dialcache-layers-conformance.qnt:untrackedSourcePublicationIsProbedInAllThreeLayersTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "source-publication-probed-in-all-three-layers", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "untracked source fills remote local and request layers" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-core.qnt:loaderSuccessAfterSemanticMiss", - "formal/dialcache-core.qnt:finishRemotePublication" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/untrackedSourcePublicationIsProbedInAllThreeLayersTest" - ], - "generatedVectors": [] + } }, { "id": "C05.first-hit", - "contracts": [ - "C05" - ], - "rule": "local hit stops new shadow work", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesLocalBeforeShadowWriteTest", - "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesRequestBeforeShadowWriteTest", - "formal/dialcache-shadow-layers-conformance.qnt:validatedRemoteHitStopsFurtherShadowTest", - "formal/dialcache-shadow-layers-conformance.qnt:servedDiagnosticSourceDoesNotPopulateLocalTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "dark-local-source-publication-stops-later-shadow", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - }, - { - "profile": "shadow-layers", - "witness": "dark-request-source-publication-is-scope-local", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - }, - { - "profile": "shadow-layers", - "witness": "validated-remote-hit-warms-local-and-stops-shadow", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - }, - { - "profile": "shadow-layers", - "witness": "served-diagnostic-source-never-publishes-local", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "local hit stops new shadow work" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-validation.qnt:callerEarlierLayerHit", - "formal/dialcache-shadow-validation.qnt:admitJob", - "formal/dialcache-shadow-layers-conformance.qnt:begin", - "formal/dialcache-shadow-layers-conformance.qnt:publishFreshHit", - "formal/dialcache-shadow-layers-conformance.qnt:publishSource" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "shadow-layers/darkSourcePublishesLocalBeforeShadowWriteTest", - "shadow-layers/darkSourcePublishesRequestBeforeShadowWriteTest", - "shadow-layers/servedDiagnosticSourceDoesNotPopulateLocalTest", - "shadow-layers/validatedRemoteHitStopsFurtherShadowTest" - ], - "generatedVectors": [] + } }, { "id": "C06.null-request", - "contracts": [ - "C06" - ], - "rule": "null remains a value in request cache", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "memo-value:6", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "null remains a value in request cache" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-scope-conformance.qnt:resolveLoader", - "formal/kernel/serving.qnt:finish", - "formal/kernel/serving.qnt:releaseRequest" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/requestFalsyValuesRemainDistinctAndReusableTest" - ], - "generatedVectors": [] + } }, { "id": "C06.null-local", - "contracts": [ - "C06" - ], - "rule": "null remains a value in local cache", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "local-value:6", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "null remains a value in local cache" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:resolveLoader", - "formal/kernel/serving.qnt:settle", - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/localFalsyValuesRemainDistinctAndReusableTest" - ], - "generatedVectors": [] + } }, { "id": "C06.null-remote", - "contracts": [ - "C06" - ], - "rule": "null remains a value in remote cache", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "remote-value:6", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "null remains a value in remote cache" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:resolveLoader", - "formal/kernel/serving.qnt:settle", - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/remoteFalsyValuesRemainDistinctAndReusableTest" - ], - "generatedVectors": [] + } }, { "id": "C06.false-request", - "contracts": [ - "C06" - ], - "rule": "false remains a value in request cache", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "memo-value:7", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "false remains a value in request cache" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-scope-conformance.qnt:resolveLoader", - "formal/kernel/serving.qnt:finish", - "formal/kernel/serving.qnt:releaseRequest" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/requestFalsyValuesRemainDistinctAndReusableTest" - ], - "generatedVectors": [] + } }, { "id": "C06.false-local", - "contracts": [ - "C06" - ], - "rule": "false remains a value in local cache", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "local-value:7", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "false remains a value in local cache" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:resolveLoader", - "formal/kernel/serving.qnt:settle", - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/localFalsyValuesRemainDistinctAndReusableTest" - ], - "generatedVectors": [] + } }, { "id": "C06.false-remote", - "contracts": [ - "C06" - ], - "rule": "false remains a value in remote cache", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", - "formal/dialcache-policy-conformance.qnt:falsyRemoteValuesAreServedFromRemoteTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "remote-value:7", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "false remains a value in remote cache" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:resolveLoader", - "formal/kernel/serving.qnt:settle", - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/remoteFalsyValuesRemainDistinctAndReusableTest", - "policy/falsyRemoteValuesAreServedFromRemoteTest" - ], - "generatedVectors": [] + } }, { "id": "C06.zero-request", - "contracts": [ - "C06" - ], - "rule": "zero remains a value in request cache", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "memo-value:8", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "zero remains a value in request cache" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-scope-conformance.qnt:resolveLoader", - "formal/kernel/serving.qnt:finish", - "formal/kernel/serving.qnt:releaseRequest" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/requestFalsyValuesRemainDistinctAndReusableTest" - ], - "generatedVectors": [] + } }, { "id": "C06.zero-local", - "contracts": [ - "C06" - ], - "rule": "zero remains a value in local cache", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "local-value:8", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "zero remains a value in local cache" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:resolveLoader", - "formal/kernel/serving.qnt:settle", - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/localFalsyValuesRemainDistinctAndReusableTest" - ], - "generatedVectors": [] + } }, { "id": "C06.zero-remote", - "contracts": [ - "C06" - ], - "rule": "zero remains a value in remote cache", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", - "formal/dialcache-policy-conformance.qnt:falsyRemoteValuesAreServedFromRemoteTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "remote-value:8", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "zero remains a value in remote cache" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:resolveLoader", - "formal/kernel/serving.qnt:settle", - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/remoteFalsyValuesRemainDistinctAndReusableTest", - "policy/falsyRemoteValuesAreServedFromRemoteTest" - ], - "generatedVectors": [] + } }, { "id": "C06.empty-string-request", - "contracts": [ - "C06" - ], - "rule": "empty string remains a value in request cache", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "memo-value:9", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "empty string remains a value in request cache" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-scope-conformance.qnt:resolveLoader", - "formal/kernel/serving.qnt:finish", - "formal/kernel/serving.qnt:releaseRequest" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/requestFalsyValuesRemainDistinctAndReusableTest" - ], - "generatedVectors": [] + } }, { "id": "C06.empty-string-local", - "contracts": [ - "C06" - ], - "rule": "empty string remains a value in local cache", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "local-value:9", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "empty string remains a value in local cache" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:resolveLoader", - "formal/kernel/serving.qnt:settle", - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/localFalsyValuesRemainDistinctAndReusableTest" - ], - "generatedVectors": [] + } }, { "id": "C06.empty-string-remote", - "contracts": [ - "C06" - ], - "rule": "empty string remains a value in remote cache", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", - "formal/dialcache-policy-conformance.qnt:falsyRemoteValuesAreServedFromRemoteTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "remote-value:9", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "empty string remains a value in remote cache" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:resolveLoader", - "formal/kernel/serving.qnt:settle", - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/remoteFalsyValuesRemainDistinctAndReusableTest", - "policy/falsyRemoteValuesAreServedFromRemoteTest" - ], - "generatedVectors": [] + } }, { "id": "C06.absent-request", - "contracts": [ - "C06" - ], - "rule": "undefined is a memoized value", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-scope-conformance.qnt:absentValueIsMemoizedTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "memo-value:5", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "undefined is a memoized value" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "scope/absentValueIsMemoizedTest" - ], - "generatedVectors": [] + } }, { "id": "C06.absent-local", - "contracts": [ - "C06" - ], - "rule": "absent result remains cacheable in local storage", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:absentValueIsStoredAndReusedTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "local-value:5", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "absent result remains cacheable in local storage" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/absentValueIsStoredAndReusedTest" - ], - "generatedVectors": [] + } }, { "id": "C06.absent-remote", - "contracts": [ - "C06" - ], - "rule": "absent result remains cacheable in remote storage", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:remoteAbsenceAndLiteralTextStayDistinctTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "remote-value:5", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "absent result remains cacheable in remote storage" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:resolveLoader", - "formal/kernel/serving.qnt:settle", - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/remoteAbsenceAndLiteralTextStayDistinctTest" - ], - "generatedVectors": [] + } }, { "id": "C07.scope-isolation", - "contracts": [ - "C07" - ], - "rule": "concurrent outer request scopes retain independent flights and memo", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:separateRequestRootsRetainIndependentValuesTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "independent-scope-overlap", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "concurrent outer request scopes retain independent flights and memo", - "outer scopes isolate request memo" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-scope-conformance.qnt:holder", - "formal/kernel/serving.qnt:startRequestSource", - "formal/kernel/serving.qnt:releaseRequest", - "formal/kernel/serving.qnt:finish" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/separateRequestRootsRetainIndependentValuesTest" - ], - "generatedVectors": [] + } }, { "id": "C07.no-capacity-limit", - "contracts": [ - "C07" - ], - "rule": "request memo has no process local capacity cap", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:requestMemoExceedsLocalCapacityTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "request-memo-exceeds-local-capacity", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "request memo has no process local capacity cap" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/requestMemoExceedsLocalCapacityTest" - ], - "generatedVectors": [] + } }, { "id": "C08.shared-capacity", - "contracts": [ - "C08" - ], - "rule": "shared local capacity spans operation identities", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:capacityIsPerInstance", - "formal/dialcache-layers-conformance.qnt:localReadPromotesBeforeEvictionTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "lru-eviction-probed", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "shared local capacity spans operation identities", - "local capacity evicts the least recently used key" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/localReadPromotesBeforeEvictionTest" - ], - "generatedVectors": [] + } }, { "id": "C08.instance-capacity", - "contracts": [ - "C08" - ], - "rule": "instances isolate local storage and registered flights", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:oneInstanceEvictionCannotEvictAnotherInstanceTest", - "formal/dialcache-layers-conformance.qnt:sourceOwnershipNeverCrossesKeyOrInstance" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "capacity-is-per-instance", - "model": "formal/dialcache-layers-conformance.qnt" - }, - { - "profile": "layers", - "witness": "different-instances-own-distinct-flights", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "instances isolate local storage and registered flights" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/kernel/local-storage.qnt:putLocal", - "formal/kernel/flights.qnt:registerSource", - "formal/kernel/serving.qnt:identity", - "formal/kernel/serving.qnt:settle" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/oneInstanceEvictionCannotEvictAnotherInstanceTest" - ], - "generatedVectors": [] + } }, { "id": "C08.read-promotes", - "contracts": [ - "C08" - ], - "rule": "Reading an entry promotes it before a later LRU eviction", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:localReadPromotesBeforeEvictionTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "lru-read-promotes", - "model": "formal/dialcache-layers-conformance.qnt" - }, - { - "profile": "layers", - "witness": "promoted-value-survives-eviction", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/localReadPromotesBeforeEvictionTest" - ], - "generatedVectors": [] + } }, { "id": "C09.fixed-local-ttl", - "contracts": [ - "C09" - ], - "rule": "Local hits preserve insertion expiry; the exact TTL boundary expires", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:localHitDoesNotRenewInsertionTtlTest", - "formal/dialcache-policy-conformance.qnt:localHitsRespectInsertionExpiry", - "formal/dialcache-rule-checks.qnt:localBoundaryIsExclusive", - "formal/dialcache-rule-checks.qnt:localGridUsesWholeMilliseconds", - "formal/dialcache-source-budgets-conformance.qnt:localEntryExpiresAfterItsTtlTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "local-hit-preserves-insertion-expiry", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "local exact TTL boundary expires" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/localHitDoesNotRenewInsertionTtlTest", - "source-budgets/localEntryExpiresAfterItsTtlTest" - ], - "generatedVectors": [] + } }, { "id": "C09.wall-rollback", - "contracts": [ - "C09" - ], - "rule": "local expiry uses monotonic time across application wall rollback", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:wallRollbackDoesNotExtendLocalTtlTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "rollback-preserves-live-local", - "model": "formal/dialcache-policy-conformance.qnt" - }, - { - "profile": "policy", - "witness": "rollback-does-not-extend-local-ttl", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "local expiry uses monotonic time across application wall rollback" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/wallRollbackDoesNotExtendLocalTtlTest" - ], - "generatedVectors": [] + } }, { "id": "C09.insertion-age", - "contracts": [ - "C09" - ], - "rule": "nearly expired remote hit warms local for its full insertion TTL", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:remoteHitStartsFullLocalInsertionTtlTest", - "formal/dialcache-policy-conformance.qnt:remoteHitWarmsLocalForTheReplysLocalTtlTest" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "nearly expired remote hit warms local for its full insertion TTL" - ], - "vectorEvidence": [], - "status": "executable-quint-regression", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/remoteHitStartsFullLocalInsertionTtlTest", - "policy/remoteHitWarmsLocalForTheReplysLocalTtlTest" - ], - "generatedVectors": [] + } }, { "id": "C10.zero-capacity", - "contracts": [ - "C10" - ], - "rule": "zero local capacity retains coalescing but no settled value", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:zeroCapacityHasNoLocalValues", - "formal/dialcache-layers-conformance.qnt:zeroCapacityKeepsSharingWithoutStorageTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "zero-capacity-still-shares", - "model": "formal/dialcache-layers-conformance.qnt" - }, - { - "profile": "layers", - "witness": "zero-capacity-reloads", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "zero local capacity retains coalescing but no settled value" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/zeroCapacityKeepsSharingWithoutStorageTest" - ], - "generatedVectors": [] + } }, { "id": "C11.distinct-keys", - "contracts": [ - "C11" - ], - "rule": "different keys own independent flights", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:pendingSourcesKeepEntityAndOperationIdentityTest", - "formal/dialcache-layers-conformance.qnt:sourceOwnershipNeverCrossesKeyOrInstance" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "cross-key-overlap", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "different keys own independent flights" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:releasePolicy", - "formal/kernel/serving.qnt:settle" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/pendingSourcesKeepEntityAndOperationIdentityTest" - ], - "generatedVectors": [] + } }, { "id": "C11.one-registered-flight", - "contracts": [ - "C11" - ], - "rule": "Eligible concurrent same-key calls share one registered source", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:oneRegisteredSource", - "formal/dialcache-flight-deadlines.qnt:oneSourcePerRegisteredFlight", - "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest", - "formal/dialcache-conformance.qnt:coalescedPairPublishesOneReusableValueTest", - "formal/dialcache-scope-conformance.qnt:pendingRequestFlightIsJoinedBeforeMemoReadTest", - "formal/dialcache-layers-conformance.qnt:coalescingCallerJoinsPendingFlightBeforeSeededFrameTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "coalesced-result", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest", - "core/coalescedPairPublishesOneReusableValueTest", - "scope/pendingRequestFlightIsJoinedBeforeMemoReadTest", - "layers/coalescingCallerJoinsPendingFlightBeforeSeededFrameTest" - ], - "generatedVectors": [] + } }, { "id": "C12.separate-request-memos", - "contracts": [ - "C12" - ], - "rule": "request misses join one process flight then memoize separately", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:requestMissesShareProcessAndMemoizeSeparatelyTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "request-misses-share-process-flight", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "request misses join one process flight then memoize separately" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/requestMissesShareProcessAndMemoizeSeparatelyTest" - ], - "generatedVectors": [] + } }, { "id": "C13.uncoalesced-caching", - "contracts": [ - "C13" - ], - "rule": "coalescing off keeps settled caching", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:independentLocalCallsStillReuseSettledValueTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:disabledSharingDoesNotJoinRegisteredFlightTest", - "formal/dialcache-scope-conformance.qnt:independentSourceIsNotRegisteredForLaterSharingTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "uncoalesced-local-settled-hit", - "model": "formal/dialcache-policy-conformance.qnt" - }, - { - "profile": "policy", - "witness": "uncoalesced-remote-settled-hit", - "model": "formal/dialcache-policy-conformance.qnt" - }, - { - "profile": "scope", - "witness": "uncoalesced-request-settled-hit", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "coalescing off keeps settled caching" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:releasePolicy", - "formal/kernel/serving.qnt:settle" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/independentLocalCallsStillReuseSettledValueTest", - "runtime-boundaries/disabledSharingDoesNotJoinRegisteredFlightTest", - "scope/independentSourceIsNotRegisteredForLaterSharingTest", - "runtime-boundaries/defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest" - ], - "generatedVectors": [] + } }, { "id": "C13.local-last-writer", - "contracts": [ - "C13" - ], - "rule": "independent local publication is last writer wins", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:independentLocalPublicationUsesLastCompletionTest", - "formal/dialcache-source-budgets-conformance.qnt:rejectedSourceLeavesPublishedLocalEntryTest", - "formal/dialcache-source-budgets-conformance.qnt:republishedEqualValueRestampsLocalExpiryTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "independent-local-last-completion-probed", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "independent local publication is last writer wins" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:releasePolicy", - "formal/kernel/serving.qnt:settle" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/independentLocalPublicationUsesLastCompletionTest", - "source-budgets/rejectedSourceLeavesPublishedLocalEntryTest", - "source-budgets/republishedEqualValueRestampsLocalExpiryTest" - ], - "generatedVectors": [] + } }, { "id": "C13.remote-last-writer", - "contracts": [ - "C13" - ], - "rule": "independent remote publication is last writer wins", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:independentRemotePublicationUsesLastCompletionTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:remoteHitPromotesIntoNewlyEnabledLocalLayerTest" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "independent remote publication is last writer wins" - ], - "vectorEvidence": [], - "status": "executable-quint-regression", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:releasePolicy", - "formal/kernel/serving.qnt:settle" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/independentRemotePublicationUsesLastCompletionTest", - "runtime-boundaries/remoteHitPromotesIntoNewlyEnabledLocalLayerTest" - ], - "generatedVectors": [] + } }, { "id": "C14.inactive-layers", - "contracts": [ - "C14" - ], - "rule": "inactive serving layers do not coalesce", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-flight-deadlines.qnt:flightsRequireEligibleCaching", - "formal/dialcache-flight-deadlines.qnt:noFlightWhenCoalescingIneligible", - "formal/dialcache-flight-deadlines.qnt:inactiveServingLayersKeepConcurrentCallsIndependentTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "inactive-layers-independent-sources", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "inactive serving layers do not coalesce" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C15.shared-error-retry", - "contracts": [ - "C15" - ], - "rule": "rejected request flight is shared then removed for retry", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-scope-conformance.qnt:rejectedFlightAllowsRetryTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "shared-rejection", - "model": "formal/dialcache-scope-conformance.qnt" - }, - { - "profile": "scope", - "witness": "rejected-flight-retry", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "rejected request flight is shared then removed for retry" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "scope/rejectedFlightAllowsRetryTest" - ], - "generatedVectors": [] + } }, { "id": "C16.null-inherits", - "contracts": [ - "C16" - ], - "rule": "null provider inherits operation defaults", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-runtime-policy.qnt:nullProviderRetainsEveryBaselineLeafTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:nullProviderInheritsConfiguredServingAndDefaultSharingTest" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "null provider inherits operation defaults" - ], - "vectorEvidence": [], - "status": "executable-quint-regression", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/nullProviderInheritsConfiguredServingAndDefaultSharingTest" - ], - "generatedVectors": [] + } }, { "id": "C16.sparse-leaves", - "contracts": [ - "C16" - ], - "rule": "Runtime overlays replace only supplied leaves", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-runtime-policy.qnt:runtimeOverlayIsLeafWise", - "formal/dialcache-runtime-policy.qnt:sparseLocalOverridePreservesRemoteAndFeaturesTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "sparse-empty-provider-inherits-local-hit", - "model": "formal/dialcache-policy-conformance.qnt" - }, - { - "profile": "policy", - "witness": "sparse-empty-provider-inherits-remote-hit", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "sparse TTL overlay retains the remote TTL and replaces local insertion TTL", - "sparse ramp overlay preserves the disabled sibling layer" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C16.ttl-implies-ramp", - "contracts": [ - "C16" - ], - "rule": "A configured TTL with omitted ramp enables the layer fully", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-runtime-policy.qnt:configuredTtlImpliesDefaultFullRamp", - "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlWithoutRampActivatesLayerTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeRemoteTtlWithoutRampActivatesLayerTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "runtime TTLs without ramps enable both serving layers" - ], - "vectorEvidence": [], - "status": "executable-quint-regression", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/kernel/runtime-policy.qnt:resolve", - "formal/kernel/serving.qnt:release" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/runtimeLocalTtlWithoutRampActivatesLayerTest", - "runtime-boundaries/runtimeRemoteTtlWithoutRampActivatesLayerTest", - "runtime-boundaries/runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", - "runtime-boundaries/runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest" - ], - "generatedVectors": [] + } }, { "id": "C17.library-defaults", - "contracts": [ - "C17" - ], - "rule": "Request memoization, recovery, and shadow default off; coalescing defaults on", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-runtime-policy.qnt:featureLibraryDefaults", - "formal/dialcache-runtime-policy.qnt:omittedPolicyUsesLibraryDefaultsTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:omittedRampAndSharingUseLibraryDefaultsTest" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "library defaults disable request memo recovery and shadow while sharing active work" - ], - "vectorEvidence": [], - "status": "executable-quint-regression", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/omittedRampAndSharingUseLibraryDefaultsTest" - ], - "generatedVectors": [] + } }, { "id": "C17.disable-keeps-entry", - "contracts": [ - "C17" - ], - "rule": "runtime ramp changes preserve existing entries", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-runtime-policy.qnt:disablingPolicyDoesNotEvictInsertedEntriesTest", - "formal/dialcache-policy-conformance.qnt:disablingServingKeepsExistingLocalForReenablementTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "serving-disabled-preserves-existing-local", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "runtime ramp changes preserve existing entries" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:policy", - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/disablingServingKeepsExistingLocalForReenablementTest" - ], - "generatedVectors": [] + } }, { "id": "C18.captured-insertion", - "contracts": [ - "C18" - ], - "rule": "pending invocation keeps insertion TTL snapshot", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-runtime-policy.qnt:existingLocalEntryKeepsInsertionTtl", - "formal/dialcache-runtime-policy.qnt:policyChangeDuringInvocationTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "publication-after-policy-change", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "pending invocation keeps insertion TTL snapshot" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C18.captured-shadow-fill", - "contracts": [ - "C18" - ], - "rule": "dark fill preserves accepted runtime TTL and retention after policy changes", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:darkFillRetainsPolicyThroughSerializationTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "dark-fill-policy-snapshot-controls-physical-expiry", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "dark fill preserves accepted runtime TTL and retention after policy changes" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:admit", - "formal/dialcache-shadow-layers-conformance.qnt:beginWrite", - "formal/dialcache-shadow-layers-conformance.qnt:dumpReply", - "formal/dialcache-shadow-layers-conformance.qnt:writeReply" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "shadow-layers/darkFillRetainsPolicyThroughSerializationTest" - ], - "generatedVectors": [] + } }, { "id": "C18.existing-leader", - "contracts": [ - "C18" - ], - "rule": "runtime reenabling joins the registered flight before a newer local hit", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:sharedSourcesKeepRegistration", - "formal/dialcache-policy-conformance.qnt:independentCompletionKeepsRegisteredLeaderTest", - "formal/dialcache-policy-conformance.qnt:independentFailureKeepsRegisteredLeaderTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "join-after-policy-change", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "runtime reenabling joins the registered flight before a newer local hit" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/independentCompletionKeepsRegisteredLeaderTest", - "policy/independentFailureKeepsRegisteredLeaderTest" - ], - "generatedVectors": [] + } }, { "id": "C19.memo-bypass", - "contracts": [ - "C19" - ], - "rule": "request policy bypass retains memo for later reenabling", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:falseRequestLeafPreservesMemoForReenablementTest", - "formal/dialcache-scope-conformance.qnt:bypassedRequestFailureIsAttributedToLocalTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "memo-after-policy-bypass", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "request policy bypass retains memo for later reenabling" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/kernel/serving.qnt:releaseRequest", - "formal/dialcache-scope-conformance.qnt:policy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/falseRequestLeafPreservesMemoForReenablementTest", - "scope/bypassedRequestFailureIsAttributedToLocalTest" - ], - "generatedVectors": [] + } }, { "id": "C20.provider-failure", - "contracts": [ - "C20" - ], - "rule": "provider failure fails open without caching", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:providerFailureBypassesAndPreservesExistingLocalTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "provider-failure-preserves-existing-local", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "provider failure fails open without caching" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:providerFault", - "formal/kernel/policy-overlay.qnt:localTtl", - "formal/kernel/policy-overlay.qnt:remoteTtl", - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/providerFailureBypassesAndPreservesExistingLocalTest" - ], - "generatedVectors": [] + } }, { "id": "C20.invalid-invocation-policy", - "contracts": [ - "C20" - ], - "rule": "invalid runtime remoteReadTimeoutMs bypasses all cache layers", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:invalidReadBudgetBypassesAllCachingTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "invalid-read-budget-bypasses-caching", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "invalid runtime remoteReadTimeoutMs bypasses all cache layers" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/invalidReadBudgetBypassesAllCachingTest" - ], - "generatedVectors": [] + } }, { "id": "C21.invalid-layer", - "contracts": [ - "C21" - ], - "rule": "invalid local TTL leaves valid remote serving available", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:invalidLocalTtlStillServesFreshRemoteTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "invalid-local-ttl-preserves-remote-hit", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "invalid local TTL leaves valid remote serving available" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/kernel/policy-overlay.qnt:localTtl", - "formal/kernel/policy-overlay.qnt:remoteTtl", - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/invalidLocalTtlStillServesFreshRemoteTest" - ], - "generatedVectors": [] + } }, { "id": "C21.invalid-recovery", - "contracts": [ - "C21" - ], - "rule": "invalid optional staleOnErrorMaxAgeSec preserves fresh remote serving", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:recoveryAgeEqualToFreshTtlStillServesFreshRemoteTest", - "formal/dialcache-policy-conformance.qnt:negativeRecoveryAgeStillServesFreshRemoteTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "invalid-recovery-retention:23", - "model": "formal/dialcache-policy-conformance.qnt" - }, - { - "profile": "policy", - "witness": "invalid-recovery-retention:24", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "invalid optional staleOnErrorMaxAgeSec preserves fresh remote serving" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/kernel/policy-overlay.qnt:retention", - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/recoveryAgeEqualToFreshTtlStillServesFreshRemoteTest", - "policy/negativeRecoveryAgeStillServesFreshRemoteTest" - ], - "generatedVectors": [] + } }, { "id": "C21.invalid-shadow", - "contracts": [ - "C21" - ], - "rule": "invalid optional shadow preserves fresh remote serving", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:invalidShadowPreservesNormalServingTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "invalid-shadow-preserves-serving", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "invalid optional shadow preserves fresh remote serving" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/invalidShadowPreservesNormalServingTest" - ], - "generatedVectors": [] + } }, { "id": "C21.invalid-dark-shadow", - "contracts": [ - "C21" - ], - "rule": "invalid optional shadow disables dark reads while retaining local publication", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:invalidShadowKeepsLocalPublicationTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "invalid-dark-shadow-preserves-local-source-publication", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "invalid optional shadow disables dark reads while retaining local publication" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:policyFor", - "formal/dialcache-shadow-layers-conformance.qnt:admit", - "formal/dialcache-shadow-layers-conformance.qnt:publishSource" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "shadow-layers/invalidShadowKeepsLocalPublicationTest" - ], - "generatedVectors": [] + } }, { "id": "C22.freshness-boundary", - "contracts": [ - "C22" - ], - "rule": "remote exact fresh TTL expires", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-stale-recovery.qnt:lastFreshAgeSkipsSourceTest", - "formal/dialcache-recovery-conformance.qnt:lastFreshReadDoesNotInvokeSourceTest", - "formal/dialcache-policy-conformance.qnt:exactRemoteFreshBoundaryStartsSourceTest", - "formal/dialcache-rule-checks.qnt:freshBoundaryIsExclusive", - "formal/dialcache-policy-conformance.qnt:remoteHitsRespectAcquiredFreshness", - "formal/dialcache-policy-conformance.qnt:remoteHitBeforeBoundaryDoesNotRenewFreshnessTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "fresh-zero-age-skips-source", - "model": "formal/dialcache-recovery-conformance.qnt" - }, - { - "profile": "recovery", - "witness": "last-fresh-age-skips-source", - "model": "formal/dialcache-recovery-conformance.qnt" - }, - { - "profile": "policy", - "witness": "remote-exact-fresh-boundary-miss", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "remote exact fresh TTL expires" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:releasePolicy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/exactRemoteFreshBoundaryStartsSourceTest", - "recovery/lastFreshReadDoesNotInvokeSourceTest", - "policy/remoteHitBeforeBoundaryDoesNotRenewFreshnessTest" - ], - "generatedVectors": [] + } }, { "id": "C22.physical-vs-logical", - "contracts": [ - "C22" - ], - "rule": "runtime changes preserve in-flight physical TTL and affect later freshness", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:increasedFreshTtlCanReusePhysicallyRetainedValueTest", - "formal/dialcache-policy-conformance.qnt:increasedFreshTtlCannotResurrectExpiredStorageTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "increased-fresh-ttl-reuses-retained-frame", - "model": "formal/dialcache-policy-conformance.qnt" - }, - { - "profile": "policy", - "witness": "increased-fresh-ttl-cannot-resurrect-expired-storage", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "runtime changes preserve in-flight physical TTL and affect later freshness" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-policy-conformance.qnt:releasePolicy", - "formal/kernel/serving.qnt:settle" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/increasedFreshTtlCanReusePhysicallyRetainedValueTest", - "policy/increasedFreshTtlCannotResurrectExpiredStorageTest" - ], - "generatedVectors": [] + } }, { "id": "C23.library-read-budget", - "contracts": [ - "C23" - ], - "rule": "library read deadline precedence", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:libraryReadBudgetIsFiftyMillisecondsTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "initial-budget:0", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "library read deadline precedence" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-effects-conformance.qnt:initial" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "effects/libraryReadBudgetIsFiftyMillisecondsTest" - ], - "generatedVectors": [] + } }, { "id": "C23.instance-read-budget", - "contracts": [ - "C23" - ], - "rule": "instance read deadline precedence", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:instanceReadBudgetOverridesLibraryTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "initial-budget:1", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "instance read deadline precedence" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-effects-conformance.qnt:initial", - "formal/dialcache-effects-conformance.qnt:beginCall" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "effects/instanceReadBudgetOverridesLibraryTest" - ], - "generatedVectors": [] + } }, { "id": "C23.operation-read-budget", - "contracts": [ - "C23" - ], - "rule": "operation read deadline precedence", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:operationReadBudgetOverridesInstanceTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "initial-budget:2", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "operation read deadline precedence" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-effects-conformance.qnt:initial", - "formal/dialcache-effects-conformance.qnt:beginCall" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "effects/operationReadBudgetOverridesInstanceTest" - ], - "generatedVectors": [] + } }, { "id": "C23.runtime-read-budget", - "contracts": [ - "C23" - ], - "rule": "runtime read deadline precedence", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:runtimeReadBudgetOverridesOperationTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "initial-budget:3", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "runtime read deadline precedence" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-effects-conformance.qnt:initial", - "formal/dialcache-effects-conformance.qnt:beginCall" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "effects/runtimeReadBudgetOverridesOperationTest" - ], - "generatedVectors": [] + } }, { "id": "C23.source-start", - "contracts": [ - "C23" - ], - "rule": "fallback deadline starts after remote read completes", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-flight-deadlines.qnt:fallbackDeadlineStartsWithFallback", - "formal/dialcache-flight-deadlines.qnt:delayedLookupKeepsFullSourceBudgetTest", - "formal/dialcache-effects-conformance.qnt:readTimeoutStartsIndependentSourceDeadlineTest", - "formal/dialcache-effects-connection.qnt:effectsDeadlineMatchesSourceStart" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "read-timeout-starts-source", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "fallback deadline starts after remote read completes" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", @@ -3148,195 +793,60 @@ ], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof.", "nativeScope": "Native TestPreciseSourceDeadline preserves the full source-relative budget when an invocation begins between millisecond boundaries, including submillisecond success/error completion and source-relative diagnostics; TestPreciseDeadlineRechecksEarlyTimer rejects early timer delivery as an independent deadline authority. This supplements the existing Quint source-start obligation; it does not add generated witnesses or independently prove exclusion of earlier cache-read time." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C23.default-source-budget", - "contracts": [ - "C23" - ], - "rule": "library source deadline defaults to sixty seconds", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-flight-deadlines.qnt:omittedSourceBudgetUsesSixtySeconds", - "formal/dialcache-flight-deadlines.qnt:librarySourceDeadlineIsSixtySecondsTest", - "formal/dialcache-source-budgets-conformance.qnt:defaultSourceBudgetExpiresAtSixtySecondsTest" - ], - "requiredGenerated": [ - { - "profile": "source-budgets", - "witness": "default-source-budget-expires-at-sixty-seconds", - "model": "formal/dialcache-source-budgets-conformance.qnt" - } - ], - "fixedRegressions": [ - "library source deadline defaults to sixty seconds" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "source-budgets/defaultSourceBudgetExpiresAtSixtySecondsTest" - ], - "generatedVectors": [] + } }, { "id": "C24.follower-read", - "contracts": [ - "C24" - ], - "rule": "late follower inherits remaining read deadline", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:followerKeepsAcceptedReadBudgetTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "follower-keeps-read-budget", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "late follower inherits remaining read deadline" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C24.follower-source", - "contracts": [ - "C24" - ], - "rule": "late follower inherits remaining fallback deadline", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-flight-deadlines.qnt:lateFollowerKeepsLeaderSourceDeadlineTest", - "formal/dialcache-source-budgets-conformance.qnt:followersKeepTheirOwnersOutcome", - "formal/dialcache-source-budgets-conformance.qnt:lateFollowerUsesLeadersRemainingBudgetTest", - "formal/dialcache-source-connection.qnt:sourceOwnersMatchContract", - "formal/dialcache-source-connection.qnt:followerKeepsAcquiredOwner" - ], - "requiredGenerated": [ - { - "profile": "source-budgets", - "witness": "late-follower-keeps-leaders-remaining-source-budget", - "model": "formal/dialcache-source-budgets-conformance.qnt" - } - ], - "fixedRegressions": [ - "late follower inherits remaining fallback deadline" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-flight-deadlines.qnt:joinFollower" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "source-budgets/lateFollowerUsesLeadersRemainingBudgetTest" - ], - "generatedVectors": [] + } }, { "id": "C24.independent-reads", - "contracts": [ - "C24" - ], - "rule": "uncoalesced remote reads own independent remaining budgets", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-independent-conformance.qnt:independentReadDeadlinesStartSeparateSourcesTest" - ], - "requiredGenerated": [ - { - "profile": "independent", - "witness": "independent-read-budgets", - "model": "formal/dialcache-independent-conformance.qnt" - }, - { - "profile": "independent", - "witness": "one-read-times-out-before-another", - "model": "formal/dialcache-independent-conformance.qnt" - } - ], - "fixedRegressions": [ - "uncoalesced remote reads own independent remaining budgets" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C25.late-source-rejected", - "contracts": [ - "C25" - ], - "rule": "late resolve loses to deadline before timer delivery", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-flight-deadlines.qnt:timedOutSourceCannotPublish", - "formal/dialcache-flight-deadlines.qnt:lateSettlementBeforeTimerTest", - "formal/dialcache-rule-checks.qnt:sourceBoundaryIsExclusive", - "formal/dialcache-source-connection.qnt:acceptedSourcesMatchContract" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "late-resolve", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "late resolve loses to deadline before timer delivery" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", @@ -3346,36 +856,12 @@ ], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof.", "nativeScope": "Native TestPreciseSourceDeadline supplements the existing exclusive settlement boundary with fractional invocation origins and success at or after the exact budget. This is clock-binding evidence; the existing Quint histories separately cover late settlement before timer delivery. No new generated coverage is claimed." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C25.late-rejection", - "contracts": [ - "C25" - ], - "rule": "late reject loses to deadline before timer delivery", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-flight-deadlines.qnt:timedOutSourceCannotPublish", - "formal/dialcache-flight-deadlines.qnt:lateSettlementBeforeTimerTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "late-reject", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "late reject loses to deadline before timer delivery" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", @@ -3385,356 +871,108 @@ ], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof.", "nativeScope": "Native TestPreciseSourceDeadline preserves the original source error before the full source-relative budget and returns timeout at or after its exact boundary from a fractional invocation origin. This is clock-binding evidence; the existing Quint histories separately cover delayed timer delivery. No new generated coverage is claimed." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C25.abandoned-overlap", - "contracts": [ - "C25" - ], - "rule": "timeout releases flight while old loader continues", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-flight-deadlines.qnt:abandonedSourceMayOverlapNewFlightTest", - "formal/dialcache-effects-conformance.qnt:timedOutLoaderOverlapsNewFlightTest", - "formal/dialcache-source-budgets-conformance.qnt:abandonedSourceCannotReplaceSuccessfulRetryTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "abandoned-overlap", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "source-budgets", - "witness": "abandoned-source-cannot-replace-successful-retry", - "model": "formal/dialcache-source-budgets-conformance.qnt" - } - ], - "fixedRegressions": [ - "timeout releases flight while old loader continues" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "source-budgets/abandonedSourceCannotReplaceSuccessfulRetryTest" - ], - "generatedVectors": [] + } }, { "id": "C26.unbounded-source", - "contracts": [ - "C26" - ], - "rule": "disabled fallback deadline accepts later source settlement", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-flight-deadlines.qnt:disabledSourceDeadlineNeverTimesOut", - "formal/dialcache-flight-deadlines.qnt:explicitlyUnboundedEnabledSourceAcceptsLateValueTest", - "formal/dialcache-source-budgets-conformance.qnt:unboundedEnabledSourcePublishesAfterSixtySecondsTest" - ], - "requiredGenerated": [ - { - "profile": "source-budgets", - "witness": "unbounded-enabled-source-publishes-after-sixty-seconds", - "model": "formal/dialcache-source-budgets-conformance.qnt" - } - ], - "fixedRegressions": [ - "disabled fallback deadline accepts later source settlement" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "source-budgets/unboundedEnabledSourcePublishesAfterSixtySecondsTest" - ], - "generatedVectors": [] + } }, { "id": "C26.publication-ownership", - "contracts": [ - "C26" - ], - "rule": "accepted serialization and write outlive fallback deadline", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-flight-deadlines.qnt:publicationRequiresAcceptedSource", - "formal/dialcache-flight-deadlines.qnt:acceptedPublicationOutlivesDeadlineTest", - "formal/dialcache-effects-conformance.qnt:writeRequiresAcceptedSource", - "formal/dialcache-effects-conformance.qnt:acceptedWriteOutlivesDeadlineTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "serialize-outlives-deadline", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "publication-after-deadline", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "accepted serialization and write outlive fallback deadline" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C26.decode-ownership", - "contracts": [ - "C26" - ], - "rule": "fresh decoding is outside the source deadline", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "decode-outlives-deadline", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "fresh decoding is outside the source deadline" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C27.key-failure", - "contracts": [ - "C27" - ], - "rule": "key construction failure runs source with its enabled deadline", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-flight-deadlines.qnt:keyFailureKeepsEnabledSourceDeadlineTest", - "formal/dialcache-flight-deadlines.qnt:independentAcceptanceChecksCapturedDeadline", - "formal/dialcache-source-budgets-conformance.qnt:onlyEnabledValidCallsResolvePolicy", - "formal/dialcache-source-budgets-conformance.qnt:invalidKeyStillKeepsEnabledSourceDeadlineTest" - ], - "requiredGenerated": [ - { - "profile": "source-budgets", - "witness": "invalid-enabled-key-preserves-source-deadline", - "model": "formal/dialcache-source-budgets-conformance.qnt" - } - ], - "fixedRegressions": [ - "key construction failure runs source with its enabled deadline" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "source-budgets/invalidKeyStillKeepsEnabledSourceDeadlineTest" - ], - "generatedVectors": [] + } }, { "id": "C27.dump-failure", - "contracts": [ - "C27" - ], - "rule": "dump failure returns source and does not retain value", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:dumpFailurePreservesSourceTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "dump-failure-preserves-value", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "dump failure returns source and does not retain value" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C27.write-failure", - "contracts": [ - "C27" - ], - "rule": "write failure returns source and does not retain value", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:writeFailurePreservesSourceTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "write-failure-preserves-value", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "write failure returns source and does not retain value" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C27.local-read-failure", - "contracts": [ - "C27" - ], - "rule": "Failed local reads skip reuse and local publication", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-core.qnt:failedLocalReadSkipsReuseAndPublication", - "formal/dialcache-core.qnt:localReadFailureContinuesToRemoteTest", - "formal/dialcache-core.qnt:localReadFailureSuppressesSourcePublicationTest", - "formal/dialcache-local-failure-conformance.qnt:failedReadKeepsPriorLocalValue", - "formal/dialcache-local-failure-conformance.qnt:localReadFailureFallsThroughAndPreservesOldLocalTest", - "formal/dialcache-local-failure-conformance.qnt:localReadFailureSkipsSourcePublicationButMemoizesTest" - ], - "requiredGenerated": [ - { - "profile": "local-failure", - "witness": "failed-local-read-preserves-old-value-and-memoizes-remote", - "model": "formal/dialcache-local-failure-conformance.qnt" - }, - { - "profile": "local-failure", - "witness": "failed-local-read-suppresses-later-source-publication", - "model": "formal/dialcache-local-failure-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "The local-failure profile injects a panic through Go's local-storage integer-clock boundary while successful operations use real local storage. Shared histories and public-action regressions observe fall-through, preservation of the prior local value, suppression of later local publication, and request memoization through public probes. This is a bounded fault seam, not arbitrary resource-failure coverage." - }, - "quintDefinitions": [ - "formal/dialcache-local-failure-conformance.qnt:acquired" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "local-failure/localReadFailureFallsThroughAndPreservesOldLocalTest", - "local-failure/localReadFailureSkipsSourcePublicationButMemoizesTest" - ], - "generatedVectors": [] + } }, { "id": "C27.local-write-failure", - "contracts": [ - "C27" - ], - "rule": "A failed local write preserves the accepted source result", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-core.qnt:failedLocalWritePreservesAcceptedResult", - "formal/dialcache-core.qnt:localWriteFailurePreservesSourceAndMemoTest", - "formal/dialcache-core.qnt:localWriteFailurePreservesRemoteHitTest", - "formal/dialcache-local-failure-conformance.qnt:failedWriteKeepsAcceptedCallerResult", - "formal/dialcache-local-failure-conformance.qnt:localWriteFailureKeepsSourceAndRequestMemoTest" - ], - "requiredGenerated": [ - { - "profile": "local-failure", - "witness": "failed-local-write-keeps-result-and-request-memo", - "model": "formal/dialcache-local-failure-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", @@ -3743,777 +981,228 @@ "go/api_boundary_test.go" ], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-local-failure-conformance.qnt:acquired" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "local-failure/localWriteFailureKeepsSourceAndRequestMemoTest" - ], - "generatedVectors": [] + } }, { "id": "C28.no-refill-after-read-failure", - "contracts": [ - "C28" - ], - "rule": "remote read timeout suppresses refill and late read", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-core.qnt:remoteFailureNeverRefills", - "formal/dialcache-effects-conformance.qnt:readTimeoutStartsIndependentSourceDeadlineTest", - "formal/dialcache-effects-conformance.qnt:lateReadCannotBecomeHitTest", - "formal/dialcache-conformance.qnt:failedReadPreservesPreviouslyStoredBytesTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "failed-read-no-refill", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "abandoned-read-settles", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "remote read timeout suppresses refill and late read", - "read failure returns source and does not retain value" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "core/failedReadPreservesPreviouslyStoredBytesTest" - ], - "generatedVectors": [] + } }, { "id": "C28.untracked-local-publication", - "contracts": [ - "C28" - ], - "rule": "untracked read failure still permits active local publication", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-core.qnt:remoteReadFailureStillPublishesUntrackedLocalAndRequestTest", - "formal/dialcache-policy-conformance.qnt:untrackedReadFailureStillWarmsActiveLocalTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "failed-untracked-read-still-warms-local", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "untracked read failure still permits active local publication" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-core.qnt:loaderSuccessAfterRemoteFailure" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "policy/untrackedReadFailureStillWarmsActiveLocalTest" - ], - "generatedVectors": [] + } }, { "id": "C29.missing-redis-local", - "contracts": [ - "C29" - ], - "rule": "missing remote adapter leaves valid local serving available", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:absentRemoteHasNoAdapterEffects", - "formal/dialcache-layers-conformance.qnt:absentRemotePreservesLocalReuseTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "absent-remote-preserves-local-reuse", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "missing remote adapter leaves valid local serving available" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/absentRemotePreservesLocalReuseTest" - ], - "generatedVectors": [] + } }, { "id": "C29.missing-redis-maintenance", - "contracts": [ - "C29" - ], - "rule": "Missing Redis surfaces a maintenance error while local reuse remains valid", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:absentRemoteMaintenancePreservesLocalReuseTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "absent-remote-maintenance-preserves-local", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/absentRemoteMaintenancePreservesLocalReuseTest" - ], - "generatedVectors": [] + } }, { "id": "C29.maintenance-failure", - "contracts": [ - "C29" - ], - "rule": "explicit invalidation surfaces mutation failure", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-recovery-read-conformance.qnt:failedInvalidationPreservesExistingMarkerTest", - "formal/dialcache-recovery-read-conformance.qnt:failedInvalidationDoesNotCreateMarkerTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "failed-maintenance-preserves-existing-marker", - "model": "formal/dialcache-recovery-read-conformance.qnt" - }, - { - "profile": "recovery-read", - "witness": "failed-maintenance-preserves-absent-marker", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "explicit invalidation surfaces mutation failure" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:invalidate" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery-read/failedInvalidationPreservesExistingMarkerTest", - "recovery-read/failedInvalidationDoesNotCreateMarkerTest" - ], - "generatedVectors": [] + } }, { "id": "C30.observer-isolation", - "contracts": [ - "C30" - ], - "rule": "observer failures cannot change cache or source outcomes", "kind": "portable-behavior", "group": "deadlines-and-fail-open", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:observerFailuresCannotPreventCacheHitTest", - "formal/dialcache-effects-conformance.qnt:observerFailuresCannotPreventPublicationTest", - "formal/dialcache-effects-conformance.qnt:observerFailuresCannotReplaceSourceErrorTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "observer-failure-hit", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "observer-failure-publication", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "observer-failure-source-error", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "observer failures cannot change cache or source outcomes" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-effects-conformance.qnt:observerFault", - "formal/dialcache-effects-conformance.qnt:emit", - "formal/dialcache-effects-conformance.qnt:settledRead", - "formal/dialcache-effects-conformance.qnt:settledSource" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "effects/observerFailuresCannotPreventCacheHitTest", - "effects/observerFailuresCannotPreventPublicationTest", - "effects/observerFailuresCannotReplaceSourceErrorTest" - ], - "generatedVectors": [] + } }, { "id": "C31.tracked-no-local-fill", - "contracts": [ - "C31" - ], - "rule": "tracked refill suppresses local until a Redis hit warms it", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-core.qnt:trackedRemoteFallbackSuppressesLocalPublication", - "formal/dialcache-layers-conformance.qnt:trackedSourceWaitsForValidatedReadToWarmLocalTest", - "formal/dialcache-recovery-read-conformance.qnt:trackedSourceNeedsRemoteValidationBeforeLocalReuseTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "tracked-refill-needs-remote-validation", - "model": "formal/dialcache-layers-conformance.qnt" - }, - { - "profile": "layers", - "witness": "validated-tracked-hit-warms-local", - "model": "formal/dialcache-layers-conformance.qnt" - }, - { - "profile": "recovery-read", - "witness": "tracked-source-requires-validation-before-local-reuse", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "tracked refill suppresses local until a Redis hit warms it" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:resolveLoader" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery-read/trackedSourceNeedsRemoteValidationBeforeLocalReuseTest", - "layers/trackedSourceWaitsForValidatedReadToWarmLocalTest" - ], - "generatedVectors": [] + } }, { "id": "C32.grouped-invalidation", - "contracts": [ - "C32" - ], - "rule": "one invalidation fences all tracked operation variants only for its entity", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:invalidationGroupsOperationsButPreservesAcquiredCachesTest", - "formal/dialcache-conformance.qnt:invalidationRefillsFromCurrentSourceTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "invalidation-fences-both-operations", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "one invalidation fences all tracked operation variants only for its entity" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-layers-conformance.qnt:invalidate", - "formal/kernel/remote-frames.qnt:readableFrame" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/invalidationGroupsOperationsButPreservesAcquiredCachesTest", - "core/invalidationRefillsFromCurrentSourceTest" - ], - "generatedVectors": [] + } }, { "id": "C32.untracked-unaffected", - "contracts": [ - "C32" - ], - "rule": "untracked Redis values ignore invalidation markers", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:untrackedReadsIgnoreGroupedInvalidationTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "untracked-ignores-watermark", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "untracked Redis values ignore invalidation markers" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/kernel/remote-frames.qnt:readableFrame" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/untrackedReadsIgnoreGroupedInvalidationTest" - ], - "generatedVectors": [] + } }, { "id": "C34.first-fence", - "contracts": [ - "C34" - ], - "rule": "observed future fence suppresses serialization and refill", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-tracked-invalidation.qnt:observedFutureFenceSkipsRefillTest", - "formal/dialcache-tracked-invalidation.qnt:refillAtFenceEqualitySkipsWriteTest", - "formal/dialcache-effects-conformance.qnt:absentReplyWithFutureFenceBlocksRefillTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "normalized-fence-blocks-publication", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "observed future fence suppresses serialization and refill" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-effects-conformance.qnt:settledSource" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "effects/absentReplyWithFutureFenceBlocksRefillTest" - ], - "generatedVectors": [] + } }, { "id": "C34.second-fence", - "contracts": [ - "C34" - ], - "rule": "tracked refill rechecks clock after serialization", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:rollbackDuringDumpRechecksObservedFenceTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "dump-rechecks-fence-after-rollback", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "tracked refill rechecks clock after serialization" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C34.write-timestamp", - "contracts": [ - "C34" - ], - "rule": "admitted tracked refill timestamps after serialization", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:writeStampAfterSerializationClearsInterveningFenceTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "write-stamp-after-serialization", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "admitted tracked refill timestamps after serialization" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-effects-conformance.qnt:releaseDump", - "formal/dialcache-effects-conformance.qnt:releaseWrite" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "effects/writeStampAfterSerializationClearsInterveningFenceTest" - ], - "generatedVectors": [] + } }, { "id": "C35.delayed-old-write", - "contracts": [ - "C35" - ], - "rule": "delayed old write is fenced after invalidation", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-tracked-invalidation.qnt:staleValueAfterInvalidationIsFenced", - "formal/dialcache-tracked-invalidation.qnt:acquiredAfterInvalidationDoesNotServeStale", - "formal/dialcache-effects-conformance.qnt:delayedWriteRemainsFencedTest", - "formal/dialcache-tracked-invalidation.qnt:acquisitionAfterInvalidationRejectsOldBytesTest", - "formal/dialcache-tracked-invalidation.qnt:staleWriteAtCoveredDelayEqualityRemainsFencedTest", - "formal/dialcache-tracked-invalidation.qnt:freshWriteBeyondBufferBecomesReadableTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "delayed-fenced-write", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "delayed old write is fenced after invalidation" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C36.acquired-fresh", - "contracts": [ - "C36" - ], - "rule": "acquired tracked snapshot survives later invalidation", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest", - "formal/dialcache-independent-conformance.qnt:acceptedFreshDecodeSurvivesOtherInvalidationTest", - "formal/dialcache-tracked-invalidation.qnt:acquiredSnapshotSurvivesLaterInvalidationTest" - ], - "requiredGenerated": [ - { - "profile": "independent", - "witness": "acquired-fresh-decode-survives-invalidation", - "model": "formal/dialcache-independent-conformance.qnt" - } - ], - "fixedRegressions": [ - "acquired tracked snapshot survives later invalidation" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C36.acquired-local", - "contracts": [ - "C36" - ], - "rule": "invalidation preserves acquired local value", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:invalidationGroupsOperationsButPreservesAcquiredCachesTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "invalidation-preserves-local-hit", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "invalidation preserves acquired local value" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/invalidationGroupsOperationsButPreservesAcquiredCachesTest" - ], - "generatedVectors": [] + } }, { "id": "C36.acquired-request", - "contracts": [ - "C36" - ], - "rule": "invalidation preserves acquired request value", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-layers-conformance.qnt:invalidationGroupsOperationsButPreservesAcquiredCachesTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "invalidation-preserves-request-hit", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "invalidation preserves acquired request value" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/invalidationGroupsOperationsButPreservesAcquiredCachesTest" - ], - "generatedVectors": [] + } }, { "id": "C37.physical-cap", - "contracts": [ - "C37" - ], - "rule": "tracked retention has a one hour physical cap", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-recovery-read-conformance.qnt:trackedWritesRespectPhysicalCap", - "formal/dialcache-recovery-read-conformance.qnt:trackedPhysicalRetentionExpiresAtCapTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "tracked-physical-cap-expires-before-logical-freshness", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "tracked retention has a one hour physical cap" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:resolveLoader" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery-read/trackedPhysicalRetentionExpiresAtCapTest" - ], - "generatedVectors": [] + } }, { "id": "C37.logical-age-unclamped", - "contracts": [ - "C37" - ], - "rule": "tracked stale retention cap does not clamp logical recovery age", "kind": "portable-behavior", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-recovery-read-conformance.qnt:recoveredAgeUsesLogicalMaximum", - "formal/dialcache-recovery-read-conformance.qnt:physicalCapDoesNotClampLogicalRecoveryTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "logical-recovery-age-exceeds-physical-cap", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "tracked stale retention cap does not clamp logical recovery age" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:validCandidate" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery-read/physicalCapDoesNotClampLogicalRecoveryTest" - ], - "generatedVectors": [] + } }, { "id": "C38.marker-transition", - "contracts": [ - "C38", - "W09" - ], - "rule": "A watermark cutoff never moves backwards", "kind": "wire-protocol", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:rollbackCannotLowerInvalidationWatermarkTest", - "formal/dialcache-invalidation-transition.qnt:successfulCutoffIsExactMaximum", - "formal/dialcache-invalidation-transition.qnt:futureCutoffDoesNotMoveBackwardsTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "invalidation/existing future cutoff never moves backwards" - ], - "status": "executable-quint-regression", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", @@ -4521,154 +1210,12 @@ "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof.", "goIntegration": ".formal-traces/go-integration.jsonl" - }, - "quintDefinitions": [ - "formal/dialcache-invalidation-transition.qnt:invalidated" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/rollbackCannotLowerInvalidationWatermarkTest" - ], - "generatedVectors": [ - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 002: zero buffer / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 014: buffered cutoff / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 026: retention above floor / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 038: maximum buffer / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 050: maximum safe sum / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 062: leading decimal zeros / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 242: maximum timestamp / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 254: zero timestamp / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 278: all-zero decimal text / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 009: zero buffer / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 013: buffered cutoff / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 015: buffered cutoff / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 016: buffered cutoff / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 021: buffered cutoff / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 033: retention above floor / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 252: zero timestamp / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 253: zero timestamp / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 255: zero timestamp / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 256: zero timestamp / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 261: zero timestamp / leading-zero stored decimal" - } - ] + } }, { "id": "C39.reject-before-mutation", - "contracts": [ - "C39", - "W09" - ], - "rule": "Invalid watermark arguments reject before mutation", "kind": "wire-protocol", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-invalidation-transition.qnt:argumentValidationIsExact", - "formal/dialcache-invalidation-transition.qnt:rejectedInputPreservesEntireRedisState", - "formal/dialcache-invalidation-transition.qnt:rejectedFractionPreservesOrderedListTest", - "formal/dialcache-invalidation-transition.qnt:rejectedUnsafeSumPreservesPersistentMalformedTextTest", - "formal/dialcache-invalidation-transition.qnt:newlineAndPlusAreNotDecimalGrammarTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "invalidation/negative buffer rejects before mutation", - "invalidation/fractional buffer rejects before mutation", - "invalidation/over-limit buffer rejects before mutation", - "invalidation/exponent timestamp rejects before mutation", - "invalidation/negative timestamp rejects before mutation", - "invalidation/unsafe sum rejects before mutation", - "invalidation/negative buffer preserves absent state", - "invalidation/negative buffer preserves malformed finite string", - "invalidation/negative buffer preserves malformed persistent string", - "invalidation/negative buffer preserves finite list contents", - "invalidation/negative buffer preserves persistent list contents", - "invalidation/fractional buffer preserves absent state", - "invalidation/fractional buffer preserves malformed finite string", - "invalidation/fractional buffer preserves malformed persistent string", - "invalidation/fractional buffer preserves finite list contents", - "invalidation/fractional buffer preserves persistent list contents", - "invalidation/over-limit buffer preserves absent state", - "invalidation/over-limit buffer preserves malformed finite string", - "invalidation/over-limit buffer preserves malformed persistent string", - "invalidation/over-limit buffer preserves finite list contents", - "invalidation/over-limit buffer preserves persistent list contents", - "invalidation/exponent timestamp preserves absent state", - "invalidation/exponent timestamp preserves malformed finite string", - "invalidation/exponent timestamp preserves malformed persistent string", - "invalidation/exponent timestamp preserves finite list contents", - "invalidation/exponent timestamp preserves persistent list contents", - "invalidation/negative timestamp preserves absent state", - "invalidation/negative timestamp preserves malformed finite string", - "invalidation/negative timestamp preserves malformed persistent string", - "invalidation/negative timestamp preserves finite list contents", - "invalidation/negative timestamp preserves persistent list contents", - "invalidation/unsafe sum preserves absent state", - "invalidation/unsafe sum preserves malformed finite string", - "invalidation/unsafe sum preserves malformed persistent string", - "invalidation/unsafe sum preserves finite list contents", - "invalidation/unsafe sum preserves persistent list contents" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", @@ -4676,4093 +1223,996 @@ "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof.", "goIntegration": ".formal-traces/go-integration.jsonl" - }, - "quintDefinitions": [ - "formal/dialcache-invalidation-transition.qnt:parseSafeDecimal", - "formal/dialcache-invalidation-transition.qnt:invalidated" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 072: negative buffer / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 073: negative buffer / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 074: negative buffer / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 075: negative buffer / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 076: negative buffer / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 077: negative buffer / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 078: negative buffer / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 079: negative buffer / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 080: negative buffer / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 081: negative buffer / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 082: negative buffer / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 083: negative buffer / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 084: fractional buffer / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 085: fractional buffer / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 086: fractional buffer / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 087: fractional buffer / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 088: fractional buffer / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 089: fractional buffer / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 090: fractional buffer / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 091: fractional buffer / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 092: fractional buffer / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 093: fractional buffer / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 094: fractional buffer / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 095: fractional buffer / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 096: over-limit buffer / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 097: over-limit buffer / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 098: over-limit buffer / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 099: over-limit buffer / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 100: over-limit buffer / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 101: over-limit buffer / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 102: over-limit buffer / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 103: over-limit buffer / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 104: over-limit buffer / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 105: over-limit buffer / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 106: over-limit buffer / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 107: over-limit buffer / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 108: unsafe buffer / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 109: unsafe buffer / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 110: unsafe buffer / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 111: unsafe buffer / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 112: unsafe buffer / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 113: unsafe buffer / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 114: unsafe buffer / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 115: unsafe buffer / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 116: unsafe buffer / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 117: unsafe buffer / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 118: unsafe buffer / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 119: unsafe buffer / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 120: exponent timestamp / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 121: exponent timestamp / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 122: exponent timestamp / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 123: exponent timestamp / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 124: exponent timestamp / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 125: exponent timestamp / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 126: exponent timestamp / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 127: exponent timestamp / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 128: exponent timestamp / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 129: exponent timestamp / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 130: exponent timestamp / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 131: exponent timestamp / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 132: negative timestamp / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 133: negative timestamp / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 134: negative timestamp / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 135: negative timestamp / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 136: negative timestamp / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 137: negative timestamp / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 138: negative timestamp / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 139: negative timestamp / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 140: negative timestamp / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 141: negative timestamp / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 142: negative timestamp / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 143: negative timestamp / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 144: unsafe sum / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 145: unsafe sum / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 146: unsafe sum / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 147: unsafe sum / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 148: unsafe sum / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 149: unsafe sum / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 150: unsafe sum / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 151: unsafe sum / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 152: unsafe sum / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 153: unsafe sum / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 154: unsafe sum / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 155: unsafe sum / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 156: empty buffer / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 157: empty buffer / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 158: empty buffer / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 159: empty buffer / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 160: empty buffer / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 161: empty buffer / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 162: empty buffer / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 163: empty buffer / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 164: empty buffer / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 165: empty buffer / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 166: empty buffer / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 167: empty buffer / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 168: explicit plus buffer / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 169: explicit plus buffer / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 170: explicit plus buffer / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 171: explicit plus buffer / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 172: explicit plus buffer / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 173: explicit plus buffer / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 174: explicit plus buffer / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 175: explicit plus buffer / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 176: explicit plus buffer / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 177: explicit plus buffer / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 178: explicit plus buffer / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 179: explicit plus buffer / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 180: space-prefixed buffer / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 181: space-prefixed buffer / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 182: space-prefixed buffer / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 183: space-prefixed buffer / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 184: space-prefixed buffer / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 185: space-prefixed buffer / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 186: space-prefixed buffer / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 187: space-prefixed buffer / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 188: space-prefixed buffer / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 189: space-prefixed buffer / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 190: space-prefixed buffer / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 191: space-prefixed buffer / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 192: hexadecimal buffer / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 193: hexadecimal buffer / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 194: hexadecimal buffer / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 195: hexadecimal buffer / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 196: hexadecimal buffer / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 197: hexadecimal buffer / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 198: hexadecimal buffer / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 199: hexadecimal buffer / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 200: hexadecimal buffer / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 201: hexadecimal buffer / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 202: hexadecimal buffer / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 203: hexadecimal buffer / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 204: newline-suffixed buffer / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 205: newline-suffixed buffer / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 206: newline-suffixed buffer / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 207: newline-suffixed buffer / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 208: newline-suffixed buffer / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 209: newline-suffixed buffer / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 210: newline-suffixed buffer / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 211: newline-suffixed buffer / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 212: newline-suffixed buffer / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 213: newline-suffixed buffer / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 214: newline-suffixed buffer / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 215: newline-suffixed buffer / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 216: fractional timestamp / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 217: fractional timestamp / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 218: fractional timestamp / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 219: fractional timestamp / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 220: fractional timestamp / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 221: fractional timestamp / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 222: fractional timestamp / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 223: fractional timestamp / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 224: fractional timestamp / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 225: fractional timestamp / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 226: fractional timestamp / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 227: fractional timestamp / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 228: unsafe timestamp / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 229: unsafe timestamp / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 230: unsafe timestamp / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 231: unsafe timestamp / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 232: unsafe timestamp / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 233: unsafe timestamp / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 234: unsafe timestamp / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 235: unsafe timestamp / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 236: unsafe timestamp / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 237: unsafe timestamp / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 238: unsafe timestamp / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 239: unsafe timestamp / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 264: empty timestamp / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 265: empty timestamp / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 266: empty timestamp / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 267: empty timestamp / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 268: empty timestamp / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 269: empty timestamp / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 270: empty timestamp / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 271: empty timestamp / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 272: empty timestamp / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 273: empty timestamp / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 274: empty timestamp / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 275: empty timestamp / empty stored string" - } - ] + } }, { "id": "C40.first-stale", - "contracts": [ - "C40" - ], - "rule": "first stale age is recoverable without shared publication", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-stale-recovery.qnt:recoveredStaleHasNoSharedPublication", - "formal/dialcache-stale-recovery.qnt:servedValueCanAgeTest", - "formal/dialcache-stale-recovery.qnt:firstStaleAgeRetainsWithoutDecodingTest", - "formal/dialcache-rule-checks.qnt:retentionStartsAtFreshBoundary" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "first-stale-age-recovers-without-publication", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "first stale age is recoverable without shared publication" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C40.last-stale", - "contracts": [ - "C40" - ], - "rule": "last millisecond before M is recoverable", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:lastRecoveryMillisecondIsServedTest", - "formal/dialcache-stale-recovery.qnt:lastRecoveryAgeStillServesTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "last-recovery-age-serves", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "last millisecond before M is recoverable" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-stale-recovery.qnt:performInitialRead", - "formal/dialcache-stale-recovery.qnt:checkCandidate", - "formal/dialcache-stale-recovery.qnt:candidateLoadSucceeds" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/lastRecoveryMillisecondIsServedTest" - ], - "generatedVectors": [] + } }, { "id": "C40.maximum-age", - "contracts": [ - "C40" - ], - "rule": "maximum age is not retained for recovery", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-stale-recovery.qnt:retainedCandidateWasEligible", - "formal/dialcache-recovery-conformance.qnt:maximumAgeAtReadDoesNotDecodeTest", - "formal/dialcache-stale-recovery.qnt:exactMaximumAgeDoesNotRetainTest", - "formal/dialcache-stale-recovery.qnt:initiallyTooOldCannotRecoverAfterRollbackTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "maximum-age-read-preserves-source-error", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "maximum age is not retained for recovery", - "initially too-old bytes cannot recover after wall rollback" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/maximumAgeAtReadDoesNotDecodeTest" - ], - "generatedVectors": [] + } }, { "id": "C40.future-rejected", - "contracts": [ - "C40" - ], - "rule": "future age is not retained for recovery", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-stale-recovery.qnt:retainedCandidateWasEligible", - "formal/dialcache-stale-recovery.qnt:futureFrameIsNotRetainedTest", - "formal/dialcache-stale-recovery.qnt:initiallyFutureCannotRecoverAfterClockAdvanceTest", - "formal/dialcache-stale-recovery.qnt:futureFrameIsNeverFreshOrRetained" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "future-read-preserves-source-error", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "future age is not retained for recovery", - "initially future bytes cannot recover after wall clock catches up" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C41.success-skips-decode", - "contracts": [ - "C41" - ], - "rule": "source success skips retained candidate decoding", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-stale-recovery.qnt:sourceSuccessDoesNotDecodeCandidate", - "formal/dialcache-stale-recovery.qnt:acceptedSourceNeverDecodesRetainedBytesTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "source-success-skips-stale-decode", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "source success skips retained candidate decoding" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C41.denial-keeps-error", - "contracts": [ - "C41" - ], - "rule": "denied recovery preserves source error without decoding", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:operationDenialReplacesInstanceAllowTest", - "formal/dialcache-stale-recovery.qnt:deniedRecoveryNeverDecodesRetainedBytesTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "operation-denial-overrides-instance-allow", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "denied recovery preserves source error without decoding" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/operationDenialReplacesInstanceAllowTest" - ], - "generatedVectors": [] + } }, { "id": "C41.classifier-failure", - "contracts": [ - "C41" - ], - "rule": "recovery error overrides allow policy safely", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:classifierErrorPreservesSourceWithoutDecodeTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "classifier-error-keeps-error-without-decode", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "recovery error overrides allow policy safely", - "recovery error overrides error policy safely" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/classifierErrorPreservesSourceWithoutDecodeTest" - ], - "generatedVectors": [] + } }, { "id": "C42.allow-override", - "contracts": [ - "C42" - ], - "rule": "recovery allow overrides deny policy safely", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:operationAllowReplacesInstanceDenialTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "operation-allow-overrides-instance-denial", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "recovery allow overrides deny policy safely" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-recovery-conformance.qnt:admitted", - "formal/dialcache-recovery-conformance.qnt:rejected" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/operationAllowReplacesInstanceDenialTest" - ], - "generatedVectors": [] + } }, { "id": "C42.timeout-only-default", - "contracts": [ - "C42" - ], - "rule": "default classifier rejects ordinary errors", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:defaultRejectsOrdinaryFailureTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "default-denies-ordinary-error", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "default classifier rejects ordinary errors" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/defaultRejectsOrdinaryFailureTest" - ], - "generatedVectors": [] + } }, { "id": "C42.propagated-timeout", - "contracts": [ - "C42" - ], - "rule": "default classifier accepts a timeout propagated by source", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:defaultRecoversPropagatedTimeoutTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "default-recovers-propagated-timeout", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "default classifier accepts a timeout propagated by source" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/defaultRecoversPropagatedTimeoutTest" - ], - "generatedVectors": [] + } }, { "id": "C42.explicit-denial", - "contracts": [ - "C42" - ], - "rule": "explicit denial replaces default timeout recovery", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:explicitDenialReplacesDefaultTest", - "formal/dialcache-recovery-conformance.qnt:instanceDenialReplacesTimeoutOnlyDefaultTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "explicit-denial-overrides-timeout", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "explicit denial replaces default timeout recovery" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/explicitDenialReplacesDefaultTest", - "recovery/instanceDenialReplacesTimeoutOnlyDefaultTest" - ], - "generatedVectors": [] + } }, { "id": "C43.coalesced-once", - "contracts": [ - "C43" - ], - "rule": "coalesced recovery classifies and decodes once", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:coalescedRecoveryClassifiesAndDecodesOnceTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "coalesced-recovery", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "coalesced recovery classifies and decodes once" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-recovery-conformance.qnt:joined", - "formal/dialcache-recovery-conformance.qnt:rejected", - "formal/dialcache-recovery-conformance.qnt:releaseLoad" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/coalescedRecoveryClassifiesAndDecodesOnceTest" - ], - "generatedVectors": [] + } }, { "id": "C43.request-memo", - "contracts": [ - "C43" - ], - "rule": "recovered value memoizes only in its request scope", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:closedScopesHaveNoMemo", - "formal/dialcache-recovery-conformance.qnt:recoveredValueMemoizesOnlyInAttachedRequestTest", - "formal/dialcache-recovery-conformance.qnt:closedRequestCannotReceiveLateRecoveryMemoTest", - "formal/dialcache-stale-recovery.qnt:recoveredStaleHasNoSharedPublication", - "formal/dialcache-recovery-read-conformance.qnt:recoveredResultsNeverPublishShared", - "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryMemoizesWithoutLocalPublicationTest", - "formal/dialcache-legacy-recovery-connection.qnt:flightRecoveryMatchesContract", - "formal/dialcache-recovery-conformance.qnt:recoveredFlightMemoIsReusedByBothRequestsTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "recovered-value-request-hit", - "model": "formal/dialcache-recovery-conformance.qnt" - }, - { - "profile": "recovery", - "witness": "recovery-memoizes-both-requests", - "model": "formal/dialcache-recovery-conformance.qnt" - }, - { - "profile": "recovery-read", - "witness": "tracked-compressed-recovery-is-request-only", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "recovered value memoizes only in its request scope" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:complete" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery-read/compressedRecoveryMemoizesWithoutLocalPublicationTest", - "recovery/recoveredValueMemoizesOnlyInAttachedRequestTest", - "recovery/closedRequestCannotReceiveLateRecoveryMemoTest", - "recovery/recoveredFlightMemoIsReusedByBothRequestsTest" - ], - "generatedVectors": [] + } }, { "id": "C43.independent-values", - "contracts": [ - "C43" - ], - "rule": "uncoalesced recovery preserves each caller's independently acquired bytes", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-independent-conformance.qnt:independentRecoveryKeepsDistinctSnapshotsTest", - "formal/dialcache-independent-conformance.qnt:independentRecoveriesServeDistinctAcquiredSnapshotsTest" - ], - "requiredGenerated": [ - { - "profile": "independent", - "witness": "distinct-retained-recovery-values", - "model": "formal/dialcache-independent-conformance.qnt" - }, - { - "profile": "independent", - "witness": "independent-source-error-identities", - "model": "formal/dialcache-independent-conformance.qnt" - } - ], - "fixedRegressions": [ - "uncoalesced recovery preserves each caller's independently acquired bytes" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "independent/independentRecoveriesServeDistinctAcquiredSnapshotsTest" - ], - "generatedVectors": [] + } }, { "id": "C44.retained-invalidation", - "contracts": [ - "C44" - ], - "rule": "recovery uses acquired snapshot after invalidation and replacement", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-independent-conformance.qnt:independentRecoveryKeepsDistinctSnapshotsTest", - "formal/dialcache-recovery-conformance.qnt:replacementDoesNotChangeRetainedRecoveryTest", - "formal/dialcache-stale-recovery.qnt:retainedBytesSurviveRedisDeletionAndFenceTest", - "formal/dialcache-recovery-read-conformance.qnt:retainedCompressedRecoverySurvivesInvalidationTest", - "formal/dialcache-recovery-connection.qnt:retainedSnapshotMatchesAcquisition", - "formal/dialcache-legacy-recovery-connection.qnt:flightKeepsAcquiredSnapshot" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "retained-across-invalidation", - "model": "formal/dialcache-recovery-conformance.qnt" - }, - { - "profile": "recovery", - "witness": "replacement-cannot-change-recovered-value", - "model": "formal/dialcache-recovery-conformance.qnt" - }, - { - "profile": "recovery-read", - "witness": "retained-compressed-recovery-survives-fence-new-request-misses", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "recovery uses acquired snapshot after invalidation and replacement" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:validCandidate" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery-read/retainedCompressedRecoverySurvivesInvalidationTest", - "recovery/replacementDoesNotChangeRetainedRecoveryTest" - ], - "generatedVectors": [] + } }, { "id": "C44.retained-expiry", - "contracts": [ - "C44" - ], - "rule": "expired remote storage cannot revoke retained stale snapshot", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-read-conformance.qnt:retainedSnapshotSurvivesPhysicalExpiryTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "retained-snapshot-survives-physical-expiry-new-read-misses", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "expired remote storage cannot revoke retained stale snapshot" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-stale-recovery.qnt:mutateRedisAfterRetention", - "formal/dialcache-stale-recovery.qnt:candidateLoadSucceeds", - "formal/dialcache-recovery-read-conformance.qnt:validCandidate" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery-read/retainedSnapshotSurvivesPhysicalExpiryTest" - ], - "generatedVectors": [] + } }, { "id": "C44.no-reread", - "contracts": [ - "C44" - ], - "rule": "read failure never causes a recovery reread", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-stale-recovery.qnt:recoveryUsesSingleRedisRead", - "formal/dialcache-stale-recovery.qnt:readFailureNeverRetains", - "formal/dialcache-stale-recovery.qnt:readFailureNeverAttemptsRecovery", - "formal/dialcache-stale-recovery.qnt:failedReadSkipsRecoveryTest", - "formal/dialcache-recovery-conformance.qnt:initialReadFailureSkipsRecoveryClassificationTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "failed-initial-read-skips-recovery", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "read failure never causes a recovery reread" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/initialReadFailureSkipsRecoveryClassificationTest" - ], - "generatedVectors": [] + } }, { "id": "C45.maximum-age-exclusive", - "contracts": [ - "C45" - ], - "rule": "After asynchronous decoding, age exactly M preserves the source error", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-stale-recovery.qnt:servedStaleIsStrictlyWithinMaxAge", - "formal/dialcache-stale-recovery.qnt:decodingAtMaxAgeRejectsTest", - "formal/dialcache-recovery-conformance.qnt:maximumAgeAfterDecodePreservesSourceTest", - "formal/dialcache-recovery-conformance.qnt:recoveredValueWasWithinAcceptedAge", - "formal/dialcache-rule-checks.qnt:recoveryBoundaryIsExclusive" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "exact-maximum-after-decode-rejects", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "stale candidate crossing M during decoding preserves source error" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/maximumAgeAfterDecodePreservesSourceTest" - ], - "generatedVectors": [] + } }, { "id": "C45.recheck-after-decode", - "contracts": [ - "C45" - ], - "rule": "stale candidate crossing M during decoding preserves source error", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-stale-recovery.qnt:servedStaleIsStrictlyWithinMaxAge", - "formal/dialcache-stale-recovery.qnt:decodingAtMaxAgeRejectsTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "expired-during-decode", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "stale candidate crossing M during decoding preserves source error" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C45.captured-policy", - "contracts": [ - "C45" - ], - "rule": "pending recovery keeps its age snapshot while later calls use new policy", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-independent-conformance.qnt:recoveryPolicyIsCapturedPerCallerTest", - "formal/dialcache-recovery-connection.qnt:recoveryReturnMatchesAcquiredContract", - "formal/dialcache-independent-connection.qnt:independentRecoveryMatchesContract", - "formal/dialcache-independent-conformance.qnt:independentRecoveryAtCapturedAgeBoundaryTest" - ], - "requiredGenerated": [ - { - "profile": "independent", - "witness": "independent-recovery-age-boundary", - "model": "formal/dialcache-independent-conformance.qnt" - } - ], - "fixedRegressions": [ - "pending recovery keeps its age snapshot while later calls use new policy" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "independent/independentRecoveryAtCapturedAgeBoundaryTest" - ], - "generatedVectors": [] + } }, { "id": "C45.preserve-source-error", - "contracts": [ - "C45" - ], - "rule": "recovery deserialization failure preserves original error", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:failedRecoveryPreservesDeadlineErrorTest", - "formal/dialcache-stale-recovery.qnt:recoveryDecodeFailureKeepsSourceOutcomeTest" - ], - "requiredGenerated": [ - { - "profile": "independent", - "witness": "failed-recovery-keeps-source-error", - "model": "formal/dialcache-independent-conformance.qnt" - } - ], - "fixedRegressions": [ - "recovery deserialization failure preserves original error" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/failedRecoveryPreservesDeadlineErrorTest" - ], - "generatedVectors": [] + } }, { "id": "C45.rollback-future", - "contracts": [ - "C45" - ], - "rule": "wall rollback during recovery decode rejects a now future snapshot", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:rollbackDuringRetainedDecodeRejectsFutureSnapshotTest", - "formal/dialcache-stale-recovery.qnt:rollbackToFutureCandidateRejectsTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "rollback-rejects-retained-future", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "wall rollback during recovery decode rejects a now future snapshot" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/rollbackDuringRetainedDecodeRejectsFutureSnapshotTest" - ], - "generatedVectors": [] + } }, { "id": "C45.failed-fresh-not-stale", - "contracts": [ - "C45" - ], - "rule": "failed fresh deserialization is never retried as stale recovery", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:freshDecodeFailureCannotBeRetriedAsRecoveryTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "failed-fresh-decode-is-not-recovery", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "failed fresh deserialization is never retried as stale recovery" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-recovery-conformance.qnt:releaseLoad", - "formal/dialcache-recovery-conformance.qnt:rejected" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/freshDecodeFailureCannotBeRetriedAsRecoveryTest" - ], - "generatedVectors": [] + } }, { "id": "C46.ignore-late-source", - "contracts": [ - "C46" - ], - "rule": "default timeout recovery ignores late successful loader", "kind": "portable-behavior", "group": "recovery", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:lateSuccessCannotReplaceRecoveredValueTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "recovery-abandoned-overlap", - "model": "formal/dialcache-recovery-conformance.qnt" - }, - { - "profile": "recovery", - "witness": "recovery-late-source-settles", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "default timeout recovery ignores late successful loader" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/lateSuccessCannotReplaceRecoveredValueTest" - ], - "generatedVectors": [] + } }, { "id": "C47.requires-hook", - "contracts": [ - "C47" - ], - "rule": "shadow requires an outcome observer", "kind": "portable-behavior", - "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:missingHookHasNoShadowEffects", - "formal/dialcache-shadow-conformance.qnt:missingHookSkipsDarkJobTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "missing-hook-skips-job", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow requires an outcome observer" - ], - "vectorEvidence": [], - "status": "executable-generated", + "group": "shadow", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C47.requires-capacity", - "contracts": [ - "C47" - ], - "rule": "shadow global capacity drops another key instead of queueing", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-admission-conformance.qnt:capacityIsPerInstance", - "formal/dialcache-admission-conformance.qnt:fullInstanceDoesNotBlockOtherInstanceTest", - "formal/dialcache-shadow-validation.qnt:droppedShadowStillAllowsCallerResultTest", - "formal/dialcache-shadow-layers-conformance.qnt:servedAndDarkJobsShareCapacityButNotSourceOwnershipTest" - ], - "requiredGenerated": [ - { - "profile": "admission", - "witness": "full-capacity-drop", - "model": "formal/dialcache-admission-conformance.qnt" - }, - { - "profile": "shadow-layers", - "witness": "mixed-shadow-capacity-retains-only-owned-source", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow global capacity drops another key instead of queueing" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:admit", - "formal/dialcache-shadow-layers-conformance.qnt:tick", - "formal/dialcache-shadow-layers-conformance.qnt:settle" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "shadow-layers/servedAndDarkJobsShareCapacityButNotSourceOwnershipTest", - "admission/fullInstanceDoesNotBlockOtherInstanceTest" - ], - "generatedVectors": [] + } }, { "id": "C47.requires-cohort", - "contracts": [ - "C47" - ], - "rule": "shadow cohort excludes equality and admits just above its exact sample", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:shadowCohortBelowDoesNotAdmitTest", - "formal/dialcache-shadow-layers-conformance.qnt:shadowCohortEqualityDoesNotAdmitTest", - "formal/dialcache-shadow-layers-conformance.qnt:shadowCohortAboveAdmitsTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "shadow-cohort-below-does-not-admit", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - }, - { - "profile": "shadow-layers", - "witness": "shadow-cohort-equality-does-not-admit", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - }, - { - "profile": "shadow-layers", - "witness": "shadow-cohort-above-admits", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow cohort excludes equality and admits just above its exact sample" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:policyFor", - "formal/dialcache-shadow-layers-conformance.qnt:admit" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "shadow-layers/shadowCohortBelowDoesNotAdmitTest", - "shadow-layers/shadowCohortEqualityDoesNotAdmitTest", - "shadow-layers/shadowCohortAboveAdmitsTest" - ], - "generatedVectors": [] + } }, { "id": "C48.source-disabled", - "contracts": [ - "C48" - ], - "rule": "shadow source observes disabled caching scope", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic" - ], - "requiredGenerated": [ - { - "profile": "admission", - "witness": "coalesced-hit-one-job", - "model": "formal/dialcache-admission-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow source observes disabled caching scope" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C48.ordinary-miss", - "contracts": [ - "C48" - ], - "rule": "ordinary remote miss does not schedule shadow source", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-validation.qnt:ordinaryRemoteMissHasNoShadowJob", - "formal/dialcache-shadow-layers-conformance.qnt:ordinaryServingMissDoesNotAdmitDiagnosticSourceTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "ordinary-serving-miss-has-no-diagnostic-source", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "ordinary remote miss does not schedule shadow source" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:begin", - "formal/dialcache-shadow-layers-conformance.qnt:startCaller" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "shadow-layers/ordinaryServingMissDoesNotAdmitDiagnosticSourceTest" - ], - "generatedVectors": [] + } }, { "id": "C49.dark-source-reuse", - "contracts": [ - "C49" - ], - "rule": "ramped down shadow fills from the same caller source", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-validation.qnt:rampedDownDoesNotDuplicateSource", - "formal/dialcache-shadow-validation.qnt:comparisonAndFillWaitForSource", - "formal/dialcache-shadow-validation.qnt:darkReadCanPrecedeCallerResultTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "outcome:filled", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "ramped down shadow fills from the same caller source" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C49.dark-no-delay", - "contracts": [ - "C49" - ], - "rule": "dark read does not delay caller source result", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-validation.qnt:callerResultCanPrecedeDarkReadTest", - "formal/dialcache-shadow-validation.qnt:darkReadCanPrecedeCallerResultTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "source-before-c0", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "dark read does not delay caller source result" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-conformance.qnt:resolveLoader", - "formal/dialcache-shadow-conformance.qnt:continueJob" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C50.custom-equal", - "contracts": [ - "C50" - ], - "rule": "shadow comparator equal outcome is diagnostic", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:explicitEqualityOverridesValuesTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "custom-equal-overrides-values", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow comparator equal outcome is diagnostic" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C50.custom-unequal", - "contracts": [ - "C50" - ], - "rule": "shadow comparator unequal outcome is diagnostic", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:explicitInequalityRequiresConfirmationTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "custom-unequal-confirms-equal-values", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow comparator unequal outcome is diagnostic" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C50.comparator-error", - "contracts": [ - "C50" - ], - "rule": "shadow comparator error outcome is diagnostic", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:comparisonFailureKeepsCallerTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "outcome:comparison_error", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow comparator error outcome is diagnostic" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C51.changed-confirmation", - "contracts": [ - "C51" - ], - "rule": "served hit shadow superseded remains diagnostic", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-validation.qnt:verdictsRequireSingleConfirmation", - "formal/dialcache-shadow-validation.qnt:mismatchMeansSameC1Bytes", - "formal/dialcache-shadow-validation.qnt:missingConfirmationSupersedesWithoutRepairTest", - "formal/dialcache-shadow-validation.qnt:changedConfirmationSupersedesWithoutRepairTest", - "formal/dialcache-shadow-validation.qnt:identicalConfirmationDiagnosesWithoutRepairTest", - "formal/dialcache-shadow-conformance.qnt:sameDecodedValueWithDifferentBytesIsSupersededTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "different-c1-bytes-supersede", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "served hit shadow superseded remains diagnostic" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C51.confirmation-age", - "contracts": [ - "C51" - ], - "rule": "shadow confirmation compares payload bytes after C0 freshness expires", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:confirmationPastFreshnessKeepsOriginalPayloadAndAgeTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "shadow-confirmation-past-freshness-preserves-payload-and-age", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow confirmation compares payload bytes after C0 freshness expires" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-conformance.qnt:releaseRead", - "formal/dialcache-shadow-conformance.qnt:releaseLoad", - "formal/dialcache-shadow-conformance.qnt:advanceWallBy" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "shadow/confirmationPastFreshnessKeepsOriginalPayloadAndAgeTest" - ], - "generatedVectors": [] + } }, { "id": "C51.confirmation-rollback", - "contracts": [ - "C51" - ], - "rule": "shadow confirmation preserves payload comparison across wall clock rollback", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:confirmationRollbackKeepsPayloadAndClampsAgeTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "shadow-confirmation-rollback-keeps-payload-and-reports-offset", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow confirmation preserves payload comparison across wall clock rollback", - "shadow confirmation retains future dated payload for comparison" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-conformance.qnt:releaseRead", - "formal/dialcache-shadow-conformance.qnt:rollbackWall", - "formal/dialcache-shadow-conformance.qnt:done" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "shadow/confirmationRollbackKeepsPayloadAndClampsAgeTest" - ], - "generatedVectors": [] + } }, { "id": "C51.payload-representation", - "contracts": [ - "C51" - ], - "rule": "Identical UTF-8 bytes confirm across text and binary representations", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:identicalTextAndBinaryBytesConfirmMismatchTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "text-to-binary-confirmation", - "model": "formal/dialcache-shadow-conformance.qnt" - }, - { - "profile": "shadow", - "witness": "binary-to-text-confirmation", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C51.bytes-not-decoded-value", - "contracts": [ - "C51" - ], - "rule": "Different payload bytes supersede even if they decode to the same value", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:sameDecodedValueWithDifferentBytesIsSupersededTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "different-bytes-same-value-superseded", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C52.present-not-repaired", - "contracts": [ - "C52" - ], - "rule": "ramped down present C0 is diagnosed without repair", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-validation.qnt:presentC0IsNeverRepaired", - "formal/dialcache-shadow-layers-conformance.qnt:darkPresentC0NeverBecomesLocalPublicationTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "dark-present-c0-never-publishes-local", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "ramped down present C0 is diagnosed without repair" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:settleJob" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "shadow-layers/darkPresentC0NeverBecomesLocalPublicationTest" - ], - "generatedVectors": [] + } }, { "id": "C52.undecodable-not-repaired", - "contracts": [ - "C52" - ], - "rule": "dark present undecodable value is never repaired", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-validation.qnt:presentC0IsNeverRepaired", - "formal/dialcache-shadow-validation.qnt:undecodablePresentFrameNeverFillsTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "outcome:deserialization_error", - "model": "formal/dialcache-shadow-conformance.qnt" - }, - { - "profile": "shadow", - "witness": "present-undecodable-c0-is-not-repaired", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "dark present undecodable value is never repaired" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C53.fill-fenced", - "contracts": [ - "C53" - ], - "rule": "ramped down shadow fill respects observed fence", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-validation.qnt:fillsRequireMiss", - "formal/dialcache-shadow-validation.qnt:fencedFillDoesNotWrite" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "outcome:fill_fenced", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "ramped down shadow fill respects observed fence" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C53.confirmation-fails-open", - "contracts": [ - "C53" - ], - "rule": "shadow confirmation failure does not repair cache", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-validation.qnt:presentC0IsNeverRepaired" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "outcome:confirmation_error", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow confirmation failure does not repair cache" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C54.deduplication", - "contracts": [ - "C54" - ], - "rule": "shadow admission drops duplicate work", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-admission-conformance.qnt:oneJobPerIdentity", - "formal/dialcache-admission-conformance.qnt:duplicateDropsBeforeCapacityIsFullTest", - "formal/dialcache-shadow-layers-conformance.qnt:deduplicatedJobKeepsIndependentCallerSourcesTest" - ], - "requiredGenerated": [ - { - "profile": "admission", - "witness": "duplicate-with-free-capacity", - "model": "formal/dialcache-admission-conformance.qnt" - }, - { - "profile": "shadow-layers", - "witness": "dark-job-dedup-preserves-independent-source-values", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow admission drops duplicate work" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:startCaller", - "formal/dialcache-shadow-layers-conformance.qnt:admit", - "formal/dialcache-shadow-layers-conformance.qnt:settle" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "shadow-layers/deduplicatedJobKeepsIndependentCallerSourcesTest", - "admission/duplicateDropsBeforeCapacityIsFullTest" - ], - "generatedVectors": [] + } }, { "id": "C54.source-ownership", - "contracts": [ - "C54" - ], - "rule": "shadow timeout retains capacity until external source settles", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-admission-conformance.qnt:timeoutRetainsSourceCapacityTest", - "formal/dialcache-shadow-layers-conformance.qnt:servedAndDarkJobsShareCapacityButNotSourceOwnershipTest" - ], - "requiredGenerated": [ - { - "profile": "admission", - "witness": "source-timeout-keeps-slot", - "model": "formal/dialcache-admission-conformance.qnt" - }, - { - "profile": "shadow-layers", - "witness": "mixed-shadow-capacity-retains-only-owned-source", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow timeout retains capacity until external source settles" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:admit", - "formal/dialcache-shadow-layers-conformance.qnt:tick", - "formal/dialcache-shadow-layers-conformance.qnt:settle" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "shadow-layers/servedAndDarkJobsShareCapacityButNotSourceOwnershipTest", - "admission/timeoutRetainsSourceCapacityTest" - ], - "generatedVectors": [] + } }, { "id": "C54.decode-ownership", - "contracts": [ - "C54" - ], - "rule": "served shadow decode retains capacity after timeout until raw load settles", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-admission-conformance.qnt:timeoutRetainsDecodeCapacityTest", - "formal/dialcache-shadow-conformance.qnt:lateDecodeCannotStartConfirmationTest" - ], - "requiredGenerated": [ - { - "profile": "admission", - "witness": "decode-timeout-keeps-slot", - "model": "formal/dialcache-admission-conformance.qnt" - }, - { - "profile": "shadow", - "witness": "late-shadow-decode-cannot-start-c1", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "served shadow decode retains capacity after timeout until raw load settles" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "admission/timeoutRetainsDecodeCapacityTest" - ], - "generatedVectors": [] + } }, { "id": "C54.read-ownership", - "contracts": [ - "C54" - ], - "rule": "shadow confirmation read retains capacity after its separate read deadline", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:lateConfirmationCannotEmitAnotherVerdictTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "late-c1-cannot-emit-second-verdict", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow confirmation read retains capacity after its separate read deadline" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C54.comparison-budget", - "contracts": [ - "C54" - ], - "rule": "Comparison work can exhaust the job deadline before confirmation", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:slowComparisonTimesOutBeforeConfirmationTest", - "formal/dialcache-shadow-conformance.qnt:slowComparisonFailureStillTimesOutTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "comparison-crosses-deadline:9", - "model": "formal/dialcache-shadow-conformance.qnt" - }, - { - "profile": "shadow", - "witness": "comparison-crosses-deadline:10", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C54.expired-before-start", - "contracts": [ - "C54" - ], - "rule": "A dark job already expired before deferred work starts must issue no Redis read", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:expiredSourceWorkSkipsRedis", - "formal/dialcache-shadow-conformance.qnt:sourceWorkBeforeDeadlineStillReadsTest", - "formal/dialcache-shadow-conformance.qnt:sourceWorkAtDeadlineSkipsDeferredReadTest", - "formal/dialcache-shadow-conformance.qnt:expiredDeferredJobRetainsSourceRejectionDeadlineTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "source-work-before-deadline-dispatches-read", - "model": "formal/dialcache-shadow-conformance.qnt" - }, - { - "profile": "shadow", - "witness": "source-work-exhausts-deferred-job", - "model": "formal/dialcache-shadow-conformance.qnt" - }, - { - "profile": "shadow", - "witness": "expired-job-source-resolve-keeps-deadline", - "model": "formal/dialcache-shadow-conformance.qnt" - }, - { - "profile": "shadow", - "witness": "expired-job-source-reject-keeps-deadline", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "elapsed source work expires dark shadow before deferred read dispatch" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C55.miss-discriminator", - "contracts": [ - "C55" - ], - "rule": "adapter miss with stray frame fields preserves only trustworthy miss metadata", "kind": "portable-behavior", "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:missDiscriminatorWinsOverFrameFieldsTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "reply:14", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "adapter miss with stray frame fields preserves only trustworthy miss metadata" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C55.unknown-reason", - "contracts": [ - "C55" - ], - "rule": "adapter unknown reason with valid fence preserves only trustworthy miss metadata", "kind": "portable-behavior", "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:unknownReasonKeepsValidFenceTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "reply:7", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "adapter unknown reason with valid fence preserves only trustworthy miss metadata", - "adapter missing reason preserves only trustworthy miss metadata", - "adapter unknown reason preserves only trustworthy miss metadata" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C55.ignore-untracked-fence", - "contracts": [ - "C55" - ], - "rule": "adapter untracked fence preserves only trustworthy miss metadata", "kind": "portable-behavior", "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:untrackedReplyCannotCarryFenceTest", - "formal/dialcache-effects-conformance.qnt:untrackedFencedReplyRefillsAndIsReadableTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "untracked-demotes-fenced-reply", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "adapter untracked fence preserves only trustworthy miss metadata" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "effects/untrackedFencedReplyRefillsAndIsReadableTest" - ], - "generatedVectors": [] + } }, { "id": "C56.cooperative-cancel", - "contracts": [ - "C56" - ], - "rule": "read deadline requests cooperative cancellation once for the shared execution", "kind": "portable-behavior", "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:readTimeoutStartsIndependentSourceDeadlineTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "read-timeout-starts-source", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "read deadline requests cooperative cancellation once for the shared execution" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C56.late-read", - "contracts": [ - "C56" - ], - "rule": "late read fulfillment checks deadline before timer delivery", "kind": "portable-behavior", "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:lateReadCannotBecomeHitTest", - "formal/dialcache-effects-conformance.qnt:lateReadRejectionUsesDeadlineCategoryTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "read-late-settlement", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "late read fulfillment checks deadline before timer delivery", - "late read rejection checks deadline before timer delivery" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C56.clear-read-timer", - "contracts": [ - "C56" - ], - "rule": "successful read does not request cancellation after its timer is cleared", "kind": "portable-behavior", "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest", - "formal/dialcache-effects-conformance.qnt:successfulReadClearsDeadlineBeforeDecodeTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "successful-read-has-no-late-cancel", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "successful read does not request cancellation after its timer is cleared" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C57.recovery-age", - "contracts": [ - "C57" - ], - "rule": "recovery age is sampled after asynchronous decode and only on served outcome", "kind": "portable-behavior", "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:agesRequireRecovery" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "recovery-age-sampled-at-successful-decode", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "recovery age is sampled after asynchronous decode and only on served outcome", - "recovery miss emits no served value age", - "recovery deserialization_error emits no served value age" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-recovery-conformance.qnt:releaseLoad" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C57.shadow-age", - "contracts": [ - "C57" - ], - "rule": "shadow mismatch samples original frame age at verdict", "kind": "portable-behavior", "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:confirmationKeepsOriginalAgeTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "age-at-verdict", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow mismatch samples original frame age at verdict", - "shadow match samples original frame age at verdict" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C57.clamp-age", - "contracts": [ - "C57" - ], - "rule": "shadow verdict age clamps application clock rollback to zero", "kind": "portable-behavior", "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:ageClampsAfterWallRollbackTest", - "formal/dialcache-shadow-conformance.qnt:confirmationRollbackKeepsPayloadAndClampsAgeTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "age-clamped-after-rollback", - "model": "formal/dialcache-shadow-conformance.qnt" - }, - { - "profile": "shadow", - "witness": "shadow-confirmation-rollback-keeps-payload-and-reports-offset", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow verdict age clamps application clock rollback to zero" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-conformance.qnt:rollbackWall", - "formal/dialcache-shadow-conformance.qnt:done" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "shadow/confirmationRollbackKeepsPayloadAndClampsAgeTest" - ], - "generatedVectors": [] + } }, { "id": "C57.future-offset", - "contracts": [ - "C57" - ], - "rule": "serving future offset uses the observing layer and positive seconds", "kind": "portable-behavior", "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:futureFrameReportsPositiveObservingOffsetTest", - "formal/dialcache-shadow-conformance.qnt:confirmationRollbackKeepsPayloadAndClampsAgeTest", - "formal/dialcache-shadow-conformance.qnt:futureDarkAcquisitionReportsOffsetAndFillsMissTest", - "formal/dialcache-shadow-conformance.qnt:futureLateDarkReadKeepsTimeoutAndReportsOffsetTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "event:futureOffset", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "future-offset-observing-layer-positive-seconds", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "shadow", - "witness": "shadow-confirmation-rollback-keeps-payload-and-reports-offset", - "model": "formal/dialcache-shadow-conformance.qnt" - }, - { - "profile": "shadow", - "witness": "future-dark-c0-reports-offset-and-fills-semantic-miss", - "model": "formal/dialcache-shadow-conformance.qnt" - }, - { - "profile": "shadow", - "witness": "late-dark-read-reports-offset-without-reviving-job", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "serving future offset uses the observing layer and positive seconds", - "dark future offset uses the observing layer and positive seconds", - "confirmation future offset uses the observing layer and positive seconds" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-effects-conformance.qnt:settledRead", - "formal/dialcache-effects-conformance.qnt:metric", - "formal/dialcache-shadow-conformance.qnt:releaseRead" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "effects/futureFrameReportsPositiveObservingOffsetTest", - "shadow/confirmationRollbackKeepsPayloadAndClampsAgeTest", - "shadow/futureDarkAcquisitionReportsOffsetAndFillsMissTest", - "shadow/futureLateDarkReadKeepsTimeoutAndReportsOffsetTest" - ], - "generatedVectors": [] + } }, { "id": "C58.shared-trail", - "contracts": [ - "C58" - ], - "rule": "coalesced remote failure records one leader trail and one follower event", "kind": "portable-behavior", "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:coalescedFailureKeepsOneLeaderAndFollowerTrailTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "shared-failure-preserves-leader-and-follower-trail", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "coalesced remote failure records one leader trail and one follower event" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-effects-conformance.qnt:beginCall", - "formal/dialcache-effects-conformance.qnt:settledRead", - "formal/dialcache-effects-conformance.qnt:sourceDone" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "effects/coalescedFailureKeepsOneLeaderAndFollowerTrailTest" - ], - "generatedVectors": [] + } }, { "id": "C58.recovered-failure", - "contracts": [ - "C58" - ], - "rule": "recovered source failure remains a fallback diagnostic", "kind": "portable-behavior", "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:recoveredValueKeepsOriginalFallbackDiagnosticTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "recovery-keeps-source-failure-trail", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "recovered source failure remains a fallback diagnostic" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-recovery-conformance.qnt:rejected" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery/recoveredValueKeepsOriginalFallbackDiagnosticTest" - ], - "generatedVectors": [] + } }, { "id": "C59.remote-includes-decode", - "contracts": [ - "C59" - ], - "rule": "remote get duration includes fresh decoding without spending a source budget", "kind": "portable-behavior", "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:readDurationIncludesDecodeTest", - "formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "duration:load", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "remote get duration includes fresh decoding without spending a source budget" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C59.source-excludes-publication", - "contracts": [ - "C59" - ], - "rule": "accepted publication time is separate from reported source duration", - "kind": "portable-behavior", - "group": "diagnostics", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:sourceDurationExcludesPublicationTest", - "formal/dialcache-effects-connection.qnt:effectsPublicationMatchesAcceptedSource" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "duration:dump", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "accepted publication time is separate from reported source duration" - ], - "vectorEvidence": [], - "status": "executable-generated", + "kind": "portable-behavior", + "group": "diagnostics", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C60.logging-default-off", - "contracts": [ - "C60" - ], - "rule": "Omitting the logging flag leaves mismatch warnings disabled", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:omittedLoggingKeepsMismatchMetricsOnlyTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "omitted-logging-defaults-off", - "model": "formal/dialcache-shadow-conformance.qnt" - }, - { - "profile": "shadow", - "witness": "omitted-shadow-logging-keeps-mismatch-metrics-only", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-shadow-conformance.qnt:init", - "formal/dialcache-shadow-conformance.qnt:beginCall", - "formal/dialcache-shadow-conformance.qnt:done", - "formal/dialcache-shadow-conformance.qnt:initialize" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "shadow/omittedLoggingKeepsMismatchMetricsOnlyTest" - ], - "generatedVectors": [] + } }, { "id": "C60.logging-enabled", - "contracts": [ - "C60" - ], - "rule": "mismatch warning enabled with mismatch verdict", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:explicitInequalityRequiresConfirmationTest", - "formal/dialcache-shadow-conformance.qnt:acceptedLoggingSurvivesPolicyChangeTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "mismatch-logging:true", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "mismatch warning enabled with mismatch verdict" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C60.no-warning-on-match", - "contracts": [ - "C60" - ], - "rule": "mismatch warning enabled with match verdict", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:warningsRequireValidCapturedPolicy" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "enabled-logging-match-has-no-warning", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "mismatch warning enabled with match verdict" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C60.no-warning-on-superseded", - "contracts": [ - "C60" - ], - "rule": "mismatch warning enabled with superseded verdict", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:warningsRequireValidCapturedPolicy" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "enabled-logging-superseded-has-no-warning", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "mismatch warning enabled with superseded verdict" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "C60.invalid-logging-policy", - "contracts": [ - "C60" - ], - "rule": "Malformed runtime mismatch logging records configuration failure and leaves an eligible job active with logging off", "kind": "portable-behavior", "group": "shadow", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:invalidLoggingCannotBeCaptured", - "formal/dialcache-shadow-conformance.qnt:warningsRequireValidCapturedPolicy", - "formal/dialcache-shadow-conformance.qnt:invalidLoggingKeepsComparisonWithoutWarningTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "invalid-logging-compares-without-warning", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "malformed runtime mismatch logging keeps comparison and suppresses warnings" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "W01.key-identity", - "contracts": [ - "W01" - ], - "rule": "Construct interoperable logical, value, and watermark keys", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-key-protocol.qnt:successfulKeysHaveOneOperationDelimiter", - "formal/dialcache-key-protocol.qnt:encodingSeparatesReservedDelimitersTest", - "formal/dialcache-key-protocol.qnt:surrogatePairEncodesOneFourByteScalarTest", - "formal/dialcache-key-protocol.qnt:trackedArgumentsDoNotChangeWatermarkTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/keyVectors/*" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-key-protocol.qnt:encodeComponent", - "formal/dialcache-key-protocol.qnt:encodedEntity", - "formal/dialcache-key-protocol.qnt:encodedArguments", - "formal/dialcache-key-protocol.qnt:constructKey" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-key-vectors.json", - "group": "keyVectors", - "name": "*" - } - ] + } }, { "id": "W01.invalid-identity", - "contracts": [ - "W01" - ], - "rule": "Reject unsupported key identities, including tracked component braces, namespace braces and unpaired UTF-16 code units in escaped identities.", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-key-protocol.qnt:keyAcceptanceRespectsTextAndHashTagDomain", - "formal/dialcache-key-protocol.qnt:rejectedKeysExposeNoPartialIdentity", - "formal/dialcache-key-protocol.qnt:malformedUtf16RejectsInsteadOfReplacementTest", - "formal/dialcache-key-protocol.qnt:bracesDependOnEntityTrackingTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/invalidKeyVectors/*" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-key-protocol.qnt:validKey", - "formal/dialcache-key-protocol.qnt:containsBrace" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-key-vectors.json", - "group": "invalidKeyVectors", - "name": "*" - } - ] + } }, { "id": "W02.sorted-arguments", - "contracts": [ - "W02" - ], - "rule": "Normalize scalar arguments with prescribed UTF-16 name ordering, omission, formatting and escaping; preserve explicitly supplied ordered argument pairs.", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-key-protocol.qnt:normalizedNamesAreOrderedAndValuesAssociated", - "formal/dialcache-key-protocol.qnt:normalizedIntegersRetainExactMagnitude", - "formal/dialcache-key-protocol.qnt:normalizedNamesUseUtf16OrderingTest", - "formal/dialcache-key-protocol.qnt:normalizedPrimitivesPreserveFalsyAndOmittedValuesTest", - "formal/dialcache-key-protocol.qnt:signedBigintsPreserveEveryDecimalDigitTest", - "formal/dialcache-key-protocol.qnt:orderedKeyArgumentsRetainDuplicatesTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/normalizeArgsVectors/*" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-key-protocol.qnt:textBefore", - "formal/dialcache-key-protocol.qnt:decimalUnits", - "formal/dialcache-key-protocol.qnt:argumentText", - "formal/dialcache-key-protocol.qnt:normalizeArguments" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-key-vectors.json", - "group": "normalizeArgsVectors", - "name": "*" - }, - { - "artifact": "formal/quint-key-vectors.json", - "group": "keyVectors", - "name": "Quint key 416: ordered duplicate arguments" - }, - { - "artifact": "formal/quint-key-vectors.json", - "group": "keyVectors", - "name": "Quint key 417: ordered duplicate arguments" - }, - { - "artifact": "formal/quint-key-vectors.json", - "group": "keyVectors", - "name": "Quint key 418: ordered duplicate arguments" - }, - { - "artifact": "formal/quint-key-vectors.json", - "group": "keyVectors", - "name": "Quint key 419: ordered duplicate arguments" - } - ] + } }, { "id": "W03.cohort-assignment", - "contracts": [ - "W03" - ], - "rule": "Serving and shadow cohorts use their specified independent deterministic assignment", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-key-protocol.qnt:cohortNumeratorsAreUnsignedAndBoundariesStrict", - "formal/dialcache-key-protocol.qnt:publishedCohortNumeratorsRemainStableTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/rampVectors/*" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-key-protocol.qnt:xorUnit", - "formal/dialcache-key-protocol.qnt:fnv1a", - "formal/dialcache-key-protocol.qnt:cohortHash" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-key-vectors.json", - "group": "rampVectors", - "name": "*" - } - ] + } }, { "id": "W04.frame-encoding", - "contracts": [ - "W04" - ], - "rule": "Encode version, timestamp, UTF-8 and binary payloads in interoperable frames", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-frame-vectors.qnt:encodedFrameKeepsHeaderAndPayload", - "formal/dialcache-frame-vectors.qnt:payloadUnpairedSurrogateUsesReplacementTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/frameVectors/*" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-frame-vectors.json", - "group": "frameVectors", - "name": "*" - } - ] + } }, { "id": "W04.tracked-decoder", - "contracts": [ - "W04" - ], - "rule": "Classify tracked frames and malformed watermarks with specified precedence", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-redis-protocol.qnt:nilValueIsValueAbsent", - "formal/dialcache-redis-protocol.qnt:fenceCanPrecedeEncodingError", - "formal/dialcache-redis-protocol.qnt:malformedWatermarkPrecedesEncodingError", - "formal/dialcache-redis-protocol.qnt:trackedZeroTimestampIsNotHit", - "formal/dialcache-redis-protocol.qnt:encodingErrorRequiresSupportedFrame", - "formal/dialcache-redis-protocol.qnt:fencedEncodingTest", - "formal/dialcache-redis-protocol.qnt:malformedWatermarkTest", - "formal/dialcache-frame-vectors.qnt:trackedHitsStrictlyClearValidFence", - "formal/dialcache-frame-vectors.qnt:absentValueKeepsItsOwnClassification", - "formal/dialcache-frame-vectors.qnt:trackedFencePrecedesEncodingErrorTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/trackedDecodeVectors/*" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-frame-vectors.json", - "group": "trackedDecodeVectors", - "name": "*" - } - ] + } }, { "id": "W04.untracked-decoder", - "contracts": [ - "W04" - ], - "rule": "Classify untracked frames without applying watermarks", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-frame-vectors.qnt:untrackedIgnoresMalformedWatermarkTest", - "formal/dialcache-frame-vectors.qnt:decodedTextContainsOnlyScalars" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/untrackedDecodeVectors/*" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-redis-protocol.qnt:classify", - "formal/dialcache-redis-protocol.qnt:decode" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-frame-vectors.json", - "group": "untrackedDecodeVectors", - "name": "*" - } - ] + } }, { "id": "W04.invalid-timestamps", - "contracts": [ - "W04" - ], - "rule": "Reject unsafe, negative or fractional timestamps before mutation", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-frame-vectors.qnt:writerRejectsInvalidNumericDomain" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/invalidTimestampVectors/*" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-frame-vectors.json", - "group": "invalidTimestampVectors", - "name": "*" - } - ] + } }, { "id": "W05.duration-bounds", - "contracts": [ - "W05" - ], - "rule": "Round native write durations up within the supported positive bound", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-frame-vectors.qnt:acceptedDurationWithinCeiling", - "formal/dialcache-frame-vectors.qnt:physicalDurationRoundsUpWithinBoundTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/durationVectors/*" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-frame-vectors.json", - "group": "durationVectors", - "name": "*" - } - ] + } }, { "id": "W06.envelope-markers", - "contracts": [ - "W06" - ], - "rule": "Escape raw marker bytes while decoding supported legacy envelopes", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-envelope-vectors.qnt:rawEscapeIsLossless", - "formal/dialcache-envelope-vectors.qnt:escapeConsumesExactlyOnePrefix", - "formal/dialcache-envelope-vectors.qnt:unknownZeroPrefixPassesThroughUnchanged", - "formal/dialcache-envelope-vectors.qnt:escapedCompressedMarkerRemainsLiteralTest", - "formal/dialcache-envelope-vectors.qnt:unknownLegacyZeroPrefixRemainsUntouchedTest", - "formal/dialcache-envelope-vectors.qnt:corruptCompressionPreservesMarkedBytesTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/envelopeVectors/*" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-envelope-vectors.qnt:escapedRaw", - "formal/dialcache-envelope-vectors.qnt:readEnvelope" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-envelope-vectors.json", - "group": "envelopeVectors", - "name": "*" - } - ] + } }, { "id": "W06.compressed-decode", - "contracts": [ - "W06" - ], - "rule": "Decode fixed compressed UTF-8 and binary envelopes", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-envelope-vectors.qnt:readFailuresPreserveOriginalBinary", - "formal/dialcache-envelope-vectors.qnt:successfulReadRespectsMarkerAndLimit", - "formal/dialcache-envelope-vectors.qnt:corruptCompressionPreservesMarkedBytesTest", - "formal/dialcache-envelope-vectors.qnt:decoderLimitKeepsRawBytesTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/compressedDecodeVectors/*" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-envelope-vectors.qnt:readEnvelope" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-envelope-vectors.json", - "group": "compressedDecodeVectors", - "name": "*" - } - ] + } }, { "id": "W07.compression-selection", - "contracts": [ - "W07" - ], - "rule": "Compress only at the byte threshold and only when stored size shrinks", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-envelope-vectors.qnt:compressionUsesByteThresholdAndStrictShrink", - "formal/dialcache-envelope-vectors.qnt:utf8ThresholdCountsBytesTest", - "formal/dialcache-envelope-vectors.qnt:compressionTieKeepsRawRepresentationTest", - "formal/dialcache-envelope-vectors.qnt:shrinkComparedWithEscapedRawBytesTest", - "formal/dialcache-envelope-vectors.qnt:thresholdPrecedesWriteLimitTest", - "formal/dialcache-envelope-vectors.qnt:writeLimitPrecedesCompressionTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/compressionWriteVectors/*" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-envelope-vectors.qnt:payloadBytes", - "formal/dialcache-envelope-vectors.qnt:escapedRaw", - "formal/dialcache-envelope-vectors.qnt:selectWrite" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-envelope-vectors.json", - "group": "compressionWriteVectors", - "name": "*" - } - ] + } }, { "id": "W08.legacy-reading", - "contracts": [ - "W08" - ], - "rule": "Disabling new compression does not disable reading previously compressed values", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-envelope-vectors.qnt:readDoesNotConsultNewWritePolicy", - "formal/dialcache-envelope-vectors.qnt:disabledNewWritesStillReadLegacyCompressionTest", - "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryMemoizesWithoutLocalPublicationTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "tracked-compressed-recovery-is-request-only", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/compressedDecodeVectors/*" - ], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-envelope-vectors.qnt:readEnvelope" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "recovery-read/compressedRecoveryMemoizesWithoutLocalPublicationTest" - ], - "generatedVectors": [ - { - "artifact": "formal/quint-envelope-vectors.json", - "group": "compressedDecodeVectors", - "name": "*" - } - ] + } }, { "id": "W04.strict-fence", - "contracts": [ - "W04", - "C33" - ], - "rule": "Reject a tracked frame equal to its watermark", "kind": "wire-protocol", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-redis-protocol.qnt:fenceCanPrecedeEncodingError", - "formal/dialcache-redis-protocol.qnt:trackedZeroTimestampIsNotHit", - "formal/dialcache-tracked-invalidation.qnt:servedSnapshotClearedObservedFence", - "formal/dialcache-frame-vectors.qnt:trackedHitsStrictlyClearValidFence", - "formal/dialcache-frame-vectors.qnt:trackedFencePrecedesEncodingErrorTest", - "formal/dialcache-rule-checks.qnt:fenceBoundaryIsExclusive" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/trackedDecodeVectors/equal timestamp is fenced" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-frame-vectors.json", - "group": "trackedDecodeVectors", - "name": "*" - } - ] + } }, { "id": "C38.retention", - "contracts": [ - "C38", - "W09" - ], - "rule": "Preserve persistence and longer TTLs while meeting the required retention floor", "kind": "wire-protocol", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-invalidation-transition.qnt:successfulRetentionMeetsBothFloors", - "formal/dialcache-invalidation-transition.qnt:stringsKeepExistingRetention", - "formal/dialcache-invalidation-transition.qnt:finiteRetentionIsExact", - "formal/dialcache-invalidation-transition.qnt:absentMarkerGetsRetentionFloorTest", - "formal/dialcache-invalidation-transition.qnt:longBufferExtendsRequiredRetentionTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "invalidation/absent marker gets the two hour floor", - "invalidation/large buffer extends retention beyond the floor", - "invalidation/existing longer TTL never shrinks", - "invalidation/persistent valid marker stays persistent" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", @@ -8770,89 +2220,12 @@ "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof.", "goIntegration": ".formal-traces/go-integration.jsonl" - }, - "quintDefinitions": [ - "formal/dialcache-invalidation-transition.qnt:invalidated" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 000: zero buffer / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 001: zero buffer / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 003: zero buffer / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 004: zero buffer / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 024: retention above floor / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 025: retention above floor / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 027: retention above floor / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 028: retention above floor / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 036: maximum buffer / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 037: maximum buffer / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 039: maximum buffer / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 040: maximum buffer / valid persistent" - } - ] + } }, { "id": "C38.marker-repair", - "contracts": [ - "C38", - "W09" - ], - "rule": "Malformed strings preserve their existing retention; unrelated Redis types receive finite repair", "kind": "wire-protocol", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-invalidation-transition.qnt:stringsKeepExistingRetention", - "formal/dialcache-invalidation-transition.qnt:unrelatedTypesReceiveFiniteRepair", - "formal/dialcache-invalidation-transition.qnt:persistentMalformedStringStaysPersistentTest", - "formal/dialcache-invalidation-transition.qnt:wrongTypeLongTtlIsNotInheritedTest", - "formal/dialcache-invalidation-transition.qnt:wrongTypePersistenceIsNotInheritedTest", - "formal/dialcache-invalidation-transition.qnt:emptyStringRetentionIsPreservedTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "invalidation/malformed finite marker is repaired with longer TTL preserved", - "invalidation/malformed persistent marker stays persistent", - "invalidation/wrong type persistent marker gets finite repair", - "invalidation/wrong type marker does not preserve unrelated TTL" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", @@ -8860,251 +2233,12 @@ "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof.", "goIntegration": ".formal-traces/go-integration.jsonl" - }, - "quintDefinitions": [ - "formal/dialcache-invalidation-transition.qnt:invalidated" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 005: zero buffer / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 006: zero buffer / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 007: zero buffer / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 008: zero buffer / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 010: zero buffer / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 011: zero buffer / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 017: buffered cutoff / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 018: buffered cutoff / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 019: buffered cutoff / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 020: buffered cutoff / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 022: buffered cutoff / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 023: buffered cutoff / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 029: retention above floor / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 030: retention above floor / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 031: retention above floor / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 032: retention above floor / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 034: retention above floor / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 035: retention above floor / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 041: maximum buffer / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 042: maximum buffer / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 043: maximum buffer / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 044: maximum buffer / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 046: maximum buffer / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 047: maximum buffer / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 053: maximum safe sum / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 054: maximum safe sum / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 055: maximum safe sum / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 056: maximum safe sum / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 058: maximum safe sum / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 059: maximum safe sum / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 065: leading decimal zeros / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 066: leading decimal zeros / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 067: leading decimal zeros / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 068: leading decimal zeros / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 070: leading decimal zeros / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 071: leading decimal zeros / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 245: maximum timestamp / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 246: maximum timestamp / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 247: maximum timestamp / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 248: maximum timestamp / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 250: maximum timestamp / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 251: maximum timestamp / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 257: zero timestamp / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 258: zero timestamp / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 259: zero timestamp / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 260: zero timestamp / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 262: zero timestamp / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 263: zero timestamp / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 281: all-zero decimal text / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 282: all-zero decimal text / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 283: all-zero decimal text / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 284: all-zero decimal text / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 286: all-zero decimal text / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 287: all-zero decimal text / empty stored string" - } - ] + } }, { "id": "C39.numeric-limits", - "contracts": [ - "C39", - "W09" - ], - "rule": "Accept the maximum valid future buffer and safe timestamp sum", "kind": "wire-protocol", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-invalidation-transition.qnt:argumentValidationIsExact", - "formal/dialcache-invalidation-transition.qnt:maximumBufferAndTimestampSumAreAcceptedTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "invalidation/maximum future buffer is supported", - "invalidation/maximum safe sum is supported" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", @@ -9112,179 +2246,12 @@ "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof.", "goIntegration": ".formal-traces/go-integration.jsonl" - }, - "quintDefinitions": [ - "formal/dialcache-invalidation-transition.qnt:parseSafeDecimal", - "formal/dialcache-invalidation-transition.qnt:invalidated" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 036: maximum buffer / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 037: maximum buffer / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 038: maximum buffer / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 039: maximum buffer / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 040: maximum buffer / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 041: maximum buffer / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 042: maximum buffer / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 043: maximum buffer / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 044: maximum buffer / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 045: maximum buffer / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 046: maximum buffer / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 047: maximum buffer / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 048: maximum safe sum / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 049: maximum safe sum / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 050: maximum safe sum / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 051: maximum safe sum / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 052: maximum safe sum / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 053: maximum safe sum / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 054: maximum safe sum / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 055: maximum safe sum / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 056: maximum safe sum / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 057: maximum safe sum / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 058: maximum safe sum / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 059: maximum safe sum / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 240: maximum timestamp / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 241: maximum timestamp / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 242: maximum timestamp / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 243: maximum timestamp / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 244: maximum timestamp / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 245: maximum timestamp / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 246: maximum timestamp / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 247: maximum timestamp / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 248: maximum timestamp / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 249: maximum timestamp / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 250: maximum timestamp / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 251: maximum timestamp / empty stored string" - } - ] + } }, { "id": "C38.buffer-cutoff", - "contracts": [ - "C38", - "W09" - ], - "rule": "Add the requested future buffer to the invalidation timestamp", "kind": "wire-protocol", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-invalidation-transition.qnt:successfulCutoffIsExactMaximum", - "formal/dialcache-invalidation-transition.qnt:longBufferExtendsRequiredRetentionTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "invalidation/buffer determines marker cutoff" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", @@ -9292,50 +2259,12 @@ "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof.", "goIntegration": ".formal-traces/go-integration.jsonl" - }, - "quintDefinitions": [ - "formal/dialcache-invalidation-transition.qnt:invalidated" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 012: buffered cutoff / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 024: retention above floor / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 036: maximum buffer / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 060: leading decimal zeros / absent" - } - ] + } }, { "id": "C39.decimal-normalization", - "contracts": [ - "C39", - "W09" - ], - "rule": "Normalize accepted leading-zero decimal watermark arguments", "kind": "wire-protocol", "group": "invalidation", - "quintProperties": [ - "formal/dialcache-invalidation-transition.qnt:outputIsCanonicalDecimalString", - "formal/dialcache-invalidation-transition.qnt:decimalZerosAreCanonicalizedTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "invalidation/leading decimal zeros are canonicalized" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", @@ -9343,263 +2272,55 @@ "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof.", "goIntegration": ".formal-traces/go-integration.jsonl" - }, - "quintDefinitions": [ - "formal/dialcache-invalidation-transition.qnt:decimalText", - "formal/dialcache-invalidation-transition.qnt:parseSafeDecimal" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 060: leading decimal zeros / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 061: leading decimal zeros / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 062: leading decimal zeros / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 063: leading decimal zeros / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 064: leading decimal zeros / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 065: leading decimal zeros / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 066: leading decimal zeros / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 067: leading decimal zeros / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 068: leading decimal zeros / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 069: leading decimal zeros / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 070: leading decimal zeros / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 071: leading decimal zeros / empty stored string" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 276: all-zero decimal text / absent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 277: all-zero decimal text / valid finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 278: all-zero decimal text / future finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 279: all-zero decimal text / valid longer TTL" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 280: all-zero decimal text / valid persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 281: all-zero decimal text / malformed finite" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 282: all-zero decimal text / malformed persistent" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 283: all-zero decimal text / ordered finite list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 284: all-zero decimal text / ordered persistent list" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 285: all-zero decimal text / leading-zero stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 286: all-zero decimal text / unsafe stored decimal" - }, - { - "artifact": "formal/quint-invalidation-vectors.json", - "name": "Quint 287: all-zero decimal text / empty stored string" - } - ] + } }, { "id": "C16.explicit-null-leaf", - "contracts": [ - "C16", - "C20" - ], - "rule": "Explicit null coalesce is invalid and bypasses existing cached entries without replacing them", "kind": "portable-behavior", "group": "policy", - "quintProperties": [ - "formal/dialcache-core.qnt:invalidInvocationPolicyNeverTouchesStorage", - "formal/dialcache-core.qnt:invalidBooleanOverlayBypassesAndPreservesMemoTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:explicitNullCoalesceBypassesWithoutReplacingRemoteTest" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "null coalesce leaf bypasses caching without replacing retained entries" - ], - "vectorEvidence": [], - "status": "executable-quint-regression", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "runtime-boundaries/explicitNullCoalesceBypassesWithoutReplacingRemoteTest" - ], - "generatedVectors": [] + } }, { "id": "C31.local-only-publication", - "contracts": [ - "C31" - ], - "rule": "Tracked local-only calls retain eligible local source publication", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-core.qnt:trackedWithoutRemoteStillPublishesLocalTest", - "formal/dialcache-layers-conformance.qnt:trackedWithoutRemotePublishesReusableLocalTest" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "tracked local-only calls publish and reuse source values" - ], - "vectorEvidence": [], - "status": "executable-quint-regression", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-core.qnt:loaderSuccessWithoutRemote" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [ - "layers/trackedWithoutRemotePublishesReusableLocalTest" - ], - "generatedVectors": [] + } }, { "id": "C31.ramped-down-publication", - "contracts": [ - "C31" - ], - "rule": "Tracked calls excluded from remote serving retain eligible local source publication", "kind": "portable-behavior", "group": "request-and-layers", - "quintProperties": [ - "formal/dialcache-core.qnt:trackedWithoutRemoteStillPublishesLocalTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "tracked-remote-disabled-local-hit", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "tracked remote ramp zero retains local source publication" - ], - "vectorEvidence": [], - "status": "executable-generated", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [ - "formal/dialcache-core.qnt:skipRemote", - "formal/dialcache-core.qnt:loaderSuccessWithoutRemote" - ], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [] + } }, { "id": "W04.malformed-text", - "contracts": [ - "W04", - "W06" - ], - "rule": "Direct and decompressed text use maximal-subpart UTF-8 replacement without BOM removal; binary remains exact", "kind": "wire-protocol", "group": "wire-protocol", - "quintProperties": [ - "formal/dialcache-frame-vectors.qnt:decodedTextContainsOnlyScalars", - "formal/dialcache-frame-vectors.qnt:maximalSubpartConsumesAcceptedPrefixOnceTest", - "formal/dialcache-frame-vectors.qnt:malformedSurrogateBytesRemainSeparateErrorsTest", - "formal/dialcache-frame-vectors.qnt:payloadUnpairedSurrogateUsesReplacementTest" - ], - "requiredGenerated": [], - "fixedRegressions": [], - "vectorEvidence": [ - "protocol/trackedDecodeVectors/*", - "protocol/untrackedDecodeVectors/*", - "protocol/compressedDecodeVectors/*" - ], - "status": "executable-quint-vector", "gaps": [], "evidence": { "typescript": ".formal-traces/ts-replay.json", "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only the linked finite scenarios, witnesses, scoped checks and explicit native boundaries; not universal case proof." - }, - "quintDefinitions": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintReplays": [], - "generatedVectors": [ - { - "artifact": "formal/quint-frame-vectors.json", - "group": "trackedDecodeVectors", - "name": "*" - }, - { - "artifact": "formal/quint-frame-vectors.json", - "group": "untrackedDecodeVectors", - "name": "*" - } - ] + } }, { "id": "C27.decode-failure-refill", @@ -9610,31 +2331,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C27" - ], - "rule": "A failed fresh decode falls through to the source and may refill Redis when the read itself granted publication authority.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:decodeFailureMayRefillTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "failed-decode-refills", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "deserialization failure refills from source" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C33.reject-future-before-decode", @@ -9645,33 +2343,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C33" - ], - "rule": "At initial serving or recovery acquisition, a future-dated frame is rejected before deserialization; later shadow confirmation has a separate payload-identity contract.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:futureFrameDoesNotCarryMissFenceTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "rollback-rejects-future-remote", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "future frame is rejected before deserialization" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery/futureFrameDoesNotCarryMissFenceTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C33.reject-unsafe-before-decode", @@ -9682,36 +2355,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C33" - ], - "rule": "An unsafe frame timestamp is rejected before deserialization or stale-candidate retention.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-stale-recovery.qnt:invalidFrameNeverBecomesRecoveryCandidateTest", - "formal/dialcache-recovery-read-conformance.qnt:unsafeTimestampSkipsSerializerAndAllowsRefillTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "unsafe-timestamp-skips-serializer-and-refills", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "unsafe frame is rejected before deserialization" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:releaseRead" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery-read/unsafeTimestampSkipsSerializerAndAllowsRefillTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C33.reject-version-before-decode", @@ -9722,36 +2367,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C33" - ], - "rule": "An unsupported frame version is rejected before payload deserialization.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-redis-protocol.qnt:unsupportedFramePrecedesEncodingError", - "formal/dialcache-recovery-read-conformance.qnt:unsupportedVersionSkipsSerializerAndAllowsRefillTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "unsupported-version-skips-serializer-and-refills", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "unsupported version frame is rejected before deserialization" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:releaseRead" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery-read/unsupportedVersionSkipsSerializerAndAllowsRefillTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C45.recheck-before-decode", @@ -9762,38 +2379,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C45" - ], - "rule": "A retained candidate reaching its exclusive maximum age before source failure is rejected without starting its decode.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:maximumAgeBeforeDecodePreservesSourceTest", - "formal/dialcache-stale-recovery.qnt:maximumAgeBeforeDecodeSkipsLoadingTest", - "formal/dialcache-recovery-read-conformance.qnt:maximumAgeBeforeDecodeKeepsOriginalErrorTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "maximum-before-decode-preserves-original-error-without-load", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "stale candidate crossing M before decoding is rejected" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:rejectLoader" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery-read/maximumAgeBeforeDecodeKeepsOriginalErrorTest", - "recovery/maximumAgeBeforeDecodePreservesSourceTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C50.served-match-diagnostic", @@ -9804,32 +2391,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C50" - ], - "rule": "A served-hit shadow match keeps the originally returned value and emits a match without cache repair.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-admission-conformance.qnt:callsKeepAcquiredValue", - "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic" - ], - "requiredGenerated": [ - { - "profile": "admission", - "witness": "outcome:match", - "model": "formal/dialcache-admission-conformance.qnt" - } - ], - "fixedRegressions": [ - "served hit shadow match remains diagnostic" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C50.served-mismatch-diagnostic", @@ -9840,32 +2403,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C50" - ], - "rule": "A confirmed served-hit shadow mismatch keeps the originally returned value and does not repair the cache.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-admission-conformance.qnt:callsKeepAcquiredValue", - "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic" - ], - "requiredGenerated": [ - { - "profile": "admission", - "witness": "outcome:mismatch", - "model": "formal/dialcache-admission-conformance.qnt" - } - ], - "fixedRegressions": [ - "served hit shadow mismatch remains diagnostic" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C53.source-error-keeps-caller", @@ -9876,32 +2415,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C53" - ], - "rule": "A detached shadow source failure reports its diagnostic outcome without replacing the value already served to the caller.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-admission-conformance.qnt:callsKeepAcquiredValue", - "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic" - ], - "requiredGenerated": [ - { - "profile": "admission", - "witness": "outcome:source_error", - "model": "formal/dialcache-admission-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow source error does not replace caller value" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C20.invalid-coalesce", @@ -9912,30 +2427,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C20" - ], - "rule": "An invalid runtime coalesce leaf bypasses every layer and sharing rather than inheriting or coercing the invalid value.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-core.qnt:invalidInvocationPolicyNeverTouchesStorage", - "formal/dialcache-core.qnt:invalidBooleanOverlayBypassesAndPreservesMemoTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:invalidCoalesceBypassesWithoutReplacingRemoteTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:invalidBooleanLeavesBypassAllCaching" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "invalid runtime coalesce bypasses all cache layers" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-quint-regression", - "gaps": [], - "quintReplays": [ - "runtime-boundaries/invalidCoalesceBypassesWithoutReplacingRemoteTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C20.invalid-request-local", @@ -9946,30 +2439,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C20" - ], - "rule": "An invalid runtime requestLocal leaf bypasses every layer rather than disabling only request memoization.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-core.qnt:invalidInvocationPolicyNeverTouchesStorage", - "formal/dialcache-core.qnt:invalidBooleanOverlayBypassesAndPreservesMemoTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:invalidRequestLocalBypassesWithoutReplacingRemoteTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:invalidBooleanLeavesBypassAllCaching" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "invalid runtime requestLocal bypasses all cache layers" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-quint-regression", - "gaps": [], - "quintReplays": [ - "runtime-boundaries/invalidRequestLocalBypassesWithoutReplacingRemoteTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C42.operation-denial", @@ -9979,34 +2450,9 @@ "go": ".formal-traces/go-replay.jsonl", "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." - }, - "contracts": [ - "C42" - ], - "rule": "An operation recovery denial replaces an instance allow predicate and preserves the original source failure.", - "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:operationDenialReplacesInstanceAllowTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "operation-denial-overrides-instance-allow", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [ - "recovery deny overrides allow policy safely" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery/operationDenialReplacesInstanceAllowTest" - ], - "generatedVectors": [] + }, + "kind": "portable-behavior", + "gaps": [] }, { "id": "C54.dump-ownership", @@ -10017,31 +2463,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C54" - ], - "rule": "A timed-out shadow job retains its capacity while its serialization is unfinished; late serialization cannot initiate a write.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:lateFillSerializationCannotDispatchWriteTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "late-shadow-dump-cannot-dispatch-write", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow timeout retains held dump capacity and ignores late completion" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C54.write-ownership", @@ -10052,31 +2475,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C54" - ], - "rule": "A timed-out shadow job retains its capacity while a dispatched write is unfinished; late completion cannot produce a second outcome.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:lateFillWriteCannotEmitAnotherVerdictTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "late-shadow-write-cannot-change-caller-or-verdict", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow timeout retains held write capacity and ignores late completion" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C54.dark-read-ownership", @@ -10087,31 +2487,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C54" - ], - "rule": "A timed-out dark read retains capacity until the raw read settles, and its late result cannot initiate decoding or publication.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:lateDarkReadCannotStartDecodeOrFillTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "late-c0-cannot-start-new-shadow-work", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow read timeout retains raw read capacity" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C06.absent-distinct-from-text", @@ -10122,31 +2499,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C06" - ], - "rule": "An absent value and the literal string undefined remain distinct cacheable results.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:requestAbsenceAndLiteralTextStayDistinctTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:localAbsenceAndLiteralTextStayDistinctTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:remoteAbsenceAndLiteralTextStayDistinctTest" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "literal undefined string is distinct from absent result" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-quint-regression", - "gaps": [], - "quintReplays": [ - "runtime-boundaries/requestAbsenceAndLiteralTextStayDistinctTest", - "runtime-boundaries/localAbsenceAndLiteralTextStayDistinctTest", - "runtime-boundaries/remoteAbsenceAndLiteralTextStayDistinctTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C24.independent-source-budgets", @@ -10157,37 +2511,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C24" - ], - "rule": "Uncoalesced same-key callers each receive their full source budget from their own source start; one timeout does not shorten another budget.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-flight-deadlines.qnt:independentAcceptanceChecksCapturedDeadline", - "formal/dialcache-independent-conformance.qnt:eachSourceKeepsItsFullBudget", - "formal/dialcache-independent-conformance.qnt:sourceSettlementsRespectOwnDeadline", - "formal/dialcache-independent-conformance.qnt:staggeredSourceStartsKeepIndependentBudgetsTest", - "formal/dialcache-independent-conformance.qnt:staggeredSourcesExpireAtTheirOwnDeadlineTest", - "formal/dialcache-independent-connection.qnt:independentSourceOriginsMatchContract", - "formal/dialcache-independent-connection.qnt:independentSourceMatchesTimerContract" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "uncoalesced callers have independent source deadlines" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-independent-conformance.qnt:startSource", - "formal/dialcache-independent-conformance.qnt:tick" - ], - "status": "executable-quint-regression", - "gaps": [], - "quintReplays": [ - "independent/staggeredSourceStartsKeepIndependentBudgetsTest", - "independent/staggeredSourcesExpireAtTheirOwnDeadlineTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C23.policy-does-not-spend-source-budget", @@ -10198,36 +2523,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C23" - ], - "rule": "Waiting for runtime policy does not consume the subsequent source budget.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-flight-deadlines.qnt:delayedLookupKeepsFullSourceBudgetTest", - "formal/dialcache-source-budgets-conformance.qnt:acceptedSourceRespectsItsOwnStart", - "formal/dialcache-source-budgets-conformance.qnt:heldPolicyDoesNotSpendSourceBudgetTest", - "formal/dialcache-source-connection.qnt:sourceOriginsMatchContract" - ], - "requiredGenerated": [ - { - "profile": "source-budgets", - "witness": "policy-wait-does-not-spend-source-budget", - "model": "formal/dialcache-source-budgets-conformance.qnt" - } - ], - "fixedRegressions": [ - "policy resolution does not spend the source deadline" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "source-budgets/heldPolicyDoesNotSpendSourceBudgetTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C30.original-source-error", @@ -10238,33 +2535,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C30" - ], - "rule": "Observer failure preserves the identity of the original source rejection.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:observerFailuresCannotReplaceSourceErrorTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "observer-failure-source-error", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "observer failures preserve original source rejection" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "effects/observerFailuresCannotReplaceSourceErrorTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C54.unbounded-source-bounded-shadow", @@ -10275,36 +2547,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C54" - ], - "rule": "Disabling the caller source deadline leaves detached shadow work subject to a finite job deadline.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:unboundedCallerSurvivesDarkJobDeadlineTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "unbounded-caller-outlives-released-dark-job", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow remains bounded when source deadline is disabled" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:tick", - "formal/dialcache-shadow-layers-conformance.qnt:settle" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "shadow-layers/unboundedCallerSurvivesDarkJobDeadlineTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C54.unowned-caller-releases-slot", @@ -10315,37 +2559,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C54" - ], - "rule": "An expired dark job can release its capacity while an independently owned unbounded caller source continues.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-validation.qnt:timedOutShadowStillAllowsCallerResultTest", - "formal/dialcache-shadow-layers-conformance.qnt:unboundedCallerSurvivesDarkJobDeadlineTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "unbounded-caller-outlives-released-dark-job", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "dark shadow releases capacity while unbounded caller source continues" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:tick", - "formal/dialcache-shadow-layers-conformance.qnt:settle" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "shadow-layers/unboundedCallerSurvivesDarkJobDeadlineTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C53.dark-propagated-timeout", @@ -10356,36 +2571,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C53" - ], - "rule": "A timeout error returned by the caller source is a dark source failure, distinct from expiration of the shadow job deadline.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:darkPropagatedTimeoutIsSourceFailureTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "dark-propagated-timeout-is-source-error", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "dark shadow distinguishes source timeout from its own deadline" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:settle", - "formal/dialcache-shadow-layers-conformance.qnt:settleJob" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "shadow-layers/darkPropagatedTimeoutIsSourceFailureTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C53.served-propagated-timeout", @@ -10396,36 +2583,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C53" - ], - "rule": "A timeout error returned by a detached source is a source-error verdict, distinct from expiration of the shadow job deadline.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:servedPropagatedTimeoutPreservesHitTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "served-propagated-timeout-preserves-hit", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "served shadow distinguishes source timeout from its own deadline" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:settle", - "formal/dialcache-shadow-layers-conformance.qnt:settleJob" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "shadow-layers/servedPropagatedTimeoutPreservesHitTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C49.local-publication", @@ -10436,44 +2595,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C49" - ], - "rule": "Dark work never publishes C0 into process-local storage; eligible local publication uses only the caller source result.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:darkPresentC0NeverBecomesLocalPublicationTest", - "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesLocalBeforeShadowWriteTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "dark-present-c0-never-publishes-local", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - }, - { - "profile": "shadow-layers", - "witness": "dark-local-source-publication-stops-later-shadow", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "dark shadow publishes only caller source into local cache" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:publishSource", - "formal/dialcache-shadow-layers-conformance.qnt:begin", - "formal/dialcache-shadow-layers-conformance.qnt:settleJob" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "shadow-layers/darkSourcePublishesLocalBeforeShadowWriteTest", - "shadow-layers/darkPresentC0NeverBecomesLocalPublicationTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C49.request-publication", @@ -10484,44 +2607,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C49" - ], - "rule": "Dark work never publishes C0 into request memoization; memoization uses only the caller source result.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:darkPresentC0NeverBecomesRequestPublicationTest", - "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesRequestBeforeShadowWriteTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "dark-present-c0-never-publishes-request", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - }, - { - "profile": "shadow-layers", - "witness": "dark-request-source-publication-is-scope-local", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "dark shadow publishes only caller source into request cache" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:finishCaller", - "formal/dialcache-shadow-layers-conformance.qnt:begin", - "formal/dialcache-shadow-layers-conformance.qnt:settleJob" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "shadow-layers/darkSourcePublishesRequestBeforeShadowWriteTest", - "shadow-layers/darkPresentC0NeverBecomesRequestPublicationTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C49.job-dedup-keeps-independent-sources", @@ -10532,37 +2619,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C49" - ], - "rule": "Deduplicating a dark diagnostic job does not coalesce independent ramped-out caller sources.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:deduplicatedJobKeepsIndependentCallerSourcesTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "dark-job-dedup-preserves-independent-source-values", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "dark shadow deduplicates jobs without coalescing caller sources" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:startCaller", - "formal/dialcache-shadow-layers-conformance.qnt:admit", - "formal/dialcache-shadow-layers-conformance.qnt:settle" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "shadow-layers/deduplicatedJobKeepsIndependentCallerSourcesTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C49.no-stale-recovery", @@ -10573,36 +2631,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C49" - ], - "rule": "A ramped-out caller never serves a dark stale candidate, even when its recovery classifier would allow stale recovery.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:darkFailureDoesNotUseEligibleStaleBytesTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "dark-eligible-stale-c0-never-recovers", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "dark serving never recovers stale even when classifier allows" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:startCaller", - "formal/dialcache-shadow-layers-conformance.qnt:settle" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "shadow-layers/darkFailureDoesNotUseEligibleStaleBytesTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C47.recovery-skips-shadow", @@ -10613,45 +2643,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C47" - ], - "rule": "A recovered value, including absence, does not admit served-hit shadow work.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-stale-recovery.qnt:recoveredStaleHasNoSharedPublication", - "formal/dialcache-recovery-read-conformance.qnt:recoveredAbsenceSkipsSelectedShadowTest", - "formal/dialcache-recovery-read-conformance.qnt:recoveredValueSkipsSelectedShadowTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "recovered-absence-skips-selected-shadow-and-memoizes", - "model": "formal/dialcache-recovery-read-conformance.qnt" - }, - { - "profile": "recovery-read", - "witness": "recovered-value-skips-selected-shadow-and-memoizes", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "recovered absent value never starts selected shadow work" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:initialized", - "formal/dialcache-recovery-read-conformance.qnt:releaseLoad", - "formal/dialcache-recovery-read-conformance.qnt:complete" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery-read/recoveredAbsenceSkipsSelectedShadowTest", - "recovery-read/recoveredValueSkipsSelectedShadowTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C47.coalesced-hit-one-job", @@ -10662,33 +2655,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C47" - ], - "rule": "Coalesced callers sharing one remote hit admit only one detached shadow source.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-admission-conformance.qnt:coalescedHitAdmitsOneJobTest" - ], - "requiredGenerated": [ - { - "profile": "admission", - "witness": "coalesced-hit-one-job", - "model": "formal/dialcache-admission-conformance.qnt" - } - ], - "fixedRegressions": [ - "coalesced remote hits admit only one shadow source" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "admission/coalescedHitAdmitsOneJobTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C52.future-miss-may-fill", @@ -10699,31 +2667,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C52" - ], - "rule": "A future C0 is a semantic miss; after caller success a dark job may fill from that source subject to its observed fence.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:futureDarkBytesFillWithoutDecodingTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "future-dark-c0-fills-without-decoding", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "dark future C0 is a miss that permits source fill" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C52.expired-miss-may-fill", @@ -10734,40 +2679,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C52" - ], - "rule": "An expired C0 is a semantic miss; a dark job may fill from the accepted caller source.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:expiredC0CanFillAndServeNewValueTest", - "formal/dialcache-shadow-conformance.qnt:c0AcquisitionsRespectFreshness", - "formal/dialcache-shadow-conformance.qnt:c0AtExactFreshnessBoundaryRefillsTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "expired-c0-miss-fills-source-and-serves-probe", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "dark expired C0 is a miss that permits source fill" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:fresh", - "formal/dialcache-shadow-layers-conformance.qnt:admit", - "formal/dialcache-shadow-layers-conformance.qnt:settleJob" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "shadow-layers/expiredC0CanFillAndServeNewValueTest", - "shadow/c0AtExactFreshnessBoundaryRefillsTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C53.acquired-miss-no-reread", @@ -10778,36 +2691,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C53" - ], - "rule": "A dark job uses its acquired C0 miss and observed fence without rereading C0 after an external replacement.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:acquiredMissDoesNotRereadBeforeFillTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "acquired-c0-miss-does-not-reread-before-fill", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "dark acquired miss survives later Redis replacement without a second C0 read" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:admit", - "formal/dialcache-shadow-layers-conformance.qnt:settleJob" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "shadow-layers/acquiredMissDoesNotRereadBeforeFillTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C51.retained-candidate-not-reclassified", @@ -10818,36 +2703,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C51" - ], - "rule": "An initially accepted C0 remains a comparison candidate after its freshness expires; confirmation checks payload identity.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-layers-conformance.qnt:retainedFreshC0StillComparesAfterFreshnessBoundaryTest" - ], - "requiredGenerated": [ - { - "profile": "shadow-layers", - "witness": "retained-fresh-c0-compares-after-freshness-boundary", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "dark C0 retained for comparison is not reclassified after freshness expires" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:admit", - "formal/dialcache-shadow-layers-conformance.qnt:settleJob" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "shadow-layers/retainedFreshC0StillComparesAfterFreshnessBoundaryTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C13.request-last-writer", @@ -10858,36 +2715,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C13" - ], - "rule": "Disabling coalescing preserves request memoization; independent successful completions replace its value in settlement order.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-scope-conformance.qnt:independentRequestMemoUsesLastCompletionTest", - "formal/dialcache-scope-conformance.qnt:memoFollowsLatestSuccessfulSettlement", - "formal/dialcache-scope-conformance.qnt:rejectedIndependentSourceKeepsMemoizedValueTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "independent-request-last-completion-probed", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "uncoalesced request calls still memoize the last settled value" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "scope/independentRequestMemoUsesLastCompletionTest", - "scope/rejectedIndependentSourceKeepsMemoizedValueTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C16.runtime-enables-coalescing", @@ -10898,30 +2727,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C16" - ], - "rule": "Explicit runtime coalesce true replaces an operation default of false and enables eligible sharing.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeTrueEnablesSharingOverFalseDefaultTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:inheritedFalseKeepsIndependentMemoizingSourcesTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:inheritedDisabledSharingNeverJoins" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "runtime coalescing override enables sharing over a disabled default" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-quint-regression", - "gaps": [], - "quintReplays": [ - "runtime-boundaries/runtimeTrueEnablesSharingOverFalseDefaultTest", - "runtime-boundaries/inheritedFalseKeepsIndependentMemoizingSourcesTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C03.late-recovery-publication", @@ -10932,43 +2739,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C03" - ], - "rule": "Late stale recovery returns to original callers but cannot populate a closed or replacement request scope.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:closedRequestCannotReceiveLateRecoveryMemoTest", - "formal/dialcache-recovery-read-conformance.qnt:closedContextsStayEmpty", - "formal/dialcache-recovery-read-conformance.qnt:closedRequestCannotReceiveCompressedRecoveryTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "closed-recovery-does-not-memoize-another-scope", - "model": "formal/dialcache-recovery-conformance.qnt" - }, - { - "profile": "recovery-read", - "witness": "closed-request-recovery-keeps-new-request-cold", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "late recovery cannot memoize into a closed or replacement request scope" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:complete" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery-read/closedRequestCannotReceiveCompressedRecoveryTest", - "recovery/closedRequestCannotReceiveLateRecoveryMemoTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C54.instance-isolation", @@ -10979,48 +2751,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C54" - ], - "rule": "Shadow capacity and job identity deduplication apply within each cache instance independently.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-admission-conformance.qnt:capacityIsPerInstance", - "formal/dialcache-admission-conformance.qnt:fullInstanceDoesNotBlockOtherInstanceTest", - "formal/dialcache-shadow-layers-conformance.qnt:fullMixedInstanceDoesNotBlockAnotherInstanceTest" - ], - "requiredGenerated": [ - { - "profile": "admission", - "witness": "per-instance-deduplication", - "model": "formal/dialcache-admission-conformance.qnt" - }, - { - "profile": "admission", - "witness": "other-instance-full-admission", - "model": "formal/dialcache-admission-conformance.qnt" - }, - { - "profile": "shadow-layers", - "witness": "mixed-shadow-capacity-is-per-instance", - "model": "formal/dialcache-shadow-layers-conformance.qnt" - } - ], - "fixedRegressions": [ - "shadow capacity and job deduplication are isolated per instance" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-shadow-layers-conformance.qnt:admit" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "shadow-layers/fullMixedInstanceDoesNotBlockAnotherInstanceTest", - "admission/fullInstanceDoesNotBlockOtherInstanceTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C18.captured-shadow-admission", @@ -11031,36 +2763,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C18" - ], - "rule": "Disabling shadow prevents new admission while an already admitted comparison retains its captured policy.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:admittedComparisonSurvivesPolicyDisableTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "admitted-job-keeps-shadow-policy", - "model": "formal/dialcache-shadow-conformance.qnt" - }, - { - "profile": "admission", - "witness": "accepted-shadow-policy", - "model": "formal/dialcache-admission-conformance.qnt" - } - ], - "fixedRegressions": [ - "disabling shadow prevents new jobs but preserves an admitted comparison" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C36.independent-invalidation-snapshots", @@ -11071,32 +2775,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C36" - ], - "rule": "Independent tracked reads acquired before and after invalidation keep their own snapshot and fencing outcomes.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-independent-conformance.qnt:acceptedFreshDecodeSurvivesOtherInvalidationTest", - "formal/dialcache-independent-connection.qnt:independentSnapshotsMatchAcquisition" - ], - "requiredGenerated": [ - { - "profile": "independent", - "witness": "acquired-fresh-decode-survives-invalidation", - "model": "formal/dialcache-independent-conformance.qnt" - } - ], - "fixedRegressions": [ - "uncoalesced tracked readers on either side of invalidation keep their own snapshots" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C55.legacy-reply-normalization", @@ -11107,54 +2787,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C55" - ], - "rule": "Null, primitive, legacy, and kindless metadata-only replies that are not valid frames normalize to safe misses without trusting stray watermark metadata.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:nullReplyRefillsAndIsReadableTest", - "formal/dialcache-effects-conformance.qnt:primitiveReplyRefillsAndIsReadableTest", - "formal/dialcache-effects-conformance.qnt:legacyReplyRefillsAndIsReadableTest", - "formal/dialcache-effects-conformance.qnt:kindlessReplyRefillsAndIsReadableTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "normalized-reply-allows-refill:1", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "normalized-reply-allows-refill:2", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "normalized-reply-allows-refill:4", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "adapter legacy null preserves only trustworthy miss metadata", - "adapter primitive preserves only trustworthy miss metadata", - "adapter legacy watermark shape preserves only trustworthy miss metadata", - "adapter kindless metadata preserves only trustworthy miss metadata" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-effects-conformance.qnt:settledRead" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "effects/nullReplyRefillsAndIsReadableTest", - "effects/primitiveReplyRefillsAndIsReadableTest", - "effects/legacyReplyRefillsAndIsReadableTest", - "effects/kindlessReplyRefillsAndIsReadableTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C55.invalid-fence-discarded", @@ -11165,59 +2799,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C55" - ], - "rule": "Missing, negative, fractional, or unsafe miss watermarks are discarded and cannot authorize fencing metadata.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:missingFenceRefillsAndIsReadableTest", - "formal/dialcache-effects-conformance.qnt:negativeFenceRefillsAndIsReadableTest", - "formal/dialcache-effects-conformance.qnt:fractionalFenceRefillsAndIsReadableTest", - "formal/dialcache-effects-conformance.qnt:unsafeFenceRefillsAndIsReadableTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "normalized-reply-allows-refill:8", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "normalized-reply-allows-refill:9", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "normalized-reply-allows-refill:10", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "normalized-reply-allows-refill:11", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "adapter fenced reason without fence preserves only trustworthy miss metadata", - "adapter negative fence preserves only trustworthy miss metadata", - "adapter fractional fence preserves only trustworthy miss metadata", - "adapter unsafe fence preserves only trustworthy miss metadata" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-effects-conformance.qnt:settledRead" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "effects/missingFenceRefillsAndIsReadableTest", - "effects/negativeFenceRefillsAndIsReadableTest", - "effects/fractionalFenceRefillsAndIsReadableTest", - "effects/unsafeFenceRefillsAndIsReadableTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C55.valid-fence-independent-of-cause", @@ -11228,42 +2811,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C55" - ], - "rule": "A valid tracked watermark survives normalization independently of a recognized miss cause and constrains later publication.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-redis-protocol.qnt:validMissWatermarksArePreserved", - "formal/dialcache-effects-conformance.qnt:absentReplyWithFutureFenceBlocksRefillTest", - "formal/dialcache-effects-conformance.qnt:expiredZeroFenceReplyRefillsAndIsReadableTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "normalized-reply-fences-refill:12", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "normalized-reply-allows-refill:13", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "adapter absent with future fence preserves only trustworthy miss metadata", - "adapter expired with zero fence preserves only trustworthy miss metadata" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "effects/absentReplyWithFutureFenceBlocksRefillTest", - "effects/expiredZeroFenceReplyRefillsAndIsReadableTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C55.frame-ignores-miss-metadata", @@ -11274,31 +2823,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C55" - ], - "rule": "A valid frame without a miss discriminator remains a frame despite stray miss-reason or fence fields.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:frameWithoutMissDiscriminatorIgnoresMetadataTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "reply:15", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "frame without miss discriminator ignores stray miss metadata" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C19.exact-serving-cohort", @@ -11309,31 +2835,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C19" - ], - "rule": "A serving ramp excludes a key at equality with its cohort sample and includes it just above that sample, independently for each layer.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-runtime-boundaries-conformance.qnt:localCohortEqualityBypassesBeforeAboveSampleCachesTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:remoteCohortEqualityBypassesBeforeAboveSampleCachesTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:equalAndLowerCohortsNeverTraverse" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "local cohort excludes equality and admits just above its exact sample", - "remote cohort excludes equality and admits just above its exact sample" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-quint-regression", - "gaps": [], - "quintReplays": [ - "runtime-boundaries/localCohortEqualityBypassesBeforeAboveSampleCachesTest", - "runtime-boundaries/remoteCohortEqualityBypassesBeforeAboveSampleCachesTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C45.compressed-candidate", @@ -11344,58 +2847,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C45" - ], - "rule": "Retained compressed bytes follow the same recovery and no-shared-publication rules; decompression failure preserves the source error.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-recovery-read-conformance.qnt:recoveredResultsNeverPublishShared", - "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryMemoizesWithoutLocalPublicationTest", - "formal/dialcache-recovery-read-conformance.qnt:corruptCompressedRecoveryKeepsOriginalSourceErrorTest", - "formal/dialcache-recovery-read-conformance.qnt:untrackedCompressedRecoveryDoesNotWarmLocalTest", - "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryRechecksMaximumAfterDecodeTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "tracked-compressed-recovery-is-request-only", - "model": "formal/dialcache-recovery-read-conformance.qnt" - }, - { - "profile": "recovery-read", - "witness": "corrupt-compressed-recovery-keeps-original-error", - "model": "formal/dialcache-recovery-read-conformance.qnt" - }, - { - "profile": "recovery-read", - "witness": "untracked-compressed-recovery-does-not-warm-local", - "model": "formal/dialcache-recovery-read-conformance.qnt" - }, - { - "profile": "recovery-read", - "witness": "compressed-recovery-crossing-maximum-keeps-original-error", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "compressed retained payload follows normal recovery publication rules", - "corrupt compressed retained payload follows normal recovery publication rules" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:releaseLoad" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery-read/compressedRecoveryMemoizesWithoutLocalPublicationTest", - "recovery-read/corruptCompressedRecoveryKeepsOriginalSourceErrorTest", - "recovery-read/untrackedCompressedRecoveryDoesNotWarmLocalTest", - "recovery-read/compressedRecoveryRechecksMaximumAfterDecodeTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C28.encoding-error-suppresses-refill", @@ -11406,43 +2859,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C28" - ], - "rule": "Unsupported payload encoding is a read failure that suppresses Redis refill for both tracked and untracked calls.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-recovery-read-conformance.qnt:trackedEncodingFailureSuppressesRefillTest", - "formal/dialcache-recovery-read-conformance.qnt:untrackedEncodingFailureStillPublishesLocalTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "tracked-encoding-error-denies-refill-and-local-reuse", - "model": "formal/dialcache-recovery-read-conformance.qnt" - }, - { - "profile": "recovery-read", - "witness": "untracked-encoding-error-denies-refill-keeps-local-reuse", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "untracked unsupported payload encoding is a read failure that suppresses refill", - "tracked unsupported payload encoding is a read failure that suppresses refill" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:releaseRead" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery-read/trackedEncodingFailureSuppressesRefillTest", - "recovery-read/untrackedEncodingFailureStillPublishesLocalTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C22.freshness-after-read", @@ -11453,43 +2871,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C22" - ], - "rule": "Logical remote freshness is evaluated at read settlement, so age accumulated during the bounded read can make a frame stale.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-recovery-read-conformance.qnt:freshnessUsesReadSettlement", - "formal/dialcache-recovery-read-conformance.qnt:freshnessAfterHeldReadTest", - "formal/dialcache-recovery-read-conformance.qnt:heldReadJustBeforeFreshnessBoundaryStillHitsTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "read-settlement-crosses-freshness-and-recovers", - "model": "formal/dialcache-recovery-read-conformance.qnt" - }, - { - "profile": "recovery-read", - "witness": "read-settlement-before-freshness-hits", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "freshness samples wall time after the bounded Redis read settles" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:releaseRead" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery-read/freshnessAfterHeldReadTest", - "recovery-read/heldReadJustBeforeFreshnessBoundaryStillHitsTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C58.failure-categories", @@ -11500,53 +2883,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C58" - ], - "rule": "Read, policy, load, dump, and write failures retain their stable phase-specific diagnostic classification while their documented fail-open path continues.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:readFailureKeepsCategoryAndDeniesRefillTest", - "formal/dialcache-effects-conformance.qnt:decodeFailureKeepsCategoryAndAllowsRefillTest", - "formal/dialcache-effects-conformance.qnt:dumpFailureKeepsCategoryAndSourceValueTest", - "formal/dialcache-effects-conformance.qnt:writeFailureKeepsCategoryAndSourceValueTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "error:cache_read", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "error:serialization_load", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "error:serialization_dump", - "model": "formal/dialcache-effects-conformance.qnt" - }, - { - "profile": "effects", - "witness": "error:cache_write", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "read failure retains its stable diagnostic category", - "dump failure retains its stable diagnostic category", - "write failure retains its stable diagnostic category", - "load failure retains its stable diagnostic category", - "policy failure retains its stable diagnostic category" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C58.request-follower-trail", @@ -11557,33 +2895,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C58" - ], - "rule": "Request followers report request-local coalescing without repeating lower cache traversal or the leader error trail.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-scope-conformance.qnt:sharedFailureHasOneAttributedErrorTest" - ], - "requiredGenerated": [ - { - "profile": "scope", - "witness": "one-error-for-request-followers", - "model": "formal/dialcache-scope-conformance.qnt" - } - ], - "fixedRegressions": [ - "request followers report request scope without repeating lower traversal" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "scope/sharedFailureHasOneAttributedErrorTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C58.late-rejection-not-recounted", @@ -11594,31 +2907,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C58" - ], - "rule": "A source deadline records one failure; a later rejection of the abandoned loader does not emit another fallback failure.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-effects-conformance.qnt:lateSourceCannotRepeatFailureMetricTest" - ], - "requiredGenerated": [ - { - "profile": "effects", - "witness": "late-rejection-does-not-repeat-error", - "model": "formal/dialcache-effects-conformance.qnt" - } - ], - "fixedRegressions": [ - "source timeout records one failure even after a late rejection" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C59.compression-read-telemetry", @@ -11629,91 +2919,20 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C59" - ], - "rule": "Previously compressed reads report decompression success or failure even when new compression writes are disabled.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-recovery-read-conformance.qnt:freshCompressedReadReportsDecompressionTest", - "formal/dialcache-recovery-read-conformance.qnt:corruptCompressedReadReportsRawFallbackTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "fresh-compressed-hit-reports-decompression", - "model": "formal/dialcache-recovery-read-conformance.qnt" - }, - { - "profile": "recovery-read", - "witness": "corrupt-compressed-read-reports-fallback-with-source-result", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "compressed read reports compression even when new compression is disabled", - "corrupt read reports compression even when new compression is disabled" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:startedCompression" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery-read/freshCompressedReadReportsDecompressionTest", - "recovery-read/corruptCompressedReadReportsRawFallbackTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C60.logging-explicit-off", "group": "shadow", "evidence": { "typescript": ".formal-traces/ts-replay.json", - "go": ".formal-traces/go-replay.jsonl", - "nativeGo": [], - "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." - }, - "contracts": [ - "C60" - ], - "rule": "Explicitly disabling mismatch logging suppresses warnings while preserving a confirmed mismatch verdict.", - "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:warningsRequireValidCapturedPolicy", - "formal/dialcache-shadow-conformance.qnt:explicitFalseLoggingOverridesEnabledDefaultTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "mismatch-logging:false", - "model": "formal/dialcache-shadow-conformance.qnt" - }, - { - "profile": "shadow", - "witness": "explicit-false-shadow-logging-overrides-enabled-default", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [ - "mismatch warning omitted with mismatch verdict" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-shadow-conformance.qnt:initialize", - "formal/dialcache-shadow-conformance.qnt:setLogging", - "formal/dialcache-shadow-conformance.qnt:beginCall", - "formal/dialcache-shadow-conformance.qnt:done" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "shadow/explicitFalseLoggingOverridesEnabledDefaultTest" - ], - "generatedVectors": [] + "go": ".formal-traces/go-replay.jsonl", + "nativeGo": [], + "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." + }, + "kind": "portable-behavior", + "gaps": [] }, { "id": "C40.fenced-candidate", @@ -11724,32 +2943,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C40" - ], - "rule": "A fenced initial value is not retained or decoded for recovery; an allowed failure remains the original source error.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:fencedInitialBytesNeverRecoverTest", - "formal/dialcache-stale-recovery.qnt:fencedFrameNeverBecomesRecoveryCandidateTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "fenced-read-does-not-retain", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery/fencedInitialBytesNeverRecoverTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C45.rollback-below-fresh", @@ -11760,33 +2955,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C45" - ], - "rule": "After retaining stale bytes, wall rollback to a nonnegative age below the fresh ceiling still permits recovery; only future age or the exclusive maximum rejects.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-recovery-conformance.qnt:rollbackBelowFreshCeilingStillRecoversTest", - "formal/dialcache-stale-recovery.qnt:rollbackBelowFreshAgeStillRecoversTest", - "formal/dialcache-rule-checks.qnt:rollbackCanRecoverRetainedBytesTest" - ], - "requiredGenerated": [ - { - "profile": "recovery", - "witness": "rollback-below-fresh-age-still-recovers", - "model": "formal/dialcache-recovery-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery/rollbackBelowFreshCeilingStillRecoversTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C53.dark-read-error-keeps-caller", @@ -11797,30 +2967,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C53" - ], - "rule": "A failed dark C0 read completes the diagnostic job but an independent caller source can still succeed; no decode or fill follows the failed read.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:darkReadErrorCannotReplaceCallerSourceTest", - "formal/dialcache-shadow-validation.qnt:darkReadFailureStillAllowsCallerResultTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "dark-read-error-still-allows-source-result", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C53.dark-source-error", @@ -11831,30 +2979,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C53" - ], - "rule": "A rejected dark caller source is preserved as the caller failure, emits source_error, and never decodes or fills C0.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:sourceErrorDoesNotDecodePresentDarkBytesTest", - "formal/dialcache-shadow-validation.qnt:sourceFailureNeverFillsTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "dark-source-error-never-decodes-or-fills", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C52.fenced-miss-may-fill", @@ -11865,29 +2991,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C52" - ], - "rule": "A fenced C0 is a semantic miss; a source-success fill may proceed once its own timestamp clears the observed fence, without decoding C0.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:fencedDarkBytesCanAdmitNewerFillTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "fenced-dark-c0-can-fill-after-cutoff", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C51.fenced-confirmation", @@ -11898,29 +3003,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C51" - ], - "rule": "A watermark-fenced C1 supersedes an unequal C0/source comparison without repair, warning, or value-age verdict.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:fencedConfirmationNeverRepairsTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "fenced-c1-supersedes-without-repair", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C51.future-confirmation", @@ -11931,29 +3015,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C51" - ], - "rule": "A future-dated C1 still participates in payload confirmation after C0 was accepted; identical bytes confirm mismatch without cache repair.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:futureConfirmationStillComparesBytesTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "future-c1-confirms-payload-without-repair", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C50.equal-skips-confirmation", @@ -11964,30 +3027,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C50" - ], - "rule": "A semantic C0/source match emits match without issuing a C1 read or repairing the cache.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-validation.qnt:equalComparisonSkipsConfirmationTest", - "formal/dialcache-shadow-conformance.qnt:binarySnapshotComparesDecodedValueTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "equal-comparison-skips-c1", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C53.fill-serialization-error", @@ -11998,29 +3039,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C53" - ], - "rule": "A dark fill serialization failure emits fill_error without dispatching a Redis write and preserves the accepted caller result.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:fillSerializationFailureNeverDispatchesWriteTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "fill-serialization-error-preserves-caller", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C53.fill-write-error", @@ -12031,29 +3051,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C53" - ], - "rule": "A dispatched dark Redis write failure emits fill_error and preserves the accepted caller result; it does not retry or emit a second verdict.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:fillWriteFailurePreservesCallerResultTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "fill-write-error-preserves-caller", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C34.observed-fence-snapshot", @@ -12064,36 +3063,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C34" - ], - "rule": "A conditional refill uses the miss-time observed fence; later invalidation can fence a dispatched write on subsequent reads without retroactively rewriting that miss.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-tracked-invalidation.qnt:laterInvalidationDoesNotRewriteMissFenceTest", - "formal/dialcache-recovery-read-conformance.qnt:laterInvalidationDoesNotRewriteObservedMissFenceTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "later-invalidation-keeps-captured-miss-fence-new-read-fences-write", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [ - "invalidation during source does not replace the acquired miss fence" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:releaseRead" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery-read/laterInvalidationDoesNotRewriteObservedMissFenceTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C38.value-work-does-not-extend-marker", @@ -12106,41 +3077,8 @@ ], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C38" - ], - "rule": "Ordinary tracked reads and complete value writes do not create, advance, or extend invalidation watermarks.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-tracked-invalidation.qnt:readsAndValueWritesDoNotMoveWatermarkTest", - "formal/dialcache-recovery-read-conformance.qnt:ordinaryValueWorkDoesNotCreateMarkerTest", - "formal/dialcache-recovery-read-conformance.qnt:ordinaryValueWorkDoesNotExtendMarkerTest" - ], - "requiredGenerated": [ - { - "profile": "recovery-read", - "witness": "ordinary-value-work-preserves-absent-marker", - "model": "formal/dialcache-recovery-read-conformance.qnt" - }, - { - "profile": "recovery-read", - "witness": "ordinary-value-work-preserves-marker-cutoff-and-expiry", - "model": "formal/dialcache-recovery-read-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-recovery-read-conformance.qnt:observeMarker" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "recovery-read/ordinaryValueWorkDoesNotCreateMarkerTest", - "recovery-read/ordinaryValueWorkDoesNotExtendMarkerTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C51.identical-payload-confirmation", @@ -12151,29 +3089,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C51" - ], - "rule": "An unequal C0/source comparison is reported as mismatch only when one successful C1 read returns the same payload bytes, including equivalent text/binary representations; the cache is never repaired.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-shadow-conformance.qnt:identicalTextAndBinaryBytesConfirmMismatchTest" - ], - "requiredGenerated": [ - { - "profile": "shadow", - "witness": "same-c1-bytes-confirm-mismatch", - "model": "formal/dialcache-shadow-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C05.request-hit-stops-traversal", @@ -12184,30 +3101,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C05" - ], - "rule": "A request memo hit skips local and remote traversal and source execution", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-core.qnt:firstHitStopsLowerTraversal", - "formal/dialcache-core.qnt:untrackedSourcePublishesToAllParticipatingLayersTest" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "request-hit-stops-lower-traversal", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [], - "generatedVectors": [] + "gaps": [] }, { "id": "C05.local-hit-stops-traversal", @@ -12218,36 +3113,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C05" - ], - "rule": "A local hit skips remote reads and source execution while warming an eligible request memo", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-core.qnt:firstHitStopsLowerTraversal", - "formal/dialcache-core.qnt:localHitWarmsRequestAndSkipsRemoteTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", - "formal/dialcache-conformance.qnt:localValueSurvivesSourceChangeTest", - "formal/dialcache-conformance.qnt:servedLayerValueMatchesCache" - ], - "requiredGenerated": [ - { - "profile": "layers", - "witness": "local-hit-stops-remote-and-source", - "model": "formal/dialcache-layers-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "runtime-boundaries/runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", - "core/localValueSurvivesSourceChangeTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C16.reenable-default-coalescing", @@ -12258,29 +3125,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C16", - "C17" - ], - "rule": "Reenabling a shared serving layer over the disabled baseline retains library coalescing when its leaf is omitted", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-runtime-policy.qnt:reenablingDisabledBaselineKeepsDefaultCoalescingTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:disabledBaselineRampedUpKeepsDefaultSharingTest" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "runtime ramp up over disabled baseline preserves default coalescing" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-quint-regression", - "gaps": [], - "quintReplays": [ - "runtime-boundaries/disabledBaselineRampedUpKeepsDefaultSharingTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C17.explicit-feature-kill-switch", @@ -12291,29 +3137,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C16", - "C17" - ], - "rule": "Explicit zero or false runtime feature leaves replace inherited request, recovery, and shadow enablement while preserving omitted coalescing policy", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-runtime-policy.qnt:explicitOffReplacesInheritedFeaturesTest", - "formal/dialcache-runtime-boundaries-conformance.qnt:fullFeatureKillSwitchKeepsOmittedSharingAndRetainedMemoTest" - ], - "requiredGenerated": [], - "fixedRegressions": [ - "explicit feature kill switches bypass and preserve request memo for reenablement" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-quint-regression", - "gaps": [], - "quintReplays": [ - "runtime-boundaries/fullFeatureKillSwitchKeepsOmittedSharingAndRetainedMemoTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C21.invalid-remote-ttl", @@ -12324,31 +3149,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C21" - ], - "rule": "Invalid remote TTL preserves valid local serving", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:invalidRemoteTtlPreservesLocalServingTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "invalid-remote-ttl-preserves-local-hit", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "policy/invalidRemoteTtlPreservesLocalServingTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C21.invalid-local-ramp", @@ -12359,33 +3161,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C21" - ], - "rule": "Invalid local ramps suppress local caching while a valid remote layer remains usable", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:invalidLocalRampPreservesRemoteTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "invalid-local-ramp-preserves-remote-hit", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [ - "invalid runtime ramp fails open" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "policy/invalidLocalRampPreservesRemoteTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C21.invalid-remote-ramp", @@ -12396,31 +3173,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C21" - ], - "rule": "Invalid remote ramp preserves valid local hits", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-policy-conformance.qnt:invalidRemoteRampPreservesLocalTest" - ], - "requiredGenerated": [ - { - "profile": "policy", - "witness": "invalid-remote-ramp-preserves-local-hit", - "model": "formal/dialcache-policy-conformance.qnt" - } - ], - "fixedRegressions": [], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "policy/invalidRemoteRampPreservesLocalTest" - ], - "generatedVectors": [] + "gaps": [] }, { "id": "C27.source-error-no-publication", @@ -12431,39 +3185,8 @@ "nativeGo": [], "scope": "Only linked finite scenarios, required witnesses, scoped model checks and explicit native boundaries; not universal case proof." }, - "contracts": [ - "C15", - "C27" - ], - "rule": "A rejected source preserves its failure and publishes no successful value to participating cache layers", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-core.qnt:sourceFailureNeverPublishes", - "formal/dialcache-core.qnt:rejectedSourceNeverPublishesTest", - "formal/dialcache-local-failure-conformance.qnt:sourceErrorsNeverReplaceLocalValue", - "formal/dialcache-local-failure-conformance.qnt:sourceFailureKeepsPreviouslyAcceptedStorageTest" - ], - "requiredGenerated": [ - { - "profile": "local-failure", - "witness": "rejected-source-preserves-previous-local-publication", - "model": "formal/dialcache-local-failure-conformance.qnt" - } - ], - "fixedRegressions": [ - "source rejection publishes to none of the participating layers" - ], - "vectorEvidence": [], - "scopeAudit": "formal/quint-case-audit.json", - "quintDefinitions": [ - "formal/dialcache-local-failure-conformance.qnt:acquired" - ], - "status": "executable-generated", - "gaps": [], - "quintReplays": [ - "local-failure/sourceFailureKeepsPreviouslyAcceptedStorageTest" - ], - "generatedVectors": [] + "gaps": [] }, { "group": "layers", @@ -12474,45 +3197,8 @@ "scope": "Only linked finite schedules, checks and explicit native boundaries; not universal proof." }, "id": "C09.fractional-clock-grid", - "contracts": [ - "C09" - ], - "rule": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.", "kind": "portable-behavior", - "quintProperties": [ - "formal/dialcache-local-clock-conformance.qnt:fractionalInsertionExpiresAtWholeMillisecondTest", - "formal/dialcache-local-clock-conformance.qnt:fractionalConstructionKeepsCommonInstanceGridTest", - "formal/dialcache-local-clock-conformance.qnt:nonzeroOriginKeepsWholeMillisecondBoundaryTest", - "formal/dialcache-local-clock-conformance.qnt:integerInsertionRetainsFullTtlTest", - "formal/dialcache-local-clock-conformance.qnt:localReadsUseCommonWholeMilliseconds", - "formal/dialcache-local-clock-conformance.qnt:readsNeverRenewLocalInsertion", - "formal/dialcache-local-clock-conformance.qnt:publicCallsPreserveProbeResults" - ], - "quintDefinitions": [], - "requiredGenerated": [ - { - "profile": "local-clock", - "witness": "fractional-insertion-expiry", - "model": "formal/dialcache-local-clock-conformance.qnt" - }, - { - "profile": "local-clock", - "witness": "shared-instance-grid", - "model": "formal/dialcache-local-clock-conformance.qnt" - } - ], - "quintReplays": [ - "local-clock/fractionalInsertionExpiresAtWholeMillisecondTest", - "local-clock/fractionalConstructionKeepsCommonInstanceGridTest", - "local-clock/nonzeroOriginKeepsWholeMillisecondBoundaryTest", - "local-clock/integerInsertionRetainsFullTtlTest" - ], - "generatedVectors": [], - "fixedRegressions": [], - "vectorEvidence": [], - "status": "executable-generated", - "gaps": [], - "scopeAudit": "formal/quint-case-audit.json" + "gaps": [] } ], "sourceDeclarationScope": { @@ -12588,236 +3274,6 @@ "go/policy.go", "go/api.go" ], - "declarations": [ - { - "name": "CacheLayer", - "kind": "EnumDeclaration", - "line": 6, - "status": "inherits-source-file-mapping" - }, - { - "name": "Awaitable", - "kind": "TypeAliasDeclaration", - "line": 11, - "status": "inherits-source-file-mapping" - }, - { - "name": "LayerConfig", - "kind": "TypeAliasDeclaration", - "line": 12, - "status": "inherits-source-file-mapping" - }, - { - "name": "StaleRecoveryPredicate", - "kind": "TypeAliasDeclaration", - "line": 14, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowConfig", - "kind": "InterfaceDeclaration", - "line": 17, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowConfig.ramp", - "kind": "PropertySignature", - "line": 19, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowConfig.logMismatches", - "kind": "PropertySignature", - "line": 24, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig", - "kind": "ClassDeclaration", - "line": 27, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.ttlSec", - "kind": "PropertyDeclaration", - "line": 29, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.ramp", - "kind": "PropertyDeclaration", - "line": 30, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.shadow", - "kind": "PropertyDeclaration", - "line": 32, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.requestLocal", - "kind": "PropertyDeclaration", - "line": 37, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.coalesce", - "kind": "PropertyDeclaration", - "line": 44, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.staleOnErrorMaxAgeSec", - "kind": "PropertyDeclaration", - "line": 55, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.remoteReadTimeoutMs", - "kind": "PropertyDeclaration", - "line": 60, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.constructor", - "kind": "Constructor", - "line": 62, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.ttlSec", - "kind": "PropertySignature", - "line": 63, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.ramp", - "kind": "PropertySignature", - "line": 64, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.shadow", - "kind": "PropertySignature", - "line": 65, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.requestLocal", - "kind": "PropertySignature", - "line": 66, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.coalesce", - "kind": "PropertySignature", - "line": 67, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.staleOnErrorMaxAgeSec", - "kind": "PropertySignature", - "line": 68, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.remoteReadTimeoutMs", - "kind": "PropertySignature", - "line": 69, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.enabled", - "kind": "MethodDeclaration", - "line": 106, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyConfig.disabled", - "kind": "MethodDeclaration", - "line": 126, - "status": "inherits-source-file-mapping" - }, - { - "name": "cloneLayerConfig", - "kind": "FunctionDeclaration", - "line": 142, - "status": "inherits-source-file-mapping" - }, - { - "name": "cloneShadowConfig", - "kind": "FunctionDeclaration", - "line": 152, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheConfigProvider", - "kind": "TypeAliasDeclaration", - "line": 166, - "status": "inherits-source-file-mapping" - }, - { - "name": "Logger", - "kind": "TypeAliasDeclaration", - "line": 168, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheConfig", - "kind": "InterfaceDeclaration", - "line": 170, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheConfig.cacheConfigProvider", - "kind": "PropertySignature", - "line": 171, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheConfig.shouldAttemptStaleRecovery", - "kind": "PropertySignature", - "line": 183, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheConfig.namespace", - "kind": "PropertySignature", - "line": 188, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheConfig.logger", - "kind": "PropertySignature", - "line": 189, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheConfig.localMaxSize", - "kind": "PropertySignature", - "line": 195, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheConfig.redis", - "kind": "PropertySignature", - "line": 196, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheConfig.metrics", - "kind": "PropertySignature", - "line": 197, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheConfig.shadowMaxInFlight", - "kind": "PropertySignature", - "line": 204, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Static configuration and callback contracts map to typed time.Duration Policy, functional Option constructors and Operation[T]. ParsePolicy exposes the seconds-based JSON input; pointer leaves and functional options preserve omission versus explicit false/zero. ResolvePolicy applies the sparse overlay and validated feature defaults.", @@ -12857,176 +3313,6 @@ "candidateGoFiles": [ "go/cache.go" ], - "declarations": [ - { - "name": "RequestLocalReadResult", - "kind": "TypeAliasDeclaration", - "line": 3, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 3, - "status": "inherits-source-file-mapping" - }, - { - "name": "value", - "kind": "PropertySignature", - "line": 3, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 3, - "status": "inherits-source-file-mapping" - }, - { - "name": "RequestLocalCache", - "kind": "ClassDeclaration", - "line": 6, - "status": "inherits-source-file-mapping" - }, - { - "name": "RequestLocalCache.inFlight", - "kind": "PropertyDeclaration", - "line": 7, - "status": "inherits-source-file-mapping" - }, - { - "name": "RequestLocalCache.values", - "kind": "PropertyDeclaration", - "line": 8, - "status": "inherits-source-file-mapping" - }, - { - "name": "RequestLocalCache.closed", - "kind": "PropertyDeclaration", - "line": 9, - "status": "inherits-source-file-mapping" - }, - { - "name": "RequestLocalCache.read", - "kind": "MethodDeclaration", - "line": 11, - "status": "inherits-source-file-mapping" - }, - { - "name": "RequestLocalCache.set", - "kind": "MethodDeclaration", - "line": 18, - "status": "inherits-source-file-mapping" - }, - { - "name": "RequestLocalCache.close", - "kind": "MethodDeclaration", - "line": 24, - "status": "inherits-source-file-mapping" - }, - { - "name": "RequestHolder", - "kind": "InterfaceDeclaration", - "line": 31, - "status": "inherits-source-file-mapping" - }, - { - "name": "RequestHolder.closed", - "kind": "PropertySignature", - "line": 32, - "status": "inherits-source-file-mapping" - }, - { - "name": "RequestHolder.requestLocalCache", - "kind": "PropertySignature", - "line": 33, - "status": "inherits-source-file-mapping" - }, - { - "name": "ContextStore", - "kind": "InterfaceDeclaration", - "line": 36, - "status": "inherits-source-file-mapping" - }, - { - "name": "ContextStore.enabled", - "kind": "PropertySignature", - "line": 37, - "status": "inherits-source-file-mapping" - }, - { - "name": "ContextStore.holder", - "kind": "PropertySignature", - "line": 38, - "status": "inherits-source-file-mapping" - }, - { - "name": "contextStorage", - "kind": "VariableDeclaration", - "line": 41, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheContext", - "kind": "ClassDeclaration", - "line": 43, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheContext.constructor", - "kind": "Constructor", - "line": 44, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheContext.isEnabled", - "kind": "MethodDeclaration", - "line": 48, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheContext.enable", - "kind": "MethodDeclaration", - "line": 53, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheContext.disable", - "kind": "MethodDeclaration", - "line": 63, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheContext.liveHolder", - "kind": "MethodDeclaration", - "line": 67, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheContext.runOutermost", - "kind": "MethodDeclaration", - "line": 72, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheContext.run", - "kind": "MethodDeclaration", - "line": 82, - "status": "inherits-source-file-mapping" - }, - { - "name": "getOrCreateRequestLocalCache", - "kind": "FunctionDeclaration", - "line": 88, - "status": "inherits-source-file-mapping" - }, - { - "name": "storageFor", - "kind": "FunctionDeclaration", - "line": 99, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "An explicit Go context carries a per-cache live request holder. Enable closes the holder when its callback returns; Disable preserves the outer holder while bypassing caching. Goroutines must propagate the supplied context. This replaces AsyncLocalStorage and promise lifetime mechanics.", @@ -13058,308 +3344,6 @@ "go/metrics_datadog.go", "go/metrics.go" ], - "declarations": [ - { - "name": "DatadogObservationMetricType", - "kind": "TypeAliasDeclaration", - "line": 16, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDogStatsDClient", - "kind": "InterfaceDeclaration", - "line": 24, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDogStatsDClient.increment", - "kind": "MethodSignature", - "line": 25, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDogStatsDClient.histogram", - "kind": "MethodSignature", - "line": 26, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDogStatsDClient.distribution", - "kind": "MethodSignature", - "line": 27, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogMetricsOptions", - "kind": "InterfaceDeclaration", - "line": 30, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogMetricsOptions.client", - "kind": "PropertySignature", - "line": 31, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogMetricsOptions.observationMetricType", - "kind": "PropertySignature", - "line": 32, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogMetricsOptions.namespace", - "kind": "PropertySignature", - "line": 34, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheTag", - "kind": "TypeAliasDeclaration", - "line": 37, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogTags", - "kind": "TypeAliasDeclaration", - "line": 38, - "status": "inherits-source-file-mapping" - }, - { - "name": "OutcomeMetricLabels", - "kind": "TypeAliasDeclaration", - "line": 39, - "status": "inherits-source-file-mapping" - }, - { - "name": "Observation", - "kind": "TypeAliasDeclaration", - "line": 40, - "status": "inherits-source-file-mapping" - }, - { - "name": "DEFAULT_NAMESPACE", - "kind": "VariableDeclaration", - "line": 42, - "status": "inherits-source-file-mapping" - }, - { - "name": "DATADOG_METRIC_NAME_MAX_LENGTH", - "kind": "VariableDeclaration", - "line": 43, - "status": "inherits-source-file-mapping" - }, - { - "name": "NAMESPACE_PATTERN", - "kind": "VariableDeclaration", - "line": 44, - "status": "inherits-source-file-mapping" - }, - { - "name": "METRIC_SUFFIXES", - "kind": "VariableDeclaration", - "line": 46, - "status": "inherits-source-file-mapping" - }, - { - "name": "MetricName", - "kind": "TypeAliasDeclaration", - "line": 68, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics", - "kind": "ClassDeclaration", - "line": 70, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.client", - "kind": "PropertyDeclaration", - "line": 71, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.metricNames", - "kind": "PropertyDeclaration", - "line": 72, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.observe", - "kind": "PropertyDeclaration", - "line": 73, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.constructor", - "kind": "Constructor", - "line": 75, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.request", - "kind": "MethodDeclaration", - "line": 92, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.miss", - "kind": "MethodDeclaration", - "line": 96, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.disabled", - "kind": "MethodDeclaration", - "line": 100, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.error", - "kind": "MethodDeclaration", - "line": 104, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.invalidation", - "kind": "MethodDeclaration", - "line": 112, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.coalesced", - "kind": "MethodDeclaration", - "line": 120, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.shadowValidation", - "kind": "MethodDeclaration", - "line": 129, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.observeShadowValueAge", - "kind": "MethodDeclaration", - "line": 133, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.observeFutureTimestampOffset", - "kind": "MethodDeclaration", - "line": 137, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.staleRecovery", - "kind": "MethodDeclaration", - "line": 141, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.observeStaleRecoveryValueAge", - "kind": "MethodDeclaration", - "line": 145, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.compression", - "kind": "MethodDeclaration", - "line": 149, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.observeGet", - "kind": "MethodDeclaration", - "line": 153, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.observeFallback", - "kind": "MethodDeclaration", - "line": 157, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.observeSerialization", - "kind": "MethodDeclaration", - "line": 161, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.observeSize", - "kind": "MethodDeclaration", - "line": 168, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.observeStoredSize", - "kind": "MethodDeclaration", - "line": 172, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.observeCompressionRatio", - "kind": "MethodDeclaration", - "line": 176, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.observeCompression", - "kind": "MethodDeclaration", - "line": 180, - "status": "inherits-source-file-mapping" - }, - { - "name": "DatadogDialCacheMetrics.increment", - "kind": "MethodDeclaration", - "line": 187, - "status": "inherits-source-file-mapping" - }, - { - "name": "createDatadogDialCacheMetrics", - "kind": "FunctionDeclaration", - "line": 192, - "status": "inherits-source-file-mapping" - }, - { - "name": "cacheTags", - "kind": "FunctionDeclaration", - "line": 196, - "status": "inherits-source-file-mapping" - }, - { - "name": "outcomeTags", - "kind": "FunctionDeclaration", - "line": 205, - "status": "inherits-source-file-mapping" - }, - { - "name": "validateClient", - "kind": "FunctionDeclaration", - "line": 214, - "status": "inherits-source-file-mapping" - }, - { - "name": "validateObservationMetricType", - "kind": "FunctionDeclaration", - "line": 228, - "status": "inherits-source-file-mapping" - }, - { - "name": "validateNamespace", - "kind": "FunctionDeclaration", - "line": 235, - "status": "inherits-source-file-mapping" - }, - { - "name": "metricNames", - "kind": "FunctionDeclaration", - "line": 245, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "DogStatsD integration maps event kinds, labels, units and suffixes through an application-owned DogStatsDClient. Go uses an interface returning errors and an explicit constructor; FailureIsolatedObserver prevents exporter failures from changing cache outcomes.", @@ -13402,854 +3386,6 @@ "go/api.go", "go/logging.go" ], - "declarations": [ - { - "name": "CacheKeyArgs", - "kind": "TypeAliasDeclaration", - "line": 53, - "status": "inherits-source-file-mapping" - }, - { - "name": "Id", - "kind": "TypeAliasDeclaration", - "line": 54, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheKeySpec", - "kind": "TypeAliasDeclaration", - "line": 57, - "status": "inherits-source-file-mapping" - }, - { - "name": "id", - "kind": "PropertySignature", - "line": 57, - "status": "inherits-source-file-mapping" - }, - { - "name": "args", - "kind": "PropertySignature", - "line": 57, - "status": "inherits-source-file-mapping" - }, - { - "name": "AnyFn", - "kind": "TypeAliasDeclaration", - "line": 60, - "status": "inherits-source-file-mapping" - }, - { - "name": "CachedValue", - "kind": "TypeAliasDeclaration", - "line": 62, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowComparator", - "kind": "TypeAliasDeclaration", - "line": 69, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheKeySelector", - "kind": "TypeAliasDeclaration", - "line": 70, - "status": "inherits-source-file-mapping" - }, - { - "name": "IsAny", - "kind": "TypeAliasDeclaration", - "line": 72, - "status": "inherits-source-file-mapping" - }, - { - "name": "IsUnknown", - "kind": "TypeAliasDeclaration", - "line": 73, - "status": "inherits-source-file-mapping" - }, - { - "name": "AllTrue", - "kind": "TypeAliasDeclaration", - "line": 80, - "status": "inherits-source-file-mapping" - }, - { - "name": "IsJsonCompatible", - "kind": "TypeAliasDeclaration", - "line": 87, - "status": "inherits-source-file-mapping" - }, - { - "name": "IsJsonMember", - "kind": "TypeAliasDeclaration", - "line": 101, - "status": "inherits-source-file-mapping" - }, - { - "name": "IsJsonObject", - "kind": "TypeAliasDeclaration", - "line": 115, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheOperationOptionsBase", - "kind": "InterfaceDeclaration", - "line": 126, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheOperationOptionsBase.keyType", - "kind": "PropertySignature", - "line": 127, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheOperationOptionsBase.useCase", - "kind": "PropertySignature", - "line": 128, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheOperationOptionsBase.defaultConfig", - "kind": "PropertySignature", - "line": 129, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheOperationOptionsBase.trackForInvalidation", - "kind": "PropertySignature", - "line": 130, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheOperationOptionsBase.shadowComparator", - "kind": "PropertySignature", - "line": 135, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheOperationOptionsBase.shouldAttemptStaleRecovery", - "kind": "PropertySignature", - "line": 147, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheOperationOptionsBase.fallbackTimeoutMs", - "kind": "PropertySignature", - "line": 161, - "status": "inherits-source-file-mapping" - }, - { - "name": "CachedOptionsBase", - "kind": "InterfaceDeclaration", - "line": 164, - "status": "inherits-source-file-mapping" - }, - { - "name": "CachedOptionsBase.cacheKey", - "kind": "PropertySignature", - "line": 172, - "status": "inherits-source-file-mapping" - }, - { - "name": "SerializerOption", - "kind": "TypeAliasDeclaration", - "line": 175, - "status": "inherits-source-file-mapping" - }, - { - "name": "serializer", - "kind": "PropertySignature", - "line": 176, - "status": "inherits-source-file-mapping" - }, - { - "name": "serializer", - "kind": "PropertySignature", - "line": 177, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheOperationOptions", - "kind": "TypeAliasDeclaration", - "line": 178, - "status": "inherits-source-file-mapping" - }, - { - "name": "serializer", - "kind": "PropertySignature", - "line": 179, - "status": "inherits-source-file-mapping" - }, - { - "name": "CachedOptions", - "kind": "TypeAliasDeclaration", - "line": 188, - "status": "inherits-source-file-mapping" - }, - { - "name": "GetOrLoadOptionsBase", - "kind": "InterfaceDeclaration", - "line": 190, - "status": "inherits-source-file-mapping" - }, - { - "name": "GetOrLoadOptionsBase.key", - "kind": "PropertySignature", - "line": 197, - "status": "inherits-source-file-mapping" - }, - { - "name": "GetOrLoadOptions", - "kind": "TypeAliasDeclaration", - "line": 206, - "status": "inherits-source-file-mapping" - }, - { - "name": "CachedFn", - "kind": "TypeAliasDeclaration", - "line": 212, - "status": "inherits-source-file-mapping" - }, - { - "name": "ProcessCoalescingState", - "kind": "InterfaceDeclaration", - "line": 215, - "status": "inherits-source-file-mapping" - }, - { - "name": "ProcessCoalescingState.activeLeaders", - "kind": "PropertySignature", - "line": 216, - "status": "inherits-source-file-mapping" - }, - { - "name": "ProcessCoalescingState.activeFollowers", - "kind": "PropertySignature", - "line": 217, - "status": "inherits-source-file-mapping" - }, - { - "name": "ProcessCoalescingState.oldestLeaderAgeMs", - "kind": "PropertySignature", - "line": 218, - "status": "inherits-source-file-mapping" - }, - { - "name": "CoalescingState", - "kind": "InterfaceDeclaration", - "line": 222, - "status": "inherits-source-file-mapping" - }, - { - "name": "CoalescingState.process", - "kind": "PropertySignature", - "line": 223, - "status": "inherits-source-file-mapping" - }, - { - "name": "ProcessFlight", - "kind": "InterfaceDeclaration", - "line": 226, - "status": "inherits-source-file-mapping" - }, - { - "name": "ProcessFlight.promise", - "kind": "PropertySignature", - "line": 227, - "status": "inherits-source-file-mapping" - }, - { - "name": "ProcessFlight.startedAtMs", - "kind": "PropertySignature", - "line": 228, - "status": "inherits-source-file-mapping" - }, - { - "name": "ProcessFlight.followers", - "kind": "PropertySignature", - "line": 229, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowFlight", - "kind": "InterfaceDeclaration", - "line": 232, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowFlight.cachedFrame", - "kind": "PropertySignature", - "line": 233, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowFlight.abandoned", - "kind": "PropertySignature", - "line": 234, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowFlight.startedAtMs", - "kind": "PropertySignature", - "line": 235, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowValidationPlan", - "kind": "InterfaceDeclaration", - "line": 238, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowValidationPlan.source", - "kind": "PropertySignature", - "line": 239, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowValidationPlan.comparator", - "kind": "PropertySignature", - "line": 240, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowValidationPlan.timeoutMs", - "kind": "PropertySignature", - "line": 241, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowValidationPlan.didCallerFallbackTimeout", - "kind": "PropertySignature", - "line": 242, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowMismatchDetails", - "kind": "InterfaceDeclaration", - "line": 245, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowMismatchDetails.cachedValue", - "kind": "PropertySignature", - "line": 246, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowMismatchDetails.sourceValue", - "kind": "PropertySignature", - "line": 247, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowValidationStart", - "kind": "TypeAliasDeclaration", - "line": 250, - "status": "inherits-source-file-mapping" - }, - { - "name": "kind", - "kind": "PropertySignature", - "line": 251, - "status": "inherits-source-file-mapping" - }, - { - "name": "frame", - "kind": "PropertySignature", - "line": 251, - "status": "inherits-source-file-mapping" - }, - { - "name": "kind", - "kind": "PropertySignature", - "line": 253, - "status": "inherits-source-file-mapping" - }, - { - "name": "source", - "kind": "PropertySignature", - "line": 255, - "status": "inherits-source-file-mapping" - }, - { - "name": "remoteConfig", - "kind": "PropertySignature", - "line": 257, - "status": "inherits-source-file-mapping" - }, - { - "name": "startedAtMs", - "kind": "PropertySignature", - "line": 259, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowValidationRunStart", - "kind": "TypeAliasDeclaration", - "line": 262, - "status": "inherits-source-file-mapping" - }, - { - "name": "kind", - "kind": "PropertySignature", - "line": 263, - "status": "inherits-source-file-mapping" - }, - { - "name": "kind", - "kind": "PropertySignature", - "line": 265, - "status": "inherits-source-file-mapping" - }, - { - "name": "source", - "kind": "PropertySignature", - "line": 266, - "status": "inherits-source-file-mapping" - }, - { - "name": "remoteConfig", - "kind": "PropertySignature", - "line": 267, - "status": "inherits-source-file-mapping" - }, - { - "name": "DEFAULT_LOCAL_MAX_SIZE", - "kind": "VariableDeclaration", - "line": 270, - "status": "inherits-source-file-mapping" - }, - { - "name": "DEFAULT_FALLBACK_TIMEOUT_MS", - "kind": "VariableDeclaration", - "line": 271, - "status": "inherits-source-file-mapping" - }, - { - "name": "DEFAULT_SHADOW_MAX_IN_FLIGHT", - "kind": "VariableDeclaration", - "line": 272, - "status": "inherits-source-file-mapping" - }, - { - "name": "defaultConfigProvider", - "kind": "VariableDeclaration", - "line": 273, - "status": "inherits-source-file-mapping" - }, - { - "name": "defaultLogger", - "kind": "VariableDeclaration", - "line": 274, - "status": "inherits-source-file-mapping" - }, - { - "name": "defaultStaleRecoveryPredicate", - "kind": "VariableDeclaration", - "line": 275, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache", - "kind": "ClassDeclaration", - "line": 278, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.context", - "kind": "PropertyDeclaration", - "line": 279, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.localCache", - "kind": "PropertyDeclaration", - "line": 280, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.useCases", - "kind": "PropertyDeclaration", - "line": 281, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.configProvider", - "kind": "PropertyDeclaration", - "line": 282, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.namespace", - "kind": "PropertyDeclaration", - "line": 283, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.logger", - "kind": "PropertyDeclaration", - "line": 284, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.redisCache", - "kind": "PropertyDeclaration", - "line": 285, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.metrics", - "kind": "PropertyDeclaration", - "line": 286, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.staleRecoveryPredicate", - "kind": "PropertyDeclaration", - "line": 287, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.shadowMaxInFlight", - "kind": "PropertyDeclaration", - "line": 288, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.shadowFlights", - "kind": "PropertyDeclaration", - "line": 289, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.processFlights", - "kind": "PropertyDeclaration", - "line": 290, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.activeProcessFollowers", - "kind": "PropertyDeclaration", - "line": 291, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.constructor", - "kind": "Constructor", - "line": 293, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.enable", - "kind": "MethodDeclaration", - "line": 337, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.disable", - "kind": "MethodDeclaration", - "line": 341, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.withEnabled", - "kind": "MethodDeclaration", - "line": 345, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.withDisabled", - "kind": "MethodDeclaration", - "line": 349, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.isEnabled", - "kind": "MethodDeclaration", - "line": 353, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.getCoalescingState", - "kind": "MethodDeclaration", - "line": 358, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.cached", - "kind": "MethodDeclaration", - "line": 374, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.getOrLoad", - "kind": "MethodDeclaration", - "line": 404, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.executeCacheOperation", - "kind": "MethodDeclaration", - "line": 425, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.invalidateRemote", - "kind": "MethodDeclaration", - "line": 568, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.getThroughRequestLocal", - "kind": "MethodDeclaration", - "line": 592, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.getThroughSharedLayers", - "kind": "MethodDeclaration", - "line": 627, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.getThroughActiveLocal", - "kind": "MethodDeclaration", - "line": 696, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.finishLocalOnly", - "kind": "MethodDeclaration", - "line": 758, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.finishRampedDownRemote", - "kind": "MethodDeclaration", - "line": 766, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.finishRedisChain", - "kind": "MethodDeclaration", - "line": 796, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.shouldAttemptStaleRecovery", - "kind": "MethodDeclaration", - "line": 890, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.scheduleShadowValidation", - "kind": "MethodDeclaration", - "line": 912, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.resolveShadowLogging", - "kind": "MethodDeclaration", - "line": 981, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.deferShadowValidation", - "kind": "MethodDeclaration", - "line": 996, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.runShadowValidation", - "kind": "MethodDeclaration", - "line": 1018, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.recordShadowValidation", - "kind": "MethodDeclaration", - "line": 1242, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.resolveLocalLayerConfig", - "kind": "MethodDeclaration", - "line": 1290, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.readLocalWithResolvedConfig", - "kind": "MethodDeclaration", - "line": 1309, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.resolveRemoteLayerConfig", - "kind": "MethodDeclaration", - "line": 1327, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.readRemoteWithResolvedConfig", - "kind": "MethodDeclaration", - "line": 1349, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.putLocalFailOpen", - "kind": "MethodDeclaration", - "line": 1363, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.ttlSec", - "kind": "PropertySignature", - "line": 1363, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.callFallback", - "kind": "MethodDeclaration", - "line": 1372, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.recordError", - "kind": "MethodDeclaration", - "line": 1384, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.recordInvalidLeaf", - "kind": "MethodDeclaration", - "line": 1394, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.registerUseCase", - "kind": "MethodDeclaration", - "line": 1400, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.assertUseCaseIsNotReserved", - "kind": "MethodDeclaration", - "line": 1408, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.buildKey", - "kind": "MethodDeclaration", - "line": 1414, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.singleFlightRequestLocal", - "kind": "MethodDeclaration", - "line": 1432, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCache.singleFlightProcess", - "kind": "MethodDeclaration", - "line": 1459, - "status": "inherits-source-file-mapping" - }, - { - "name": "elapsedSeconds", - "kind": "FunctionDeclaration", - "line": 1503, - "status": "inherits-source-file-mapping" - }, - { - "name": "yieldUnreferencedImmediate", - "kind": "FunctionDeclaration", - "line": 1507, - "status": "inherits-source-file-mapping" - }, - { - "name": "snapshotDefaultConfig", - "kind": "FunctionDeclaration", - "line": 1513, - "status": "inherits-source-file-mapping" - }, - { - "name": "assertDefaultLayerMap", - "kind": "FunctionDeclaration", - "line": 1622, - "status": "inherits-source-file-mapping" - }, - { - "name": "assertDefaultShadowConfig", - "kind": "FunctionDeclaration", - "line": 1628, - "status": "inherits-source-file-mapping" - }, - { - "name": "resolveFallbackTimeoutMs", - "kind": "FunctionDeclaration", - "line": 1637, - "status": "inherits-source-file-mapping" - }, - { - "name": "withFallbackTimeout", - "kind": "FunctionDeclaration", - "line": 1651, - "status": "inherits-source-file-mapping" - }, - { - "name": "safeLogger", - "kind": "FunctionDeclaration", - "line": 1671, - "status": "inherits-source-file-mapping" - }, - { - "name": "safeMetrics", - "kind": "FunctionDeclaration", - "line": 1679, - "status": "inherits-source-file-mapping" - }, - { - "name": "callObserver", - "kind": "FunctionDeclaration", - "line": 1715, - "status": "inherits-source-file-mapping" - }, - { - "name": "resolveShadowComparator", - "kind": "FunctionDeclaration", - "line": 1728, - "status": "inherits-source-file-mapping" - }, - { - "name": "resolveStaleRecoveryPredicate", - "kind": "FunctionDeclaration", - "line": 1734, - "status": "inherits-source-file-mapping" - }, - { - "name": "shadowValueAgeSeconds", - "kind": "FunctionDeclaration", - "line": 1753, - "status": "inherits-source-file-mapping" - }, - { - "name": "redisPayloadsEqual", - "kind": "FunctionDeclaration", - "line": 1761, - "status": "inherits-source-file-mapping" - }, - { - "name": "settleUnexpectedThenable", - "kind": "FunctionDeclaration", - "line": 1774, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "The public orchestration is divided into Cache lifecycle, Cached registration, GetOrLoad execution, source/read deadlines and detached shadow work. GetOrLoad snapshots inputs before awaiting policy; singleFlight owns leaders/followers. Go contexts, generics, returned errors and recovered callback panics replace TypeScript overloads, promises and exceptions; diagnostic logging and inspection are explicit bindings.", @@ -14337,92 +3473,6 @@ "go/api.go", "go/redis_adapter.go" ], - "declarations": [ - { - "name": "DialCacheError", - "kind": "ClassDeclaration", - "line": 1, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheError.constructor", - "kind": "Constructor", - "line": 2, - "status": "inherits-source-file-mapping" - }, - { - "name": "FallbackTimeoutError", - "kind": "ClassDeclaration", - "line": 8, - "status": "inherits-source-file-mapping" - }, - { - "name": "FallbackTimeoutError.timeoutMs", - "kind": "PropertyDeclaration", - "line": 9, - "status": "inherits-source-file-mapping" - }, - { - "name": "FallbackTimeoutError.useCase", - "kind": "PropertyDeclaration", - "line": 10, - "status": "inherits-source-file-mapping" - }, - { - "name": "FallbackTimeoutError.constructor", - "kind": "Constructor", - "line": 12, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisReadTimeoutError", - "kind": "ClassDeclaration", - "line": 19, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisReadTimeoutError.timeoutMs", - "kind": "PropertyDeclaration", - "line": 20, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisReadTimeoutError.useCase", - "kind": "PropertyDeclaration", - "line": 21, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisReadTimeoutError.constructor", - "kind": "Constructor", - "line": 23, - "status": "inherits-source-file-mapping" - }, - { - "name": "UseCaseIsAlreadyRegisteredError", - "kind": "ClassDeclaration", - "line": 30, - "status": "inherits-source-file-mapping" - }, - { - "name": "UseCaseIsAlreadyRegisteredError.constructor", - "kind": "Constructor", - "line": 31, - "status": "inherits-source-file-mapping" - }, - { - "name": "UseCaseNameIsReservedError", - "kind": "ClassDeclaration", - "line": 36, - "status": "inherits-source-file-mapping" - }, - { - "name": "UseCaseNameIsReservedError.constructor", - "kind": "Constructor", - "line": 37, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Public failure categories use concrete Go errors plus errors.Is/errors.As instead of an inheritance hierarchy. Deadline errors retain timeout values; adapter protocol/payload errors remain distinct, source errors keep identity, and callback panics become CallbackPanicError.", @@ -14463,7 +3513,6 @@ "go/protocol.go", "go/codec.go" ], - "declarations": [], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "The TypeScript root barrel becomes exported declarations in one Go module/package. Cache construction, typed wrapper registration, policy, key and codec helpers are available directly; JavaScript import aliases and package subpath export validation do not have separate Go implementations.", @@ -14526,146 +3575,6 @@ "go/protocol.go", "go/engine.go" ], - "declarations": [ - { - "name": "CacheGetResult", - "kind": "TypeAliasDeclaration", - "line": 5, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 6, - "status": "inherits-source-file-mapping" - }, - { - "name": "value", - "kind": "PropertySignature", - "line": 6, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 7, - "status": "inherits-source-file-mapping" - }, - { - "name": "config", - "kind": "PropertySignature", - "line": 7, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 9, - "status": "inherits-source-file-mapping" - }, - { - "name": "reason", - "kind": "PropertySignature", - "line": 10, - "status": "inherits-source-file-mapping" - }, - { - "name": "skipCacheWrite", - "kind": "PropertySignature", - "line": 11, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCacheMissReason", - "kind": "TypeAliasDeclaration", - "line": 15, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCacheGetResult", - "kind": "TypeAliasDeclaration", - "line": 17, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 18, - "status": "inherits-source-file-mapping" - }, - { - "name": "value", - "kind": "PropertySignature", - "line": 18, - "status": "inherits-source-file-mapping" - }, - { - "name": "frame", - "kind": "PropertySignature", - "line": 18, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 21, - "status": "inherits-source-file-mapping" - }, - { - "name": "frame", - "kind": "PropertySignature", - "line": 22, - "status": "inherits-source-file-mapping" - }, - { - "name": "config", - "kind": "PropertySignature", - "line": 23, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 26, - "status": "inherits-source-file-mapping" - }, - { - "name": "config", - "kind": "PropertySignature", - "line": 27, - "status": "inherits-source-file-mapping" - }, - { - "name": "reason", - "kind": "PropertySignature", - "line": 28, - "status": "inherits-source-file-mapping" - }, - { - "name": "observedWatermarkMs", - "kind": "PropertySignature", - "line": 30, - "status": "inherits-source-file-mapping" - }, - { - "name": "RemoteCacheGetResult", - "kind": "TypeAliasDeclaration", - "line": 33, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 35, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 36, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Tagged cache results map to ReadResult and the internal remote/local result structures. NormalizeReadResult is the trust boundary for semantic adapters: malformed frames become misses, valid frames ignore stray miss metadata, and reason/fence validation remains independent.", @@ -14700,152 +3609,6 @@ "candidateGoFiles": [ "go/codec.go" ], - "declarations": [ - { - "name": "MARKER_ESCAPED_RAW", - "kind": "VariableDeclaration", - "line": 23, - "status": "inherits-source-file-mapping" - }, - { - "name": "MARKER_ZSTD_UTF8", - "kind": "VariableDeclaration", - "line": 24, - "status": "inherits-source-file-mapping" - }, - { - "name": "MARKER_ZSTD_BINARY", - "kind": "VariableDeclaration", - "line": 25, - "status": "inherits-source-file-mapping" - }, - { - "name": "DEFAULT_COMPRESSION_THRESHOLD_BYTES", - "kind": "VariableDeclaration", - "line": 27, - "status": "inherits-source-file-mapping" - }, - { - "name": "DEFAULT_ZSTD_LEVEL", - "kind": "VariableDeclaration", - "line": 28, - "status": "inherits-source-file-mapping" - }, - { - "name": "MAX_DECOMPRESSED_BYTES", - "kind": "VariableDeclaration", - "line": 37, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressionConfig", - "kind": "InterfaceDeclaration", - "line": 40, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressionConfig.thresholdBytes", - "kind": "PropertySignature", - "line": 45, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressionConfig.level", - "kind": "PropertySignature", - "line": 47, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressionWriteOutcome", - "kind": "TypeAliasDeclaration", - "line": 50, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressionReadOutcome", - "kind": "TypeAliasDeclaration", - "line": 51, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressPayloadResult", - "kind": "InterfaceDeclaration", - "line": 53, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressPayloadResult.payload", - "kind": "PropertySignature", - "line": 54, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressPayloadResult.outcome", - "kind": "PropertySignature", - "line": 55, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressPayloadResult.originalBytes", - "kind": "PropertySignature", - "line": 56, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressPayloadResult.storedBytes", - "kind": "PropertySignature", - "line": 57, - "status": "inherits-source-file-mapping" - }, - { - "name": "DecompressPayloadResult", - "kind": "InterfaceDeclaration", - "line": 60, - "status": "inherits-source-file-mapping" - }, - { - "name": "DecompressPayloadResult.payload", - "kind": "PropertySignature", - "line": 61, - "status": "inherits-source-file-mapping" - }, - { - "name": "DecompressPayloadResult.outcome", - "kind": "PropertySignature", - "line": 62, - "status": "inherits-source-file-mapping" - }, - { - "name": "resolveCompressionConfig", - "kind": "FunctionDeclaration", - "line": 70, - "status": "inherits-source-file-mapping" - }, - { - "name": "escapeRawPayload", - "kind": "FunctionDeclaration", - "line": 107, - "status": "inherits-source-file-mapping" - }, - { - "name": "rawResult", - "kind": "FunctionDeclaration", - "line": 121, - "status": "inherits-source-file-mapping" - }, - { - "name": "compressPayload", - "kind": "FunctionDeclaration", - "line": 137, - "status": "inherits-source-file-mapping" - }, - { - "name": "decompressPayload", - "kind": "FunctionDeclaration", - "line": 181, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "The portable marker/envelope contract is implemented with a Go zstd library and bounded decoding. Prefix collisions are escaped, failed compression/decompression preserves documented fallback behavior, and compressed output is compared through decoding rather than requiring identical library bitstreams.", @@ -14876,62 +3639,6 @@ "go/deadline.go", "go/api.go" ], - "declarations": [ - { - "name": "MAX_TIMER_DELAY_MS", - "kind": "VariableDeclaration", - "line": 5, - "status": "inherits-source-file-mapping" - }, - { - "name": "MonotonicDeadlineOptions", - "kind": "InterfaceDeclaration", - "line": 7, - "status": "inherits-source-file-mapping" - }, - { - "name": "MonotonicDeadlineOptions.operation", - "kind": "PropertySignature", - "line": 8, - "status": "inherits-source-file-mapping" - }, - { - "name": "MonotonicDeadlineOptions.timeoutMs", - "kind": "PropertySignature", - "line": 9, - "status": "inherits-source-file-mapping" - }, - { - "name": "MonotonicDeadlineOptions.timeoutError", - "kind": "PropertySignature", - "line": 10, - "status": "inherits-source-file-mapping" - }, - { - "name": "MonotonicDeadlineOptions.onTimeout", - "kind": "PropertySignature", - "line": 11, - "status": "inherits-source-file-mapping" - }, - { - "name": "MonotonicDeadlineOptions.unrefTimer", - "kind": "PropertySignature", - "line": 16, - "status": "inherits-source-file-mapping" - }, - { - "name": "withMonotonicDeadline", - "kind": "FunctionDeclaration", - "line": 24, - "status": "inherits-source-file-mapping" - }, - { - "name": "assertValidDeadlineMs", - "kind": "FunctionDeclaration", - "line": 109, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Go pending results use channels and optional TimerClock hooks. awaitDeadline subtracts precise monotonic instants before comparing its full duration budget and applies the exclusive settlement boundary even if timer delivery is delayed. Early timer delivery is rechecked against elapsed time. Legacy Clock implementations retain integer-millisecond resolution; optional PreciseClock and the default clock preserve fractional milliseconds. Abandonment stops publication but does not pretend that a goroutine or dispatched command was cancelled.", @@ -14971,50 +3678,6 @@ "go/protocol.go", "go/policy.go" ], - "declarations": [ - { - "name": "MAX_SUPPORTED_DURATION_MS", - "kind": "VariableDeclaration", - "line": 2, - "status": "inherits-source-file-mapping" - }, - { - "name": "MAX_CACHE_TTL_SEC", - "kind": "VariableDeclaration", - "line": 3, - "status": "inherits-source-file-mapping" - }, - { - "name": "MAX_TRACKED_REDIS_VALUE_TTL_MS", - "kind": "VariableDeclaration", - "line": 5, - "status": "inherits-source-file-mapping" - }, - { - "name": "isSupportedCacheTtlSec", - "kind": "FunctionDeclaration", - "line": 7, - "status": "inherits-source-file-mapping" - }, - { - "name": "cacheTtlSecToMs", - "kind": "FunctionDeclaration", - "line": 16, - "status": "inherits-source-file-mapping" - }, - { - "name": "ceilSupportedCacheTtlMs", - "kind": "FunctionDeclaration", - "line": 31, - "status": "inherits-source-file-mapping" - }, - { - "name": "assertSupportedFutureBufferMs", - "kind": "FunctionDeclaration", - "line": 41, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Integer-safe timestamp and bounded cache TTL domains map to explicit Go validators. Typed policy TTLs use milliseconds representing whole seconds; raw adapter TTL input rounds upward. Deadlines remain positive integer milliseconds within the common timer range.", @@ -15053,62 +3716,6 @@ "go/engine.go", "go/api.go" ], - "declarations": [ - { - "name": "LocalEntry", - "kind": "InterfaceDeclaration", - "line": 15, - "status": "inherits-source-file-mapping" - }, - { - "name": "LocalEntry.value", - "kind": "PropertySignature", - "line": 16, - "status": "inherits-source-file-mapping" - }, - { - "name": "LocalCache", - "kind": "ClassDeclaration", - "line": 19, - "status": "inherits-source-file-mapping" - }, - { - "name": "LocalCache.cache", - "kind": "PropertyDeclaration", - "line": 20, - "status": "inherits-source-file-mapping" - }, - { - "name": "LocalCache.constructor", - "kind": "Constructor", - "line": 22, - "status": "inherits-source-file-mapping" - }, - { - "name": "LocalCache.getWithResolvedConfig", - "kind": "MethodDeclaration", - "line": 37, - "status": "inherits-source-file-mapping" - }, - { - "name": "LocalCache.resolveLayerConfig", - "kind": "MethodDeclaration", - "line": 47, - "status": "inherits-source-file-mapping" - }, - { - "name": "LocalCache.put", - "kind": "MethodDeclaration", - "line": 58, - "status": "inherits-source-file-mapping" - }, - { - "name": "LocalCache.ttlSec", - "kind": "PropertySignature", - "line": 58, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "The local cache uses a mutex-protected map and explicit LRU order with captured insertion and TTL as whole monotonic milliseconds, matching TypeScript clock quantization. Expiration compares their integer difference without converting a large clock origin to time.Duration. Reads promote recency without renewing TTL, zero capacity still permits coalescing, and process-local values are outside synchronous remote invalidation. Default system clocks use a common process-relative millisecond grid while keeping a nearby nonnegative elapsed origin; custom clocks retain their supplied origin.", @@ -15153,26 +3760,6 @@ "go/protocol.go", "go/policy.go" ], - "declarations": [ - { - "name": "deterministicRampSample", - "kind": "FunctionDeclaration", - "line": 10, - "status": "inherits-source-file-mapping" - }, - { - "name": "deterministicShadowRampSample", - "kind": "FunctionDeclaration", - "line": 20, - "status": "inherits-source-file-mapping" - }, - { - "name": "stablePercent", - "kind": "FunctionDeclaration", - "line": 24, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Cohort implements the same UTF-16 FNV hash, unsigned conversion and denominator. ResolvePolicy supplies the prescribed local, remote and remote_shadow discriminators; rollout membership is compared to the same strict probability boundary.", @@ -15204,356 +3791,6 @@ "go/codec.go", "go/redis_adapter.go" ], - "declarations": [ - { - "name": "RedisConfig", - "kind": "InterfaceDeclaration", - "line": 38, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisConfig.client", - "kind": "PropertySignature", - "line": 43, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisConfig.readTimeoutMs", - "kind": "PropertySignature", - "line": 48, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisConfig.serializer", - "kind": "PropertySignature", - "line": 49, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisConfig.compression", - "kind": "PropertySignature", - "line": 56, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCacheOptions", - "kind": "InterfaceDeclaration", - "line": 59, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCacheOptions.redis", - "kind": "PropertySignature", - "line": 60, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCacheOptions.metrics", - "kind": "PropertySignature", - "line": 61, - "status": "inherits-source-file-mapping" - }, - { - "name": "StartedRedisRead", - "kind": "InterfaceDeclaration", - "line": 64, - "status": "inherits-source-file-mapping" - }, - { - "name": "StartedRedisRead.result", - "kind": "PropertySignature", - "line": 66, - "status": "inherits-source-file-mapping" - }, - { - "name": "StartedRedisRead.settled", - "kind": "PropertySignature", - "line": 68, - "status": "inherits-source-file-mapping" - }, - { - "name": "FutureFramePolicy", - "kind": "TypeAliasDeclaration", - "line": 71, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisStaleRecoveryResult", - "kind": "TypeAliasDeclaration", - "line": 73, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 74, - "status": "inherits-source-file-mapping" - }, - { - "name": "value", - "kind": "PropertySignature", - "line": 74, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 75, - "status": "inherits-source-file-mapping" - }, - { - "name": "FrameAgeResult", - "kind": "TypeAliasDeclaration", - "line": 77, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 78, - "status": "inherits-source-file-mapping" - }, - { - "name": "ageMs", - "kind": "PropertySignature", - "line": 78, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 79, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 80, - "status": "inherits-source-file-mapping" - }, - { - "name": "defaultSerializer", - "kind": "VariableDeclaration", - "line": 82, - "status": "inherits-source-file-mapping" - }, - { - "name": "REDIS_FRAME_KEY_SUFFIX", - "kind": "VariableDeclaration", - "line": 83, - "status": "inherits-source-file-mapping" - }, - { - "name": "DEFAULT_REMOTE_READ_TIMEOUT_MS", - "kind": "VariableDeclaration", - "line": 84, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache", - "kind": "ClassDeclaration", - "line": 86, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.defaultSerializer", - "kind": "PropertyDeclaration", - "line": 87, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.compression", - "kind": "PropertyDeclaration", - "line": 88, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.client", - "kind": "PropertyDeclaration", - "line": 89, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.metrics", - "kind": "PropertyDeclaration", - "line": 90, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.readTimeoutMs", - "kind": "PropertyDeclaration", - "line": 91, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.constructor", - "kind": "Constructor", - "line": 93, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.getWithResolvedConfig", - "kind": "MethodDeclaration", - "line": 121, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.recoverRetainedCandidate", - "kind": "MethodDeclaration", - "line": 198, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.deserializeForShadow", - "kind": "MethodDeclaration", - "line": 236, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.startPayloadReadForShadow", - "kind": "MethodDeclaration", - "line": 246, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.put", - "kind": "MethodDeclaration", - "line": 262, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.putForShadow", - "kind": "MethodDeclaration", - "line": 279, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.putWithLayer", - "kind": "MethodDeclaration", - "line": 296, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.invalidate", - "kind": "MethodDeclaration", - "line": 380, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.redisKey", - "kind": "MethodDeclaration", - "line": 387, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.redisWatermarkKey", - "kind": "MethodDeclaration", - "line": 391, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.redisWatermarkKeyFromKey", - "kind": "MethodDeclaration", - "line": 395, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.startPayloadRead", - "kind": "MethodDeclaration", - "line": 399, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.startRawPayloadRead", - "kind": "MethodDeclaration", - "line": 415, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.startMeasuredPayloadRead", - "kind": "MethodDeclaration", - "line": 446, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.validateFrameAge", - "kind": "MethodDeclaration", - "line": 485, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.validateReadResult", - "kind": "MethodDeclaration", - "line": 514, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.frameAge", - "kind": "MethodDeclaration", - "line": 535, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.deserializePayload", - "kind": "MethodDeclaration", - "line": 558, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.serializerFor", - "kind": "MethodDeclaration", - "line": 586, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.recordMetric", - "kind": "MethodDeclaration", - "line": 590, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.recordError", - "kind": "MethodDeclaration", - "line": 601, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.sampleWriteTimestamp", - "kind": "MethodDeclaration", - "line": 605, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.recordMiss", - "kind": "MethodDeclaration", - "line": 616, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCache.recordStaleRecovery", - "kind": "MethodDeclaration", - "line": 620, - "status": "inherits-source-file-mapping" - }, - { - "name": "retentionTtlSecFor", - "kind": "FunctionDeclaration", - "line": 641, - "status": "inherits-source-file-mapping" - }, - { - "name": "payloadSize", - "kind": "FunctionDeclaration", - "line": 645, - "status": "inherits-source-file-mapping" - }, - { - "name": "elapsedSeconds", - "kind": "FunctionDeclaration", - "line": 649, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Serving, retained stale recovery, compression, timestamp validation and local publication are in execution methods; detached shadow validation is separate. A raw semantic read is normalized before serving, elapsed deadlines retain acquired snapshots, and both tracked refill timestamp checks precede a complete frame write.", @@ -15608,26 +3845,6 @@ "go/cache.go", "go/redis_adapter.go" ], - "declarations": [ - { - "name": "INVALIDATE_CACHE_SCRIPT_SHA1", - "kind": "VariableDeclaration", - "line": 7, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisInvalidationScriptArguments", - "kind": "TypeAliasDeclaration", - "line": 11, - "status": "inherits-source-file-mapping" - }, - { - "name": "buildRedisInvalidationScriptArguments", - "kind": "FunctionDeclaration", - "line": 17, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Maintenance computes one writer timestamp and forwards it with the future buffer to the adapter. The adapter validates the supported domain and dispatches the Go-owned Lua script. Explicit failures remain surfaced and observed instead of adopting fail-open source behavior.", @@ -15661,122 +3878,6 @@ "candidateGoFiles": [ "go/protocol.go" ], - "declarations": [ - { - "name": "REDIS_FRAME_VERSION", - "kind": "VariableDeclaration", - "line": 10, - "status": "inherits-source-file-mapping" - }, - { - "name": "REDIS_ENCODING_UTF8", - "kind": "VariableDeclaration", - "line": 11, - "status": "inherits-source-file-mapping" - }, - { - "name": "REDIS_ENCODING_BINARY", - "kind": "VariableDeclaration", - "line": 12, - "status": "inherits-source-file-mapping" - }, - { - "name": "REDIS_FRAME_TIMESTAMP_OFFSET", - "kind": "VariableDeclaration", - "line": 13, - "status": "inherits-source-file-mapping" - }, - { - "name": "REDIS_FRAME_TIMESTAMP_BYTES", - "kind": "VariableDeclaration", - "line": 14, - "status": "inherits-source-file-mapping" - }, - { - "name": "REDIS_FRAME_HEADER_BYTES", - "kind": "VariableDeclaration", - "line": 16, - "status": "inherits-source-file-mapping" - }, - { - "name": "REDIS_FRAME_MIN_BYTES", - "kind": "VariableDeclaration", - "line": 17, - "status": "inherits-source-file-mapping" - }, - { - "name": "validateRedisBulkStringReply", - "kind": "FunctionDeclaration", - "line": 19, - "status": "inherits-source-file-mapping" - }, - { - "name": "isSupportedRedisFrame", - "kind": "FunctionDeclaration", - "line": 28, - "status": "inherits-source-file-mapping" - }, - { - "name": "parseRedisWatermark", - "kind": "FunctionDeclaration", - "line": 34, - "status": "inherits-source-file-mapping" - }, - { - "name": "decodeRedisPayload", - "kind": "FunctionDeclaration", - "line": 43, - "status": "inherits-source-file-mapping" - }, - { - "name": "encodeRedisFrame", - "kind": "FunctionDeclaration", - "line": 62, - "status": "inherits-source-file-mapping" - }, - { - "name": "assertValidRedisTimestampMs", - "kind": "FunctionDeclaration", - "line": 81, - "status": "inherits-source-file-mapping" - }, - { - "name": "isValidRedisTimestampMs", - "kind": "FunctionDeclaration", - "line": 88, - "status": "inherits-source-file-mapping" - }, - { - "name": "decodeRedisReadResult", - "kind": "FunctionDeclaration", - "line": 97, - "status": "inherits-source-file-mapping" - }, - { - "name": "decodeTrackedRedisReadResult", - "kind": "FunctionDeclaration", - "line": 119, - "status": "inherits-source-file-mapping" - }, - { - "name": "decodeTrackedFrame", - "kind": "FunctionDeclaration", - "line": 151, - "status": "inherits-source-file-mapping" - }, - { - "name": "decodedRedisFrame", - "kind": "FunctionDeclaration", - "line": 167, - "status": "inherits-source-file-mapping" - }, - { - "name": "readFrameCreatedAtMs", - "kind": "FunctionDeclaration", - "line": 174, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Frame and watermark decoding preserve protocol precedence, the strict watermark fence and version-1 timestamp domain. Text bytes use maximal-subpart UTF-8 replacement; binary bytes remain unchanged. Returned payload bytes are owned independently of transient adapter buffers.", @@ -15804,20 +3905,6 @@ "candidateGoFiles": [ "go/redis_adapter.go" ], - "declarations": [ - { - "name": "validateRedisSetReply", - "kind": "FunctionDeclaration", - "line": 3, - "status": "inherits-source-file-mapping" - }, - { - "name": "validateRedisScriptInvalidationReply", - "kind": "FunctionDeclaration", - "line": 14, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "The native go-redis adapter validates exact semantic reply classes: SET must return the string OK and successful invalidation the integer one. Unexpected accepted replies surface protocol errors and do not trigger a duplicate mutation.", @@ -15844,32 +3931,6 @@ "candidateGoFiles": [ "go/redis_adapter.go" ], - "declarations": [ - { - "name": "WATERMARK_TTL_MARGIN_MS", - "kind": "VariableDeclaration", - "line": 6, - "status": "inherits-source-file-mapping" - }, - { - "name": "MIN_WATERMARK_TTL_MS", - "kind": "VariableDeclaration", - "line": 16, - "status": "inherits-source-file-mapping" - }, - { - "name": "PARSE_SAFE_INTEGER_LUA", - "kind": "VariableDeclaration", - "line": 18, - "status": "inherits-source-file-mapping" - }, - { - "name": "INVALIDATE_CACHE_SCRIPT", - "kind": "VariableDeclaration", - "line": 29, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "The production adapter embeds an independently maintained Lua invalidation script with the same decimal validation, type repair, monotonic watermark and retention rules. The exported constant and InvalidateDecimal permit the shared transition vectors to exercise the exact production script.", @@ -15895,194 +3956,6 @@ "candidateGoFiles": [ "go/policy.go" ], - "declarations": [ - { - "name": "ResolvedLayerConfig", - "kind": "InterfaceDeclaration", - "line": 13, - "status": "inherits-source-file-mapping" - }, - { - "name": "ResolvedLayerConfig.ttlSec", - "kind": "PropertySignature", - "line": 14, - "status": "inherits-source-file-mapping" - }, - { - "name": "ResolvedLayerConfig.ramp", - "kind": "PropertySignature", - "line": 15, - "status": "inherits-source-file-mapping" - }, - { - "name": "ResolvedRemoteLayerConfig", - "kind": "InterfaceDeclaration", - "line": 19, - "status": "inherits-source-file-mapping" - }, - { - "name": "ResolvedRemoteLayerConfig.staleOnErrorMaxAgeSec", - "kind": "PropertySignature", - "line": 20, - "status": "inherits-source-file-mapping" - }, - { - "name": "LayerConfigResolution", - "kind": "TypeAliasDeclaration", - "line": 23, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 24, - "status": "inherits-source-file-mapping" - }, - { - "name": "config", - "kind": "PropertySignature", - "line": 24, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 26, - "status": "inherits-source-file-mapping" - }, - { - "name": "reason", - "kind": "PropertySignature", - "line": 27, - "status": "inherits-source-file-mapping" - }, - { - "name": "config", - "kind": "PropertySignature", - "line": 29, - "status": "inherits-source-file-mapping" - }, - { - "name": "status", - "kind": "PropertySignature", - "line": 32, - "status": "inherits-source-file-mapping" - }, - { - "name": "reason", - "kind": "PropertySignature", - "line": 33, - "status": "inherits-source-file-mapping" - }, - { - "name": "RemoteLayerConfigResolution", - "kind": "TypeAliasDeclaration", - "line": 40, - "status": "inherits-source-file-mapping" - }, - { - "name": "staleOnErrorConfigError", - "kind": "PropertySignature", - "line": 41, - "status": "inherits-source-file-mapping" - }, - { - "name": "ResolveLayerConfigOptions", - "kind": "InterfaceDeclaration", - "line": 44, - "status": "inherits-source-file-mapping" - }, - { - "name": "ResolveLayerConfigOptions.config", - "kind": "PropertySignature", - "line": 45, - "status": "inherits-source-file-mapping" - }, - { - "name": "ResolveLayerConfigOptions.key", - "kind": "PropertySignature", - "line": 46, - "status": "inherits-source-file-mapping" - }, - { - "name": "ResolveLayerConfigOptions.layer", - "kind": "PropertySignature", - "line": 47, - "status": "inherits-source-file-mapping" - }, - { - "name": "ResolveRemoteLayerConfigOptions", - "kind": "InterfaceDeclaration", - "line": 50, - "status": "inherits-source-file-mapping" - }, - { - "name": "ResolveRemoteLayerConfigOptions.config", - "kind": "PropertySignature", - "line": 51, - "status": "inherits-source-file-mapping" - }, - { - "name": "ResolveRemoteLayerConfigOptions.key", - "kind": "PropertySignature", - "line": 52, - "status": "inherits-source-file-mapping" - }, - { - "name": "fetchKeyConfig", - "kind": "FunctionDeclaration", - "line": 55, - "status": "inherits-source-file-mapping" - }, - { - "name": "resolveLayerConfigResult", - "kind": "FunctionDeclaration", - "line": 67, - "status": "inherits-source-file-mapping" - }, - { - "name": "resolveRemoteLayerConfigResult", - "kind": "FunctionDeclaration", - "line": 107, - "status": "inherits-source-file-mapping" - }, - { - "name": "mergeKeyConfig", - "kind": "FunctionDeclaration", - "line": 149, - "status": "inherits-source-file-mapping" - }, - { - "name": "assertKeyConfig", - "kind": "FunctionDeclaration", - "line": 186, - "status": "inherits-source-file-mapping" - }, - { - "name": "mergeLayerConfig", - "kind": "FunctionDeclaration", - "line": 195, - "status": "inherits-source-file-mapping" - }, - { - "name": "assertLayerConfig", - "kind": "FunctionDeclaration", - "line": 214, - "status": "inherits-source-file-mapping" - }, - { - "name": "mergeShadowConfig", - "kind": "FunctionDeclaration", - "line": 220, - "status": "inherits-source-file-mapping" - }, - { - "name": "assertShadowConfig", - "kind": "FunctionDeclaration", - "line": 242, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Runtime policy parsing, leaf-wise inheritance, invocation snapshots and feature-local invalidation map to ParsePolicy, SnapshotPolicy and ResolvePolicy. Nil/Absent whole-provider results inherit while explicit null leaves remain malformed; constructor and wrapper validation occur through Go APIs.", @@ -16111,92 +3984,6 @@ "go/metrics.go", "go/codec.go" ], - "declarations": [ - { - "name": "SHADOW_LOG_KEY_MAX_BYTES", - "kind": "VariableDeclaration", - "line": 1, - "status": "inherits-source-file-mapping" - }, - { - "name": "SHADOW_LOG_VALUE_MAX_BYTES", - "kind": "VariableDeclaration", - "line": 2, - "status": "inherits-source-file-mapping" - }, - { - "name": "SHADOW_LOG_TRUNCATION_MARKER", - "kind": "VariableDeclaration", - "line": 3, - "status": "inherits-source-file-mapping" - }, - { - "name": "UTF8_ENCODER", - "kind": "VariableDeclaration", - "line": 5, - "status": "inherits-source-file-mapping" - }, - { - "name": "UTF8_DECODER", - "kind": "VariableDeclaration", - "line": 6, - "status": "inherits-source-file-mapping" - }, - { - "name": "TRUNCATION_MARKER_BYTES", - "kind": "VariableDeclaration", - "line": 7, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowMismatchLogDetails", - "kind": "InterfaceDeclaration", - "line": 9, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowMismatchLogDetails.cacheKey", - "kind": "PropertySignature", - "line": 10, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowMismatchLogDetails.cachedValueJson", - "kind": "PropertySignature", - "line": 11, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowMismatchLogDetails.sourceValueJson", - "kind": "PropertySignature", - "line": 12, - "status": "inherits-source-file-mapping" - }, - { - "name": "previewShadowLogKey", - "kind": "FunctionDeclaration", - "line": 15, - "status": "inherits-source-file-mapping" - }, - { - "name": "previewShadowLogJson", - "kind": "FunctionDeclaration", - "line": 19, - "status": "inherits-source-file-mapping" - }, - { - "name": "shadowMismatchLogDetails", - "kind": "FunctionDeclaration", - "line": 28, - "status": "inherits-source-file-mapping" - }, - { - "name": "clampUtf8", - "kind": "FunctionDeclaration", - "line": 40, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Mismatch previews use the Go JSON compatibility writer, byte-bounded UTF-8 output and the same truncation marker. Native type/prototype representation is a codec binding; failures return no preview and cannot suppress the shadow verdict or caller result.", @@ -16231,188 +4018,6 @@ "candidateGoFiles": [ "go/protocol.go" ], - "declarations": [ - { - "name": "DialCacheKeyInit", - "kind": "InterfaceDeclaration", - "line": 4, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyInit.keyType", - "kind": "PropertySignature", - "line": 5, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyInit.id", - "kind": "PropertySignature", - "line": 6, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyInit.useCase", - "kind": "PropertySignature", - "line": 7, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyInit.args", - "kind": "PropertySignature", - "line": 8, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyInit.namespace", - "kind": "PropertySignature", - "line": 9, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyInit.defaultConfig", - "kind": "PropertySignature", - "line": 10, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyInit.serializer", - "kind": "PropertySignature", - "line": 11, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKeyInit.trackForInvalidation", - "kind": "PropertySignature", - "line": 12, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKey", - "kind": "ClassDeclaration", - "line": 15, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKey.keyType", - "kind": "PropertyDeclaration", - "line": 16, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKey.id", - "kind": "PropertyDeclaration", - "line": 17, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKey.useCase", - "kind": "PropertyDeclaration", - "line": 18, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKey.args", - "kind": "PropertyDeclaration", - "line": 19, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKey.namespace", - "kind": "PropertyDeclaration", - "line": 20, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKey.prefix", - "kind": "PropertyDeclaration", - "line": 21, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKey.urn", - "kind": "PropertyDeclaration", - "line": 22, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKey.defaultConfig", - "kind": "PropertyDeclaration", - "line": 23, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKey.serializer", - "kind": "PropertyDeclaration", - "line": 24, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKey.trackForInvalidation", - "kind": "PropertyDeclaration", - "line": 25, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKey.constructor", - "kind": "Constructor", - "line": 27, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheKey.toString", - "kind": "MethodDeclaration", - "line": 48, - "status": "inherits-source-file-mapping" - }, - { - "name": "normalizeArgs", - "kind": "FunctionDeclaration", - "line": 53, - "status": "inherits-source-file-mapping" - }, - { - "name": "invalidationPrefix", - "kind": "FunctionDeclaration", - "line": 60, - "status": "inherits-source-file-mapping" - }, - { - "name": "assertValidNamespace", - "kind": "FunctionDeclaration", - "line": 67, - "status": "inherits-source-file-mapping" - }, - { - "name": "redisClusterHashTag", - "kind": "FunctionDeclaration", - "line": 73, - "status": "inherits-source-file-mapping" - }, - { - "name": "assertRedisHashTagComponent", - "kind": "FunctionDeclaration", - "line": 78, - "status": "inherits-source-file-mapping" - }, - { - "name": "joinUrnComponents", - "kind": "FunctionDeclaration", - "line": 84, - "status": "inherits-source-file-mapping" - }, - { - "name": "encodeComponent", - "kind": "FunctionDeclaration", - "line": 88, - "status": "inherits-source-file-mapping" - }, - { - "name": "compareCodePoints", - "kind": "FunctionDeclaration", - "line": 92, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Identity exposes normalized key components and constructs identical escaped logical, value and watermark keys. NormalizeArgs sorts UTF-16 property names and converts supported scalars with JavaScript number formatting; explicit Absent is omitted. Arbitrary JavaScript objects/prototypes are outside this scalar argument API.", @@ -16444,452 +4049,6 @@ "go/engine.go", "go/shadow.go" ], - "declarations": [ - { - "name": "NO_CACHE_LAYER", - "kind": "VariableDeclaration", - "line": 4, - "status": "inherits-source-file-mapping" - }, - { - "name": "REMOTE_SHADOW_CACHE_LAYER", - "kind": "VariableDeclaration", - "line": 5, - "status": "inherits-source-file-mapping" - }, - { - "name": "REQUEST_LOCAL_CACHE_LAYER", - "kind": "VariableDeclaration", - "line": 6, - "status": "inherits-source-file-mapping" - }, - { - "name": "NoCacheLayer", - "kind": "TypeAliasDeclaration", - "line": 8, - "status": "inherits-source-file-mapping" - }, - { - "name": "RemoteShadowCacheLayer", - "kind": "TypeAliasDeclaration", - "line": 9, - "status": "inherits-source-file-mapping" - }, - { - "name": "RequestLocalCacheLayer", - "kind": "TypeAliasDeclaration", - "line": 10, - "status": "inherits-source-file-mapping" - }, - { - "name": "MetricLayer", - "kind": "TypeAliasDeclaration", - "line": 11, - "status": "inherits-source-file-mapping" - }, - { - "name": "CoalescingScope", - "kind": "TypeAliasDeclaration", - "line": 12, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowValidationOutcome", - "kind": "TypeAliasDeclaration", - "line": 14, - "status": "inherits-source-file-mapping" - }, - { - "name": "StaleRecoveryOutcome", - "kind": "TypeAliasDeclaration", - "line": 29, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressionOutcome", - "kind": "TypeAliasDeclaration", - "line": 41, - "status": "inherits-source-file-mapping" - }, - { - "name": "DisabledReason", - "kind": "TypeAliasDeclaration", - "line": 50, - "status": "inherits-source-file-mapping" - }, - { - "name": "MetricErrorKind", - "kind": "TypeAliasDeclaration", - "line": 52, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheMetricLabels", - "kind": "InterfaceDeclaration", - "line": 66, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheMetricLabels.cacheNamespace", - "kind": "PropertySignature", - "line": 68, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheMetricLabels.useCase", - "kind": "PropertySignature", - "line": 69, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheMetricLabels.keyType", - "kind": "PropertySignature", - "line": 70, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheMetricLabels.layer", - "kind": "PropertySignature", - "line": 71, - "status": "inherits-source-file-mapping" - }, - { - "name": "CACHE_MISS_REASONS", - "kind": "VariableDeclaration", - "line": 83, - "status": "inherits-source-file-mapping" - }, - { - "name": "CacheMissReason", - "kind": "TypeAliasDeclaration", - "line": 84, - "status": "inherits-source-file-mapping" - }, - { - "name": "isCacheMissReason", - "kind": "FunctionDeclaration", - "line": 87, - "status": "inherits-source-file-mapping" - }, - { - "name": "MissMetricLabels", - "kind": "InterfaceDeclaration", - "line": 91, - "status": "inherits-source-file-mapping" - }, - { - "name": "MissMetricLabels.reason", - "kind": "PropertySignature", - "line": 92, - "status": "inherits-source-file-mapping" - }, - { - "name": "DisabledMetricLabels", - "kind": "InterfaceDeclaration", - "line": 95, - "status": "inherits-source-file-mapping" - }, - { - "name": "DisabledMetricLabels.reason", - "kind": "PropertySignature", - "line": 96, - "status": "inherits-source-file-mapping" - }, - { - "name": "ErrorMetricLabels", - "kind": "InterfaceDeclaration", - "line": 99, - "status": "inherits-source-file-mapping" - }, - { - "name": "ErrorMetricLabels.error", - "kind": "PropertySignature", - "line": 100, - "status": "inherits-source-file-mapping" - }, - { - "name": "ErrorMetricLabels.inFallback", - "kind": "PropertySignature", - "line": 101, - "status": "inherits-source-file-mapping" - }, - { - "name": "SerializationMetricLabels", - "kind": "InterfaceDeclaration", - "line": 104, - "status": "inherits-source-file-mapping" - }, - { - "name": "SerializationMetricLabels.operation", - "kind": "PropertySignature", - "line": 105, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressionMetricLabels", - "kind": "InterfaceDeclaration", - "line": 108, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressionMetricLabels.outcome", - "kind": "PropertySignature", - "line": 109, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressionOperationMetricLabels", - "kind": "InterfaceDeclaration", - "line": 112, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressionOperationMetricLabels.operation", - "kind": "PropertySignature", - "line": 113, - "status": "inherits-source-file-mapping" - }, - { - "name": "InvalidationMetricLabels", - "kind": "InterfaceDeclaration", - "line": 116, - "status": "inherits-source-file-mapping" - }, - { - "name": "InvalidationMetricLabels.cacheNamespace", - "kind": "PropertySignature", - "line": 117, - "status": "inherits-source-file-mapping" - }, - { - "name": "InvalidationMetricLabels.keyType", - "kind": "PropertySignature", - "line": 118, - "status": "inherits-source-file-mapping" - }, - { - "name": "InvalidationMetricLabels.layer", - "kind": "PropertySignature", - "line": 119, - "status": "inherits-source-file-mapping" - }, - { - "name": "CoalescedMetricLabels", - "kind": "InterfaceDeclaration", - "line": 122, - "status": "inherits-source-file-mapping" - }, - { - "name": "CoalescedMetricLabels.cacheNamespace", - "kind": "PropertySignature", - "line": 123, - "status": "inherits-source-file-mapping" - }, - { - "name": "CoalescedMetricLabels.useCase", - "kind": "PropertySignature", - "line": 124, - "status": "inherits-source-file-mapping" - }, - { - "name": "CoalescedMetricLabels.keyType", - "kind": "PropertySignature", - "line": 125, - "status": "inherits-source-file-mapping" - }, - { - "name": "CoalescedMetricLabels.scope", - "kind": "PropertySignature", - "line": 126, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowValidationMetricLabels", - "kind": "InterfaceDeclaration", - "line": 129, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowValidationMetricLabels.cacheNamespace", - "kind": "PropertySignature", - "line": 130, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowValidationMetricLabels.useCase", - "kind": "PropertySignature", - "line": 131, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowValidationMetricLabels.keyType", - "kind": "PropertySignature", - "line": 132, - "status": "inherits-source-file-mapping" - }, - { - "name": "ShadowValidationMetricLabels.outcome", - "kind": "PropertySignature", - "line": 133, - "status": "inherits-source-file-mapping" - }, - { - "name": "StaleRecoveryMetricLabels", - "kind": "InterfaceDeclaration", - "line": 136, - "status": "inherits-source-file-mapping" - }, - { - "name": "StaleRecoveryMetricLabels.cacheNamespace", - "kind": "PropertySignature", - "line": 137, - "status": "inherits-source-file-mapping" - }, - { - "name": "StaleRecoveryMetricLabels.useCase", - "kind": "PropertySignature", - "line": 138, - "status": "inherits-source-file-mapping" - }, - { - "name": "StaleRecoveryMetricLabels.keyType", - "kind": "PropertySignature", - "line": 139, - "status": "inherits-source-file-mapping" - }, - { - "name": "StaleRecoveryMetricLabels.outcome", - "kind": "PropertySignature", - "line": 140, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter", - "kind": "InterfaceDeclaration", - "line": 143, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.request", - "kind": "MethodSignature", - "line": 144, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.miss", - "kind": "MethodSignature", - "line": 145, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.disabled", - "kind": "MethodSignature", - "line": 146, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.error", - "kind": "MethodSignature", - "line": 147, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.invalidation", - "kind": "MethodSignature", - "line": 148, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.coalesced", - "kind": "MethodSignature", - "line": 150, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.shadowValidation", - "kind": "MethodSignature", - "line": 152, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.observeShadowValueAge", - "kind": "MethodSignature", - "line": 163, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.observeFutureTimestampOffset", - "kind": "MethodSignature", - "line": 171, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.staleRecovery", - "kind": "MethodSignature", - "line": 173, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.observeStaleRecoveryValueAge", - "kind": "MethodSignature", - "line": 183, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.compression", - "kind": "MethodSignature", - "line": 185, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.observeGet", - "kind": "MethodSignature", - "line": 186, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.observeFallback", - "kind": "MethodSignature", - "line": 187, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.observeSerialization", - "kind": "MethodSignature", - "line": 188, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.observeSize", - "kind": "MethodSignature", - "line": 190, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.observeStoredSize", - "kind": "MethodSignature", - "line": 195, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.observeCompressionRatio", - "kind": "MethodSignature", - "line": 197, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheMetricsAdapter.observeCompression", - "kind": "MethodSignature", - "line": 199, - "status": "inherits-source-file-mapping" - }, - { - "name": "labelsFor", - "kind": "FunctionDeclaration", - "line": 202, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "The backend-neutral Event stream expresses portable diagnostic outcomes, attribution and durations. Optional shadow/recovery hooks preserve admission semantics; FailureIsolatedObserver and FailureIsolatedLogger contain native exporter/logging failures. Exporter schemas are separately reviewed bindings.", @@ -16942,140 +4101,6 @@ "candidateGoFiles": [ "go/redis_adapter.go" ], - "declarations": [ - { - "name": "BufferReplyOptions", - "kind": "TypeAliasDeclaration", - "line": 24, - "status": "inherits-source-file-mapping" - }, - { - "name": "returnBuffers", - "kind": "PropertySignature", - "line": 26, - "status": "inherits-source-file-mapping" - }, - { - "name": "signal", - "kind": "PropertySignature", - "line": 27, - "status": "inherits-source-file-mapping" - }, - { - "name": "bufferReplyOptions", - "kind": "VariableDeclaration", - "line": 31, - "status": "inherits-source-file-mapping" - }, - { - "name": "NodeRedisArgument", - "kind": "TypeAliasDeclaration", - "line": 32, - "status": "inherits-source-file-mapping" - }, - { - "name": "NodeRedisStandaloneClient", - "kind": "InterfaceDeclaration", - "line": 34, - "status": "inherits-source-file-mapping" - }, - { - "name": "NodeRedisStandaloneClient.get", - "kind": "MethodSignature", - "line": 35, - "status": "inherits-source-file-mapping" - }, - { - "name": "NodeRedisStandaloneClient.sendCommand", - "kind": "MethodSignature", - "line": 36, - "status": "inherits-source-file-mapping" - }, - { - "name": "NodeRedisClusterClient", - "kind": "InterfaceDeclaration", - "line": 42, - "status": "inherits-source-file-mapping" - }, - { - "name": "NodeRedisClusterClient.masters", - "kind": "PropertySignature", - "line": 44, - "status": "inherits-source-file-mapping" - }, - { - "name": "NodeRedisClusterClient.get", - "kind": "MethodSignature", - "line": 45, - "status": "inherits-source-file-mapping" - }, - { - "name": "NodeRedisClusterClient.sendCommand", - "kind": "MethodSignature", - "line": 46, - "status": "inherits-source-file-mapping" - }, - { - "name": "NodeRedisClient", - "kind": "TypeAliasDeclaration", - "line": 54, - "status": "inherits-source-file-mapping" - }, - { - "name": "isNodeRedisClusterClient", - "kind": "FunctionDeclaration", - "line": 56, - "status": "inherits-source-file-mapping" - }, - { - "name": "validateRedisMGetReply", - "kind": "FunctionDeclaration", - "line": 60, - "status": "inherits-source-file-mapping" - }, - { - "name": "sendKeyedCommand", - "kind": "FunctionDeclaration", - "line": 75, - "status": "inherits-source-file-mapping" - }, - { - "name": "readTracked", - "kind": "FunctionDeclaration", - "line": 86, - "status": "inherits-source-file-mapping" - }, - { - "name": "sendFrameSet", - "kind": "FunctionDeclaration", - "line": 96, - "status": "inherits-source-file-mapping" - }, - { - "name": "createNodeRedisDialCacheClient", - "kind": "FunctionDeclaration", - "line": 126, - "status": "inherits-source-file-mapping" - }, - { - "name": "read", - "kind": "MethodDeclaration", - "line": 128, - "status": "inherits-source-file-mapping" - }, - { - "name": "write", - "kind": "MethodDeclaration", - "line": 143, - "status": "inherits-source-file-mapping" - }, - { - "name": "invalidate", - "kind": "MethodDeclaration", - "line": 151, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "RedisAdapter uses go-redis UniversalClient rather than node-redis types. It borrows the client, issues primary atomic MGET for tracked values, one SET of the complete frame, and EVALSHA with one EVAL retry on command error. Context cancellation and client queue/retry/resource policy remain native binding obligations.", @@ -17105,512 +4130,6 @@ "candidateGoFiles": [ "go/metrics_prometheus.go" ], - "declarations": [ - { - "name": "PrometheusMetricsOptions", - "kind": "InterfaceDeclaration", - "line": 18, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusMetricsOptions.registry", - "kind": "PropertySignature", - "line": 19, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusMetricsOptions.prefix", - "kind": "PropertySignature", - "line": 20, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusRegistry", - "kind": "TypeAliasDeclaration", - "line": 23, - "status": "inherits-source-file-mapping" - }, - { - "name": "CounterLabels", - "kind": "TypeAliasDeclaration", - "line": 25, - "status": "inherits-source-file-mapping" - }, - { - "name": "MissLabels", - "kind": "TypeAliasDeclaration", - "line": 26, - "status": "inherits-source-file-mapping" - }, - { - "name": "DisabledLabels", - "kind": "TypeAliasDeclaration", - "line": 27, - "status": "inherits-source-file-mapping" - }, - { - "name": "ErrorLabels", - "kind": "TypeAliasDeclaration", - "line": 28, - "status": "inherits-source-file-mapping" - }, - { - "name": "SerializationLabels", - "kind": "TypeAliasDeclaration", - "line": 29, - "status": "inherits-source-file-mapping" - }, - { - "name": "InvalidationLabels", - "kind": "TypeAliasDeclaration", - "line": 30, - "status": "inherits-source-file-mapping" - }, - { - "name": "CoalescedLabels", - "kind": "TypeAliasDeclaration", - "line": 31, - "status": "inherits-source-file-mapping" - }, - { - "name": "OutcomeLabels", - "kind": "TypeAliasDeclaration", - "line": 32, - "status": "inherits-source-file-mapping" - }, - { - "name": "OutcomeMetricLabels", - "kind": "TypeAliasDeclaration", - "line": 33, - "status": "inherits-source-file-mapping" - }, - { - "name": "CompressionLabels", - "kind": "TypeAliasDeclaration", - "line": 34, - "status": "inherits-source-file-mapping" - }, - { - "name": "BaseCollectorConfig", - "kind": "InterfaceDeclaration", - "line": 36, - "status": "inherits-source-file-mapping" - }, - { - "name": "BaseCollectorConfig.name", - "kind": "PropertySignature", - "line": 37, - "status": "inherits-source-file-mapping" - }, - { - "name": "BaseCollectorConfig.help", - "kind": "PropertySignature", - "line": 38, - "status": "inherits-source-file-mapping" - }, - { - "name": "BaseCollectorConfig.labelNames", - "kind": "PropertySignature", - "line": 39, - "status": "inherits-source-file-mapping" - }, - { - "name": "CounterCollectorConfig", - "kind": "InterfaceDeclaration", - "line": 42, - "status": "inherits-source-file-mapping" - }, - { - "name": "CounterCollectorConfig.type", - "kind": "PropertySignature", - "line": 43, - "status": "inherits-source-file-mapping" - }, - { - "name": "HistogramCollectorConfig", - "kind": "InterfaceDeclaration", - "line": 46, - "status": "inherits-source-file-mapping" - }, - { - "name": "HistogramCollectorConfig.type", - "kind": "PropertySignature", - "line": 47, - "status": "inherits-source-file-mapping" - }, - { - "name": "HistogramCollectorConfig.buckets", - "kind": "PropertySignature", - "line": 48, - "status": "inherits-source-file-mapping" - }, - { - "name": "CollectorConfig", - "kind": "TypeAliasDeclaration", - "line": 51, - "status": "inherits-source-file-mapping" - }, - { - "name": "CollectorShape", - "kind": "InterfaceDeclaration", - "line": 53, - "status": "inherits-source-file-mapping" - }, - { - "name": "CollectorShape.name", - "kind": "PropertySignature", - "line": 54, - "status": "inherits-source-file-mapping" - }, - { - "name": "CollectorShape.help", - "kind": "PropertySignature", - "line": 55, - "status": "inherits-source-file-mapping" - }, - { - "name": "CollectorShape.type", - "kind": "PropertySignature", - "line": 56, - "status": "inherits-source-file-mapping" - }, - { - "name": "CollectorShape.labelNames", - "kind": "PropertySignature", - "line": 57, - "status": "inherits-source-file-mapping" - }, - { - "name": "CollectorShape.buckets", - "kind": "PropertySignature", - "line": 58, - "status": "inherits-source-file-mapping" - }, - { - "name": "CollectorShape.enableExemplars", - "kind": "PropertySignature", - "line": 59, - "status": "inherits-source-file-mapping" - }, - { - "name": "TIMER_BUCKETS", - "kind": "VariableDeclaration", - "line": 62, - "status": "inherits-source-file-mapping" - }, - { - "name": "SIZE_BUCKETS", - "kind": "VariableDeclaration", - "line": 63, - "status": "inherits-source-file-mapping" - }, - { - "name": "RATIO_BUCKETS", - "kind": "VariableDeclaration", - "line": 64, - "status": "inherits-source-file-mapping" - }, - { - "name": "VALUE_AGE_BUCKETS", - "kind": "VariableDeclaration", - "line": 66, - "status": "inherits-source-file-mapping" - }, - { - "name": "FUTURE_TIMESTAMP_OFFSET_BUCKETS", - "kind": "VariableDeclaration", - "line": 67, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics", - "kind": "ClassDeclaration", - "line": 87, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.requestCounter", - "kind": "PropertyDeclaration", - "line": 88, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.missCounter", - "kind": "PropertyDeclaration", - "line": 89, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.disabledCounter", - "kind": "PropertyDeclaration", - "line": 90, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.errorCounter", - "kind": "PropertyDeclaration", - "line": 91, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.invalidationCounter", - "kind": "PropertyDeclaration", - "line": 92, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.coalescedCounter", - "kind": "PropertyDeclaration", - "line": 93, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.shadowValidationCounter", - "kind": "PropertyDeclaration", - "line": 94, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.shadowValueAgeHistogram", - "kind": "PropertyDeclaration", - "line": 95, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.futureTimestampOffsetHistogram", - "kind": "PropertyDeclaration", - "line": 96, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.staleRecoveryCounter", - "kind": "PropertyDeclaration", - "line": 97, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.staleRecoveryValueAgeHistogram", - "kind": "PropertyDeclaration", - "line": 98, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.compressionCounter", - "kind": "PropertyDeclaration", - "line": 99, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.getTimer", - "kind": "PropertyDeclaration", - "line": 100, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.fallbackTimer", - "kind": "PropertyDeclaration", - "line": 101, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.serializationTimer", - "kind": "PropertyDeclaration", - "line": 102, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.sizeHistogram", - "kind": "PropertyDeclaration", - "line": 103, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.storedSizeHistogram", - "kind": "PropertyDeclaration", - "line": 104, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.compressionRatioHistogram", - "kind": "PropertyDeclaration", - "line": 105, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.compressionTimer", - "kind": "PropertyDeclaration", - "line": 106, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.constructor", - "kind": "Constructor", - "line": 108, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.request", - "kind": "MethodDeclaration", - "line": 135, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.miss", - "kind": "MethodDeclaration", - "line": 139, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.disabled", - "kind": "MethodDeclaration", - "line": 143, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.error", - "kind": "MethodDeclaration", - "line": 147, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.invalidation", - "kind": "MethodDeclaration", - "line": 155, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.coalesced", - "kind": "MethodDeclaration", - "line": 163, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.shadowValidation", - "kind": "MethodDeclaration", - "line": 172, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.observeShadowValueAge", - "kind": "MethodDeclaration", - "line": 176, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.observeFutureTimestampOffset", - "kind": "MethodDeclaration", - "line": 180, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.staleRecovery", - "kind": "MethodDeclaration", - "line": 187, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.observeStaleRecoveryValueAge", - "kind": "MethodDeclaration", - "line": 191, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.compression", - "kind": "MethodDeclaration", - "line": 195, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.observeGet", - "kind": "MethodDeclaration", - "line": 199, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.observeFallback", - "kind": "MethodDeclaration", - "line": 203, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.observeSerialization", - "kind": "MethodDeclaration", - "line": 207, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.observeSize", - "kind": "MethodDeclaration", - "line": 211, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.observeStoredSize", - "kind": "MethodDeclaration", - "line": 215, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.observeCompressionRatio", - "kind": "MethodDeclaration", - "line": 219, - "status": "inherits-source-file-mapping" - }, - { - "name": "PrometheusDialCacheMetrics.observeCompression", - "kind": "MethodDeclaration", - "line": 223, - "status": "inherits-source-file-mapping" - }, - { - "name": "createPrometheusDialCacheMetrics", - "kind": "FunctionDeclaration", - "line": 228, - "status": "inherits-source-file-mapping" - }, - { - "name": "cacheLabels", - "kind": "FunctionDeclaration", - "line": 232, - "status": "inherits-source-file-mapping" - }, - { - "name": "outcomeLabels", - "kind": "FunctionDeclaration", - "line": 241, - "status": "inherits-source-file-mapping" - }, - { - "name": "collectorConfigs", - "kind": "FunctionDeclaration", - "line": 250, - "status": "inherits-source-file-mapping" - }, - { - "name": "validateExistingCollectors", - "kind": "FunctionDeclaration", - "line": 379, - "status": "inherits-source-file-mapping" - }, - { - "name": "arraysEqual", - "kind": "FunctionDeclaration", - "line": 404, - "status": "inherits-source-file-mapping" - }, - { - "name": "counter", - "kind": "FunctionDeclaration", - "line": 412, - "status": "inherits-source-file-mapping" - }, - { - "name": "histogram", - "kind": "FunctionDeclaration", - "line": 428, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "PrometheusMetrics preserves metric names, labels, histogram units and buckets using client_golang. Existing individually registered collectors require explicit schema-bearing bindings plus descriptor and registry-identity validation; this replaces prom-client registry introspection and makes histogram-schema knowledge an explicit caller precondition.", @@ -17642,272 +4161,6 @@ "go/protocol.go", "go/redis_adapter.go" ], - "declarations": [ - { - "name": "redisPayloadErrorBrand", - "kind": "VariableDeclaration", - "line": 4, - "status": "inherits-source-file-mapping" - }, - { - "name": "redisPayloadEncodingErrorBrand", - "kind": "VariableDeclaration", - "line": 5, - "status": "inherits-source-file-mapping" - }, - { - "name": "redisProtocolErrorBrand", - "kind": "VariableDeclaration", - "line": 6, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheRedisPayloadError", - "kind": "ClassDeclaration", - "line": 8, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheRedisPayloadError.[Symbol.hasInstance]", - "kind": "MethodDeclaration", - "line": 9, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheRedisPayloadError.constructor", - "kind": "Constructor", - "line": 18, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheRedisPayloadEncodingError", - "kind": "ClassDeclaration", - "line": 26, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheRedisPayloadEncodingError.[Symbol.hasInstance]", - "kind": "MethodDeclaration", - "line": 27, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheRedisPayloadEncodingError.constructor", - "kind": "Constructor", - "line": 36, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheRedisProtocolError", - "kind": "ClassDeclaration", - "line": 44, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheRedisProtocolError.[Symbol.hasInstance]", - "kind": "MethodDeclaration", - "line": 45, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheRedisProtocolError.constructor", - "kind": "Constructor", - "line": 54, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisCachePayload", - "kind": "TypeAliasDeclaration", - "line": 63, - "status": "inherits-source-file-mapping" - }, - { - "name": "DecodedRedisFrame", - "kind": "InterfaceDeclaration", - "line": 78, - "status": "inherits-source-file-mapping" - }, - { - "name": "DecodedRedisFrame.payload", - "kind": "PropertySignature", - "line": 79, - "status": "inherits-source-file-mapping" - }, - { - "name": "DecodedRedisFrame.createdAtMs", - "kind": "PropertySignature", - "line": 81, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisReadMiss", - "kind": "InterfaceDeclaration", - "line": 92, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisReadMiss.kind", - "kind": "PropertySignature", - "line": 93, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisReadMiss.reason", - "kind": "PropertySignature", - "line": 94, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisReadMiss.observedWatermarkMs", - "kind": "PropertySignature", - "line": 95, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisReadResult", - "kind": "TypeAliasDeclaration", - "line": 99, - "status": "inherits-source-file-mapping" - }, - { - "name": "isRedisReadMiss", - "kind": "FunctionDeclaration", - "line": 102, - "status": "inherits-source-file-mapping" - }, - { - "name": "redisReadMiss", - "kind": "FunctionDeclaration", - "line": 107, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisValueRequest", - "kind": "InterfaceDeclaration", - "line": 113, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisValueRequest.valueKey", - "kind": "PropertySignature", - "line": 114, - "status": "inherits-source-file-mapping" - }, - { - "name": "TrackedRedisReadRequest", - "kind": "InterfaceDeclaration", - "line": 117, - "status": "inherits-source-file-mapping" - }, - { - "name": "TrackedRedisReadRequest.watermarkKey", - "kind": "PropertySignature", - "line": 118, - "status": "inherits-source-file-mapping" - }, - { - "name": "UntrackedRedisReadRequest", - "kind": "InterfaceDeclaration", - "line": 121, - "status": "inherits-source-file-mapping" - }, - { - "name": "UntrackedRedisReadRequest.watermarkKey", - "kind": "PropertySignature", - "line": 122, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisReadRequest", - "kind": "TypeAliasDeclaration", - "line": 125, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisReadContext", - "kind": "InterfaceDeclaration", - "line": 131, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisReadContext.timeoutMs", - "kind": "PropertySignature", - "line": 132, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisReadContext.signal", - "kind": "PropertySignature", - "line": 133, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisWriteRequest", - "kind": "InterfaceDeclaration", - "line": 136, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisWriteRequest.cacheTtlMs", - "kind": "PropertySignature", - "line": 138, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisWriteRequest.value", - "kind": "PropertySignature", - "line": 139, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisWriteRequest.createdAtMs", - "kind": "PropertySignature", - "line": 150, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisInvalidationRequest", - "kind": "InterfaceDeclaration", - "line": 153, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisInvalidationRequest.watermarkKey", - "kind": "PropertySignature", - "line": 154, - "status": "inherits-source-file-mapping" - }, - { - "name": "RedisInvalidationRequest.futureBufferMs", - "kind": "PropertySignature", - "line": 156, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheRedisClient", - "kind": "InterfaceDeclaration", - "line": 175, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheRedisClient.read", - "kind": "MethodSignature", - "line": 207, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheRedisClient.write", - "kind": "MethodSignature", - "line": 226, - "status": "inherits-source-file-mapping" - }, - { - "name": "DialCacheRedisClient.invalidate", - "kind": "MethodSignature", - "line": 237, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "The client-independent contract becomes Remote plus Frame and ReadResult; context carries the acquired read budget and cancellation request. Typed adapter errors and NormalizeReadResult preserve malformed-reply failure boundaries independently of the concrete Redis library.", @@ -17951,7 +4204,6 @@ "go/protocol.go", "go/redis_adapter.go" ], - "declarations": [], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Public wire helpers are direct Go package exports rather than a JavaScript package subpath. EncodeFrame, DecodeFrame and InvalidationScript expose the production implementation used by the shared protocol and invalidation vectors.", @@ -17984,50 +4236,6 @@ "go/api.go", "go/codec.go" ], - "declarations": [ - { - "name": "Serializer", - "kind": "InterfaceDeclaration", - "line": 3, - "status": "inherits-source-file-mapping" - }, - { - "name": "Serializer.dump", - "kind": "MethodSignature", - "line": 5, - "status": "inherits-source-file-mapping" - }, - { - "name": "Serializer.load", - "kind": "MethodSignature", - "line": 14, - "status": "inherits-source-file-mapping" - }, - { - "name": "JSON_UNDEFINED_SENTINEL", - "kind": "VariableDeclaration", - "line": 17, - "status": "inherits-source-file-mapping" - }, - { - "name": "JsonSerializer", - "kind": "ClassDeclaration", - "line": 23, - "status": "inherits-source-file-mapping" - }, - { - "name": "JsonSerializer.dump", - "kind": "MethodDeclaration", - "line": 24, - "status": "inherits-source-file-mapping" - }, - { - "name": "JsonSerializer.load", - "kind": "MethodDeclaration", - "line": 36, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Codec and optional ContextCodec replace awaitable serializer methods. JSONCodec[any] preserves null, falsy values and explicit Absent; JSONObject preserves insertion order, while ordinary Go maps use deterministic UTF-16 ordering. Typed destinations impose Go field/tag/range rules, and SemanticEqual defines the documented supported-value comparison. JSON strings and object keys use Unicode scalar values; unpaired UTF-16 escape sequences reject during decoding so unsupported cached values fail open instead of changing data.", @@ -18066,212 +4274,6 @@ "candidateGoFiles": [ "go/redis_adapter.go" ], - "declarations": [ - { - "name": "ValkeyGlideString", - "kind": "TypeAliasDeclaration", - "line": 19, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideBatch", - "kind": "InterfaceDeclaration", - "line": 21, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideBatch.mget", - "kind": "MethodSignature", - "line": 22, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideScriptingClient", - "kind": "InterfaceDeclaration", - "line": 25, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideScriptingClient.customCommand", - "kind": "MethodSignature", - "line": 26, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideScriptingClient.decoder", - "kind": "PropertySignature", - "line": 29, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideScriptingClient.route", - "kind": "PropertySignature", - "line": 30, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideScriptingClient.type", - "kind": "PropertySignature", - "line": 30, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideScriptingClient.key", - "kind": "PropertySignature", - "line": 30, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideScriptingClient.get", - "kind": "MethodSignature", - "line": 33, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideScriptingClient.decoder", - "kind": "PropertySignature", - "line": 35, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideScriptingClient.exec", - "kind": "MethodSignature", - "line": 37, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideScriptingClient.decoder", - "kind": "PropertySignature", - "line": 41, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideScriptingClient.route", - "kind": "PropertySignature", - "line": 42, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideScriptingClient.type", - "kind": "PropertySignature", - "line": 42, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideScriptingClient.key", - "kind": "PropertySignature", - "line": 42, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideClientIdentity", - "kind": "InterfaceDeclaration", - "line": 47, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideClientIdentity.[Symbol.hasInstance]", - "kind": "PropertySignature", - "line": 48, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideRuntime", - "kind": "InterfaceDeclaration", - "line": 51, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideRuntime.Batch", - "kind": "PropertySignature", - "line": 53, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideRuntime.GlideClient", - "kind": "PropertySignature", - "line": 55, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideRuntime.GlideClusterClient", - "kind": "PropertySignature", - "line": 57, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideRuntime.Decoder", - "kind": "PropertySignature", - "line": 59, - "status": "inherits-source-file-mapping" - }, - { - "name": "ValkeyGlideRuntime.Bytes", - "kind": "PropertySignature", - "line": 60, - "status": "inherits-source-file-mapping" - }, - { - "name": "matchesValkeyGlideIdentity", - "kind": "FunctionDeclaration", - "line": 64, - "status": "inherits-source-file-mapping" - }, - { - "name": "classifyValkeyGlideClient", - "kind": "FunctionDeclaration", - "line": 79, - "status": "inherits-source-file-mapping" - }, - { - "name": "createValkeyGlideDialCacheClient", - "kind": "FunctionDeclaration", - "line": 123, - "status": "inherits-source-file-mapping" - }, - { - "name": "decoder", - "kind": "PropertySignature", - "line": 136, - "status": "inherits-source-file-mapping" - }, - { - "name": "route", - "kind": "PropertySignature", - "line": 137, - "status": "inherits-source-file-mapping" - }, - { - "name": "type", - "kind": "PropertySignature", - "line": 137, - "status": "inherits-source-file-mapping" - }, - { - "name": "key", - "kind": "PropertySignature", - "line": 137, - "status": "inherits-source-file-mapping" - }, - { - "name": "read", - "kind": "MethodDeclaration", - "line": 143, - "status": "inherits-source-file-mapping" - }, - { - "name": "write", - "kind": "MethodDeclaration", - "line": 168, - "status": "inherits-source-file-mapping" - }, - { - "name": "invalidate", - "kind": "MethodDeclaration", - "line": 178, - "status": "inherits-source-file-mapping" - } - ], "mappingReview": { "status": "reviewed-mapping-not-execution", "rationale": "Go supplies one go-redis adapter for both Redis and Valkey rather than reproducing GLIDE classes/options. Real Redis, Valkey and six-node Cluster tests exercise the same production adapter; explicit Cluster primary selection preserves tracked read guarantees even with replica-routing client options.", @@ -18298,24 +4300,11 @@ ], "reviewedTestAndDocumentationAudit": { "path": "formal/source-audit.json", - "sha256": "33a25f92da00ccbd2e17a8c39fe546a039b7ba38ff39f707b40a02bc93b0b8ef", - "sourceFiles": 44, "status": "reviewed-applicability-not-execution", "limitations": "These rows review Go applicability for the public documentation and ordinary test files in source-audit.json sources, inheriting their C/W/E/B/X classifications. They map subjects to native artifacts without claiming one Go test per TypeScript assertion or turning documentation counts into executed coverage. The same audit hash also binds reviewedGuides for formal and Go documentation; those guide reviews are freshness/scope records, not additional behavioral applicability rows. Per-case Quint and replay evidence is recorded separately.", "sources": [ { "path": "README.md", - "sha256": "17cd061cde252e466ba94fced8615d3bc7d2a6b88cced14fe62c3572dc86c173", - "entries": 6, - "contracts": [ - "B01", - "C01", - "C05", - "C16", - "C18", - "C31", - "W01" - ], "goFiles": [ "go/api.go", "go/bindings.go", @@ -18333,29 +4322,6 @@ }, { "path": "docs/api.md", - "sha256": "418e4d6709aab1b045f3bc6ee766cd8e006693f93a49a713904f916229e0160e", - "entries": 16, - "contracts": [ - "B01", - "B03", - "C01", - "C02", - "C03", - "C11", - "C16", - "C18", - "C20", - "C23", - "C27", - "C29", - "C32", - "C39", - "C42", - "E01", - "W01", - "W02", - "X01" - ], "goFiles": [ "go/api.go", "go/bindings.go", @@ -18373,28 +4339,6 @@ }, { "path": "docs/coalescing.md", - "sha256": "3534f49eb8632cbeea039c67727e0fc76d5344c5630409afe644c393ba6500e6", - "entries": 17, - "contracts": [ - "B02", - "C01", - "C07", - "C11", - "C12", - "C13", - "C14", - "C18", - "C23", - "C24", - "C25", - "C26", - "C43", - "C49", - "C54", - "E03", - "X01", - "X02" - ], "goFiles": [ "go/cache.go", "go/bindings.go", @@ -18412,30 +4356,6 @@ }, { "path": "docs/concepts.md", - "sha256": "ca6b937b43779e735c844814a44b2d24e469cd956f70b5fafb4041fff34fa30e", - "entries": 12, - "contracts": [ - "B01", - "B03", - "C01", - "C02", - "C03", - "C05", - "C06", - "C07", - "C08", - "C09", - "C11", - "C22", - "C23", - "C25", - "C27", - "C28", - "C31", - "C36", - "E04", - "W01" - ], "goFiles": [ "go/cache.go", "go/bindings.go", @@ -18453,19 +4373,6 @@ }, { "path": "docs/configuration.md", - "sha256": "39522c6c43320f4ff509e75ee856c8c869b9e319b7ec409c7e9fabfcd84246db", - "entries": 9, - "contracts": [ - "B01", - "C16", - "C17", - "C18", - "C20", - "C21", - "C22", - "C23", - "W03" - ], "goFiles": [ "go/policy.go", "go/policy_test.go", @@ -18480,19 +4387,6 @@ }, { "path": "docs/getting-started.md", - "sha256": "175dc57b450bee0d26c5ef207cb774b723da82722c4e4a2676bfaefda2fd609c", - "entries": 7, - "contracts": [ - "B01", - "C01", - "C02", - "C05", - "C11", - "C16", - "C18", - "E01", - "W01" - ], "goFiles": [ "go/api.go", "go/bindings.go", @@ -18510,11 +4404,6 @@ }, { "path": "docs/index.md", - "sha256": "fa87ab915f2121961d12e7567ac98a2517b3ed6ff52bd5ad62752806a60000de", - "entries": 5, - "contracts": [ - "B01" - ], "goFiles": [ "go/api.go", "go/bindings.go", @@ -18532,27 +4421,6 @@ }, { "path": "docs/invalidation.md", - "sha256": "115bef8d2529176319f1685179e380b9742ea465a7aaf6e82a8f71a695227a59", - "entries": 16, - "contracts": [ - "B01", - "C29", - "C31", - "C32", - "C33", - "C34", - "C35", - "C36", - "C37", - "C38", - "C39", - "C53", - "C58", - "E02", - "E03", - "W01", - "W09" - ], "goFiles": [ "go/cache.go", "go/engine.go", @@ -18568,16 +4436,6 @@ }, { "path": "docs/keys.md", - "sha256": "dd79d199a8feb07e5c652513195ffaef21caecbad9f90efbf2d89e4434ac0237", - "entries": 7, - "contracts": [ - "B01", - "C16", - "E04", - "E05", - "W01", - "W02" - ], "goFiles": [ "go/protocol.go", "go/protocol_test.go", @@ -18592,13 +4450,6 @@ }, { "path": "docs/maintainers.md", - "sha256": "49ddcd2902baca3a667c1e25b355ff1f8cf8c810df623f3d6c806de70c5a3e63", - "entries": 9, - "contracts": [ - "B01", - "E05", - "X02" - ], "goFiles": [ "go/api.go", "go/bindings.go", @@ -18616,27 +4467,6 @@ }, { "path": "docs/observability.md", - "sha256": "f017e16dc9f22ef0873c372ab2ae1d46b7d1d481dad305296a684cb8378ba7a6", - "entries": 18, - "contracts": [ - "C30", - "C41", - "C45", - "C50", - "C51", - "C52", - "C53", - "C54", - "C55", - "C57", - "C58", - "C59", - "C60", - "W06", - "W07", - "X01", - "X02" - ], "goFiles": [ "go/engine.go", "go/shadow.go", @@ -18653,28 +4483,6 @@ }, { "path": "docs/redis.md", - "sha256": "4bca768199d9300fede38405ed525402f343ac6dadca533172594fde4ce23237", - "entries": 19, - "contracts": [ - "B01", - "B03", - "C23", - "C27", - "C45", - "C52", - "C55", - "C56", - "E01", - "E03", - "E04", - "W04", - "W05", - "W06", - "W07", - "W08", - "W09", - "X02" - ], "goFiles": [ "go/redis_adapter.go", "go/redis_adapter_test.go", @@ -18690,28 +4498,6 @@ }, { "path": "docs/shadow-validation.md", - "sha256": "cce3d8468164483cec29162fcb860246e44c3b0a2a5a657bcad4f0d78c7cb4a2", - "entries": 16, - "contracts": [ - "B03", - "C36", - "C47", - "C48", - "C49", - "C50", - "C51", - "C52", - "C53", - "C54", - "C57", - "C58", - "C59", - "C60", - "E03", - "E04", - "W03", - "X01" - ], "goFiles": [ "go/shadow.go", "go/codec.go", @@ -18729,21 +4515,6 @@ }, { "path": "docs/stale-on-error.md", - "sha256": "98d2013b48fe5db881d88b10c41f6d70bc6e00ba36a341dc828578e4413836d2", - "entries": 8, - "contracts": [ - "C37", - "C40", - "C41", - "C42", - "C43", - "C44", - "C45", - "C57", - "C58", - "E03", - "E04" - ], "goFiles": [ "go/engine.go", "go/api.go", @@ -18758,19 +4529,6 @@ }, { "path": "docs/upgrading.md", - "sha256": "bca1249189fabc3267c9349eb782f093523adade00f441b0d8435b8f0d831d6b", - "entries": 7, - "contracts": [ - "B01", - "C37", - "C55", - "E01", - "E05", - "W06", - "W08", - "W09", - "X01" - ], "goFiles": [ "go/api.go", "go/bindings.go", @@ -18788,12 +4546,6 @@ }, { "path": "test/compression-error.test.ts", - "sha256": "583e166affcc0066341bea9278ea345441aa9bde6f9fec2d14a70e207b52519d", - "entries": 1, - "contracts": [ - "C27", - "X02" - ], "goFiles": [ "go/codec.go", "go/codec_test.go", @@ -18808,11 +4560,6 @@ }, { "path": "test/compression-guard.test.ts", - "sha256": "36ce809ae856d31fbaaabcdc005583c8f25f6e9a4a620abe98c25a2984c44556", - "entries": 2, - "contracts": [ - "X02" - ], "goFiles": [ "go/codec.go", "go/codec_test.go", @@ -18827,17 +4574,6 @@ }, { "path": "test/compression.test.ts", - "sha256": "f959a21148ad1803f7c4870ee0ceacf494a1b43aa6b558974541dd9dab7612bf", - "entries": 25, - "contracts": [ - "B01", - "B02", - "E04", - "W06", - "W07", - "W08", - "X02" - ], "goFiles": [ "go/codec.go", "go/codec_test.go", @@ -18852,14 +4588,6 @@ }, { "path": "test/datadog.test.ts", - "sha256": "8b50a81e6baa8d3d1eb4854cb9d84d83cc48493bca4efc0b656e0f0714f66d65", - "entries": 13, - "contracts": [ - "B01", - "B02", - "C30", - "X01" - ], "goFiles": [ "go/metrics.go", "go/metrics_prometheus.go", @@ -18875,24 +4603,6 @@ }, { "path": "test/dialcache-coalescing.test.ts", - "sha256": "f782ce3db6051a6b46dc3403311e247f7752eddbafbd20fdbbcd54c0fa7f0fdb", - "entries": 20, - "contracts": [ - "B03", - "C01", - "C07", - "C11", - "C12", - "C13", - "C14", - "C15", - "C16", - "C17", - "C18", - "C20", - "C28", - "C36" - ], "goFiles": [ "go/cache.go", "go/bindings.go", @@ -18910,19 +4620,6 @@ }, { "path": "test/dialcache-compression.test.ts", - "sha256": "8a7235d78ba4cdc0526d04c2e4901b86fc1a79e683b40af5cc9bdbad0a0418fa", - "entries": 12, - "contracts": [ - "B01", - "B03", - "C06", - "C27", - "C34", - "C58", - "W06", - "W07", - "W08" - ], "goFiles": [ "go/codec.go", "go/codec_test.go", @@ -18937,21 +4634,6 @@ }, { "path": "test/dialcache-config-ramp.test.ts", - "sha256": "8375f7c9f7cb492b59177a263ac1b3e2279d85577fd9a16c461ec118bbea3dfa", - "entries": 36, - "contracts": [ - "B01", - "C05", - "C07", - "C16", - "C17", - "C18", - "C20", - "C21", - "C41", - "W03", - "W05" - ], "goFiles": [ "go/policy.go", "go/policy_test.go", @@ -18966,23 +4648,6 @@ }, { "path": "test/dialcache-get-or-load.test.ts", - "sha256": "48608eca552ac6d6a01b3c9b314be7e922919e6357c56349a2addc06dc2c043d", - "entries": 10, - "contracts": [ - "B01", - "B03", - "C01", - "C11", - "C15", - "C18", - "C23", - "C28", - "C31", - "C32", - "C58", - "E04", - "W06" - ], "goFiles": [ "go/api.go", "go/bindings.go", @@ -19000,24 +4665,6 @@ }, { "path": "test/dialcache-invalidation.test.ts", - "sha256": "1eb03e2a07f10abfb60fd522a17f8949d762a48d0432adff8b44a38745547105", - "entries": 25, - "contracts": [ - "B01", - "C28", - "C29", - "C30", - "C31", - "C32", - "C33", - "C34", - "C35", - "C36", - "C37", - "C38", - "C39", - "W01" - ], "goFiles": [ "go/cache.go", "go/engine.go", @@ -19033,24 +4680,6 @@ }, { "path": "test/dialcache-liveness.test.ts", - "sha256": "2d51e3a6123f4b056fdfbaabb3847ddcfdc8493d73a0f93c3d00c7ba425a809f", - "entries": 27, - "contracts": [ - "B01", - "B02", - "C01", - "C04", - "C11", - "C15", - "C20", - "C23", - "C24", - "C25", - "C26", - "C27", - "C58", - "X01" - ], "goFiles": [ "go/deadline.go", "go/engine.go", @@ -19067,29 +4696,6 @@ }, { "path": "test/dialcache-local.test.ts", - "sha256": "743f881019970183e744c8c848b9ca9651a21635d2310dcb3e11c2993bc7337e", - "entries": 38, - "contracts": [ - "B01", - "B02", - "B03", - "C01", - "C02", - "C05", - "C06", - "C07", - "C08", - "C09", - "C10", - "C11", - "C14", - "C21", - "C27", - "C29", - "W01", - "W02", - "X02" - ], "goFiles": [ "go/cache.go", "go/bindings.go", @@ -19107,16 +4713,6 @@ }, { "path": "test/dialcache-logger.test.ts", - "sha256": "ce801ec2f2dd8b028092ed240fef5b7db4a50d245e28a04fe24cb08873c4c502", - "entries": 7, - "contracts": [ - "B02", - "C20", - "C27", - "C28", - "C29", - "C30" - ], "goFiles": [ "go/metrics.go", "go/metrics_prometheus.go", @@ -19132,19 +4728,6 @@ }, { "path": "test/dialcache-metrics.test.ts", - "sha256": "ce0e770bbaf97621c97ea329fd513e27810a9fc27aa6f736f1ad1e1f8ffb528e", - "entries": 25, - "contracts": [ - "B02", - "C20", - "C21", - "C27", - "C30", - "C33", - "C55", - "C57", - "C58" - ], "goFiles": [ "go/metrics.go", "go/metrics_prometheus.go", @@ -19160,12 +4743,6 @@ }, { "path": "test/dialcache-observability-internals.test.ts", - "sha256": "70e8901dd77e950362f14085989cd0560b9c9bb01f013cdca4bf5b3a9903eb8e", - "entries": 3, - "contracts": [ - "C16", - "C21" - ], "goFiles": [ "go/policy.go", "go/policy_test.go", @@ -19180,21 +4757,6 @@ }, { "path": "test/dialcache-redis-read-deadline.test.ts", - "sha256": "177808835689a92414d37b6aaf0c03dd63d771854e6a182869fe0ad193da62a6", - "entries": 15, - "contracts": [ - "B01", - "B02", - "C20", - "C22", - "C23", - "C24", - "C25", - "C28", - "C31", - "C56", - "C58" - ], "goFiles": [ "go/deadline.go", "go/engine.go", @@ -19211,25 +4773,6 @@ }, { "path": "test/dialcache-redis.test.ts", - "sha256": "f0adbf2e0fbc9e1359ba255ce7b29019568e534a20d1e27af5a3177a4df061a0", - "entries": 27, - "contracts": [ - "B01", - "B02", - "B03", - "C05", - "C18", - "C22", - "C27", - "C28", - "C30", - "C55", - "C57", - "C58", - "E04", - "W04", - "W06" - ], "goFiles": [ "go/redis_adapter.go", "go/redis_adapter_test.go", @@ -19245,20 +4788,6 @@ }, { "path": "test/dialcache-request-local.test.ts", - "sha256": "1384b1755481a5fcc2234b2d38361c411751e651745f8d22f58a0ccd2c21b200", - "entries": 12, - "contracts": [ - "B02", - "B03", - "C02", - "C03", - "C04", - "C06", - "C07", - "C11", - "C15", - "C19" - ], "goFiles": [ "go/cache.go", "go/bindings.go", @@ -19276,30 +4805,6 @@ }, { "path": "test/dialcache-shadow-confirmation.test.ts", - "sha256": "98d38eaf23999cdb1072ba0f9136c7ef028f59f45f58984b41fe2969920b36b1", - "entries": 50, - "contracts": [ - "B02", - "B03", - "C17", - "C18", - "C20", - "C22", - "C37", - "C47", - "C49", - "C50", - "C51", - "C52", - "C53", - "C54", - "C55", - "C57", - "C58", - "C60", - "W03", - "X01" - ], "goFiles": [ "go/shadow.go", "go/codec.go", @@ -19317,24 +4822,6 @@ }, { "path": "test/dialcache-shadow-validation.test.ts", - "sha256": "be19562adbd0ec05f0f5c3113fb03331e1506b21cbcb046da7b5055f7aa42f31", - "entries": 36, - "contracts": [ - "B02", - "B03", - "C21", - "C30", - "C47", - "C48", - "C50", - "C52", - "C53", - "C54", - "C55", - "C57", - "C58", - "W03" - ], "goFiles": [ "go/shadow.go", "go/codec.go", @@ -19352,26 +4839,6 @@ }, { "path": "test/dialcache-stale-on-error.test.ts", - "sha256": "4a7f88315dd6b4c4728f159d173bc9b3b3a5ded341a943130683847e9894c601", - "entries": 31, - "contracts": [ - "B02", - "B03", - "C06", - "C17", - "C18", - "C22", - "C34", - "C37", - "C40", - "C41", - "C43", - "C44", - "C45", - "C46", - "C47", - "W08" - ], "goFiles": [ "go/engine.go", "go/api.go", @@ -19386,17 +4853,6 @@ }, { "path": "test/dialcache-stale-recovery-policy.test.ts", - "sha256": "0cd3257da5c88748802579c663b3c5e3bad13a53fadb8e1ed448a1b2a92a65e8", - "entries": 14, - "contracts": [ - "B01", - "B02", - "C01", - "C18", - "C41", - "C42", - "C43" - ], "goFiles": [ "go/engine.go", "go/api.go", @@ -19411,13 +4867,6 @@ }, { "path": "test/duration.test.ts", - "sha256": "0595adefcbe4fbb8e66fbd9c97c7530f6628a64b861e1be000bb0ad904c03453", - "entries": 4, - "contracts": [ - "C39", - "W05", - "W09" - ], "goFiles": [ "go/policy.go", "go/policy_test.go", @@ -19432,19 +4881,6 @@ }, { "path": "test/node-redis.test.ts", - "sha256": "c9d458295cae96574f285c4472d75c1d0f0de9c3a1245262614a9277966e378f", - "entries": 27, - "contracts": [ - "B01", - "B02", - "C39", - "C55", - "C56", - "C58", - "E01", - "W04", - "W05" - ], "goFiles": [ "go/redis_adapter.go", "go/redis_adapter_test.go", @@ -19460,12 +4896,6 @@ }, { "path": "test/prometheus.test.ts", - "sha256": "1c081c00ca8642c8ed5e7a3fd5a5faa2d5d06d333f99c2fb0832ead0057c1602", - "entries": 19, - "contracts": [ - "B01", - "X01" - ], "goFiles": [ "go/metrics.go", "go/metrics_prometheus.go", @@ -19481,14 +4911,6 @@ }, { "path": "test/redis-cluster.integration.test.ts", - "sha256": "7c6f642d578cab1b1237743a305bc8d9c315267e94057c61fd67ed2ba4f8bc66", - "entries": 5, - "contracts": [ - "E01", - "W01", - "W04", - "W09" - ], "goFiles": [ "go/redis_adapter.go", "go/redis_adapter_test.go", @@ -19504,14 +4926,6 @@ }, { "path": "test/redis-payload.test.ts", - "sha256": "6e672444310a10ca4bd806e37db5b9118c0e6784dbb0b2f7074e81689e23f03f", - "entries": 19, - "contracts": [ - "B01", - "B02", - "E01", - "W04" - ], "goFiles": [ "go/redis_adapter.go", "go/redis_adapter_test.go", @@ -19527,32 +4941,6 @@ }, { "path": "test/redis-real.integration.test.ts", - "sha256": "cb04c5891e64534319a983e45176e83ffe4c53e6cc6e2f1decd89b87ce636e5a", - "entries": 34, - "contracts": [ - "B01", - "C33", - "C34", - "C35", - "C38", - "C39", - "C40", - "C43", - "C44", - "C49", - "C50", - "C51", - "C52", - "C53", - "C58", - "E01", - "E02", - "W04", - "W05", - "W06", - "W07", - "W09" - ], "goFiles": [ "go/redis_adapter.go", "go/redis_adapter_test.go", @@ -19568,13 +4956,6 @@ }, { "path": "test/shadow-log-json.test.ts", - "sha256": "97d2a80d23bbe76574f97b0f569307a203279de4fa770a253603648325801467", - "entries": 4, - "contracts": [ - "B03", - "C30", - "X01" - ], "goFiles": [ "go/metrics.go", "go/metrics_prometheus.go", @@ -19590,17 +4971,6 @@ }, { "path": "test/valkey-glide.test.ts", - "sha256": "1144ccd7deabea1ed6657b87da7e9718d63bbedded8a2c5a65014098d8a543db", - "entries": 23, - "contracts": [ - "B01", - "B02", - "C39", - "C56", - "E01", - "W04", - "W05" - ], "goFiles": [ "go/redis_adapter.go", "go/redis_adapter_test.go", @@ -19707,7 +5077,6 @@ "goTreatment": "Go uses native sparse maps and go-redis/zstd libraries with explicit decoder resource limits and caller-owned clients. Wire representation and round trips are shared-vector/integration checked; exact compressed bytes, allocation strategy, throughput and operating-system exhaustion are native boundaries. Quint computes envelope and size-selection behavior using native codec lengths that both test bindings independently verify. Different native lengths may cause compressed/not_smaller diagnostic differences at size boundaries; logical payload identity and wrapper rules remain shared." } ], - "scopedQuintAudit": "formal/quint-case-audit.json", "vectorExports": [ { "model": "formal/dialcache-frame-vectors.qnt", @@ -19723,7 +5092,7 @@ "formal/cache-rules.qnt" ] }, - "artifactSha256": "05c7c83ab42a95bf264590a67f6136240d47b0aa39acd93eb0af567eb210010c", + "artifactSha256": "8483d4849166c95aa5cd77433214402cd68f7a2226e0fb7eee5cafeb88e99204", "status": "executable-vector-schedule" }, { @@ -19738,7 +5107,7 @@ "formal/generate-invalidation-vectors.mjs" ] }, - "artifactSha256": "1f16dc975366a76c1282edfff5f9ac91ecb11fbda84abfe628e309bb857274b9", + "artifactSha256": "7916eb3c44bd23cfe4ac6d9a24b7d4ef9f217156b1bf9f3b343a89fc15b199ab", "status": "executable-vector-schedule" }, { @@ -19755,7 +5124,7 @@ "formal/cohort-boundaries.qnt" ] }, - "artifactSha256": "47c7d54591fd3556df13b92fb781308f7f6cfeed0b18d8ca0865a04bd3a963a4", + "artifactSha256": "ec498a23074896062af5b454d56c6c76682cb8498c1aa0149f8802f62a97fa00", "status": "executable-vector-schedule" }, { @@ -19771,7 +5140,7 @@ "formal/generate-envelope-vectors.mjs" ] }, - "artifactSha256": "556212d476413a99b4027d60e5ab5478ecf6bb43fa8d5ad9390e4a24b3e0a099", + "artifactSha256": "8bf30df4ad878464956aa73a948e3a263c29be7aed5412662f2c22f4ddc866b2", "status": "executable-vector-schedule" } ] diff --git a/formal/independent-smoke.itf.json b/formal/independent-smoke.itf.json index 6c3afed8..8d12f40e 100644 --- a/formal/independent-smoke.itf.json +++ b/formal/independent-smoke.itf.json @@ -11,7136 +11,66 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [ - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [ - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [ - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [ - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "2" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [ - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "2" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [ - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "2" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [ - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "2" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [ - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "2" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [ - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "2" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [ - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "2" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [ - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "2" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [ - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "2" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [ - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "5" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "5" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "failRead" - }, - "mbt::actionTaken": "failRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "4" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "4" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "4" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "4" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "5" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "5" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "6" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "6" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "6" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "6" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "6" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "7" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "7" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "7" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "8" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "8" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "9" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "9" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "9" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "9" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "10" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "10" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "10" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "11" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "3" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "12" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [ - "miss", - "miss", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "budgets": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "10" - }, - { - "#bigint": "10" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "4" - }, - { - "#bigint": "5" - }, - { - "#bigint": "6" - } - ] - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"}]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"}]}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":["miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":["miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":["miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"5"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":["miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":["miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":["miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"3"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":["miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":["miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"4"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":["miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"4"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"5"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"5"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"5"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"5"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"5"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"5"},"name":"failRead"},"mbt::actionTaken":"failRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"5"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"3"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"5"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"5"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"4"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"5"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"5"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"5"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"5"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"3"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"4"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"4"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"4"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"4"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"5"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"5"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"5"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"6"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"6"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"5"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"6"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"6"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"6"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"7"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"7"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"7"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"8"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"8"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"9"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"9"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"9"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"9"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"10"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"4"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"10"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"10"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"11"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"12"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok","ok","ok","ok","ok","ok","ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["miss","miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"},{"#bigint":"3"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"5"},{"#bigint":"6"}]}}} ] } diff --git a/formal/kernel/README.md b/formal/kernel/README.md index 474873e0..324b1b67 100644 --- a/formal/kernel/README.md +++ b/formal/kernel/README.md @@ -13,20 +13,31 @@ design and its history; this file describes what is here and how to use it. | --- | --- | --- | | `encodings` | Sentinels shared by the modules: 0 for an absent value, -1 for an unowned slot, 0 for no fence; the `accepted` judgment over outcome codes | `accepted` | | `calls` | What a caller asks for: instance, key, request context, whether it is enabled (a disabled context, a failed key or a call outside every request is not) and whether its key failed to construct, the one bypass whose source keeps the configured deadline (C27) | the `Call` type only | -| `layer_policy` | Which layers a call may use, from the drivers' layer policy code and remote availability; the immediate reply `resolution` and the `BYPASS` reply; the `Ttls` a reply resolves to (local insertion TTL, remote freshness, remote retention), passed beside the resolution, and the `gated` layers a reply uses with them (a layer whose TTL is 0 is off) | `enabledLayers`, `sharedLayers`, `resolution`, `gated` | +| `instances` | Which instances the environment has constructed (`Constructed`): the local-clock drivers construct default instances at fractional process times and the model records only that an instance exists, since the layers judge time on the shared whole-millisecond grid whatever the construction phase (C09); read by guards and input domains alone, never by a rule, and kept as a transition because the composition lint has no environment allowance yet, as `request_memo::openScope` is | `construct` | +| `layer_policy` | Which layers a call may use, from the drivers' layer policy code and remote availability; the immediate reply `resolution` and the `BYPASS` reply; the `Ttls` a reply resolves to (local insertion TTL, remote freshness, remote retention), passed beside the resolution, and the `gated` layers a reply uses with them (a layer whose TTL is 0 is off); the `effectiveTtls` of the layers a reply uses (a layer left off has TTL 0), which a traversal suspended at the remote layer carries instead of the resolution | `enabledLayers`, `sharedLayers`, `resolution`, `gated`, `effectiveTtls` | | `runtime_policy` | How a runtime policy reply (the runtime-boundaries drivers' codes 0 to 21) resolves against an instance's configured baseline: serving cohorts, omitted, null and invalid leaves, runtime TTLs, the kill switch | `resolve` | | `request_memo` | Request-scoped memo rows and their closure; `openScope` and `Opened` are environment bookkeeping (which contexts an input has created) that no memo rule reads, kept beside the memo rows because the composition lint has no environment allowance yet | `scopeOpen`, `memoSlot`, `memoValue`, `memoize`, `openScope`, `closeScope` | | `local_storage` | Per-instance local storage with LRU eviction, insertion expiry (`cache_rules.localEntryLiveAt`) and a hit that renews recency, not insertion | `localValue`, `promote`, `putLocal` | -| `remote_frames` | Remote frames stamped on the wall clock and retained until an instant on the monotonic clock (`cache_rules.deadlinePendingAt`), served while retained and fresh for the reply's freshness (`cache_rules.freshAgeAllowed`, which rejects a stamp from after a wall rollback); per-entity watermarks and fences on the wall clock (`cache_rules.fenceAllows`); a watermark never lowers | `seedFrame`, `raiseWatermark`, `readableFrame`, `missFence`, `writeAllowed`, `retained`, `fresh` | -| `flights` | Source executions (a record of outcome and process sharing, with whatever payload the traversal that started it needs), the process and request registries that coalesce callers, and per caller its owner and memo slot; an opt-in record of the identity each caller asked for | `processOwner`, `requestOwner`, `admitCaller`, `attachCaller`, `joinRequestFlight`, `registerSource`, `settleSource`, `forgetScope`, `ownedBy`, `recordIdentity` | -| `clock` | Elapsed time on the monotonic clock; the wall clock is that clock plus a skew (`wallOf`), so one transition moves both and only the skew shifts on a rollback | `advance`, `wallOf`, `shiftWall` | +| `payloads` | Payload validity classes: the code a remote frame stores. The drivers' value codes below 100 decode to themselves; an enveloped band from 100 up keeps class and value apart, a class hundred (`COMPRESSED`, `CORRUPT`, `UNSUPPORTED_ENCODING`, and the two spellings that decode like a plain value but carry other bytes, `PADDED` and `UNICODE`, the shadow drivers' payloads) plus the value the bytes carry (`classOf`, `valueOf`; a profile spells a seed as `Payloads::COMPRESSED + VALUE_ONE`, arithmetic over constants; the form line `BINARY`: a payload at or above it is the binary spelling of the text payload below it, the same bytes, `bytesOf`, which every class judgment reads and the shadow confirmation compares across the two forms, C51; a compressed or corrupt code reaches a decode step or candidacy only with a positive value, the test `remote_frames::observe` and `recovery::retain` apply before any decode, so a bare class code is routed as a declined visible frame, and `UNSUPPORTED_ENCODING` is spelled bare because it names no value), and says what a frame's bytes do by their class alone, judged once in `remote_frames::observe` for the atomic release and the held read settlement, at the held decode (`remote_io::settleLoad`) and at candidate retention (`recovery::retain`). A code that fails the read never reaches a serve site; one that fails the decode reaches it only through the held decode step, which fails it; every serve site judges the decoded value, never the code (`serving::decide` and `remote_io::settleRead` serve a positive `valueOf` only, `recovery::retain` admits a candidate only when its code decodes to a value), so a code whose `valueOf` is `NO_VALUE`, the integer `CALL_PENDING` shares, never completes a caller. Documented limit: the atomic release has no decode step and serves `valueOf` of a fresh corrupt frame, the value its bytes would have carried, so a profile over the atomic path seeds no decode-fault payload (pinned by the payload-classes fixture) | `bytesOf`, `classOf`, `valueOf`, `readFails`, `decodeFails`, `decodeOutcome` | +| `remote_frames` | Remote frames stamped on the wall clock and retained until an instant on the monotonic clock (`cache_rules.deadlinePendingAt`), `visible` while present, retained and (tracked) fence-cleared whatever their age, served while also fresh for the reply's freshness (`cache_rules.freshAgeAllowed`, which rejects a stamp from after a wall rollback); per-entity watermarks and fences on the wall clock (`cache_rules.fenceAllows`); an invalidation never lowers a watermark: it raises it to the wall clock plus the invalidator's future buffer only when that is ahead (`raiseWatermark`, the public `futureBufferMs`; 0 where the drivers pass none), and only a marker's expiry (`markers`) lowers one, to the zero baseline (`clearWatermark`); what one read observes, judged once for the atomic release and the held read settlement (`observe`: whether the read `failed`, the drivers' fault or a visible frame whose payload code fails the read, `payloads::readFails`; a failed read observes nothing; else whether a frame is visible, its `payload` code and the value a fresh one serves, what the code decodes to, `payloads::valueOf`); the tracked one-hour cap on the retention a refill is written with (`TRACKED_RETENTION_CAP_MS`, `physicalRetention`: an untracked write keeps its full retention, and the recovery snapshot's logical maximum is never capped); a refill's fence is the watermark a read observed when it found no visible frame (`fenceFor`, C58: a visible frame the traversal declined carries none; on the atomic path this rule is pinned by the frame-clocks fixture runs `visibleStaleMissCarriesNoFenceTest` and `frameAtTheWatermarkKeepsTheMissFenceTest` and by the TypeScript reading, where `src/internal/redis-cache.ts` returns the observed watermark only for an adapter-side miss and `src/dialcache.ts` forwards it to the refill only for a miss status, not by the composed differentials: the one composed corpus that declines a visible frame, policy, is untracked, where the old and new rules both yield no fence, and the tracked corpus, layers, retains frames exactly as long as they are fresh, so it never declines one); a write with an explicit stamp (`storeFrame`), with the wall clock (`seedFrame`) or at an age (`seedAged`) | `storeFrame`, `seedFrame`, `seedAged`, `raiseWatermark`, `clearWatermark`, `visible`, `fenceCleared`, `observe`, `missFence`, `fenceFor`, `writeAllowed`, `retained`, `fresh`, `physicalRetention` | +| `flights` | Source executions (a record of outcome and process sharing, with whatever payload the traversal that started it needs), the process and request registries that coalesce callers, and per caller its owner and memo slot; settling a source is recording its outcome (`recordResult`) and forgetting it in the registries (`forgetSource`), apart so a flight that first recovers a retained value stays joinable until it completes; a detached source (`registerDetached`, a served shadow job's: appended under the next index and registered nowhere, so `ownedBy` is empty for it); the newest source (`latest`, for a profile whose drivers settle the latest loader rather than one named by index, and for an inline source settled by the call that started it); an opt-in record of the identity each caller asked for | `processOwner`, `requestOwner`, `admitCaller`, `attachCaller`, `joinRequestFlight`, `registerSource`, `registerDetached`, `recordResult`, `forgetSource`, `forgetScope`, `ownedBy`, `latest`, `recordIdentity` | +| `clock` | Elapsed time on the monotonic clock; the wall clock is that clock plus a skew (`wallOf`), so one transition moves both and only the skew shifts on a rollback; the environment's fractional time beside the clock the layers read (`Ticked`: the drivers' ticks, with the monotonic clock as that time on the whole-millisecond grid, `cache_rules.wholeMs`, so a fractional advance moves `now` only across a millisecond boundary and local insertion and expiry fall on the grid whatever an instance's construction phase, C09) | `advance`, `advanceTicks`, `wallOf`, `shiftWall` | | `policy_gate` | Callers whose policy reply the environment holds, with their calls, indexed by their policy call | `hold`, `holding`, `holds`, `latest`, `entry`, `release` | -| `serving` | Admission, traversal order (`decide`), ownership precedence, publication and refill authority with the TTLs each source captured from the reply that started it, the remote adapter's read, dump and write faults along a refill, scope closure, maintenance; the layered shape and its local and request-only projections; the layered release judged once (`layeredRelease`) for the transition and the records composed around it | `admit`, `release`, `begin`, `settle`, `admitLocal`, `releaseLocal`, `settleLocal`, `admitRequest`, `releaseRequest`, `settleRequest`, `closeScope`, `invalidate` | -| `deadlines` | Source budgets: the budget a source starts with (a source started at admission is bounded only when its key failed, C27, a disabled context and an outside call run theirs unbounded, C01; a source started at release is bounded, its caller was enabled when admitted), the deadline measured from the source's own start, expiry on timer delivery or late arrival, abandoned work draining, as budgeted variants of the local lifecycle | `admitLocal`, `releaseLocal`, `settleLocal`, `advanceLocal` | -| `diagnostics` | The diagnostics channel: the singleflight a caller coalesced into and the layer a failed source is attributed to, as diagnosed variants of the request-only traversal | `admitRequest`, `releaseRequest`, `settleRequest` | +| `serving` | Admission, traversal order (`decide`), ownership precedence, publication and refill authority with the TTLs each source captured from the reply that started it, the remote adapter's read, dump and write faults along a refill, scope closure, maintenance (`invalidate`, the outcome rule of the write-fault switch: `missing_remote` without remote storage, `mutation_error` under a write fault with the invalidation counted and the watermark unmoved, `ok` raising the watermark to the wall clock plus the invalidator's future buffer, `bufferMs`, 0 where the drivers pass none; `maintains`, whether an invalidation takes effect, the judgment the effective arm branches on and a marker lifetime reads); the layered shape and its local and request-only projections; the layered release judged once (`judgeRelease`, with the remote observation as a parameter; `layeredRelease` observes it; the judgment carries the observation, `remote_frames::Observed`, which `startSource` passes to the authority so a failed read, an adapter fault or a payload that fails the read alike, denies the refill on the atomic path as on the held one, and a source started without the remote layer passes `remote_frames::UNOBSERVED`; `judgeReleaseUnder` takes the local read's fault as an argument, `local_faults`: the local value hidden, the layers and the sharing as the reply resolved them, and the judgment carries the fault so `releaseJudged` publishes for the TTLs it allows, `publishable`: no local TTL for the remote hit it serves or the source it starts) for the transition and the records composed around it, and the steps a held remote effect suspends between, which the atomic path composes too: the release prologue up to the remote layer (`applyRelease`), publication authority fixed when a remote read completes (`authority`, capturing the retention the refill is written with, `remote_frames::physicalRetention`, so the source record and the write agree), warm-on-hit (`warm`), completion apart from the recorded outcome (`complete`, `finish`) and publication apart from completion (`refillAllowed`, whether a captured authority may be written now, the judgment a caller's refill, `refills`, and a shadow job's fill, `shadow::fill`, share; `dispatchWrite`, `publish`, `settle`); the judgment applied apart from the judging (`releaseJudged`, the release after `layeredRelease`, so a variant that records beside the release judges once and applies the same judgment) and a detached source (`startDetachedSource`: a source no caller owns, counted against the profile, probed as not participating, without publication authority, whose settlement completes no caller); whether the drivers install a policy provider is a layout fact (`Layout.policyProvider`: `entered` counts a policy call per participating admission only where one exists; an instance that resolves policy from its key's default configuration, the local-clock drivers' default instances, makes none); the local projection's immediate reply (`beginLocal`) and its inline call (`callLocal`: the loader returns before the call does, so the source a miss starts settles at once with the loader's value and a hit settles nothing) | `admit`, `release`, `judgeReleaseUnder`, `releaseJudged`, `startDetachedSource`, `begin`, `settle`, `publish`, `complete`, `finish`, `admitLocal`, `releaseLocal`, `settleLocal`, `beginLocal`, `callLocal`, `admitRequest`, `releaseRequest`, `settleRequest`, `closeScope`, `invalidate`, `maintains`, `refillAllowed` | +| `local_faults` | The local storage fault switch (C27) over the layered shape (`Faulted`: `serving::Served` with `localFailed`), read at the two points a call touches local storage and passed as an argument, the kernel's fault idiom, never turned into a TTL the layer gating reads: an admission with an immediate reply (`begin`) judges the layered release with the fault as its argument (`serving::judgeReleaseUnder`: the local value hidden, the layers and with them the coalescing untouched, nothing warmed from the release) and applies that judgment (`serving::releaseJudged`), so the traversal reads nothing from local storage, a remote hit warms nothing, the source it starts captures no local TTL (publication-ineligible whatever the switch says at settlement) and two callers under the fault share one source as two healthy callers do, as the implementations decide the process flight from the resolved layer configuration before the read and a read that throws disables only that call's local value and write (`src/dialcache.ts` `getThroughSharedLayers`, `getThroughActiveLocal`); a settlement (`settle`) withdraws the source's captured local TTL, so `serving::publish` warms nothing while the callers complete with the accepted result, the request memo is written and the remote refill proceeds; the traversal and the publication keep their one statement in `serving`, and the remote fault switches stay in `serving::Served` because the traversal reads them mid-release where this one is read at its two entry points; one consumer today, local-failure | `begin`, `settle` | +| `markers` | Invalidation markers: the lifetime of an entity's watermark, which the implementations keep as a Redis key with a TTL (`src/internal/redis-scripts.ts`): the larger of the two-hour floor (`MARKER_FLOOR_MS`, twice the tracked cap) and the span from the invalidation's wall clock to the watermark plus the cap and a minute's margin (`lifetime`), keeping a longer remaining lifetime; marker expiry is a time transition that returns the watermark to its zero baseline (`expire`, run by `advance`, through `remote_frames::clearWatermark`), so `remote_frames` keeps reading the raw watermark and the fence stays stated once, and only an expiry lowers a watermark; an invalidation stamps a marker when it takes effect (`serving::maintains`), as a variant of `serving::invalidate` passing the invalidator's future buffer through, whose outcome rule it does not restate (the marker lifetime reads the raised watermark, so a buffer lengthens the marker as the script does); `observe` appends the marker the drivers read (its cutoff against an explicit origin and its remaining lifetime) or `NO_MARKER` (PTTL -2 on a missing key); one consumer today, recovery-read | `invalidate`, `advance`, `expire`, `observe`, `inForce`, `lifetime` | +| `deadlines` | Deadlines: one pending-only list of `Due` records (the work's kind, `READ`, `SOURCE` or a shadow job's `JOB`, its index in the drivers' order and the instant it is due), registered when bounded work starts and forgotten when it settles or is delivered, so bounded is presence; the budget a source starts with (a source started at admission is bounded only when its key failed, C27, a disabled context and an outside call run theirs unbounded, C01; a source started at release, with or without the remote layer, or a loader started for a held read is bounded, its caller was enabled when admitted; a held read is bounded by the read budget in force at dispatch); the `Scheduled` shape, the clock beside the pending deadlines, which registration (`due`), forgetting (`forget`) and delivery read and which `Budgeted` extends with the source budget and the drained flags: a module that bounds work of its own kind composes `Scheduled` alone (`shadow`'s jobs, kind `JOB`); instant-ordered delivery (`deliver`: an advance moves both clocks to each due instant inside it and delivers what is due there in registration order, so a loader a read expiry starts is delivered at its own instant in the same advance; a deadline the clock passed undelivered is delivered at the first instant the next advance visits); a result arriving after its deadline is a deadline error (`arrival`); abandoned work drains once, when its result arrives; as budgeted variants of the local lifecycle, which keep per-source history (`started`, `budgets`, `settledAt`), and of the held lifecycle (admission and release apart for a profile whose drivers hold policy replies, `begin` for immediate ones, `beginRead` for immediate ones whose drivers hold decodes and loaders but not reads: the read the step dispatched settles in it, `settleDispatched`, registering no read deadline under the unbounded budget such a read takes, a finite one reached at once only when zero; `releaseJudged` applies a release judgment already made, `release` is its composition with the judgment, so a variant that records beside the release judges once; `settleObserved` is the budgeted read settlement applied from a judgment already made, the read expired first when its deadline passed undelivered, `expiredIfReached`, as `settleRead` does before judging the frames) | `admitLocal`, `releaseLocal`, `settleLocal`, `advanceLocal`, `admit`, `releaseJudged`, `release`, `begin`, `settleDispatched`, `beginRead`, `settleRead`, `settleObserved`, `settleLoad`, `settleLoader`, `advance` | +| `remote_io` | Remote effects the drivers hold and release by effect index, over the layered shape (`Held`): the release judged with the remote layer unobserved dispatches the read (counted then, its budget on the drivers' `io` channel) and registers the caller's flight, so a follower released while the read is pending joins it, or starts a source without the remote layer at once; every source started as a new flight takes the drivers' next loader ordinal (`mapLoader`, stated once for admission and release; a loader started for a held read's flight maps itself); the read settles with the state then current (a payload that fails the read fails it like an adapter fault), holding a decode with the frame's payload code or starting the flight's loader with the authority the read fixed; a decode settles by completing the flight with the value its payload decodes to (a fresh one warming local storage) or restarting a loader after a failed decode (the drivers' fault or a payload whose bytes fail to decode, `payloads::decodeFails`, which a recovery decode reports as its deserialization error); a loader settles by the drivers' ordinal (`loaders` maps ordinals to flights) and, failed, consults the flight's recovery snapshot through `recovery::failure`, holding a recovery decode when the candidate serves and completing with the error otherwise (the miss reported by `recovery::failure`); a read whose deadline was delivered owns nothing and its late reply drains; `io` (read budgets, aborted reads, per-caller source-error identities) is written by the transitions that have each fact in hand. Held reads and decodes are pending-only records; `releaseJudged` is the release applied from a judgment already made (`serving::judgeRelease` with the remote layer unobserved) and `release` its composition with the judgment; `begin` is admission and the held release in one step for a profile whose replies are immediate (a read settled in its dispatching step is `deadlines::settleDispatched`, the budgeted variant's: only that shape can forget the read deadline it may have registered); `latestRead`, `latestLoad` and `latestOrdinal` name the most recently held read and decode and the newest loader ordinal for a profile whose drivers name the latest effect rather than an index; `holdRead` is a read held over a flight (counted, budgeted on the io channel, indexed), stated once for the caller's dispatch here and a job's confirmation read in `shadow`; `settleObserved` is the read settlement applied from a judgment already made (what the read observed and the fence the refill it may start carries, `startLoaderFenced`, which takes the fence as an argument where `startLoader` reads it from the frames), so a variant that substitutes what a read observed applies the same settlement, and `settleRead` is its composition with the judgment of the frames | `admit`, `releaseJudged`, `release`, `begin`, `holdRead`, `settleRead`, `settleObserved`, `expireRead`, `settleLoad`, `settleLoader`, `startLoaderFenced`, `latestRead`, `latestLoad`, `latestOrdinal` | +| `compression` | The compression channel: the outcome a decode reports as it is dispatched (`payloads::decodeOutcome`: "decompressed", "fallback_raw", nothing for an uncompressed frame), appended by variants of the two held transitions that hold a decode (`remote_io::settleRead` on a fresh frame, `remote_io::settleLoader` on a failed loader with a recovery candidate) over `Compressed`, the held shape with a `compression` channel; a variant rather than a mandatory `Held` field (independent would carry a channel it never reads) or a profile-side wrapper (invisible to the composition lint); one consumer today, recovery-read | `settleRead`, `settleLoader` | +| `recovery` | Stale-on-error recovery (C40 to C46, C57) as a consulted record: the snapshot a flight retains when its read completes without serving (the visible frame's payload code when it decodes to a value, `payloads::valueOf`, and its age lies in [freshness, maximum), its stamp at the read, the maximum the reply's retention resolved to, the classifier in force), the loader failure judged once for whichever path consults it (`failure`: the classification counted, whether the candidate then serves, and the miss reported when recovery was allowed and it does not) and the recheck at recovery-decode settlement (`recovered`: the label and whether the candidate serves; a flight that does not serve it completes with the outcome its source recorded); classifier codes `NONE` (no stale-on-error: nothing is retained), `TIMEOUT_ONLY`, `ALLOW`, `DENY` (a profile decodes a classifier that throws to `DENY`, as the implementations do); `remote_io` and `remote_writes` read it (the held path holding a recovery decode, the atomic one decoding at once), no profile composes a recovery transition | `retain`, `failure`, `classified`, `mayRecover`, `validCandidate`, `recovered`, `recordOutcome`, `drop` | +| `remote_writes` | The atomic remote lifecycle with held writes, over the layered shape (`Writing`: held dumps and writes as pending-only records keyed by the drivers' effect ordinal, and the recovery snapshots): the layered release applied from its judgment (`releaseJudged`, the one release seam: `shadow` judges the release once through `serving::layeredRelease` and applies it here), retaining the snapshot of a source it starts after a completed remote read that served nothing (`recovery::retain`, as the held read settlement does); a source that settles accepted and refills records its result and holds its dump (`settle`, `holdDump`: the dump counted then, with the retention the source captured and the fence its read observed, C18/C58) and publication completes with the write: the dump released dispatches the write stamped with the wall clock of that release (`dispatch`, `serving::dispatchWrite`, C33; a fence the wall no longer clears stops it and the flight completes without one), the write released stores the frame with the captured stamp, warms local storage for the source's local TTL and completes every owner (`store`, `releaseWrite`); an accepted value that does not refill publishes and completes at once (`serving::publish`); a failed source consults the flight's snapshot once (`recovery::failure`) and, the path being atomic, decodes the candidate at once (`failed`: the decode counted, `recovery::recovered`) or completes with its error (the miss reported by `recovery::failure`); the adapter's dump and write faults are the `failed` argument of the two releases (a failed dump dispatches no write, a failed write stores nothing, the flight completes either way, as `serving::publish` has it); a dump abandoned before its release dispatches no write (`abandonDump`); the newest held dump and write (`latestDump`, `latestWrite`, as `remote_io` names its latest read and decode) for a profile whose drivers release the latest effect; a held dump records the wall clock its first fence check sampled (`HeldDump.sampled`, the pre-serialization receipt, C34: the fence was cleared at that instant whatever the wall clock does before the release's second check); the same held refill over the held read path (`HeldWriting`, `deadlines::BudgetedHeld` with held dumps and writes; `settleLoader`: a loader settled by the drivers' ordinal whose accepted result refills records its outcome, drops its snapshot and holds its dump, every other arrival being `deadlines::settleLoader`) for a profile whose drivers hold reads, decodes, loaders, dumps and writes alike (effects); one consumer of the atomic lifecycle today, shadow-layers | `releaseJudged`, `settle`, `settleLoader`, `failed`, `holdDump`, `dispatch`, `abandonDump`, `abandonWrite`, `releaseDump`, `store`, `releaseWrite`, `complete`, `finish`, `holdsDump`, `heldDump`, `holdsWrite`, `heldWrite`, `latestDump`, `latestWrite` | +| `shadow` | Shadow jobs (C47 to C54, C57, C60): the diagnostic work a served remote hit or a ramped-down miss admits beside the caller, in one per-instance registry of bounded capacity shared by both kinds (`Jobs`: the jobs, their budgets and the sources they run for; pending-only and keyed by the job's source, a finished job leaving no record, as a settled held read or dump does), composed by two lifecycles: the atomic one (`Shadowed`, `remote_writes::Writing` with the jobs and their deadlines) judges the hit and the policy in one step at release and makes the dark C0 read, the decode and the confirmation read at once; the held one (`HeldJobs`, `remote_io::Held` with the held fills, the jobs and their deadlines) holds them as `remote_io` holds a caller's read and decode, in the same lists under the drivers' effect indices, budgeted on the io channel like every held read and never deadline-registered, a held effect over a source whose job is reading or decoding being that job's (`holdsRead`, `holdsLoad`, `latestRead`, `latestLoad`). The policy in force for a call is `Shadowing`: whether the outcome hook is installed (C47), the cohort selection its reply resolved (per call, C18), the instance's capacity and job budget, and whether a confirmed mismatch is logged (C60, captured by the job, `Job.logging`); `Malformed` says whether the ramp or the logging value failed to resolve; the comparator the drivers install is `Comparison` (ordinary value equality, or a callback reporting equal, unequal, or throwing after consuming elapsed time). A job captures the TTLs its reply resolved to (`Job.ttls`, C18) and the fence its C0 read observed when it found no visible frame (C58); the fill authority is `serving::authority` at the fill (`fill`, one statement for callers and jobs through `serving::refillAllowed`: the retention capped for a tracked write, `fill_fenced` before serializing when the fence no longer allows the write, no dump). Atomic admission beside the release judged once (`admitJobs` from `serving::layeredRelease`; `release` and `begin` compose it after `remote_writes::releaseJudged`): nothing unless the hook is installed and the reply selected the cohort (`admits`); a served job over a detached source (`admitServed`, stated once for both lifecycles: `serving::startDetachedSource` with the payload the hit served as its C0), a dark job over the caller's own source reading its C0 from the remote layer itself (the read counted; the payload when the frame is fresh for the reply's freshness, `acquired`, nothing otherwise), a dark C0 read that fails being the label alone, `redis_error`, the read counted, no job, nothing filled; nothing for an ordinary serving miss, a request or local hit or a bypass reply (the caller's scope closed before its release), `dropped` for a live job of the same identity or a full instance (`busy`, C47); settlement of the job's source (`settle` after `remote_writes::settle`, `settleJob`: `sourceOutcome`, `source_error`, or `timeout` for a source the caller's deadline failed; the fill when there is no C0; else the decode counted and `match` when the decoded value agrees, `valuesMatch`, or a confirmation read counted and its verdict, `confirmation`, the one judgment for both lifecycles: `mismatch` when the C0 bytes are still current, `payloads::bytesOf`, so a text and a binary spelling confirm each other, `superseded` otherwise, `confirmation_error` when that read fails); the held fill's releases (`releaseDump`, `releaseWrite`: `filled`, `fill_fenced`, `fill_error`; a dump released after the budget dispatches no write while a write released after it still stores, C53; a job's fill completes nobody). The held lifecycle's rules, stated once over `remote_io`: the source settled fills or holds the decode (`settleJobHeld`), the decode settled says `match` or holds the confirmation read under the read budget in force (`settleJobLoad`: `deserialization_error` when the decode fails; the comparator's elapsed time moving the clock without delivering timers, a budget it reaches ending `timeout` before any verdict, a throwing callback `comparison_error`, the callback counted, `o.comparisons`), the read settled says the verdict or acquires the C0 with its fence and continues at once when the source already settled (`settleJobRead`; `redis_error` for a failed C0 read); a timed-out job ends silently at whichever step finds it so, keeping its slot until then. Served jobs (`HeldShadowed`, the admission profile: `beginHeld` and `releaseHeld` over `remote_io::begin` and `release`): the selection is captured for the flight whose read the step dispatched (`capture`, a pending-only list of flights) and consulted when the hit is judged, at the decode's settlement (`settleLoad`: a fresh frame decoded completes the flight with a served hit, which admits the job through `admitServed` under the hook and limits read then and maps its detached source to the drivers' next loader ordinal; a failed or recovery decode admits nothing), or forgotten at the read's settlement when it holds no decode (`settleRead`); a job's read or decode settles as the held lifecycle has it, a loader by the drivers' ordinal (`settleLoader`). Dark jobs (`DiagnosedShadowed`, over `diagnostics::DiagnosedHeld`: the caller's source deadline, the layer its failure is attributed to and the channel the shadow drivers compare): `beginDark` is the diagnosed held release (`diagnostics::admit`, `serving::judgeRelease`, `diagnostics::releaseJudged`) with the configuration error a malformed policy reports (`diagnostics::recordConfigError`: an invalid ramp always, an invalid logging value only where the hook and the ramp would otherwise admit the job), the job registered with its budget (`admitDark`) before the source's synchronous work moves the clock, and the C0 read dispatched or the job timed out with no read when the work exhausted the budget (`dispatchC0`, C54); `settleHeld` settles a loader through `diagnostics::settleLoader` and continues the job waiting on a flight the step settled; `releaseRead` and `releaseLoad` are the job's read and decode settlements with the channel facts recorded beside the label they reported (`recordVerdict`: a `match` or a confirmed `mismatch` samples the C0 frame's age at the verdict, clamped to zero after a wall rollback, `diagnostics::recordAge`, C57, and a confirmed mismatch warns exactly when the job captured logging on, `diagnostics::recordWarning`, C60; a shadow read of a frame stamped after the wall clock reports the offset on the `remote_shadow` layer whatever follows, `diagnostics::recordFutureOffset`); `advanceHeld` delivers job budgets, read deadlines and source deadlines by kind (`expireHeld`: a source deadline ends the job waiting on its flight `timeout` through `settleJobHeld`, releasing its slot, and a job budget due in the same round finds it gone). Every job's budget is kept by `deadlines` (kind `deadlines::JOB`, keyed by the job's source: registered in `admit`, forgotten in `finishJob`, delivered by `advance` or `advanceHeld` through `expireJob`: `timeout` said once, a dark job still waiting leaving the registry while the caller's source runs on, any other job keeping its record until its held work drains, no later label following); cohort selection stays the profile's decoder over `cohort_boundaries`; three consumers: shadow-layers over the atomic lifecycle, admission over the held served-job arm and shadow over the dark arm | `begin`, `release`, `admitJobs`, `admitServed`, `admits`, `admit`, `dropped`, `busy`, `acquired`, `settle`, `settleJob`, `sourceOutcome`, `fill`, `valuesMatch`, `matches`, `confirmation`, `finishJob`, `releaseDump`, `releaseWrite`, `expireJob`, `advance`, `settleJobHeld`, `settleJobLoad`, `settleJobRead`, `beginHeld`, `releaseHeld`, `settleRead`, `settleLoad`, `settleLoader`, `admitDark`, `dispatchC0`, `beginDark`, `settleHeld`, `recordVerdict`, `releaseRead`, `releaseLoad`, `expireHeld`, `advanceHeld`, `holdsJob`, `jobOf`, `sourceOf`, `duplicate`, `full`, `holdsRead`, `holdsLoad`, `latestRead`, `latestLoad`, `confirming` | +| `diagnostics` | The diagnostics channel (`d`, a row-polymorphic `Channel[q]` so a profile whose drivers compare more fields carries them beside the four every descriptor parses): the singleflight a caller coalesced into and the layer a failed source is attributed to, as diagnosed variants of the request-only traversal; and, as diagnosed variants of the budgeted held lifecycle (`DiagnosedHeld`) for a profile whose replies are immediate, its reads settled at admission or held, the singleflight a follower coalesced into (`request_local`, or the process registry's `PROCESS_SCOPE`), the layer a flight is attributed to when it starts (`REMOTE_LAYER` for one that dispatched a read, whatever the read observed; the request memo or the shared layers' fallback for a source started without the remote layer; none for a bypass source started at admission), the fallback error recorded against that layer when the flight's failure is recorded (a late result that only drains records nothing) and the recovery age sampled when a recovery decode serves (`recordAge`, C57); each held variant judges the release once, through `deadlines::releaseJudged` (`admit`, the bypass attribution, and `releaseJudged`, the held release applied from a judgment and labelled from it, are the split `begin` composes, admission and the held release in one step for a profile whose drivers hold the read, and `beginRead` settles in the same step through `deadlines::settleDispatched`, so a variant that admits work beside the held release, `shadow::beginDark`, judges once and applies them); the two fields the shadow drivers compare beside the four (`ShadowChannel`: the configuration errors a malformed shadow policy reports, `recordConfigError`, and the offsets of frames a shadow read found stamped after the wall clock, on the `remote_shadow` layer, `recordFutureOffset`, C57) and the warning a confirmed mismatch logs (`recordWarning`, C60), recorded by `shadow` at the moment each fact is known | `admitRequest`, `releaseRequest`, `settleRequest`, `admit`, `releaseJudged`, `begin`, `beginRead`, `settleLoader`, `expireLoader`, `advance`, `settleLoad`, `recordAge`, `recordWarning`, `recordConfigError`, `recordFutureOffset` | +| `adapter_replies` | The queued adapter reply (C55): what the remote adapter returns in place of the stored frame, interpreted once at the trust boundary as the ports do (`validateReadResult`, `frameAge`, `decodeTrackedRedisReadResult`). The drivers queue one reply by its class (`queue`, the sixteen classes of the effects `adapterReply` choices, only the ones a rule names spelled); the next successful raw completion consumes it whether or not DialCache still owns that read (`settleRead`: an owning read observes the reply in place of the frames and starts its source with the reply's fence through `deadlines::settleObserved`, an abandoned one drains as any other; a failed completion leaves it queued). A miss reply is read by its discriminator (`reason`: a known cause survives, `value_absent`, `expired`; an unknown reason or shape is `unclassified`; `watermark_fenced` only beside a valid fence); a fence survives only on a tracked key and only as a valid timestamp (`carriesFence`, `fenceOf`: the reply's wall clock plus the drivers' buffer, the refill fence of the source the miss starts, C58); a frame-shaped reply with stray miss metadata is a visible frame stamped at the reply's wall clock and judged fresh like a stored frame (`observed`, a future-dated one declined as an unclassified miss without a fence). No reply is ever stored; one consumer, effects | `queue`, `consume`, `queued`, `isFrame`, `carriesFence`, `fenceOf`, `reason`, `observed`, `settleRead` | +| `metrics` | The observer's metric events over the remote layer (C30, C57 to C59), the ordered trail the ports report to their metrics callback and the effects drivers compare as `events` (one record per event: name, layer or scope, detail, amount), stated once as metered variants over `diagnostics::DiagnosedHeld` with held refills and the queued reply (`Metered`): a participating caller's admission reports each shared layer its reply leaves off (`disabled`, `policy_disabled`, local before remote) then its read (`request`) or the singleflight it joined (`coalesced`, the scope `diagnostics` recorded, mirrored from the channel's delta so the rule stays stated there); a read reports its deadline error (`cache_read_timeout`, delivered or found reached at a late reply), its fault (`cache_read`) or its miss with the reason (`missReason`: `value_absent`, `watermark_fenced`, `unclassified` for a future-dated frame after a `futureOffset` of the stamp's lead, `expired`; a queued reply's normalized reason) and its `get` duration from dispatch to settlement or to the fresh decode it held (C59, the decode's own `serialization` `load` duration after its fault, `serialization_load`, and an `unclassified` miss); a loader whose flight's outcome the step records reports its failure against the layer `diagnostics` attributed (`error`, `fallback`) and its `fallback` duration from its start, at arrival or at delivery, a drained late result reporting nothing (C58); a released dump reports `serialization_dump` or its `serialization` `dump` duration from its hold, then `size` and `storedSize`, then `writeDispatch` with the write's index when the second fence check lets it go; a released write reports `cache_write`; a counted invalidation reports `invalidation`. The instants (`readStarted` per flight, `decodeStarted`, `sourceStarted` per loader ordinal, `dumpStarted`) are recorded by the transitions that start each effect (`stamped`). Not stated: a bypass caller's `context` reason, a payload class that fails the read, a recovery decode's events, compression events; one consumer, effects | `event`, `remote`, `error`, `miss`, `stamped`, `readDone`, `begin`, `futureLead`, `missReason`, `settleRead`, `settleLoad`, `sourceDone`, `settleLoader`, `expireLoader`, `expireRead`, `advance`, `releaseDump`, `releaseWrite`, `invalidate` | | `policy_overlay` | How a runtime policy overlay (the policy drivers' codes 0 to 25) resolves against a fixture's baseline TTLs: each layer's TTL, the retention a refill is written with, coalescing (codes 10 to 19 disable it), and whether the reply failed (a provider fault or an invalid read budget); the overlay decides the TTLs, the reply's layer set is the shape's (remote where remote storage exists), and the traversal gates each layer on its TTL at release (`layer_policy::gated`) | `failed`, `localTtl`, `remoteTtl`, `retention`, `ttls`, `resolve` | | `config_errors` | The policy-error channel: a reply that fails to resolve is reported once, against no layer, as a `config_resolution` error; an opt-in record composed around the release whose reply failed | `recordConfigError` | -| `receipts` | The receipt of the latest release (the caller, its key, the layer that served it, that it started a source or joined a flight, and the local slot of its key as the release found it), for one-step expiry and freshness properties, as a receipted variant of the layered release judged once (`serving::layeredRelease`) | `release` | +| `receipts` | The receipt of the latest release (the caller, its key, the layer that served it, that it started a source or joined a flight, and the local slot of its key as the release found it), for one-step expiry and freshness properties, as a receipted variant of the layered release judged once (`serving::layeredRelease`) and applied from that judgment (`serving::releaseJudged`) | `release` | `cache_rules` (age, expiry, deadline and fence judgments) stays the layer under these modules and is imported, never restated. @@ -44,7 +55,8 @@ Encodings are the drivers': caller outcomes are `conformance_observations` codes, layer policy codes are `layer_policy`'s, storage slots hold the value or 0 and registries a source index or -1 (`encodings`). Layouts (keys per instance and per scope row, persistent contexts, operations per entity, whether the -drivers probe each source's scope) are passed as a `serving::Layout` record, so +drivers probe each source's scope and whether they install a policy provider) +are passed as a `serving::Layout` record, so a profile with a different bound composes the same transitions. A call is a `calls::Call` (instance, key, context) and a policy reply resolves to a `layer_policy::Resolution` (the enabled layers and whether the call coalesces) @@ -100,7 +112,12 @@ composes an opt-in record after a transition when one of its own properties or its drivers' channels needs it (`Flights::recordIdentity(Serving::begin(...), call)`, `ConfigErrors::recordConfigError(..., failed(s))`), or a variant that records beside the transition from the release judged once -(`Receipts::release`, like `Diagnostics::releaseRequest`); records the +(`Receipts::release`, like `Diagnostics::releaseRequest`). A variant that +records beside the layered release judges once through +`Serving::layeredRelease` and applies `Serving::releaseJudged`: `receipts`, +`remote_writes` and `shadow` all do, and `shadow` applies the judgment +through `remote_writes::releaseJudged`, so the traversal is judged once +however many records compose around it. Records the traversal itself does not read are never mandatory fields. The traversal has three shapes over one statement of the order (`decide`, @@ -120,10 +137,31 @@ fields of `Traversed`, `processFlights` among them although the request-only shape never writes it, as the accepted cost of one `decide` over every shape. Records only some profiles' drivers compare or bound compose as variants around the same transitions: the `diagnostics` variants record the coalesced -scope and each source's layer, the `deadlines` variants stamp each source's -start and budget and complete expired sources; a profile whose drivers do not +scope and each source's layer, the `deadlines` variants register each +source's deadline and complete expired sources; a profile whose drivers do not compare or bound them carries nothing. +A fact travels beside the traversal in one of three ways, chosen by who needs +it. A pre/post record is composed by the profile around a transition it names +(`Flights::recordIdentity`, `ConfigErrors::recordConfigError`): opt-in, but a +forgotten wrapper is invisible to the lint, so it suits only a fact one +profile's own property reads. A variant is a library transition over a wider +shape that records beside the transition it wraps (`Receipts::release`, the +`diagnostics` and `deadlines` variants): the wrapper cannot be forgotten +because it is the transition. A consulted record is a mandatory field a +library transition writes and reads where the fact arises (`remote_io`'s `io` +channel; the recovery `Snapshot`, created at read settlement from the +classifier argument and consulted at loader failure): it costs every profile +over the shape the field, and in exchange no composition order exists to get +wrong. The held remote lifecycle uses the last two: `deadlines` wraps +`remote_io` alone, and a profile without stale-on-error passes +`Recovery::NONE`. Where two variants of one rule differ only in the expiry +they run, the rule is one higher-order fold (`deadlines::deliver`) whose +operator is passed only inside the kernel; the lint reports any reference from +a profile's assigned value to a kernel definition that takes an operator +(declared inline or through a type alias), whatever the profile passes, so the +fold cannot become a hook for rule logic in a profile. + The wall clock is the monotonic clock plus a skew (`Clock::wallOf`): a profile without wall-clock divergence holds `skew` at 0, one with rollbacks shifts it (`Clock::shiftWall`), and `Clock::advance` is the one time transition, so a @@ -135,7 +173,31 @@ The library's transitions are pure, so the seams a scheduled profile may not reach (held policy replies released out of order, coalescing off against both registries, a scope closed between admission and release, the request-only projection with its diagnostics, the budgeted local lifecycle with its expiry -boundaries) are exercised by small profiles under `test/fixtures/kernel`. Each +boundaries, the held remote lifecycle with its recovery snapshots and read and +loader deadlines, a read settled in the step that admits its caller and the +diagnosed held lifecycle (the singleflight a follower coalesced into, the +layer a failed flight is attributed to, the recovery age), the payload +classes on both remote paths with the tracked retention cap, invalidation +marker lifetimes and expiry, the compression +channel, the shadow job registry over the atomic lifecycle with held writes: +atomic stale-on-error, a held dump fenced by a wall rollback, a dark fill's +C58 fence, dump and write faults and budgets delivered in registration order; +the local fault switch at admission and at settlement; the fractional clock +with inline sources and no policy provider; the served job registry over the +held remote lifecycle: the selection captured with the read and consulted at +the decode, the job's decode and confirmation read held by index, a timed-out +served job ending silently while its slot stays owned; dark jobs over the +diagnosed budgeted held lifecycle: a second dark job dropped while the first +holds its C0 read, the caller's source deadline and the job's budget delivered +in one round with the late read draining, the caller's deadline alone ending +a job under a longer budget; the held refill over the held read path with the +queued adapter reply and the metric events: a refill completing at its write, +the sampled wall clock stopping the write after a rollback, a fenced +acceptance holding no dump, a reply consumed by an owning or an abandoned read +and left by a failed one, the frame reply as a hit at the last fresh +millisecond, as a declined future frame and as an expired miss once its age +reaches the freshness, a late result reporting once and a drained one nothing) +are exercised by small profiles under `test/fixtures/kernel`. Each typechecks and every run it declares passes: `make kernel-fixtures` runs them locally with Quint on the PATH, and the model-check and differential lanes run the same check. @@ -149,7 +211,33 @@ the third, over the request-only projection with diagnostics; `formal/dialcache-source-budgets-conformance.qnt` the fourth, over the budgeted local projection; `formal/dialcache-policy-conformance.qnt` the fifth, with held replies decoded by `policy_overlay` over the receipted layered release and the -config error record). It keeps +config error record; `formal/dialcache-independent-conformance.qnt` the sixth, +over the budgeted held remote lifecycle with its recovery snapshots; +`formal/dialcache-recovery-read-conformance.qnt` the seventh, over the held +remote lifecycle with immediate replies, its recovery snapshots and payload +classes, the compression channel variants and the marker lifetime; +`formal/dialcache-shadow-layers-conformance.qnt` the eighth, over the atomic +layered release with held refills and stale-on-error on the atomic path, and +the shadow job registry with its budgets; `formal/dialcache-recovery-conformance.qnt` +the ninth, over the budgeted held lifecycle with the read settled at admission +and the diagnosed held variants; +`formal/dialcache-local-failure-conformance.qnt` the tenth, over the layered +traversal with the local fault switch read at admission and settlement; +`formal/dialcache-local-clock-conformance.qnt` the eleventh, over the local +projection with an inline source and the fractional clock, declaring +`policyProvider: false` because its default instances install no policy +provider, a drivers'-contract fact the layout states; +`formal/dialcache-admission-conformance.qnt` the twelfth, over the held remote +lifecycle with immediate replies and the shadow module's held served-job +lifecycle, the cohort selection captured with the caller's read and consulted +when its decode completes the hit; `formal/dialcache-shadow-conformance.qnt` +the thirteenth, over the dark arm of the held shadow lifecycle, the dark job's +C0 read, decode and confirmation read held in `remote_io`'s lists and released +by ordinal over the diagnosed budgeted held remote lifecycle, with the held +fill and the buffered invalidation; `formal/dialcache-effects-conformance.qnt` +the fourteenth, over the held remote lifecycle with its refills held, the +queued adapter reply and the metric events, the first whose drivers' channel +is an ordered event trail). It keeps its constants, its flat `State`, `var s` and `var input`, its `nondet` input choices, its guards, its invariants and its regressions. Each wrapper action assigns `s'` to one library transition and `input'` to the driver record: @@ -170,7 +258,10 @@ identity the ownership invariant reads is the opt-in record the wrapper composes around `begin`; the clock and its wall skew belong to `clock`, the frames with their stamps, retention and watermarks to `remote_frames`, and the fault switches are environment inputs the wrapper sets by record update and the -traversal reads. +traversal reads. A side channel the drivers assert (the effects `events` +trail, the diagnostics channel) is a kernel module's record, stated once where +the rule that produces it lives; a record only a profile's own property reads +is an opt-in field the wrapper composes around the library result. Composing `serving` adopts the layers encoding of every field it names; a profile with a different private layout re-encodes when it composes. @@ -183,16 +274,42 @@ check in policy.mjs binds the shadow to the model by comparing it, after every step, with the model's private predictions wherever a history carries them. A composition re-encodes that check against its new private layout and leaves the classifiers alone, as the policy composition did (its `modelView` maps the -shadow to the layered shape). The classifiers still reading private +shadow to the layered shape). The scaffold those checks share (the test for a +history that carries private state, the layout guard and the step-by-step +comparison) is [replay/witnesses/fidelity.mjs](../replay/witnesses/fidelity.mjs); +a classifier hands `fidelityBinding` its public channels, the layout fields it +reads and the view that puts its shadow beside the model's state, and keeps +only its shadow and `modelView`. The classifiers still reading private predictions, to migrate the same way (layers is already composed and still owes this): -`effects.mjs`, `independent.mjs`, `layers.mjs`, `recovery.mjs` (the scope and -wall-rollback rules), `recovery-shadow.mjs`, `shadow.mjs`, and the scope and -layers rules of `runtime.mjs`. +`layers.mjs` and the scope and layers rules of `runtime.mjs`; +`recovery.mjs` shadows the recovery profile from its inputs and channels and +binds the shadow to the composed layout in its fidelity check, +`admission.mjs` binds its job and effect bookkeeping (live jobs by loader +ordinal, each held read and decode as a flight's or a job's, the registered +flights) to the composed admission layout the same way, and `shadow.mjs` +replays the shadow profile's rules over its inputs and public channels (the +frame with its stamp and watermark, both clocks, the fault switches, the one +dark job and the read or decode it holds), refuses a history whose observed +labels and effect counts differ from what that replay predicts, and binds the +replay to the composed shadow layout the same way; `effects.mjs` shadows both +clocks, the watermark, the read budget in force, the queued reply and each +loader's start, deadline and state from the inputs and the asserted record +(counters, caller codes, events, read contexts and aborts) and binds them to the +composed effects layout the same way. The rules a profile may keep are wiring: record literals for the initial state, record updates with inputs (`{ policy: policy, ...s }`), and input decoding -that reads no state (`instance(context)`). Guards and `nondet` domains restrict +that reads no state (`instance(context)`). Input decoding may also select +between two library transitions through guarded wrappers under `any` where a +branch between kernel results inside one wrapper would otherwise be needed +(recovery-read's `seedWith`: `seedAgedWith` and `seedUnsafeWith`, each guarded +on the input alone). This replays because `normalizeReplayInputs` +(`formal/replay-inputs.mjs`) overwrites `mbt::actionTaken` with the recorded +input name before any history is read, and `quint test --out-itf` exports carry +no MBT metadata, so the inner arm a sampled run records is never compared; do +not flatten the wrappers on seeing it in raw `quint run` output. Guards and +`nondet` domains restrict the environment and may read state; invariants and runs are independent statements and may read anything; the `input` assignment is the driver contract and may branch on state. @@ -205,8 +322,21 @@ applied to cache state, following profile helpers with the taint of their arguments. Library modules are those declared under `formal/kernel` (`cache_rules` is the judgment layer they consume, not one a profile assigns through); a chosen `nondet` input and lambda parameters carry no state; a -record literal may set a field over a library result (that is wiring the -reviewer sees, not a rule). `formal/profile-lint-baseline.json` records each +kernel definition that takes an operator (a parameter declared with an +operator type, spelled inline or through a type alias such as `type Step[r] = +(Counter[r], int) => Counter[r]`, resolved to its typedef through a chain of +aliases if there is one; kernel definitions declare their parameter types, and +one without a declared type, or with an alias the parse does not resolve, is an +error rather than a definition taken for first-order; `deadlines::deliver` is +the one such definition today) may not be instantiated by a profile at all: a +reference to it from an assigned value, as the callee or by name, is reported +whatever the argument is (a kernel definition applied through a profile alias +such as `pure def repeatAlias = L::repeat` is judged and recorded as the +kernel's application), because the +library's folds take their operator only from kernel modules and an operator +written in a profile is rule logic the walk cannot follow; a record literal +may set a field over a library result (that is wiring the reviewer sees, not a +rule). `formal/profile-lint-baseline.json` records each profile's library transitions and violation count; a composed profile reports zero and the other counts are the migration list. `node formal/lint-profiles.mjs baseline --check` is a step of `make differential` (the pull request lane) and @@ -238,7 +368,9 @@ disagrees in the reverse direction. Replays run as batched `quint test` processes (16 histories each, the measured optimum) built from constrained action clones shared across the batch, the same schedules fixture recipes use. The run fails on any disagreement and when trace bytes per state grow beyond -1.2 times the reference's; generation wall time is recorded and reported as +1.2 times the reference's, or beyond the model's own +`differential.maxBytesPerStateRatio` when it declares one (the reason belongs +in the record table below); generation wall time is recorded and reported as advisory above 1.5, because the two generations run concurrently and hosted runners are noisy. What is compared is what the drivers assert (the observation and the profile's side channels); private state is protected by @@ -257,18 +389,32 @@ comparing it. A profile the reference revision does not generate is reported as new, and one the working tree no longer generates as removed (the manifest validator already forbids registering a profile without generating it). The differential replays only profiles with an explicit-input driver descriptor in -`formal/replay/features.mjs`, whose recorded `input.choice` is the wrapper's -`nondet` choice; a composed profile without one fails the run by name. `make +`formal/replay/features.mjs` (or, for local-clock, in +`formal/replay/local-clock.mjs`), whose recorded `input.choice` is the wrapper's +`nondet` choice; a composed profile without one fails the run by name. The +local-clock descriptor's `actionBindings` (with `boundAction` and their tests) +is transitional: it schedules a history through a reference text from before +the wrapper rename, where `call` is the parametrized action and `callCache` +the public wrapper, and is deleted once the merge base with main carries the +renamed text. `make differential` runs the lint baseline check and then the differential for every profile that imports a kernel module in either revision (directly or through a -helper library); the pull request lane runs that against the base branch -whenever a Quint input changes and preserves the reports and replay logs. +helper library); `DIFFERENTIAL_SHARD=/` narrows it to one +round-robin shard of those profiles sorted by name. The pull request lane runs +four such shards against the base branch whenever a Quint input changes and +preserves each shard's reports and replay logs as the +`formal-differential-` artifact. Fault challenges for rules that moved into the library anchor on the module -source (`formal/execution.json` lists `formal/kernel/*.qnt` among its -`libraries`, which also puts them under the purity check, the witness evidence -inputs and the fixture lock) and are measured through the composing profile's -scheduled invariant, as before. +source (every `formal/kernel/*.qnt` is a library because no scheduled model +claims it, which puts it under the purity check and the witness evidence +inputs; the fixture lock pins the modules the recipe models import) and are +measured through the composing profile's scheduled invariant, as before. A +composition also re-measures every existing shared-library challenge over the +newly composed profile (its scheduled invariants at the exploration bound and +all its regressions under the mutant): the profile joins +`reproducer.profiles` where it detects the fault, and its exclusion reason is +restated for the composed text where it does not. ## Record of the layers rewrite @@ -283,6 +429,167 @@ Measured on 2026-09-16 against `main` at bf3c7e8 with the manifest seed: | Profile lines | 549 | 385 | | Composition-lint violations (rule logic in the profile) | 73 | 0 | +## Record of the recovery-read rewrite + +Measured on 2026-09-19 against the branch head that preceded the composition +(0a47889, the merge after the kernel commits 68eafb3 and ea008a7) with the +manifest seed, in one process for both generations: + +| | Reference | Composed | +| --- | --- | --- | +| Sampled histories agreeing step for step, both directions | | 256 of 256 | +| Exported regressions agreeing (26 reference, 31 candidate), both directions | | 26 of 26, 31 of 31 | +| Generation wall time (256 traces, 60 steps, 1024 samples, concurrent) | 3.1 s | 4.5 s (x1.45, advisory) | +| Bytes per state | 2034 | 2304 (x1.133, bound x1.2) | +| Profile lines | 505 | 495 | +| Composition-lint violations (rule logic in the profile) | 80 | 0 | + +The composed layout has the thinnest bytes headroom of the seven profiles: the +`sources` records (a landed seven-field shape every layered profile shares) and +the drivers' `markers` channel are the two largest additions, and the retired +receipt lists the largest removal. The agreed lever before any exception, should +the layered shape gain a mandatory field, is `ttls` as two integers assembled at +the `begin` call (about -40 bytes per state). + +## Record of the shadow-layers rewrite + +Measured on 2026-09-19 against the branch head that preceded the composition +(206e878, the kernel commit that exposed the layered release judgment, the +detached source, the scheduled deadline shape and the failure judgment) with +the manifest seed, in one process for both generations: + +| | Reference | Composed | +| --- | --- | --- | +| Sampled histories agreeing step for step, both directions | | 256 of 256 | +| Exported regressions agreeing (22 reference, 23 candidate), both directions | | 22 of 22, 23 of 23 | +| Generation wall time (256 traces, 60 steps, 1024 samples, concurrent) | 6.9 s | 9.2 s (x1.33, advisory) | +| Bytes per state | 4225 | 3923 (x0.929, bound x1.2) | +| Profile lines | 646 | 465 | +| Composition-lint violations (rule logic in the profile) | 98 | 0 | + +The composed layout is lighter than the text it replaces: the old text carried +a job record with the admission policy it captured, a per-slot local writer +list and the work ledger of its held fills, where the composition keeps the +kernel's `sources`, `dumps`, `writes`, `retained`, `jobs` and `deadlines` +records and reads the admission facts in the connection model's pre-state. Its +one new regression, `localEntryExpiresAtItsInsertionTtlTest`, pins the strict +local expiry the old text stated implicitly, so shadow-layers joins the +`policy-inclusive-local-expiry` partition: the entry a settled source inserts +is a hit at once and a miss exactly one local TTL later (the drivers' 60 s +advance). + +The review round that followed corrected two `shadow` rules no scheduled +profile reaches, stated as the ports have them: a dark fill judges its +captured fence before serializing (`fill_fenced` at settlement, no dump), and +a failed job read ends the job (`redis_error` at the dark C0 read, +`confirmation_error` at the confirmation read); it also guarded the dark arm +against the bypass reply, moved the `JOB` kind into `deadlines`, folded the +recovery miss into `recovery::failure`, deleted the unused `remote_writes` +entry points and added two regressions pinning `match` and `superseded`. The +differential against 16bb2c6 agreed on 279 of 279 reference and 281 of 281 +candidate histories (23 and 25 regressions) at 3923 bytes per state both ways +(x1.000); the seven other composed profiles were unchanged. + +Later rewrites are recorded as one row each, measured against the branch head +that preceded them with the manifest seed, in one process for both generations +(sampled histories and exported regressions agreeing step for step in both +directions; bytes per state against the bound in force). recovery declares +`differential.maxBytesPerStateRatio: 1.85`: the text it replaces was the +thinnest profile in the repository (1544 bytes per state: the two channels and +twenty-five scalars), and the composition pays the held shape's per-flight +`LayeredSource`, the per-caller registries and the `io` channel (about 2015 +bytes of library records against 790 of retired scalars), so the floor of any +composition over the landed held shape is about x1.7; in absolute terms 2769 +sits between recovery-read (2304) and independent (2845), and the corpus is +about 85 MB. The declaration is transitional, for the rewrite's own +differential against the retired text: the first PR after this one merges +deletes it, and the composed text is then the reference at x1.0 under the +default bound. local-failure declares +`differential.maxBytesPerStateRatio: 1.45`: a ten-call profile over the layered +shape pays that shape's fixed remote fields (about 233 bytes per state) and +flight registries (about 216) on a 1056-byte base, its profile-owned bytes are +43, and no trim inside the landed shapes reaches x1.2 (5.5 MB to 7.8 MB in +absolute terms). Re-measuring every shared-library partition over the two +profiles moved local-clock into `policy-inclusive-local-expiry` and +`source-budgets-settlement-never-replaces-local-entry` (its +`callsServeLiveEntriesOrRunTheSource` rejects both mutants) and restated the +other cells' reasons for the composed texts. admission declares +`differential.maxBytesPerStateRatio: 1.65`: the text it replaces kept a +five-field `Call` per caller and jobs that carried their own identity (3024 +bytes per state), and the composition pays the held shape's seven-field +`LayeredSource` per caller flight and per detached job source (about 886 bytes +per state over the old `calls`), the `io` channel (329) and the per-caller +`memoSlots` (160); no trim inside the landed shapes reaches x1.2 (the gap is +about 1281 bytes per state against about 280 available), so the bound is +transitional like recovery's and is deleted by the first PR after this one +merges. The margin over the measured x1.624 is 1.6 %; generation is +deterministic under the manifest seed and backend. Re-measuring every +shared-library partition over the composed text moved admission into +`recovery-strands-followers`, `source-budgets-accepts-at-deadline-equality` +and `policy-join-ignores-coalesce`, and its two profile faults became +shared-library faults on `shadow.qnt` (`busy`, `full`) partitioned over all +fifteen profiles, the duplicate one gaining an exported-regression reproducer. +shadow declares `differential.maxBytesPerStateRatio: 1.8`: the text it +replaces kept one scalar set for the current caller (1816 bytes per state), +and the composition pays the held shape's seven-field `LayeredSource`, +registries and `io` rows for every caller a history made (5.09 per state on +average, about 1390 bytes per state of per-caller records) plus the held read +and decode records the job's effects now occupy in `remote_io`'s lists; no +trim inside the landed shapes reaches x1.2 (the pending-only registry is +already taken, and budgeted variants of the atomic lifecycle would reach only +about x1.6 with a second variant set that states no rule), so the bound is +transitional like recovery's and admission's and is deleted by the first PR +after this one merges. The margin over the measured x1.791 is 0.5 %; +generation is deterministic under the manifest seed and backend. Re-measuring +every shared-library partition over the composed text moved shadow into +`policy-inclusive-remote-freshness`, `source-budgets-accepts-at-deadline-equality`, +`shadow-layers-inclusive-c0-freshness` and +`shadow-layers-fill-uses-current-retention`, and the retired standalone +shadow validation model's two challenges re-anchored on +`remote_writes::dispatch` and `shadow::settleJobRead` with exported-regression +reproducers; the two private-reading witness classifiers became one +public-only classifier bound through the fidelity scaffold. effects declares +`differential.maxBytesPerStateRatio: 1.45`: the text it replaces kept one +integer per private fact (3586 bytes per state, 2262 of them the drivers' +`events` trail, unchanged in shape by the composition), and the composition +pays the held shape's seven-field `LayeredSource` per flight (about 590 bytes +per state), the per-caller registries (231), the `io` and `d` channels +(331) and the deadlines, held records and metric instants (about 360); with +every profile-owned and metrics field removed the floor over the landed held +shape is about x1.24, so x1.2 is out of reach and the two trims that fit (one +`sourceStarted` list in place of a per-source history, the observer fault +left to the input) were taken. In absolute terms 5108 sits between layers +(4226) and admission (4910). The bound is transitional like recovery's, +admission's and shadow's and is deleted by the first PR after this one merges, +together with the retired-layout branch of `formal/replay/effects.mjs` +(`retiredFields`, `retiredExpected`), which reads the reference corpus +while the merge base with main still carries the retired text. Re-measuring +every shared-library partition over the composed text moved effects into +`recovery-read-wrong-admission-policy`, `independent-wrong-admission-policy`, +`recovery-strands-followers`, `stale-recovery-future-candidate`, +`source-budgets-accepts-at-deadline-equality` and `shadow-fenced-fill-writes`; +its three profile faults became shared-library faults on `serving.qnt` +(`refills`), `deadlines.qnt` (`arrival`, which shadow also detects) and +`metrics.qnt`, partitioned over all fifteen profiles with exported-regression +reproducers; and the standalone flight-deadlines model and the effects +connection model were retired, every rule they stated being a kernel rule a +composed profile exercises. The composition also re-recorded 74 of the 93 +effects label counts in `witness-baseline.json`: at the pinned seed 0xd1a1ca +the composed actions consume the random stream differently (pending-only held +records, the favored-branch guard reading `Writes::latestDump`) and so sample +a different corpus, the `reply:15` recorded-seed gate tripped (11 to 4) and the +baseline was re-recorded, the both-way differential (554 of 554 forward, 560 of +560 reverse) being the evidence that the two texts are equivalent. + +| Rewrite | Measured | Histories agreeing | Generation wall (advisory) | Bytes per state | Profile lines | Lint violations | +| --- | --- | --- | --- | --- | --- | --- | +| recovery | 2026-09-20 against 2add082 (the read settled in its step, the held release split from its judgment, the diagnosed held lifecycle) | 512 of 512 and 30 of 30 | 11.6 s -> 21.0 s (x1.80) | 1544 -> 2769 (x1.793, bound x1.85, model) | 466 -> 443 | 80 -> 0 | +| local-failure | 2026-09-20 against 75d709e (the fractional clock, the inline local call, the newest source and the policy-provider layout fact) | 128 of 128 and 5 of 5 | 0.8 s -> 1.7 s (x1.95) | 1056 -> 1477 (x1.399, bound x1.45, model) | 169 -> 215 | 24 -> 0 | +| local-clock | 2026-09-20 against 75d709e (the same head) | 128 of 128 and 4 of 4 | 1.6 s -> 2.2 s (x1.34) | 2904 -> 1819 (x0.626) | 139 -> 168 | 11 -> 0 | +| admission | 2026-09-20 against 56bb2bb (the lint denylist, the case audit folded into semantic-cases, the shared fidelity scaffold, the derived go-parity sections) | 128 of 128 and 6 of 6 / 8 of 8 | 2.8 s -> 6.1 s (x2.17) | 3024 -> 4910 (x1.624, bound x1.65, model) | 455 -> 368 | 65 -> 0 | +| shadow | 2026-09-20 against 943f139 (the held shadow lifecycle, the payload forms, the buffered invalidation, the pending-only registry) | 1024 of 1024 and 7 of 7 / 39 of 39 | 8.1 s -> 17.0 s (x2.10) | 1816 -> 3251 (x1.791, bound x1.8, model) | 696 -> 637 | 96 -> 0 | +| effects | 2026-09-20 against cf03e05 (the shadow composition merged under the effects kernel commit: the read settlement split from its judgment, the held refill over the held read path) | 512 of 512 and 42 of 42 / 48 of 48 | 11.2 s -> 17.7 s (x1.58) | 3586 -> 5108 (x1.425, bound x1.45, model) | 680 -> 593 | 64 -> 0 | + The pilot that preceded the library (#171, #172) instantiated one kernel state machine per profile and measured its cost; its conclusions and measurements are recorded in issue #165. diff --git a/formal/kernel/adapter-replies.qnt b/formal/kernel/adapter-replies.qnt new file mode 100644 index 00000000..b4c4b1c7 --- /dev/null +++ b/formal/kernel/adapter-replies.qnt @@ -0,0 +1,101 @@ +module adapter_replies { + // The queued adapter reply (C55): what the remote adapter returns in place + // of the stored frame, interpreted once at the trust boundary + // (`src/internal/redis-cache.ts` `validateReadResult` and `frameAge`, + // `src/internal/redis-payload.ts` `decodeTrackedRedisReadResult`, + // `go/engine.go` the same). The drivers queue one reply by its class + // (BEHAVIOR.md, the effects `adapterReply` choices 1 to 16, below); the + // next successful raw completion consumes it whether or not DialCache still + // owns that read (an abandoned read's completion consumes it too), and an + // adapter failure leaves it queued. A miss reply is interpreted by its + // discriminator: a reason that names a known cause survives (`value_absent`, + // `expired`), an unknown reason or shape is `unclassified`, and + // `watermark_fenced` is kept only beside a valid fence. A fence survives only + // on a tracked key and only as a valid timestamp (a negative, fractional or + // unsafe one is discarded), independently of the cause: the observed + // watermark the reply carried is the refill fence of the source the miss + // starts (C58). A frame-shaped reply with stray miss metadata is a frame, + // stamped at the reply's wall clock and judged for freshness like a stored + // frame's stamp (a future-dated one is declined as an unclassified miss and + // carries no fence). No reply is ever stored: the frames are untouched. + import cache_rules.* from "../cache-rules" + import conformance_observations.* from "../conformance-observations" + import encodings.* from "./encodings" + import serving as Serving from "./serving" + import remote_io as RemoteIO from "./remote-io" + import remote_frames as Remote from "./remote-frames" + import deadlines as Deadlines from "./deadlines" + import clock as Clock from "./clock" + + pure val NO_REPLY = 0 + // The drivers' reply classes: 1 null, 2 primitive, 3 legacy watermark + // shape, 4 kindless metadata, 5 missing miss reason, 6 unknown reason, + // 7 unknown reason with a valid future fence, 8 fenced reason without a + // fence, 9 negative fence, 10 fractional fence, 11 unsafe fence, 12 absent + // reason with a valid future fence, 13 expired reason with a zero fence, + // 14 miss with stray frame fields, 15 valid frame with stray miss metadata, + // 16 fenced reason with a valid future fence. Codes are part of the driver + // contract; do not renumber. Only the classes a rule names are spelled. + pure val UNKNOWN_REASON_WITH_FENCE = 7 + pure val FRACTIONAL_FENCE = 10 + pure val UNSAFE_FENCE = 11 + pure val ABSENT_WITH_FENCE = 12 + pure val EXPIRED_ZERO_FENCE = 13 + pure val MISS_WITH_FRAME_FIELDS = 14 + pure val FRAME_WITH_MISS_FIELDS = 15 + pure val FENCED_WITH_FENCE = 16 + // The value the frame class carries (the drivers' payload "1"). + pure val FRAME_VALUE = VALUE_ONE + + // The queued reply and the wall clock it was queued at (the frame class's + // stamp, and the instant a valid fence is measured from), beside the + // tracking flag the fence rule reads and the clocks. + type Queued[r] = { reply: int, replyAt: int, tracked: bool, now: int, skew: int | r } + // The budgeted held lifecycle whose drivers queue replies. + type QueuedHeld[r] = Deadlines::BudgetedHeld[{ reply: int, replyAt: int | r }] + + pure def queued(state: Queued[r]): bool = state.reply != NO_REPLY + pure def queue(state: Queued[r], code: int): Queued[r] = { reply: code, replyAt: Clock::wallOf(state), ...state } + pure def consume(state: Queued[r]): Queued[r] = { reply: NO_REPLY, ...state } + pure def isFrame(code: int): bool = code == FRAME_WITH_MISS_FIELDS + // A fence survives only on a tracked key and only as a valid timestamp, + // whatever the cause beside it. + pure def carriesFence(tracked: bool, code: int): bool = + tracked and Set(UNKNOWN_REASON_WITH_FENCE, ABSENT_WITH_FENCE, FENCED_WITH_FENCE).contains(code) + // The fence a queued reply carries: the watermark it observed, the reply's + // wall clock plus the drivers' buffer (`bufferMs`), or none. + pure def fenceOf(state: Queued[r], bufferMs: int): int = + if (carriesFence(state.tracked, state.reply)) state.replyAt + bufferMs else NO_FENCE + // The miss reason a miss reply normalizes to: a known cause survives, a + // fenced claim needs its fence, everything else is unclassified. The frame + // class is not a miss: `observed` judges it by its stamp like a stored frame. + pure def reason(tracked: bool, code: int): str = + if (Set(FRACTIONAL_FENCE, UNSAFE_FENCE, ABSENT_WITH_FENCE, MISS_WITH_FRAME_FIELDS).contains(code)) "value_absent" + else if (code == EXPIRED_ZERO_FENCE) "expired" + else if (code == FENCED_WITH_FENCE and carriesFence(tracked, code)) "watermark_fenced" + else "unclassified" + // What a read observes through the reply: the frame class is a visible frame + // carrying the drivers' value, stamped at the reply's wall clock and served + // while fresh for the reply's freshness (`cache_rules.freshAgeAllowed`, which + // declines a future-dated stamp); every miss class observes nothing. + pure def observed(state: Queued[r], freshMs: int): Remote::Observed = + if (isFrame(state.reply)) { + visible: true, failed: false, payload: FRAME_VALUE, + value: if (freshAgeAllowed(state.replyAt, Clock::wallOf(state), freshMs)) FRAME_VALUE else NO_VALUE + } else { visible: false, failed: false, payload: NO_VALUE, value: NO_VALUE } + + // A held read released under a queued reply observes the reply in place of + // the frames and starts its source with the reply's fence + // (`deadlines::settleObserved`); a read that owns nothing (its deadline + // delivered, or reached undelivered, which `deadlines` expires first) drains + // as any other. A successful completion consumes the reply, owning or not; + // a failed one leaves it queued. + pure def settleRead(state: QueuedHeld[r], layout: Serving::Layout, read: int, failed: bool, classifier: int, bufferMs: int): QueuedHeld[r] = { + val held = RemoteIO::heldRead(state, read) + val settled = + if (queued(state) and not(failed) and RemoteIO::owning(held)) + Deadlines::settleObserved(state, layout, read, observed(state, held.ttls.freshMs), fenceOf(state, bufferMs), classifier) + else Deadlines::settleRead(state, layout, read, failed, classifier) + if (failed) settled else consume(settled) + } +} diff --git a/formal/kernel/clock.qnt b/formal/kernel/clock.qnt index e8e2ebab..51c92d5d 100644 --- a/formal/kernel/clock.qnt +++ b/formal/kernel/clock.qnt @@ -1,4 +1,5 @@ module clock { + import cache_rules.* from "../cache-rules" // Elapsed time. Profiles advance it by whole milliseconds; local entries, // retention and deadlines read it. The wall clock is the monotonic clock // plus a skew, so one transition moves both and only the skew can be @@ -6,8 +7,18 @@ module clock { // the skew at 0. type Timed[r] = { now: int | r } type Skewed[r] = { now: int, skew: int | r } + // The environment's fractional time beside the clock the layers read: the + // drivers advance it in ticks (the local-clock drivers' microseconds), and + // the monotonic clock is that time on the whole-millisecond grid + // (`cache_rules.wholeMs`, the projection `localEntryLiveOnGrid` judges + // with, C09), so a fractional advance moves `now` only across a millisecond + // boundary and local insertion and expiry fall on the grid whatever the + // instance's construction phase. + type Ticked[r] = { now: int, ticks: int | r } pure def advance(state: Timed[r], ms: int): Timed[r] = { now: state.now + ms, ...state } + pure def advanceTicks(state: Ticked[r], ticks: int, ticksPerMs: int): Ticked[r] = + { ticks: state.ticks + ticks, now: wholeMs(state.ticks + ticks, ticksPerMs), ...state } pure def wallOf(state: Skewed[r]): int = state.now + state.skew pure def shiftWall(state: Skewed[r], ms: int): Skewed[r] = { skew: state.skew + ms, ...state } } diff --git a/formal/kernel/compression.qnt b/formal/kernel/compression.qnt new file mode 100644 index 00000000..e50319f5 --- /dev/null +++ b/formal/kernel/compression.qnt @@ -0,0 +1,33 @@ +module compression { + // The compression channel: the outcome each decode reports as it is + // dispatched (`src/internal/compression.ts`: "decompressed" for a compressed + // frame, "fallback_raw" for one whose compressed bytes fail to decode, + // nothing for an uncompressed frame), what the drivers' `compression` + // channel records. The held remote lifecycle holds a decode at two + // transitions, a read settling on a fresh frame (`remote_io::settleRead`) + // and a loader failing with a recovery candidate (`remote_io::settleLoader`), + // both through `remote_io::holdLoad`, the single dispatch point. The + // variants here apply the same transition and, when it held a decode (the one + // with the drivers' index the step began at, `o.loads`), append the outcome + // its payload code reports (`payloads::decodeOutcome`). A variant rather + // than a mandatory field of `remote_io::Held`: independent would carry a + // channel its traversal never reads. A variant rather than a wrapper in the + // profile: a wrapper forgotten at one of the two sites is invisible to the + // composition lint, a variant is the transition. One consumer today, + // recovery-read. + import serving as Serving from "./serving" + import remote_io as RemoteIO from "./remote-io" + import payloads as Payloads from "./payloads" + + type Compressed[r] = RemoteIO::Held[{ compression: List[str] | r }] + + // The outcome of the decode a step held, when it held one. + pure def reported(before: Compressed[r], after: Compressed[r]): Compressed[r] = + if (after.o.loads > before.o.loads) + { compression: after.compression.concat(Payloads::decodeOutcome(RemoteIO::heldLoad(after, before.o.loads).value)), ...after } + else after + pure def settleRead(state: Compressed[r], layout: Serving::Layout, read: int, failed: bool, classifier: int): Compressed[r] = + reported(state, RemoteIO::settleRead(state, layout, read, failed, classifier)) + pure def settleLoader(state: Compressed[r], layout: Serving::Layout, ordinal: int, value: int, timeout: bool): Compressed[r] = + reported(state, RemoteIO::settleLoader(state, layout, ordinal, value, timeout)) +} diff --git a/formal/kernel/deadlines.qnt b/formal/kernel/deadlines.qnt index 693e024e..3f2c605d 100644 --- a/formal/kernel/deadlines.qnt +++ b/formal/kernel/deadlines.qnt @@ -1,77 +1,259 @@ module deadlines { - // Source budgets (C23 to C27): a source starts with the budget its start + // Deadlines (C23 to C27, C56): a source starts with the budget its start // resolved. A source started at admission belongs to a caller that made no // policy call: it is bounded only when its key failed to construct (C27); a // disabled context and a call outside every request run theirs unbounded - // (C01). A source started at release belongs to a caller that was enabled + // (C01). A source started at release, or a loader started for a flight + // whose held read settled or expired, belongs to a caller that was enabled // when admitted, whether or not its scope has closed since, and is always - // bounded. The deadline is measured from the source's own start - // (`cache_rules.sourceAcceptsAt`, equality belongs to the timeout), an - // expired source completes every caller it owns with DEADLINE_ERROR when its - // timer is delivered on an advance or when its result arrives late, and the - // abandoned work still drains once. The records are parallel to the source - // list; a profile whose drivers bound sources composes the budgeted variants - // of the local lifecycle below. + // bounded. A held remote read is bounded by the read budget in force when + // it was dispatched; a read settled in its dispatching step registers no + // read deadline under an unbounded budget, and a finite budget is reached + // at once only when zero. A deadline is measured from its work's own start; + // equality belongs to the timeout (`dueAt`). + // + // A pending deadline (`Due`) names its work (a remote read, a source loader + // or a shadow job), the index of that work in the drivers' order for its kind, and + // the instant it is due. It is registered when the work starts and forgotten + // when the work settles or the deadline is delivered; unbounded work + // registers none, so bounded is encoded by presence. The list is in + // registration order, which is the delivery order at equal instants across + // kinds. Delivery is instant-ordered (`deliver`): an advance moves both + // clocks to each due instant inside it in turn and delivers every deadline + // due there, so work a delivery starts (a read expiry starts a loader) is + // delivered at its own instant inside the same advance, and every judgment + // a delivery makes (a recovery age, a caller's outcome) reads the clocks at + // that instant. A deadline the clock passed without delivery (a bare clock + // move) is delivered at the first instant the next advance visits, not at + // the current instant before moving, as the implementations' timers fire + // when the clock next runs; a deadline registered at or before the current + // instant during a round (a zero budget started by a delivery) is likewise + // delivered at the next visited instant. A zero budget registered at a + // settlement step outside a round is also delivered at the next instant the + // following advance visits, where the implementations fire a 0 ms timer + // before the clock moves: an open design point for a budgeted recovery + // composition, unreachable in every scheduled profile today (independent's + // source budget is 10 ms; the local shape makes no clock judgment at + // expiry). An expired source completes every + // caller it owns with DEADLINE_ERROR; a result arriving after its deadline + // is a deadline error (`arrival`); work whose deadline already completed + // its callers drains once, when the result arrives. `drained` is per loader + // ordinal: the source list itself in the local projection, `remote_io`'s + // `loaders` in the held shape. + // + // A profile whose drivers bound sources composes the budgeted variants of + // the local lifecycle; one whose drivers hold and bound remote reads and + // loaders composes the held variants. A module that bounds work of its own + // kind composes `Scheduled` alone, the clock and the pending deadlines + // (`shadow`'s job registry): its profile's callers run no source + // deadline, so that shape has no `sourceBudget` and no source registers + // one. The fold's expiry is passed only from inside the kernel, by the two + // instantiations here and by such a module's own expiry; a profile never + // passes an operator to the library (the composition lint reports an + // argument in a parameter position a kernel definition declares with an + // operator type, `expire` here, unless it names a kernel definition, + // following aliases and let-bound names). import cache_rules.* from "../cache-rules" import conformance_observations.* from "../conformance-observations" + import encodings.* from "./encodings" import calls.* from "./calls" import layer_policy.* from "./layer-policy" import serving as Serving from "./serving" + import remote_io as RemoteIO from "./remote-io" + import remote_frames as Remote from "./remote-frames" import clock as Clock from "./clock" pure val UNBOUNDED = -1 + // Kinds of bounded work: a remote read, a source loader, and a shadow job's + // budget, registered, forgotten and delivered by `shadow`. + pure val READ = 0 + pure val SOURCE = 1 + pure val JOB = 2 - // Per source: when it started, its budget, when it settled (-1 while - // pending) and whether its external work has been delivered. - type Budgeted[r] = { now: int, sourceBudget: int, started: List[int], budgets: List[int], settledAt: List[int], drained: List[bool] | r } + type Due = { kind: int, index: int, at: int } + // The pending deadlines beside the clock: what registration, forgetting and + // instant-ordered delivery read. A module that bounds work of its own kind + // composes this shape alone. + type Scheduled[r] = { now: int, deadlines: List[Due] | r } + // The budgeted shape adds the configured source budget and, per loader + // ordinal, whether its external work has been delivered (a loader its + // deadline completed still has work to drain). + type Budgeted[r] = Scheduled[{ sourceBudget: int, drained: List[bool] | r }] // The budgeted local lifecycle: the local projection of the traversal with - // the source records beside its source list. - type BudgetedLocal[r] = Serving::LocalServed[{ sourceBudget: int, started: List[int], budgets: List[int], settledAt: List[int], drained: List[bool] | r }] + // the deadlines beside its source list, and per source the history its + // properties read: when it started, its budget and when it settled (-1 + // while pending). + type BudgetedLocal[r] = Serving::LocalServed[{ + sourceBudget: int, deadlines: List[Due], drained: List[bool], started: List[int], budgets: List[int], settledAt: List[int] | r + }] + // The budgeted held lifecycle: the held remote traversal with the deadlines + // beside its reads and loaders. + type BudgetedHeld[r] = RemoteIO::Held[{ sourceBudget: int, deadlines: List[Due], drained: List[bool] | r }] // The budget of a source started at admission: the configured budget when // the key failed to construct (C27), none for any other bypass (C01). pure def admissionBudget(state: Budgeted[r], call: Call): int = if (call.keyFailed) state.sourceBudget else UNBOUNDED - pure def stamp(state: Budgeted[r], budget: int): Budgeted[r] = { + // Work that just started registers its deadline; unbounded work none + // (a finite zero is due at once). + pure def due(state: Scheduled[r], kind: int, index: int, budget: int): Scheduled[r] = + if (budget < 0) state else { deadlines: state.deadlines.append({ kind: kind, index: index, at: state.now + budget }), ...state } + pure def deadlinesOf(state: Scheduled[r], kind: int, index: int): List[Due] = + state.deadlines.select(d => d.kind == kind and d.index == index) + pure def bounded(state: Scheduled[r], kind: int, index: int): bool = deadlinesOf(state, kind, index).length() > 0 + pure def deadlineOf(state: Scheduled[r], kind: int, index: int): int = + if (bounded(state, kind, index)) deadlinesOf(state, kind, index).nth(0).at else UNBOUNDED + // A deadline is reached at an instant at or after it: equality belongs to the timeout. + pure def dueAt(now: int, d: Due): bool = not(deadlinePendingAt(now, d.at)) + // Due and not yet delivered. + pure def reached(state: Scheduled[r], kind: int, index: int): bool = + deadlinesOf(state, kind, index).select(d => dueAt(state.now, d)).length() > 0 + pure def forget(state: Scheduled[r], kind: int, index: int): Scheduled[r] = + { deadlines: state.deadlines.select(d => not(d.kind == kind and d.index == index)), ...state } + pure def pending(state: Budgeted[r], ordinal: int): bool = not(state.drained.nth(ordinal)) + pure def drain(state: Budgeted[r], ordinal: int): Budgeted[r] = { drained: state.drained.replaceAt(ordinal, true), ...state } + // A loader's arrival: the outcome its settlement applies (its value, or + // DEADLINE_ERROR when its deadline passed undelivered), or CALL_PENDING when + // its deadline already completed its flight (the recorded result) and the + // work only drains. + pure def arrival(state: Budgeted[r], ordinal: int, result: int, value: int): int = + if (result != CALL_PENDING) CALL_PENDING + else if (reached(state, SOURCE, ordinal)) DEADLINE_ERROR else value + // Settling a loader drains its work and forgets its deadline. + pure def retire(state: Budgeted[r], ordinal: int): Budgeted[r] = forget(drain(state, ordinal), SOURCE, ordinal) + + // -- Instant-ordered delivery ------------------------------------------------ + + // The earliest instant after now, at or before the target, at which a + // pending deadline is due; the target when none is. + pure def earliestDue(state: Scheduled[r], target: int): int = + state.deadlines.foldl(target, (best, d) => if (d.at > state.now and d.at < best) d.at else best) + // Time passes to the target, delivering each due instant in turn with the + // variant's expiry: a round moves both clocks to the earliest due instant + // and delivers, in registration order, every deadline reached there, + // forgetting each before its expiry runs. A round delivers at least one + // deadline until the target is reached, and a delivery registers at most + // one deadline (a read expiry starts a bounded loader), so the rounds are + // bounded by twice the pending deadlines plus the final move. + pure def deliver(state: Scheduled[r], ms: int, expire: (Scheduled[r], Due) => Scheduled[r]): Scheduled[r] = { + val target = state.now + ms + 1.to(2 * state.deadlines.length() + 1).fold(state, (current, _) => { + val moved = Clock::advance(current, earliestDue(current, target) - current.now) + moved.deadlines.foldl(moved, (delivered, d) => + if (dueAt(delivered.now, d)) expire(forget(delivered, d.kind, d.index), d) else delivered) + }) + } + + // -- Budgeted variants of the local lifecycle ------------------------------------ + + // The history the local shape keeps per source. + type Recorded[r] = { now: int, started: List[int], budgets: List[int], settledAt: List[int] | r } + pure def stamp(state: Recorded[r], budget: int): Recorded[r] = { started: state.started.append(state.now), budgets: state.budgets.append(budget), settledAt: state.settledAt.append(-1), - drained: state.drained.append(false), ...state } - // The deadline is measured from the source's start; equality belongs to the timeout. - pure def reached(state: Budgeted[r], index: int): bool = - not(sourceAcceptsAt(state.started.nth(index), state.now, state.budgets.nth(index))) - pure def pending(state: Budgeted[r], index: int): bool = not(state.drained.nth(index)) - pure def drain(state: Budgeted[r], index: int): Budgeted[r] = { drained: state.drained.replaceAt(index, true), ...state } - pure def markSettled(state: Budgeted[r], index: int): Budgeted[r] = { settledAt: state.settledAt.replaceAt(index, state.now), ...state } - - // -- Budgeted variants of the local lifecycle ------------------------------------ + pure def markSettled(state: Recorded[r], index: int): Recorded[r] = { settledAt: state.settledAt.replaceAt(index, state.now), ...state } + // A source the step started: its deadline registered, its work outstanding, + // its history stamped. + pure def startedLocal(state: BudgetedLocal[r], index: int, budget: int): BudgetedLocal[r] = + due(stamp({ drained: state.drained.append(false), ...state }, budget), SOURCE, index, budget) pure def admitLocal(state: BudgetedLocal[r], layout: Serving::Layout, call: Call): BudgetedLocal[r] = { val admitted = Serving::admitLocal(state, layout, call) - if (admitted.sources.length() > state.sources.length()) stamp(admitted, admissionBudget(state, call)) else admitted + if (admitted.sources.length() > state.sources.length()) startedLocal(admitted, state.sources.length(), admissionBudget(state, call)) else admitted } // A source started at release is bounded: its caller was enabled when // admitted, whether or not its scope has closed since. pure def releaseLocal(state: BudgetedLocal[r], layout: Serving::Layout, policyCall: int, resolved: Resolution, ttls: Ttls): BudgetedLocal[r] = { val released = Serving::releaseLocal(state, layout, policyCall, resolved, ttls) - if (released.sources.length() > state.sources.length()) stamp(released, state.sourceBudget) else released + if (released.sources.length() > state.sources.length()) startedLocal(released, state.sources.length(), state.sourceBudget) else released } // A source's outcome arriving after its deadline is a deadline error; work // whose deadline already completed its callers drains without effect. pure def settleLocal(state: BudgetedLocal[r], layout: Serving::Layout, index: int, value: int): BudgetedLocal[r] = { - val drained = drain(state, index) - if (state.sources.nth(index).result != CALL_PENDING) drained - else markSettled(Serving::settleLocal(drained, layout, index, if (reached(state, index)) DEADLINE_ERROR else value), index) + val outcome = arrival(state, index, state.sources.nth(index).result, value) + val retired = retire(state, index) + if (outcome == CALL_PENDING) retired else markSettled(Serving::settleLocal(retired, layout, index, outcome), index) } - // Time passes and every pending source whose deadline is reached completes - // its callers with a deadline error, which publishes to no layer; its - // external work is not drained. - pure def advanceLocal(state: BudgetedLocal[r], layout: Serving::Layout, ms: int): BudgetedLocal[r] = { - val advanced = Clock::advance(state, ms) - advanced.sources.indices().fold(advanced, (current, index) => - if (current.sources.nth(index).result == CALL_PENDING and reached(current, index)) - markSettled(Serving::settleLocal(current, layout, index, DEADLINE_ERROR), index) - else current) + // A delivered deadline completes the source's callers with a deadline + // error, which publishes to no layer; its external work is not drained. + pure def expireLocal(state: BudgetedLocal[r], layout: Serving::Layout, index: int): BudgetedLocal[r] = + markSettled(Serving::settleLocal(state, layout, index, DEADLINE_ERROR), index) + pure def advanceLocal(state: BudgetedLocal[r], layout: Serving::Layout, ms: int): BudgetedLocal[r] = + deliver(state, ms, (current, d) => expireLocal(current, layout, d.index)) + + // -- Budgeted variants of the held lifecycle --------------------------------------- + + // A loader the step started (at admission for a bypass source, at a release + // without the remote layer, at read settlement, read expiry or a failed + // decode) is bounded from now under the budget its start resolved, and has + // work outstanding. + pure def stampLoader(before: BudgetedHeld[r], after: BudgetedHeld[r], budget: int): BudgetedHeld[r] = + if (after.o.loaders > before.o.loaders) + due({ drained: after.drained.append(false), ...after }, SOURCE, after.loaders.length() - 1, budget) + else after + // A bypass source started at admission takes the admission budget. + pure def admit(state: BudgetedHeld[r], layout: Serving::Layout, call: Call): BudgetedHeld[r] = + stampLoader(state, RemoteIO::admit(state, layout, call), admissionBudget(state, call)) + // A read the release dispatched is bounded by the read budget in force; a + // source the release started without the remote layer (under the reply, or + // the bypass reply of a scope closed since admission) is bounded by the + // configured source budget, as every release-started source is. + pure def releaseJudged(state: BudgetedHeld[r], layout: Serving::Layout, judged: Serving::LayeredRelease, policyCall: int, ttls: Ttls, budget: int): BudgetedHeld[r] = { + val released = RemoteIO::releaseJudged(state, layout, judged, policyCall, ttls, budget) + stampLoader(state, if (released.o.reads > state.o.reads) due(released, READ, state.o.reads, budget) else released, state.sourceBudget) + } + pure def release(state: BudgetedHeld[r], layout: Serving::Layout, policyCall: int, resolved: Resolution, ttls: Ttls, budget: int): BudgetedHeld[r] = + releaseJudged(state, layout, Serving::judgeRelease(state, layout, policyCall, resolved, ttls, false), policyCall, ttls, budget) + // An immediate policy reply: admission and the held release in one step. + pure def begin(state: BudgetedHeld[r], layout: Serving::Layout, call: Call, resolved: Resolution, ttls: Ttls, budget: int): BudgetedHeld[r] = { + val admitted = admit(state, layout, call) + if (Serving::participating(state, layout, call)) release(admitted, layout, state.o.policyCalls, resolved, ttls, budget) else admitted } + // A read settled in the step that dispatched it: its deadline, if the + // budget registered one, is forgotten by the settlement (an unbounded + // budget registers none and is the truthful one for a read that never + // waits), and the loader the settlement starts is bounded from now. + pure def settleDispatched(before: BudgetedHeld[r], after: BudgetedHeld[r], layout: Serving::Layout, classifier: int): BudgetedHeld[r] = + if (after.o.reads > before.o.reads) settleRead(after, layout, before.o.reads, after.readFailed, classifier) else after + pure def beginRead(state: BudgetedHeld[r], layout: Serving::Layout, call: Call, resolved: Resolution, ttls: Ttls, budget: int, classifier: int): BudgetedHeld[r] = + settleDispatched(state, begin(state, layout, call, resolved, ttls, budget), layout, classifier) + // A read whose deadline is delivered: the loader its expiry starts is bounded from now. + pure def expireRead(state: BudgetedHeld[r], layout: Serving::Layout, read: int): BudgetedHeld[r] = + stampLoader(state, RemoteIO::expireRead(state, layout, read), state.sourceBudget) + // A read whose deadline passed undelivered (a bare clock move) is expired + // before its reply is judged, so the reply drains; a delivered one owns + // nothing already. + pure def expiredIfReached(state: BudgetedHeld[r], layout: Serving::Layout, read: int): BudgetedHeld[r] = + if (reached(state, READ, read)) expireRead(forget(state, READ, read), layout, read) else forget(state, READ, read) + pure def settleRead(state: BudgetedHeld[r], layout: Serving::Layout, read: int, failed: bool, classifier: int): BudgetedHeld[r] = { + val current = expiredIfReached(state, layout, read) + stampLoader(current, RemoteIO::settleRead(current, layout, read, failed, classifier), state.sourceBudget) + } + // The same settlement applied from a judgment already made (`remote_io::settleObserved`). + pure def settleObserved(state: BudgetedHeld[r], layout: Serving::Layout, read: int, judged: Remote::Observed, fence: int, classifier: int): BudgetedHeld[r] = { + val current = expiredIfReached(state, layout, read) + stampLoader(current, RemoteIO::settleObserved(current, layout, read, judged, fence, classifier), state.sourceBudget) + } + // A failed fresh decode's restart is a loader start like any other. + pure def settleLoad(state: BudgetedHeld[r], layout: Serving::Layout, load: int, failed: bool): BudgetedHeld[r] = + stampLoader(state, RemoteIO::settleLoad(state, layout, load, failed), state.sourceBudget) + // A loader's result arriving after its deadline is a deadline error; a + // loader whose deadline already completed its flight drains without effect. + // `timeout` is the profile's propagated timeout, passed through; which + // errors are timeouts for the recovery rules is `remote_io::failed`'s. + pure def settleLoader(state: BudgetedHeld[r], layout: Serving::Layout, ordinal: int, value: int, timeout: bool): BudgetedHeld[r] = { + val outcome = arrival(state, ordinal, state.sources.nth(state.loaders.nth(ordinal)).result, value) + val retired = retire(state, ordinal) + if (outcome == CALL_PENDING) retired + else RemoteIO::settleLoader(retired, layout, ordinal, outcome, timeout) + } + // A delivered loader deadline completes the flight with a deadline error + // (classified for recovery where the flight retained a snapshot); its + // external work is not drained. + pure def expireLoader(state: BudgetedHeld[r], layout: Serving::Layout, ordinal: int): BudgetedHeld[r] = + RemoteIO::settleLoader(state, layout, ordinal, DEADLINE_ERROR, false) + pure def advance(state: BudgetedHeld[r], layout: Serving::Layout, ms: int): BudgetedHeld[r] = + deliver(state, ms, (current, d) => if (d.kind == READ) expireRead(current, layout, d.index) else expireLoader(current, layout, d.index)) } diff --git a/formal/kernel/diagnostics.qnt b/formal/kernel/diagnostics.qnt index ef3b5874..c903629f 100644 --- a/formal/kernel/diagnostics.qnt +++ b/formal/kernel/diagnostics.qnt @@ -1,7 +1,10 @@ module diagnostics { // The diagnostics channel (`d`) of the request-only traversal: which // singleflight a caller coalesced into and the layer a failed source is - // attributed to. The labels are the metric labels of the implementations: + // attributed to; and, over the budgeted held lifecycle, the singleflight a + // follower coalesced into, the layer a failed remote-reading flight is + // attributed to and the recovery age. The labels are the metric labels of + // the implementations: // the coalesced scope is "request_local", the only registry this shape // consults; fallback errors name the layer the call was serving (the // request memo "request_local" when it memoizes, the shared layers' @@ -14,24 +17,57 @@ module diagnostics { import layer_policy.* from "./layer-policy" import serving as Serving from "./serving" import policy_gate as Gate from "./policy-gate" + import remote_io as RemoteIO from "./remote-io" + import deadlines as Deadlines from "./deadlines" + import recovery as Recovery from "./recovery" + import clock as Clock from "./clock" pure val REQUEST_LOCAL_LAYER = "request_local" pure val LOCAL_LAYER = "local" + pure val REMOTE_LAYER = "remote" pure val NO_CACHE_LAYER = "noop" + // The singleflight a caller coalesced into: the request registry's, or the + // process registry's (the layered shapes' second registry). + pure val PROCESS_SCOPE = "process" // A source started outside the cache (a disabled or outside caller) has no // layer and records no fallback error. pure val NO_LAYER = "" + // The channel is row-polymorphic: a profile whose drivers compare more + // fields carries them beside these four, which scope's descriptor parses + // exactly; the shadow drivers compare two more (`ShadowChannel`): the + // configuration errors a malformed shadow policy reports and the offsets + // of frames a shadow read found stamped after the wall clock, on the + // `remote_shadow` layer (C57). + type Channel[q] = { warnings: int, ages: List[int], coalesced: List[str], fallbackErrors: List[str] | q } + type FutureOffset = { layer: str, offsetMs: int } + pure val REMOTE_SHADOW_LAYER = "remote_shadow" + type ShadowChannel[q] = Channel[{ configErrors: int, futureOffsets: List[FutureOffset] | q }] // Per source, parallel to the source records: the layer it is attributed to. - type Diagnosed[r] = { d: Diagnostics, sourceLayers: List[str] | r } - type DiagnosedRequest[r] = Serving::RequestServed[Diagnosed[r]] + type Diagnosed[r, q] = { d: Channel[q], sourceLayers: List[str] | r } + type DiagnosedRequest[r, q] = Serving::RequestServed[Diagnosed[r, q]] + // The budgeted held remote lifecycle with the channel and per-flight layers beside it. + type DiagnosedHeld[r, q] = Deadlines::BudgetedHeld[Diagnosed[r, q]] - pure def recordCoalesced(state: Diagnosed[r], scope: str): Diagnosed[r] = + pure def recordCoalesced(state: Diagnosed[r, q], scope: str): Diagnosed[r, q] = { d: { coalesced: state.d.coalesced.append(scope), ...state.d }, ...state } - pure def recordSourceLayer(state: Diagnosed[r], layer: str): Diagnosed[r] = + pure def recordSourceLayer(state: Diagnosed[r, q], layer: str): Diagnosed[r, q] = { sourceLayers: state.sourceLayers.append(layer), ...state } - pure def recordFallbackError(state: Diagnosed[r], layer: str): Diagnosed[r] = + pure def recordFallbackError(state: Diagnosed[r, q], layer: str): Diagnosed[r, q] = if (layer == NO_LAYER) state else { d: { fallbackErrors: state.d.fallbackErrors.append(layer), ...state.d }, ...state } + // The age of a recovered value, sampled at its served recovery decode, or + // of a shadow job's C0 frame at its verdict (C57). + pure def recordAge(state: Diagnosed[r, q], age: int): Diagnosed[r, q] = + { d: { ages: state.d.ages.append(age), ...state.d }, ...state } + // A confirmed shadow mismatch logged under the job's captured policy (C60). + pure def recordWarning(state: { d: Channel[q] | r }): { d: Channel[q] | r } = + { d: { warnings: state.d.warnings + 1, ...state.d }, ...state } + // A shadow policy that failed to resolve, reported once per call. + pure def recordConfigError(state: { d: ShadowChannel[q] | r }): { d: ShadowChannel[q] | r } = + { d: { configErrors: state.d.configErrors + 1, ...state.d }, ...state } + // A frame a shadow read found stamped after the wall clock: the layer that observed it and the offset. + pure def recordFutureOffset(state: { d: ShadowChannel[q] | r }, layer: str, offsetMs: int): { d: ShadowChannel[q] | r } = + { d: { futureOffsets: state.d.futureOffsets.append({ layer: layer, offsetMs: offsetMs }), ...state.d }, ...state } // The layer a source started at release is attributed to: none once the // scope closed, the request memo when the call memoizes, else the shared // layers' fallback. @@ -41,13 +77,13 @@ module diagnostics { // -- Diagnosed variants of the request-only traversal ------------------------ // A caller that does not participate starts a bypass source at admission. - pure def admitRequest(state: DiagnosedRequest[r], layout: Serving::Layout, call: Call): DiagnosedRequest[r] = { + pure def admitRequest(state: DiagnosedRequest[r, q], layout: Serving::Layout, call: Call): DiagnosedRequest[r, q] = { val admitted = Serving::admitRequest(state, layout, call) if (Serving::participating(state, layout, call)) admitted else recordSourceLayer(admitted, NO_LAYER) } // The release judged once (Serving::requestRelease) labels what the same // release did to the state. - pure def releaseRequest(state: DiagnosedRequest[r], layout: Serving::Layout, policyCall: int, resolved: Resolution): DiagnosedRequest[r] = { + pure def releaseRequest(state: DiagnosedRequest[r, q], layout: Serving::Layout, policyCall: int, resolved: Resolution): DiagnosedRequest[r, q] = { val judged = Serving::requestRelease(state, layout, policyCall, resolved) val released = Serving::releaseRequest(state, layout, policyCall, resolved) match judged.decision.outcome { @@ -61,7 +97,82 @@ module diagnostics { | ServesRemote(_) => released } } - pure def settleRequest(state: DiagnosedRequest[r], layout: Serving::Layout, index: int, value: int): DiagnosedRequest[r] = + pure def settleRequest(state: DiagnosedRequest[r, q], layout: Serving::Layout, index: int, value: int): DiagnosedRequest[r, q] = recordFallbackError(Serving::settleRequest(state, layout, index, value), if (value == SOURCE_ERROR) state.sourceLayers.nth(index) else NO_LAYER) + + // -- Diagnosed variants of the budgeted held lifecycle ------------------------- + // For a profile whose drivers compare the channel over the held remote path + // with immediate replies, its reads settled at admission (recovery, + // `beginRead`) or held (effects, `begin`): the + // singleflight a caller coalesced into, judged once beside the release + // (`Serving::judgeRelease` applied through `Deadlines::releaseJudged`); the + // layer a flight is attributed to when it starts (the remote layer for a + // flight that dispatched a read, whatever the read observed; the request + // memo or the shared layers' fallback for a source started without the + // remote layer; none for a bypass source started at admission); the + // fallback error recorded against that layer when the flight's failure is + // recorded (a late result that only drains records none); the recovery age + // sampled when a recovery decode serves. + + // Admission: a caller that does not participate starts a bypass source + // attributed to no layer. + pure def admit(state: DiagnosedHeld[r, q], layout: Serving::Layout, call: Call): DiagnosedHeld[r, q] = { + val admitted = Deadlines::admit(state, layout, call) + if (Serving::participating(state, layout, call)) admitted else recordSourceLayer(admitted, NO_LAYER) + } + // The held release applied from a judgment already made + // (`Serving::judgeRelease` with the remote layer unobserved, through + // `Deadlines::releaseJudged`), labelled from that judgment; a variant that + // admits work beside the held release (`shadow::beginHeld`) judges once + // and applies this. + pure def releaseJudged(state: DiagnosedHeld[r, q], layout: Serving::Layout, judged: Serving::LayeredRelease, policyCall: int, ttls: Ttls, budget: int): DiagnosedHeld[r, q] = { + val released = Deadlines::releaseJudged(state, layout, judged, policyCall, ttls, budget) + match judged.decision.outcome { + | JoinsRequest(_) => recordCoalesced(released, REQUEST_LOCAL_LAYER) + | JoinsProcess(_) => recordCoalesced(released, PROCESS_SCOPE) + | Starts => recordSourceLayer(released, + if (judged.effective.layers.remote) REMOTE_LAYER else sourceLayer(judged.open, judged.decision.slot)) + | ServesMemo(_) => released + | ServesLocal(_) => released + | ServesRemote(_) => released + } + } + // Admission and the held release in one step, labelled from the release + // judged once: for a profile whose drivers hold the read (`begin`), or + // settle it in the same step (`beginRead`, `Deadlines::settleDispatched`). + pure def begin(state: DiagnosedHeld[r, q], layout: Serving::Layout, call: Call, resolved: Resolution, ttls: Ttls, budget: int): DiagnosedHeld[r, q] = { + val admitted = admit(state, layout, call) + if (not(Serving::participating(state, layout, call))) admitted + else releaseJudged(admitted, layout, Serving::judgeRelease(admitted, layout, state.o.policyCalls, resolved, ttls, false), state.o.policyCalls, ttls, budget) + } + pure def beginRead(state: DiagnosedHeld[r, q], layout: Serving::Layout, call: Call, resolved: Resolution, ttls: Ttls, budget: int, classifier: int): DiagnosedHeld[r, q] = + Deadlines::settleDispatched(state, begin(state, layout, call, resolved, ttls, budget), layout, classifier) + // A flight whose failure the step recorded (its source's outcome moved from + // pending to an error) is attributed to its layer; a result that drains + // after its deadline completed the flight records nothing. + pure def failureAttributed(before: DiagnosedHeld[r, q], after: DiagnosedHeld[r, q], flight: int): DiagnosedHeld[r, q] = { + val outcome = after.sources.nth(flight).result + if (before.sources.nth(flight).result == CALL_PENDING and outcome != CALL_PENDING and not(accepted(outcome))) + recordFallbackError(after, after.sourceLayers.nth(flight)) else after + } + pure def settleLoader(state: DiagnosedHeld[r, q], layout: Serving::Layout, ordinal: int, value: int, timeout: bool): DiagnosedHeld[r, q] = + failureAttributed(state, Deadlines::settleLoader(state, layout, ordinal, value, timeout), state.loaders.nth(ordinal)) + pure def expireLoader(state: DiagnosedHeld[r, q], layout: Serving::Layout, ordinal: int): DiagnosedHeld[r, q] = + failureAttributed(state, Deadlines::expireLoader(state, layout, ordinal), state.loaders.nth(ordinal)) + // Delivery from inside the kernel, as the lint requires: a read expiry is + // the budgeted one, a loader expiry the attributed one (a held profile + // registers READ and SOURCE only). + pure def advance(state: DiagnosedHeld[r, q], layout: Serving::Layout, ms: int): DiagnosedHeld[r, q] = + Deadlines::deliver(state, ms, (current, d) => + if (d.kind == Deadlines::READ) Deadlines::expireRead(current, layout, d.index) else expireLoader(current, layout, d.index)) + // A recovery decode that serves samples the candidate's age at the wall + // clock of its settlement, beside the label the settlement reports. + pure def settleLoad(state: DiagnosedHeld[r, q], layout: Serving::Layout, load: int, failed: bool): DiagnosedHeld[r, q] = { + val snapshot = Recovery::retainedFor(state, RemoteIO::heldLoad(state, load).flight) + val settled = Deadlines::settleLoad(state, layout, load, failed) + val served = settled.o.recovery.length() > state.o.recovery.length() and + settled.o.recovery.nth(settled.o.recovery.length() - 1) == "served" + if (served) recordAge(settled, Clock::wallOf(state) - snapshot.created) else settled + } } diff --git a/formal/kernel/flights.qnt b/formal/kernel/flights.qnt index 5dba6ba0..13c30cd0 100644 --- a/formal/kernel/flights.qnt +++ b/formal/kernel/flights.qnt @@ -60,20 +60,34 @@ module flights { ...state }, if (coalesce) slot else NO_OWNER, index) } + // A source no caller owns (a served hit's diagnostic source, `shadow`): it + // joins the sources under the next index and is registered nowhere, so + // `ownedBy` is empty for it and its settlement completes no caller. + pure def registerDetached(state: Registry[r, p], source: Source[p]): Registry[r, p] = + { sources: state.sources.append(source), ...state } // A closed scope forgets its request flights along with its memo row. pure def forgetScope(state: Registry[r, p], context: int, keysPerScope: int): Registry[r, p] = { requestFlights: state.requestFlights.indices().fold(state.requestFlights, (out, slot) => if (slot / keysPerScope == context) out.replaceAt(slot, NO_OWNER) else out), ...state } - pure def settleSource(state: Registry[r, p], index: int, result: int): Registry[r, p] = { - sources: state.sources.replaceAt(index, { result: result, ...state.sources.nth(index) }), + // A source's outcome is recorded when its work settles or its deadline + // completes it; the registries forget the flight when it completes its + // callers: at once for a settlement, later for a flight that first recovers + // a retained value, which stays joinable until then. + pure def recordResult(state: Registry[r, p], index: int, result: int): Registry[r, p] = + { sources: state.sources.replaceAt(index, { result: result, ...state.sources.nth(index) }), ...state } + pure def forgetSource(state: Registry[r, p], index: int): Registry[r, p] = { processFlights: state.processFlights.foldl(List(), (out, owner) => out.append(if (owner == index) NO_OWNER else owner)), requestFlights: state.requestFlights.foldl(List(), (out, owner) => out.append(if (owner == index) NO_OWNER else owner)), ...state } pure def ownedBy(state: Registry[r, p], index: int): Set[int] = state.owners.indices().filter(call => state.owners.nth(call) == index) + // The newest source, for a profile whose drivers settle the latest loader + // rather than one named by index (the local-failure drivers resolve + // `loaders - 1`) and for an inline source settled by the call that started it. + pure def latest(state: Registry[r, p]): int = state.sources.length() - 1 // Opt-in record: the identity of the last admitted caller, for a property // that no source completes a caller for another instance or key. diff --git a/formal/kernel/instances.qnt b/formal/kernel/instances.qnt new file mode 100644 index 00000000..f040d73e --- /dev/null +++ b/formal/kernel/instances.qnt @@ -0,0 +1,13 @@ +module instances { + // Which instances the environment has constructed. The local-clock drivers + // construct default instances at fractional process times; the model records + // only that an instance exists, since the layers judge time on the shared + // whole-millisecond grid whatever the construction phase (C09). Read by + // guards and input domains alone, never by a rule; kept as a transition + // because the composition lint has no environment allowance yet, as + // `request_memo::openScope` is. + type Constructed[r] = { constructed: List[bool] | r } + + pure def construct(state: Constructed[r], instance: int): Constructed[r] = + { constructed: state.constructed.replaceAt(instance, true), ...state } +} diff --git a/formal/kernel/layer-policy.qnt b/formal/kernel/layer-policy.qnt index 8a09a07c..5f8a2139 100644 --- a/formal/kernel/layer-policy.qnt +++ b/formal/kernel/layer-policy.qnt @@ -44,6 +44,17 @@ module layer_policy { }, coalesce: resolved.coalesce } + // The TTLs of the layers a reply uses: a layer the reply leaves off has TTL + // 0, so after this a TTL is positive exactly when its layer is on. A + // traversal suspended at the remote layer (a held read) carries these + // instead of the resolution: `localMs > 0` says local participates, + // `freshMs` judges the frame at settlement, `retentionMs` is the refill + // retention and the recovery maximum. + pure def effectiveTtls(resolved: Resolution, ttls: Ttls): Ttls = { + localMs: if (resolved.layers.local) ttls.localMs else 0, + freshMs: if (resolved.layers.remote) ttls.freshMs else 0, + retentionMs: if (resolved.layers.remote) ttls.retentionMs else 0 + } // Sharing across callers exists only where a shared layer (local or remote) // participates; a request-only call is never coalesced across scopes. pure def sharedLayers(layers: Layers): bool = layers.local or layers.remote diff --git a/formal/kernel/local-faults.qnt b/formal/kernel/local-faults.qnt new file mode 100644 index 00000000..39be8ee0 --- /dev/null +++ b/formal/kernel/local-faults.qnt @@ -0,0 +1,56 @@ +module local_faults { + // The local storage fault switch (C27). The drivers inject one failure into + // local storage (its exception or integer-clock seam, the local-failure + // fixture's `localFaultInjection`), so while it is armed every local read + // and write throws and the cache fails open. A call whose local read fails + // keeps the layers its reply resolved to, and with them its coalescing: the + // implementations pick the process flight from the resolved layer + // configuration before any read (`src/dialcache.ts` `getThroughSharedLayers` + // wraps the traversal in the single flight when the local layer is enabled + // and the key coalesces), and a local read that throws + // (`getThroughActiveLocal`, `readLocalWithResolvedConfig`) disables only + // that call's local value and its local write. So under the fault a call + // reads nothing from local storage, a remote hit does not warm it, and the + // source it starts captures no local TTL, so its settlement publishes + // nothing locally even after the fault clears (the failed read is the + // call's, not the settlement's), while two callers under the fault still + // share one source. A publication whose local write fails stores nothing and + // completes its callers with the accepted result, memoized and refilled as + // usual. + // + // Stated with the kernel's fault idiom: the switch is read where the call + // touches local storage and passed as an argument, never turned into a TTL + // the layer gating reads. An admission with an immediate reply (`begin`) + // judges the layered release with the fault as its argument + // (`serving::judgeReleaseUnder`: the local value hidden, the layers + // untouched, nothing warmed from the release) and applies that judgment + // (`serving::releaseJudged`); a settlement (`settle`) withdraws the source's + // captured local TTL, so `serving::publish` warms nothing. The traversal and + // the publication keep their one statement in `serving`; the remote fault + // switches live in `serving::Served` because the traversal reads them mid + // release, where this one is read at its two entry points. + import layer_policy.* from "./layer-policy" + import calls.* from "./calls" + import flights as Flights from "./flights" + import serving as Serving from "./serving" + + type Faulted[r] = Serving::Served[{ localFailed: bool | r }] + + // An immediate reply under the switch: admission, then the release judged + // with the fault as its argument and applied from that judgment. + pure def begin(state: Faulted[r], layout: Serving::Layout, call: Call, resolved: Resolution, ttls: Ttls): Faulted[r] = { + val admitted = Serving::admit(state, layout, call) + if (Serving::participating(state, layout, call)) + Serving::releaseJudged(admitted, layout, + Serving::judgeReleaseUnder(admitted, layout, state.o.policyCalls, resolved, ttls, true, state.localFailed), + state.o.policyCalls, ttls) + else admitted + } + // A settlement under an armed fault publishes nothing locally: the source + // settles with its local TTL withdrawn and everything else as captured. + pure def settle(state: Faulted[r], layout: Serving::Layout, index: int, value: int): Faulted[r] = { + val source = state.sources.nth(index) + val publishing = if (state.localFailed) { sources: state.sources.replaceAt(index, { localMs: 0, ...source }), ...state } else state + Serving::settle(publishing, layout, index, value) + } +} diff --git a/formal/kernel/markers.qnt b/formal/kernel/markers.qnt new file mode 100644 index 00000000..50e97b8b --- /dev/null +++ b/formal/kernel/markers.qnt @@ -0,0 +1,77 @@ +module markers { + // Invalidation markers: the lifetime of an entity's watermark. The + // implementations keep a watermark as a Redis key with a TTL. The + // invalidation script writes the larger of the current and the proposed + // watermark with `SET ... PX` for the larger of the key's remaining PTTL + // and a desired lifetime: a floor of twice the tracked retention cap, or + // the span from the invalidation's wall clock to the watermark plus the cap + // and a minute's margin, whichever is longer, so the watermark outlives + // every frame it may fence (`src/internal/redis-scripts.ts` + // `INVALIDATE_CACHE_SCRIPT`: `MIN_WATERMARK_TTL_MS = 2 * + // MAX_TRACKED_REDIS_VALUE_TTL_MS`, `WATERMARK_TTL_MARGIN_MS = 60000`, keep + // the larger existing PTTL; `go/redis_adapter.go` `InvalidationScript`). + // Once the key lapses a read sees no watermark. + // + // Marker expiry is a time transition that zeroes the watermark (`expire`, + // applied by `advance`), not a judgment threaded through the fence: the + // watermark field is what a read sees at each instant, so + // `remote_frames::fenceCleared` and `missFence` keep reading the raw + // watermark and the fence stays stated once. An invalidation never lowers a + // watermark (`remote_frames::raiseWatermark`); only a marker's expiry + // lowers one, to zero, and the next invalidation raises it from there, as + // the script sees a missing key. A marker's expiry is kept per entity on + // the monotonic clock, like every retention; its lifetime is computed on + // the wall clock, the script's `invalidated_at_ms`. An invalidation stamps + // a marker only when it takes effect (`serving::maintains`: remote storage + // present and no write fault), the one judgment this module reads beside + // `serving::invalidate`'s outcome rule, which it does not restate. `expire` + // is its own definition so a profile that composes markers with deadlines + // can apply it inside the per-instant walk. `observe` appends the marker the + // drivers read, the cutoff against the origin the drivers report cutoffs + // from (an explicit argument, not the skew, which diverges from it after a + // wall rollback) and the remaining lifetime, or NO_MARKER (Redis PTTL -2 on + // a missing key). One consumer today, recovery-read. + import cache_rules.* from "../cache-rules" + import clock as Clock from "./clock" + import remote_frames as Remote from "./remote-frames" + import serving as Serving from "./serving" + + type Marker = { cutoffMs: int, ttlMs: int } + pure val NO_MARKER: Marker = { cutoffMs: -1, ttlMs: -2 } + pure val MARKER_FLOOR_MS = 2 * Remote::TRACKED_RETENTION_CAP_MS + pure val MARKER_MARGIN_MS = 60000 + + type Marked[r] = Remote::Frames[{ markerExpires: List[int] | r }] + type Observing[r] = Marked[{ markers: List[Marker] | r }] + type Maintained[r] = Serving::Served[{ markerExpires: List[int] | r }] + + pure def inForce(state: Marked[r], entity: int): bool = deadlinePendingAt(state.now, state.markerExpires.nth(entity)) + // The lifetime the script asks for a watermark at `cutoff` written at `wall`. + pure def lifetime(cutoff: int, wall: int): int = { + val covering = cutoff - wall + Remote::TRACKED_RETENTION_CAP_MS + MARKER_MARGIN_MS + if (covering > MARKER_FLOOR_MS) covering else MARKER_FLOOR_MS + } + // A marker no longer in force fences nothing: its entity's watermark + // returns to the zero baseline (`Remote::clearWatermark`). + pure def expire(state: Marked[r]): Marked[r] = + state.watermark.indices().fold(state, (out, entity) => + if (inForce(state, entity)) out else Remote::clearWatermark(out, entity)) + pure def advance(state: Marked[r], ms: int): Marked[r] = expire(Clock::advance(state, ms)) + // The invalidation outcome (`serving::invalidate`) and, when it took + // effect, the entity's marker kept for the larger of its remaining lifetime + // and the lifetime the raised watermark asks for. + pure def invalidate(state: Maintained[r], entity: int, bufferMs: int): Maintained[r] = { + val invalidated = Serving::invalidate(state, entity, bufferMs) + if (Serving::maintains(state)) { + val current = state.markerExpires.nth(entity) + val asked = state.now + lifetime(invalidated.watermark.nth(entity), Clock::wallOf(state)) + { markerExpires: state.markerExpires.replaceAt(entity, if (asked > current) asked else current), ...invalidated } + } else invalidated + } + pure def observe(state: Observing[r], entity: int, originMs: int): Observing[r] = { + val marker = if (inForce(state, entity)) + { cutoffMs: state.watermark.nth(entity) - originMs, ttlMs: state.markerExpires.nth(entity) - state.now } + else NO_MARKER + { markers: state.markers.append(marker), ...state } + } +} diff --git a/formal/kernel/metrics.qnt b/formal/kernel/metrics.qnt new file mode 100644 index 00000000..12f1fc34 --- /dev/null +++ b/formal/kernel/metrics.qnt @@ -0,0 +1,213 @@ +module metrics { + // The observer's metric events over the remote layer (C30, C57 to C59): + // the ordered trail the implementations report to their metrics callback + // (`src/internal/redis-cache.ts` `getWithResolvedConfig`, + // `startRawPayloadRead`, `putWithLayer`, `deserializePayload`; + // `src/dialcache.ts` the `disabled`, `coalesced`, `fallback` and + // `invalidation` metrics; `go/engine.go` the same) and the effects drivers + // compare as `events`, one record per event: its name, the layer or scope + // it names, its detail (a reason, an error category or an operation) and + // its amount (milliseconds for a duration or an offset, bytes for a size, + // the dispatch index of a write, 0 otherwise). + // + // Stated here once, as metered variants of the held remote lifecycle with + // held refills (`remote_writes::HeldWriting`) and the diagnosed channel + // (`diagnostics::DiagnosedHeld`): a participating caller's admission reports + // each shared layer its reply leaves off as disabled by policy + // (`policy_disabled`: no effective TTL; local before remote), then the read + // it dispatched (`request`) or the singleflight it joined (`coalesced`, the + // scope `diagnostics` recorded); a read reports its deadline error + // (`cache_read_timeout`, when its deadline is delivered or found reached at + // its late reply), its fault (`cache_read`) or its miss with the reason + // (`value_absent` when no frame is present, `watermark_fenced` when the + // watermark hides one, `unclassified` for a visible frame declined as + // future-dated, after a `futureOffset` of the stamp's lead over the wall + // clock, `expired` for one declined as stale, the frame being the stored one + // or a queued frame reply; a queued miss reply's normalized reason, + // `adapter_replies`), and its duration (`get`) measured + // from its dispatch to its settlement, or to the settlement of the fresh + // decode it held (C59: the decode is inside the read's duration), when the + // decode reports its own duration (`serialization` `load`) after its fault + // (`serialization_load`, then an `unclassified` miss); a loader whose + // flight's outcome the step records reports its failure (`error` against + // the layer `diagnostics` attributed it to, detail `fallback`) and its + // duration (`fallback`) from its start to that settlement, whether the + // result arrived or the deadline was delivered, and a late result that only + // drains reports nothing (C58: late sources do not repeat failures); a dump + // released reports its fault (`serialization_dump`) or its duration + // (`serialization` `dump`) from its hold, then the serialized and stored + // sizes and, when the second fence check lets the write go, the write's + // dispatch with its index (`writeDispatch`); a write released reports its + // fault (`cache_write`); an invalidation that is counted is reported + // (`invalidation`). The instants the durations are measured from are + // recorded by the transitions that start each effect: per flight the + // dispatch of its read, per decode its hold, per loader ordinal its start, + // per dump its hold. + // + // Outside this module's consumers, and not stated: a bypass caller's + // `context` reason, a payload class that fails the read (the fault reported + // here is the drivers'), a recovery decode's events, compression events. + // One consumer today, effects. + import conformance_observations.* from "../conformance-observations" + import encodings.* from "./encodings" + import calls.* from "./calls" + import layer_policy.* from "./layer-policy" + import serving as Serving from "./serving" + import remote_io as RemoteIO from "./remote-io" + import remote_frames as Remote from "./remote-frames" + import remote_writes as Writes from "./remote-writes" + import deadlines as Deadlines from "./deadlines" + import diagnostics as Diagnostics from "./diagnostics" + import adapter_replies as Replies from "./adapter-replies" + import clock as Clock from "./clock" + + type Event = { event: str, location: str, detail: str, amount: int } + pure val NO_DETAIL = "" + // A flight that dispatched no read measures no read duration. + pure val NO_INSTANT = -1 + // The metered shape: the diagnosed held lifecycle with held refills and the + // queued reply, the events channel and the instants. + type Metered[r, q] = Diagnostics::DiagnosedHeld[{ + events: List[Event], + readStarted: List[int], decodeStarted: List[int], sourceStarted: List[int], dumpStarted: List[int], + reply: int, replyAt: int, + dumps: List[Writes::HeldDump], writes: List[Writes::HeldWrite] | r + }, q] + + pure def event(state: Metered[r, q], name: str, location: str, detail: str, amount: int): Metered[r, q] = + { events: state.events.append({ event: name, location: location, detail: detail, amount: amount }), ...state } + pure def remote(state: Metered[r, q], name: str, detail: str, amount: int): Metered[r, q] = + event(state, name, Diagnostics::REMOTE_LAYER, detail, amount) + pure def error(state: Metered[r, q], category: str): Metered[r, q] = remote(state, "error", category, 0) + pure def miss(state: Metered[r, q], reason: str): Metered[r, q] = remote(state, "miss", reason, 0) + pure def last(labels: List[str]): str = labels.nth(labels.length() - 1) + + // The instants a step's new effects started at: a flight the step created + // (its read's dispatch when the step dispatched one), a decode it held, a + // loader it started and a dump it held, each at the clock of the step. + pure def stamped(before: Metered[r, q], after: Metered[r, q]): Metered[r, q] = { + val flights = if (after.sources.length() > before.sources.length()) + { readStarted: after.readStarted.append(if (after.o.reads > before.o.reads) after.now else NO_INSTANT), ...after } else after + val decodes = if (after.o.loads > before.o.loads) { decodeStarted: flights.decodeStarted.append(after.now), ...flights } else flights + val loaders = if (after.o.loaders > before.o.loaders) { sourceStarted: decodes.sourceStarted.append(after.now), ...decodes } else decodes + if (after.o.dumps > before.o.dumps) { dumpStarted: loaders.dumpStarted.append(after.now), ...loaders } else loaders + } + // The read a flight dispatched, measured to now. + pure def readDone(state: Metered[r, q], flight: int): Metered[r, q] = + remote(state, "get", NO_DETAIL, state.now - state.readStarted.nth(flight)) + + // -- Admission ----------------------------------------------------------------- + + pure def begin(state: Metered[r, q], layout: Serving::Layout, call: Call, resolved: Resolution, ttls: Ttls, budget: int): Metered[r, q] = { + val released = stamped(state, Diagnostics::begin(state, layout, call, resolved, ttls, budget)) + val effective = effectiveTtls(resolved, ttls) + val admitted = if (not(Serving::participating(state, layout, call))) released else { + val local = if (effective.localMs == 0) event(released, "disabled", Diagnostics::LOCAL_LAYER, "policy_disabled", 0) else released + if (effective.freshMs == 0) event(local, "disabled", Diagnostics::REMOTE_LAYER, "policy_disabled", 0) else local + } + if (admitted.o.reads > state.o.reads) remote(admitted, "request", NO_DETAIL, 0) + else if (admitted.d.coalesced.length() > state.d.coalesced.length()) event(admitted, "coalesced", last(admitted.d.coalesced), NO_DETAIL, 0) + else admitted + } + + // -- The read and the decode ---------------------------------------------------- + + // The lead of a declined future-dated frame's stamp over the wall clock, 0 + // when the frame the read observed is not future-dated: a queued frame + // reply's stamp, or the stored frame's. + pure def futureLead(state: Metered[r, q], layout: Serving::Layout, key: int): int = { + val stamp = if (Replies::queued(state)) (if (Replies::isFrame(state.reply)) state.replyAt else 0) + else if (Remote::visible(state, key, layout.operationsPerEntity)) state.created.nth(key) else 0 + if (stamp > Clock::wallOf(state)) stamp - Clock::wallOf(state) else 0 + } + // The reason a visible frame the read declined reports, the stored frame's + // stamp or a queued frame reply's judged alike (`src/internal/redis-cache.ts` + // `frameAge` and `getWithResolvedConfig`, `go/engine.go` `readServing`): + // `unclassified` for a stamp ahead of the wall clock, `expired` for an age + // that reached the freshness (`cache_rules.freshAgeAllowed` declines the + // ceiling itself, as the ports' `ageMs >= freshAgeMs` does). + pure def declinedFrameReason(stamp: int, wall: int): str = + if (stamp > wall) "unclassified" else "expired" + // The reason a read that served nothing reports: a queued miss reply's + // normalized reason, a queued frame reply declined by its stamp, or the + // frames': absent, hidden by the watermark, or declined by the stored stamp. + pure def missReason(state: Metered[r, q], layout: Serving::Layout, key: int): str = + if (Replies::queued(state)) + (if (Replies::isFrame(state.reply)) declinedFrameReason(state.replyAt, Clock::wallOf(state)) + else Replies::reason(state.tracked, state.reply)) + else if (not(state.remoteValues.nth(key) > NO_VALUE and Remote::retained(state, key))) "value_absent" + else if (not(Remote::fenceCleared(state, key, layout.operationsPerEntity))) "watermark_fenced" + else declinedFrameReason(state.created.nth(key), Clock::wallOf(state)) + pure def settleRead(state: Metered[r, q], layout: Serving::Layout, read: int, failed: bool, classifier: int, bufferMs: int): Metered[r, q] = { + val held = RemoteIO::heldRead(state, read) + val settled = stamped(state, Replies::settleRead(state, layout, read, failed, classifier, bufferMs)) + if (settled.io.aborted.length() > state.io.aborted.length()) readDone(error(settled, "cache_read_timeout"), held.flight) + else if (not(RemoteIO::owning(held))) settled + else if (failed) readDone(error(settled, "cache_read"), held.flight) + else if (settled.o.loads > state.o.loads) settled + else { + val key = state.sources.nth(held.flight).key + val lead = futureLead(state, layout, key) + val offset = if (lead > 0) remote(settled, "futureOffset", NO_DETAIL, lead) else settled + readDone(miss(offset, missReason(state, layout, key)), held.flight) + } + } + pure def settleLoad(state: Metered[r, q], layout: Serving::Layout, load: int, failed: bool): Metered[r, q] = { + val held = RemoteIO::heldLoad(state, load) + val settled = stamped(state, Diagnostics::settleLoad(state, layout, load, failed)) + if (held.recovery) settled + else { + val decoded = remote(if (failed) error(settled, "serialization_load") else settled, "serialization", "load", settled.now - state.decodeStarted.nth(load)) + readDone(if (failed) miss(decoded, "unclassified") else decoded, held.flight) + } + } + + // -- The source ------------------------------------------------------------------ + + // A loader whose flight's outcome the step recorded: its failure against the + // layer `diagnostics` attributed it to, then its duration from its start. + pure def sourceDone(before: Metered[r, q], after: Metered[r, q], ordinal: int, flight: int): Metered[r, q] = + if (after.sources.nth(flight).result == before.sources.nth(flight).result) after + else { + val failed = if (after.d.fallbackErrors.length() > before.d.fallbackErrors.length()) + event(after, "error", last(after.d.fallbackErrors), "fallback", 0) else after + remote(failed, "fallback", NO_DETAIL, after.now - before.sourceStarted.nth(ordinal)) + } + pure def settleLoader(state: Metered[r, q], layout: Serving::Layout, ordinal: int, value: int, timeout: bool): Metered[r, q] = { + val flight = state.loaders.nth(ordinal) + sourceDone(state, stamped(state, Diagnostics::failureAttributed(state, Writes::settleLoader(state, layout, ordinal, value, timeout), flight)), ordinal, flight) + } + pure def expireLoader(state: Metered[r, q], layout: Serving::Layout, ordinal: int): Metered[r, q] = + sourceDone(state, stamped(state, Diagnostics::expireLoader(state, layout, ordinal)), ordinal, state.loaders.nth(ordinal)) + pure def expireRead(state: Metered[r, q], layout: Serving::Layout, read: int): Metered[r, q] = + readDone(error(stamped(state, Deadlines::expireRead(state, layout, read)), "cache_read_timeout"), RemoteIO::heldRead(state, read).flight) + // Delivery from inside the kernel, as the lint requires. + pure def advance(state: Metered[r, q], layout: Serving::Layout, ms: int): Metered[r, q] = + Deadlines::deliver(state, ms, (current, d) => + if (d.kind == Deadlines::READ) expireRead(current, layout, d.index) else expireLoader(current, layout, d.index)) + + // -- The refill ------------------------------------------------------------------- + + // `bytes` is the serialized size of the value the source recorded (a + // profile's constant for its fixture value). + pure def releaseDump(state: Metered[r, q], layout: Serving::Layout, dump: int, failed: bool, bytes: int): Metered[r, q] = { + val released = stamped(state, Writes::releaseDump(state, layout, dump, failed)) + val serialized = remote(if (failed) error(released, "serialization_dump") else released, "serialization", "dump", released.now - state.dumpStarted.nth(dump)) + if (failed) serialized + else { + val sized = remote(remote(serialized, "size", NO_DETAIL, bytes), "storedSize", NO_DETAIL, bytes) + if (released.o.writes > state.o.writes) remote(sized, "writeDispatch", NO_DETAIL, state.o.writes) else sized + } + } + pure def releaseWrite(state: Metered[r, q], layout: Serving::Layout, write: int, failed: bool): Metered[r, q] = { + val released = Writes::releaseWrite(state, layout, write, failed) + if (failed) error(released, "cache_write") else released + } + + // -- Maintenance -------------------------------------------------------------------- + + pure def invalidate(state: Metered[r, q], entity: int, bufferMs: int): Metered[r, q] = { + val done = Serving::invalidate(state, entity, bufferMs) + if (done.o.invalidations > state.o.invalidations) remote(done, "invalidation", NO_DETAIL, 0) else done + } +} diff --git a/formal/kernel/payloads.qnt b/formal/kernel/payloads.qnt new file mode 100644 index 00000000..a31eceed --- /dev/null +++ b/formal/kernel/payloads.qnt @@ -0,0 +1,94 @@ +module payloads { + // Payload validity classes: what a remote frame's stored code says about + // the bytes the adapter returned. A frame stores a payload code. The codes + // below COMPRESSED are the drivers' shared value codes (1..9, + // `conformance_observations`) and any code a profile adds below 100 + // (runtime-boundaries' VALUE_UNDEFINED_STRING = 11), each of which decodes + // to itself. The enveloped band starts at 100 and keeps class and value + // apart: a code in the band is a class hundred plus the value the bytes + // carry, so values stay below 100 and no profile value collides with a + // class. COMPRESSED + v is a compressed frame whose bytes decode to v + // (`src/internal/compression.ts` outcome "decompressed"); CORRUPT + v a + // frame whose compressed bytes fail to decode (outcome "fallback_raw"; v is + // the value the bytes would have carried); UNSUPPORTED_ENCODING a frame + // whose header names an encoding the adapter does not know, which throws + // once the frame is present and fence-cleared + // (`src/internal/redis-payload.ts` `decodeRedisPayload`), so the read + // fails. A compressed or corrupt code must carry a positive value to reach + // a decode step or to be a recovery candidate: `remote_frames::observe` and + // `recovery::retain` consult the value before any decode as that + // positivity test (`valueOf(code) > NO_VALUE`), so a bare COMPRESSED or + // CORRUPT (value 0) is routed as a visible frame the traversal declined, a + // miss holding no decode, reporting no compression outcome and, should its + // loader fail, the miss label of a declined frame with no candidate (pinned + // by the payload-classes fixture, `bareCorruptCodeIsADeclinedFrameTest` + // and, for the failed loader, + // `codeWithoutADecodedValueIsNoRecoveryCandidateTest`). UNSUPPORTED_ENCODING + // is spelled bare because it names no value. The class rules read the class + // alone; a profile spells a seed as the sum + // (`Payloads::COMPRESSED + VALUE_ONE`), arithmetic over constants, which the + // composition lint accepts. + // + // The judgments are consulted once, in `remote_frames::observe`, for the + // atomic release and the held read settlement alike, at the held decode + // (`remote_io::settleLoad`) and at candidate retention (`recovery::retain`). + // The invariant every future class keeps: a code `readFails` excludes never + // reaches a serve site (the read that finds it fails and observes nothing); + // a `decodeFails` code reaches a serve site only through the held path's + // decode step, which fails it; and every serve site judges the decoded + // value, never the code: the fresh sites (`serving::decide`, + // `remote_io::settleRead`) serve a positive `valueOf` only and + // `recovery::retain` admits a candidate only when its code decodes to a + // value, so a class with no decoded value (UNSUPPORTED_ENCODING, or a class + // this module names no rule for) yields NO_VALUE from `valueOf` and never + // completes a caller with CALL_PENDING, the integer NO_VALUE shares. + // Documented limit: the atomic release + // (`serving::release`) has no decode step, so it serves `valueOf` of a + // fresh corrupt frame, the value its bytes would have carried; a profile + // composed over the atomic path must not seed decode-fault payloads + // (pinned by the payload-classes fixture, + // `atomicReleaseOfAFreshCorruptFrameServesWithoutADecodeStepTest`). + import encodings.* from "./encodings" + + // The classes, as hundreds: a payload in the band is a class plus a value + // below 100. + pure val COMPRESSED = 100 + pure val CORRUPT = 200 + pure val UNSUPPORTED_ENCODING = 300 + // Spellings of a value that decode like a plain one but carry other bytes + // (the shadow drivers' payloads, C51): a text padded with whitespace + // (`" 1"`, the drivers' seed 6) and a JSON string decoding to a value no + // source returns (`"café"`, seed 7; the profile spells its decoded value). + pure val PADDED = 400 + pure val UNICODE = 500 + // The form line: a payload at or above it is the binary spelling of the + // text payload below it, the same bytes (`bytesOf`), so the confirmation + // read compares bytes across the two forms and every class judgment reads + // the bytes. A profile spells `Payloads::BINARY + Payloads::PADDED + VALUE_ONE`. + pure val BINARY = 1000 + + // The bytes a payload carries: the form stripped. + pure def bytesOf(payload: int): int = payload % BINARY + // The class of a payload: 0 below the band, its hundred in it. + pure def classOf(payload: int): int = bytesOf(payload) / 100 + // The value a payload decodes to: itself below the band, the value its + // code carries for the compressed, corrupt, padded and unicode classes, + // none for UNSUPPORTED_ENCODING or for a class this module names no rule for. + pure def valueOf(payload: int): int = { + val bytes = bytesOf(payload) + if (bytes < COMPRESSED) bytes + else if (Set(classOf(COMPRESSED), classOf(CORRUPT), classOf(PADDED), classOf(UNICODE)).contains(classOf(bytes))) bytes % 100 + else NO_VALUE + } + // The adapter throws on the frame: the read fails once the frame is visible. + pure def readFails(payload: int): bool = classOf(payload) == classOf(UNSUPPORTED_ENCODING) + // The bytes fail to decode: a fresh decode restarts the loader, a recovery + // decode keeps the loader's error. + pure def decodeFails(payload: int): bool = classOf(payload) == classOf(CORRUPT) + // The compression outcome a decode of the payload reports, none for an + // uncompressed one. + pure def decodeOutcome(payload: int): List[str] = + if (classOf(payload) == classOf(COMPRESSED)) List("decompressed") + else if (classOf(payload) == classOf(CORRUPT)) List("fallback_raw") + else List() +} diff --git a/formal/kernel/policy-gate.qnt b/formal/kernel/policy-gate.qnt index 917bbdd6..fa1eef9c 100644 --- a/formal/kernel/policy-gate.qnt +++ b/formal/kernel/policy-gate.qnt @@ -11,6 +11,12 @@ module policy_gate { type Held = { policyCall: int, caller: int, call: Call } type Gated[r] = { held: List[Held] | r } + // The key is the policy-call count at admission (`serving::entered`), which + // advances only where the layout has a policy provider: a composition that + // holds replies across steps needs `serving::Layout.policyProvider`, since + // without one every held caller would share key 0, `entry` would return the + // first and `release` drop them all. A layout without a provider composes + // immediate replies only, which hold and release within one step. pure def hold(state: Gated[r], policyCall: int, caller: int, call: Call): Gated[r] = { held: state.held.append({ policyCall: policyCall, caller: caller, call: call }), ...state } pure def holding(state: Gated[r]): bool = state.held.length() > 0 diff --git a/formal/kernel/receipts.qnt b/formal/kernel/receipts.qnt index 1383c723..3c9384c2 100644 --- a/formal/kernel/receipts.qnt +++ b/formal/kernel/receipts.qnt @@ -8,8 +8,8 @@ module receipts { // may have been warmed by the release and is kept here as read. A // receipted variant of the layered release: the release is judged once // (`serving::layeredRelease`) on the pre-release state, the slot is read - // from that same state, and the release itself is applied beside them; the - // traversal never reads the receipt. + // from that same state, and that one judgment is applied beside them + // (`serving::releaseJudged`); the traversal never reads the receipt. import encodings.* from "./encodings" import layer_policy.* from "./layer-policy" import serving as Serving from "./serving" @@ -45,7 +45,7 @@ module receipts { localValue: state.localValues.nth(Serving::identity(layout, judged.call)), localExpires: state.localExpires.nth(Serving::identity(layout, judged.call)) }, - ...Serving::release(state, layout, policyCall, resolved, ttls) + ...Serving::releaseJudged(state, layout, judged, policyCall, ttls) } } } diff --git a/formal/kernel/recovery.qnt b/formal/kernel/recovery.qnt new file mode 100644 index 00000000..fbb09b73 --- /dev/null +++ b/formal/kernel/recovery.qnt @@ -0,0 +1,123 @@ +module recovery { + // Stale-on-error recovery (C40 to C46, C57): the snapshot a flight retains + // when its held remote read settles without serving, the classification of + // the flight's loader failure, and the recheck of the snapshot's age when + // the recovery decode settles. This module holds codes, one pending-only + // record and judgments; `remote_io` consults them at read settlement + // (`retain`), at loader failure (`failure`) and at recovery-decode + // settlement (`recovered`), and drops the snapshot when the flight + // completes; `remote_writes` consults the same judgments on the atomic + // path, retaining at release and deciding a source failure at once. No + // profile composes a recovery transition: a profile passes the classifier + // in force to `remote_io::settleRead` or `remote_writes::releaseJudged` (`NONE` + // where stale-on-error is not configured, so no snapshot is ever created + // and every judgment reads NO_SNAPSHOT). + // + // The rules: a candidate is the frame the read found visible whose payload + // code decodes to a value (`payloads::valueOf`; a code whose bytes fail to + // decode still decodes to the value they would carry, so it is a candidate + // its recovery decode fails) and whose age on the wall clock at settlement + // lies in [freshness, maximum) (`cache_rules.retainedAgeAllowed`), with + // both from the effective TTLs the reply resolved to, the maximum being the + // logical retention (C45: a later policy is not consulted); its stamp is + // the frame's `created` at the read. A visible frame outside that window, + // or one whose code decodes to nothing (a code in the enveloped band that + // names no class; a code that fails the read never reaches `retain`), + // leaves the flight recoverable without a candidate, so a classification + // then reports a miss. A loader failure is + // classified once (the classifications count instruments every classifier + // but the built-in timeout-only default); recovery is allowed by ALLOW, or + // by TIMEOUT_ONLY for a timeout (a delivered or late deadline, or a + // propagated timeout the profile names; `failure` decides which errors are + // timeouts, judged once for the path that consults it: the held one, + // `remote_io::failed`, or the atomic one, `remote_writes::failed`); DENY + // never recovers, and a profile decodes a + // classifier that throws to DENY, as the implementations do. A recovery + // decode is held while the candidate's age still allows it + // (`cache_rules.recoveryAgeAllowed`, no fresh lower bound: a wall rollback + // may make it fresh again) and its settlement rechecks the same; the served + // value is what the candidate's code decodes to, and a flight that does not + // serve it completes with the outcome its source recorded + // (`remote_io::settleLoad`). A recovered value completes its flight without + // publication. + import cache_rules.* from "../cache-rules" + import conformance_observations.* from "../conformance-observations" + import encodings.* from "./encodings" + import layer_policy.* from "./layer-policy" + import clock as Clock from "./clock" + import remote_frames as Remote from "./remote-frames" + import payloads as Payloads from "./payloads" + + // Classifier codes (a profile decodes its drivers' codes to these); NONE + // is the code of a profile without stale-on-error, which retains nothing. + pure val NONE = -1 + pure val TIMEOUT_ONLY = 0 + pure val ALLOW = 1 + pure val DENY = 2 + + // Per recoverable flight: the candidate's payload code (0 when none), the + // frame's stamp at the read, the maximum admitted for it and the classifier + // in force. A flight retains at most once (its one held read settles once) + // and `drop` runs at its completion, so the list holds one snapshot per + // flight. + type Snapshot = { flight: int, candidate: int, created: int, maximum: int, classifier: int } + pure val NO_SNAPSHOT: Snapshot = { flight: NO_OWNER, candidate: NO_VALUE, created: 0, maximum: 0, classifier: NONE } + type Recovering[r] = Remote::Frames[{ o: Observation, retained: List[Snapshot] | r }] + + pure def retainedFor(state: Recovering[r], flight: int): Snapshot = { + val found = state.retained.select(snapshot => snapshot.flight == flight) + if (found.length() == 0) NO_SNAPSHOT else found.nth(0) + } + pure def drop(state: Recovering[r], flight: int): Recovering[r] = + { retained: state.retained.select(other => other.flight != flight), ...state } + + // At read settlement, for a read that completed without serving: the + // snapshot of the flight under the classifier in force, with the visible + // frame's code as its candidate when it decodes to a value and its age lies + // in [freshness, maximum). + pure def retain(state: Recovering[r], flight: int, key: int, visible: bool, ttls: Ttls, classifier: int): Recovering[r] = + if (classifier == NONE) state else { + val created = state.created.nth(key) + val code = state.remoteValues.nth(key) + val stale = visible and retainedAgeAllowed(created, Clock::wallOf(state), ttls.freshMs, ttls.retentionMs) + { retained: state.retained.append({ + flight: flight, + candidate: if (stale and Payloads::valueOf(code) > NO_VALUE) code else NO_VALUE, + created: created, + maximum: ttls.retentionMs, + classifier: classifier + }), ...state } + } + + // Classification at loader failure, for the snapshot the flight retained. + pure def classifies(snapshot: Snapshot): bool = snapshot.classifier != TIMEOUT_ONLY + pure def mayRecover(snapshot: Snapshot, timeout: bool): bool = + snapshot.classifier == ALLOW or (snapshot.classifier == TIMEOUT_ONLY and timeout) + pure def validCandidate(state: Recovering[r], snapshot: Snapshot): bool = + snapshot.candidate > NO_VALUE and recoveryAgeAllowed(snapshot.created, Clock::wallOf(state), snapshot.maximum) + // The classification counted. + pure def classified(state: Recovering[r], snapshot: Snapshot): Recovering[r] = + { o: { classifications: state.o.classifications + (if (classifies(snapshot)) 1 else 0), ...state.o }, ...state } + pure def recordOutcome(state: Recovering[r], label: str): Recovering[r] = + { o: { recovery: state.o.recovery.append(label), ...state.o }, ...state } + // A loader failure judged once for the held and the atomic path: the + // classification counted; recovery allowed by the classifier and whether + // the failure is a timeout (a deadline error, or a propagated timeout the + // profile names); whether the candidate then serves (recovery allowed and + // its age still admitted), a miss recorded when recovery was allowed and it + // does not. What follows is the path's: a held recovery decode + // (`remote_io::failed`) or an immediate one (`remote_writes::failed`). + type Failure[r] = { state: Recovering[r], serves: bool } + pure def failure(state: Recovering[r], snapshot: Snapshot, error: int, timeout: bool): Failure[r] = { + val counted = classified(state, snapshot) + val recovers = mayRecover(snapshot, timeout or error == DEADLINE_ERROR) + val serves = recovers and validCandidate(counted, snapshot) + { state: if (recovers and not(serves)) recordOutcome(counted, "miss") else counted, serves: serves } + } + // What a recovery decode settles to: the label and whether the candidate serves. + type Recovered = { label: str, served: bool } + pure def recovered(state: Recovering[r], snapshot: Snapshot, failed: bool): Recovered = { + val served = not(failed) and validCandidate(state, snapshot) + { label: if (failed) "deserialization_error" else if (served) "served" else "miss", served: served } + } +} diff --git a/formal/kernel/remote-frames.qnt b/formal/kernel/remote-frames.qnt index 3be9c5b1..3556920e 100644 --- a/formal/kernel/remote-frames.qnt +++ b/formal/kernel/remote-frames.qnt @@ -6,42 +6,116 @@ module remote_frames { // reply resolved to (`cache_rules.freshAgeAllowed` on the wall clock, which // rejects a stamp from after a rollback) and, for a tracked reader, when its // stamp clears the entity's watermark (`cache_rules.fenceAllows`); an - // untracked reader ignores watermarks. A watermark never lowers: an - // invalidation raises it to the wall clock only when the wall clock is - // ahead, as the implementation's invalidation script keeps the larger of the - // current and the proposed watermark. A tracked miss carries the watermark - // it observed as its refill fence. A frame stamped at a wall clock of zero - // or below is never served to a tracked reader (`fenceAllows` is strict - // against the zero watermark), as the implementation treats a zero createdAt. + // untracked reader ignores watermarks. An invalidation never lowers a + // watermark: it raises it to the wall clock plus the invalidator's future + // buffer only when that is ahead, as the implementation's invalidation + // script keeps the larger of the current and the proposed watermark; only + // a marker's expiry lowers one, to + // the zero baseline (`markers`). A frame stamped at a wall clock of zero or + // below is never served to a tracked reader (`fenceAllows` is strict against + // the zero watermark), as the implementation treats a zero createdAt. + // + // A frame is visible when it is present, retained and (tracked) fence-cleared, + // whatever its age: what the adapter returned a frame for. It serves when it + // is also fresh. A refill's fence is the watermark the read observed only + // when it found no visible frame (`fenceFor`, C58): a visible frame the + // traversal declined (stale, or stamped in the future) carries none, as the + // implementations refill unfenced after a reply that carried a frame which + // itself cleared the watermark. `storeFrame` is the write with an explicit + // stamp (a held write stores the stamp captured when its dump was released; + // an aged seed stamps the wall clock minus its age); `seedFrame` stamps the + // wall clock now. + // + // A frame stores a payload code (`payloads`): the drivers' value codes + // decode to themselves, an enveloped class from 100 up says what its bytes + // do. `observe` judges the class once for both remote paths: a visible + // frame whose code fails the read (`Payloads::readFails`) fails the read + // like an adapter fault, and the value a fresh frame serves is what its + // code decodes to (`Payloads::valueOf`). A tracked write's physical + // retention is capped at one hour (`physicalRetention`); the logical + // maximum a recovery snapshot carries is not. import cache_rules.* from "../cache-rules" import encodings.* from "./encodings" import clock as Clock from "./clock" + import payloads as Payloads from "./payloads" type Frames[r] = { remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], tracked: bool, now: int, skew: int | r } + // A tracked write's retention is clamped to one hour so the entity's + // watermark, kept for twice that, outlives every frame it may fence + // (`src/internal/duration.ts` `MAX_TRACKED_REDIS_VALUE_TTL_MS`, + // `src/internal/redis-cache.ts` `putWithLayer`, `go/engine.go` `putRemote` + // with its `tracked_ttl_clamped` event, `go/protocol.go` + // `MaxTrackedValueTTLMS`); an untracked write is retained for its full TTL. + pure val TRACKED_RETENTION_CAP_MS = 3600000 + pure def physicalRetention(state: Frames[r], retentionMs: int): int = + if (state.tracked and retentionMs > TRACKED_RETENTION_CAP_MS) TRACKED_RETENTION_CAP_MS else retentionMs + pure def entityOf(key: int, operationsPerEntity: int): int = key / operationsPerEntity - // A write (a seed or a refill) is stamped with the wall clock and retained for its TTL. - pure def seedFrame(state: Frames[r], key: int, value: int, retentionMs: int): Frames[r] = { + // A write is stored with the stamp its writer captured and retained for its TTL. + pure def storeFrame(state: Frames[r], key: int, value: int, stamp: int, retentionMs: int): Frames[r] = { remoteValues: state.remoteValues.replaceAt(key, value), - created: state.created.replaceAt(key, Clock::wallOf(state)), + created: state.created.replaceAt(key, stamp), expires: state.expires.replaceAt(key, state.now + retentionMs), ...state } - pure def raiseWatermark(state: Frames[r], entity: int): Frames[r] = { + // A write (a seed or a refill) is stamped with the wall clock and retained for its TTL. + pure def seedFrame(state: Frames[r], key: int, value: int, retentionMs: int): Frames[r] = + storeFrame(state, key, value, Clock::wallOf(state), retentionMs) + // A seed the drivers stamp at an age, negative for a stamp in the future: the wall clock minus that age. + pure def seedAged(state: Frames[r], key: int, value: int, ageMs: int, retentionMs: int): Frames[r] = + storeFrame(state, key, value, Clock::wallOf(state) - ageMs, retentionMs) + // An invalidation raises the watermark to the wall clock plus the + // invalidator's future buffer (`futureBufferMs`, application-owned: the + // window in which a stale write may still become visible) only when that + // is ahead of the current watermark. + pure def raiseWatermark(state: Frames[r], entity: int, bufferMs: int): Frames[r] = { val current = state.watermark.nth(entity) - val wall = Clock::wallOf(state) - { watermark: state.watermark.replaceAt(entity, if (wall > current) wall else current), ...state } + val proposed = Clock::wallOf(state) + bufferMs + { watermark: state.watermark.replaceAt(entity, if (proposed > current) proposed else current), ...state } } + // The zero baseline of an entity's watermark, the one a profile's init + // starts from and the one NO_FENCE and an unfenced `writeAllowed` refer to: + // where a marker's expiry (`markers::expire`) returns the entity. + pure def clearWatermark(state: Frames[r], entity: int): Frames[r] = + { watermark: state.watermark.replaceAt(entity, 0), ...state } pure def retained(state: Frames[r], key: int): bool = deadlinePendingAt(state.now, state.expires.nth(key)) pure def fresh(state: Frames[r], key: int, freshMs: int): bool = freshAgeAllowed(state.created.nth(key), Clock::wallOf(state), freshMs) - pure def readableFrame(state: Frames[r], key: int, operationsPerEntity: int, freshMs: int): int = - if ((not(state.tracked) or fenceAllows(state.created.nth(key), state.watermark.nth(entityOf(key, operationsPerEntity)))) - and retained(state, key) and fresh(state, key, freshMs)) state.remoteValues.nth(key) else NO_VALUE + pure def fenceCleared(state: Frames[r], key: int, operationsPerEntity: int): bool = + not(state.tracked) or fenceAllows(state.created.nth(key), state.watermark.nth(entityOf(key, operationsPerEntity))) + // A frame the adapter returns: present, retained and (tracked) fence-cleared, whatever its age. + pure def visible(state: Frames[r], key: int, operationsPerEntity: int): bool = + state.remoteValues.nth(key) > NO_VALUE and retained(state, key) and fenceCleared(state, key, operationsPerEntity) + // What one remote read observes, judged once for the atomic release and the + // held read settlement: whether the read failed (the caller's fault, or a + // visible frame whose payload fails the read); a failed read observes + // nothing; otherwise whether the adapter returned a frame (`visible`), its + // payload code, and the value the traversal serves, what the code decodes + // to when the frame is also fresh for the reply's freshness. + type Observed = { visible: bool, failed: bool, payload: int, value: int } + // What a read not made observes: nothing. + pure val UNOBSERVED: Observed = { visible: false, failed: true, payload: NO_VALUE, value: NO_VALUE } + pure def observe(state: Frames[r], key: int, operationsPerEntity: int, freshMs: int, failed: bool): Observed = { + val present = not(failed) and visible(state, key, operationsPerEntity) + val code = if (present) state.remoteValues.nth(key) else NO_VALUE + val fails = failed or (present and Payloads::readFails(code)) + val seen = present and not(fails) + { + visible: seen, + failed: fails, + payload: if (seen) code else NO_VALUE, + value: if (seen and fresh(state, key, freshMs)) Payloads::valueOf(code) else NO_VALUE + } + } pure def missFence(state: Frames[r], key: int, operationsPerEntity: int): int = if (state.tracked) state.watermark.nth(entityOf(key, operationsPerEntity)) else NO_FENCE + // The fence a refill carries: the watermark a tracked read observed when it + // found no visible frame; a visible frame the traversal declined carries none. + pure def fenceFor(state: Frames[r], key: int, operationsPerEntity: int, visible: bool): int = + if (visible) NO_FENCE else missFence(state, key, operationsPerEntity) // An unfenced refill is always written: an untracked miss, or a tracked miss // on an entity never invalidated, whose watermark and fence are still 0. A // fenced one is written only while its fence still allows it: the frame it diff --git a/formal/kernel/remote-io.qnt b/formal/kernel/remote-io.qnt new file mode 100644 index 00000000..6ce3f2c0 --- /dev/null +++ b/formal/kernel/remote-io.qnt @@ -0,0 +1,300 @@ +module remote_io { + // Remote effects the drivers hold and release by effect index (the position + // of the read or decode in the drivers' invocation order): the traversal + // splits again in time at the remote layer. `release` traverses with the + // remote layer unobserved (`serving::judgeRelease`) and, when the traversal + // reaches it, dispatches a read (counted then, its budget on the drivers' + // io channel) and registers the caller's flight, so a follower released + // while the read is pending joins it through the registries; a traversal + // that starts a source without the remote layer starts it at once, under + // the next loader ordinal. `settleRead` observes the frame with the state + // current at settlement (`remote_frames::observe`) and either holds a + // decode (counted then) or starts the flight's loader with the authority + // that read fixed (`serving::authority`: refill denied after a failed or + // expired read, the fence the read observed, `remote_frames::fenceFor`); + // `settleLoad` completes the flight from a decoded frame, warming local + // storage for the reply's local TTL, or starts a loader after a failed + // decode (the drivers' fault, or a payload whose bytes fail to decode, + // `payloads::decodeFails`); `settleLoader` settles a loader by the + // drivers' ordinal: an + // accepted value publishes and completes, a failure completes the flight + // with its error unless the flight retained a snapshot the recovery rules + // accept (`recovery`), in which case a recovery decode is held and the + // flight stays pending and joinable. + // + // A flight is one `sources` record from its start (a read dispatch, or a + // source started at admission or at a release without the remote layer) to + // its completion; `loaders` maps the drivers' loader ordinal (`o.loaders`) + // to the flight it runs for, so `sources.length()` counts flights and + // `loaders.length() == o.loaders`: a source that starts as a new flight + // takes the next ordinal (`mapLoader`), a loader started later for a held + // read's flight maps itself (`startLoader`), and a flight whose decode + // failed restarts a loader under a new ordinal. Held reads and decodes are + // pending-only records: a settled one leaves nothing behind. A read whose + // deadline was delivered owns nothing (`flight` NO_OWNER) and stays until + // its late reply drains. The adapter's read fault is per release + // (`failed`): a held read takes its fault as an argument when it settles + // (a read settled in the step that dispatched it is the budgeted variant's, + // `deadlines::settleDispatched`, which passes the shape's `readFailed` + // switch, as the atomic path does); a visible frame whose payload fails the + // read (`payloads::readFails`) fails it the same way, judged once in + // `remote_frames::observe`. A held decode holds the frame's payload code + // and decodes it when it settles (`payloads::valueOf`), as does a recovery + // decode its snapshot's candidate. + // + // `begin` is admission and the held release in one step for a profile + // whose replies are immediate, like `serving::begin`; `latestRead`, + // `latestLoad` and `latestOrdinal` name the most recently held read and + // decode and the newest loader ordinal, for profiles whose drivers name + // the latest effect rather than an index (a wrapper guards on the list + // being non-empty, as it does on `holdsRead`). `settleObserved` is the + // read settlement applied from a judgment already made, the seam a variant + // that substitutes what a read observed composes; `settleRead` judges the + // frames and applies it. + // + // The io channel (BEHAVIOR.md, `readIO`) is a mandatory field written by + // the transitions that have each fact in hand: `budgets` one row per + // dispatched read, `aborted` the expired reads in delivery order, + // `sourceErrors` one row per caller, 0 at admission and the one-based + // ordinal of the loader whose ordinary error the caller returned when it + // completes with SOURCE_ERROR. + import conformance_observations.* from "../conformance-observations" + import encodings.* from "./encodings" + import calls.* from "./calls" + import layer_policy.* from "./layer-policy" + import serving as Serving from "./serving" + import remote_frames as Remote from "./remote-frames" + import flights as Flights from "./flights" + import recovery as Recovery from "./recovery" + import payloads as Payloads from "./payloads" + + // A held read: the drivers' effect index, the flight registered for it at + // dispatch (NO_OWNER once its deadline was delivered) and the effective TTLs + // the reply resolved to (`layer_policy::effectiveTtls`: the local TTL a hit + // warms with, the freshness the frame is judged by, the retention a refill + // is written with and the recovery maximum). + type HeldRead = { read: int, flight: int, ttls: Ttls } + // A held decode: the drivers' index, its flight, the TTLs in force (a + // recovery decode carries none, `NO_TTLS`: it warms nothing and its maximum + // is the snapshot's), the bytes (the frame's payload code, decoded when the + // load settles) and whether it is a recovery decode. + type HeldLoad = { load: int, flight: int, ttls: Ttls, value: int, recovery: bool } + type IO = { budgets: List[int], aborted: List[int], sourceErrors: List[int] } + pure val NO_IO: IO = { budgets: List(), aborted: List(), sourceErrors: List() } + type Held[r] = Serving::Served[{ reads: List[HeldRead], loads: List[HeldLoad], loaders: List[int], io: IO, retained: List[Recovery::Snapshot] | r }] + + pure def holdsRead(state: Held[r], read: int): bool = state.reads.select(held => held.read == read).length() > 0 + pure def heldRead(state: Held[r], read: int): HeldRead = state.reads.select(held => held.read == read).nth(0) + pure def holdsLoad(state: Held[r], load: int): bool = state.loads.select(held => held.load == load).length() > 0 + pure def heldLoad(state: Held[r], load: int): HeldLoad = state.loads.select(held => held.load == load).nth(0) + // The most recently held read and decode (the held lists are in dispatch + // order) and the newest loader ordinal (NO_OWNER before any loader ran). + pure def latestRead(state: Held[r]): HeldRead = state.reads.nth(state.reads.length() - 1) + pure def latestLoad(state: Held[r]): HeldLoad = state.loads.nth(state.loads.length() - 1) + pure def latestOrdinal(state: Held[r]): int = state.loaders.length() - 1 + // A read owns its traversal until its deadline is delivered. + pure def owning(held: HeldRead): bool = held.flight != NO_OWNER + // The latest loader ordinal a flight ran (the identity its error carries). + pure def latestLoader(state: Held[r], flight: int): int = + state.loaders.indices().fold(NO_OWNER, (latest, ordinal) => + if (state.loaders.nth(ordinal) == flight and ordinal > latest) ordinal else latest) + // A source a step started as a new flight (the latest `sources` record) + // runs its loader at once, under the drivers' next ordinal: the mapping of + // a started source, stated once for admission and release. + pure def mapLoader(before: Held[r], after: Held[r]): Held[r] = + if (after.o.loaders > before.o.loaders) { loaders: after.loaders.append(after.sources.length() - 1), ...after } else after + + // -- Admission ----------------------------------------------------------------- + + // Every caller has an io row for the error identity it may return; a + // bypass source started at admission takes the next ordinal. + pure def admit(state: Held[r], layout: Serving::Layout, call: Call): Held[r] = { + val admitted = Serving::admit(state, layout, call) + mapLoader(state, { io: { sourceErrors: admitted.io.sourceErrors.append(0), ...admitted.io }, ...admitted }) + } + + // -- Release: the traversal up to the remote layer ----------------------------- + + // A read is dispatched for the caller: counted, budgeted on the io channel, + // and its flight registered (shared when the reply coalesces over a shared + // layer) so a follower released while it is pending joins it. The flight's + // publication authority is fixed when the read settles. + // A read held over a flight: counted, budgeted on the io channel (one row + // per dispatched read), the record under the drivers' next read index. A + // caller's read is dispatched here at release; a job's confirmation read is + // held the same way (`shadow`). + pure def holdRead(state: Held[r], flight: int, ttls: Ttls, budget: int): Held[r] = { + reads: state.reads.append({ read: state.o.reads, flight: flight, ttls: ttls }), + io: { budgets: state.io.budgets.append(budget), ...state.io }, + o: { reads: state.o.reads + 1, ...state.o }, + ...state + } + pure def dispatchRead(state: Held[r], layout: Serving::Layout, judged: Serving::LayeredRelease, ttls: Ttls, budget: int): Held[r] = { + val call = judged.call + val registered = Flights::registerSource(state, + Serving::sourceOf({ instance: call.instance, key: call.key, localMs: 0, fence: NO_FENCE, retentionMs: 0 }, + CALL_PENDING, judged.effective.coalesce and sharedLayers(judged.effective.layers)), + judged.caller, judged.decision.slot, judged.effective.coalesce, Serving::identity(layout, call)) + holdRead(registered, state.sources.length(), effectiveTtls(judged.effective, ttls), budget) + } + // The release applied from a judgment already made on this state + // (`Serving::judgeRelease` with the remote layer unobserved): a traversal + // that reaches the remote layer dispatches the read; one that starts a + // source without it (a reply without the remote layer, or the bypass reply + // of a scope closed since admission) starts the source at once, under the + // next ordinal; one that serves or joins is the layered release. A variant + // that records beside the held release (`diagnostics`) judges once through + // `Serving::judgeRelease` and applies this; `release` is its composition + // with the judgment. + pure def releaseJudged(state: Held[r], layout: Serving::Layout, judged: Serving::LayeredRelease, policyCall: int, ttls: Ttls, budget: int): Held[r] = { + val applied = Serving::applyRelease(state, layout, judged, policyCall, ttls) + match judged.decision.outcome { + | Starts => if (judged.effective.layers.remote) dispatchRead(applied, layout, judged, ttls, budget) + else mapLoader(applied, Serving::startSource(applied, layout, judged.caller, judged.call, judged.decision.slot, judged.open, judged.effective, ttls, judged.remote)) + | JoinsRequest(_) => applied + | JoinsProcess(_) => applied + | ServesMemo(_) => applied + | ServesLocal(_) => applied + // The remote layer is unobserved at release; nothing serves from it here. + | ServesRemote(_) => applied + } + } + pure def release(state: Held[r], layout: Serving::Layout, policyCall: int, resolved: Resolution, ttls: Ttls, budget: int): Held[r] = + releaseJudged(state, layout, Serving::judgeRelease(state, layout, policyCall, resolved, ttls, false), policyCall, ttls, budget) + // An immediate policy reply: admission and the held release in one step. + pure def begin(state: Held[r], layout: Serving::Layout, call: Call, resolved: Resolution, ttls: Ttls, budget: int): Held[r] = { + val admitted = admit(state, layout, call) + if (Serving::participating(state, layout, call)) release(admitted, layout, state.o.policyCalls, resolved, ttls, budget) else admitted + } + + // -- Loaders and decodes --------------------------------------------------------- + + // A loader starts for a flight with the authority its read fixed: counted + // against the profile and mapped from the drivers' next ordinal. + // `startLoaderFenced` takes the fence the refill carries as an argument (a + // queued adapter reply supplies its own, effects); `startLoader` reads it + // from the frames the read observed (`Remote::fenceFor`). + pure def startLoaderFenced(state: Held[r], layout: Serving::Layout, flight: int, ttls: Ttls, readOk: bool, fence: int): Held[r] = { + val source = state.sources.nth(flight) + val payload = Serving::authority(state, source, ttls, true, readOk, fence) + { + sources: state.sources.replaceAt(flight, Serving::sourceOf(payload, source.result, source.shared)), + loaders: state.loaders.append(flight), + ...Serving::started(state, layout, true) + } + } + pure def startLoader(state: Held[r], layout: Serving::Layout, flight: int, ttls: Ttls, readOk: bool, visible: bool): Held[r] = + startLoaderFenced(state, layout, flight, ttls, readOk, Remote::fenceFor(state, state.sources.nth(flight).key, layout.operationsPerEntity, visible)) + pure def holdLoad(state: Held[r], flight: int, ttls: Ttls, value: int, recovery: bool): Held[r] = { + loads: state.loads.append({ load: state.o.loads, flight: flight, ttls: ttls, value: value, recovery: recovery }), + o: { loads: state.o.loads + 1, ...state.o }, + ...state + } + + // -- Read settlement ----------------------------------------------------------------- + + // A settled read that still owns its traversal: a frame the read judged + // fresh is held for decoding with its payload code; anything else starts + // the flight's loader with the authority fixed here (refill denied after a + // failed read), a completed read first retaining the flight's snapshot + // under the classifier in force. A read expired by its deadline drains + // without effect. + // + // The settlement is applied from a judgment already made (`settleObserved`: + // what the read observed and the fence a refill it starts carries), so a + // variant that substitutes the observation (the reply an adapter queued, + // which the effects drivers hold) applies the same settlement; `settleRead` + // is its composition with the judgment of the frames (`Remote::observe`, + // `Remote::fenceFor`). A read that owns nothing is judged as unobserved. + pure def settleObserved(state: Held[r], layout: Serving::Layout, read: int, judged: Remote::Observed, fence: int, classifier: int): Held[r] = { + val held = heldRead(state, read) + val settled = { reads: state.reads.select(other => other.read != read), ...state } + if (not(owning(held))) settled + else if (judged.value > NO_VALUE) holdLoad(settled, held.flight, held.ttls, judged.payload, false) + else { + val key = state.sources.nth(held.flight).key + val retained = if (judged.failed) settled else Recovery::retain(settled, held.flight, key, judged.visible, held.ttls, classifier) + startLoaderFenced(retained, layout, held.flight, held.ttls, not(judged.failed), fence) + } + } + pure def settleRead(state: Held[r], layout: Serving::Layout, read: int, failed: bool, classifier: int): Held[r] = { + val held = heldRead(state, read) + if (not(owning(held))) settleObserved(state, layout, read, Remote::UNOBSERVED, NO_FENCE, classifier) + else { + val key = state.sources.nth(held.flight).key + val judged = Remote::observe(state, key, layout.operationsPerEntity, held.ttls.freshMs, failed) + settleObserved(state, layout, read, judged, Remote::fenceFor(state, key, layout.operationsPerEntity, judged.visible), classifier) + } + } + // A read whose deadline is delivered: recorded as aborted, disowned (its + // late reply drains), and its flight's loader starts at once with refill + // denied (the read never completed) and no fence. + pure def expireRead(state: Held[r], layout: Serving::Layout, read: int): Held[r] = { + val held = heldRead(state, read) + startLoader({ + reads: state.reads.foldl(List(), (out, other) => out.append(if (other.read == read) { flight: NO_OWNER, ...other } else other)), + io: { aborted: state.io.aborted.append(read), ...state.io }, + ...state + }, layout, held.flight, held.ttls, false, false) + } + + // -- Completion ------------------------------------------------------------------ + + // Every owner completes; a caller that returned its loader's ordinary error + // records the loader's identity; the flight's snapshot, if any, is dropped. + pure def complete(state: Held[r], layout: Serving::Layout, flight: int, value: int): Held[r] = { + val identity = if (value == SOURCE_ERROR) latestLoader(state, flight) + 1 else 0 + val recorded = Flights::ownedBy(state, flight).fold(state, (out, caller) => + { io: { sourceErrors: out.io.sourceErrors.replaceAt(caller, identity), ...out.io }, ...out }) + Recovery::drop(Serving::complete(recorded, layout, flight, value), flight) + } + pure def finish(state: Held[r], layout: Serving::Layout, flight: int, value: int): Held[r] = + complete(Flights::recordResult(state, flight, value), layout, flight, value) + // A failed loader: its error recorded on the flight; a flight without a + // snapshot completes with the error, unclassified; one with a snapshot is + // classified once and holds a recovery decode while the candidate's age + // allows, its callers pending and its flight joinable, else completes with + // the error, reporting a miss when recovery was allowed. A deadline error + // is a timeout for the recovery rules, as is a propagated timeout the + // profile names (`timeout`). + pure def failed(state: Held[r], layout: Serving::Layout, flight: int, error: int, timeout: bool): Held[r] = { + val recorded = Flights::recordResult(state, flight, error) + val snapshot = Recovery::retainedFor(recorded, flight) + if (snapshot.flight == NO_OWNER) complete(recorded, layout, flight, error) + else { + val judged = Recovery::failure(recorded, snapshot, error, timeout) + if (judged.serves) holdLoad(judged.state, flight, NO_TTLS, snapshot.candidate, true) + else complete(judged.state, layout, flight, error) + } + } + // The drivers settle a loader by its ordinal: an accepted value publishes + // with the flight's authority and completes it; an error is classified. + // `timeout` marks a propagated timeout settled as an error. + pure def settleLoader(state: Held[r], layout: Serving::Layout, ordinal: int, value: int, timeout: bool): Held[r] = { + val flight = state.loaders.nth(ordinal) + if (accepted(value)) finish(Serving::publish(state, layout, flight, value), layout, flight, value) + else failed(state, layout, flight, value, timeout) + } + // A held decode settles: a fresh decode completes the flight with the value + // its payload decodes to (warming local storage for the reply's local TTL) + // or, failed (the drivers' fault or a payload whose bytes fail to decode), + // starts the flight's loader with refill allowed and no fence (the frame it + // decoded was visible); a recovery decode rechecks the candidate's age and + // completes the flight with the value the candidate decodes to or, when it + // does not serve (a failed decode among the reasons), with the outcome the + // flight's source recorded (its loader's own error), never publishing. + pure def settleLoad(state: Held[r], layout: Serving::Layout, load: int, failed: bool): Held[r] = { + val held = heldLoad(state, load) + val settled = { loads: state.loads.select(other => other.load != load), ...state } + if (held.recovery) { + val snapshot = Recovery::retainedFor(settled, held.flight) + val outcome = Recovery::recovered(settled, snapshot, failed or Payloads::decodeFails(snapshot.candidate)) + complete(Recovery::recordOutcome(settled, outcome.label), layout, held.flight, + if (outcome.served) Payloads::valueOf(snapshot.candidate) else settled.sources.nth(held.flight).result) + } else if (failed or Payloads::decodeFails(held.value)) startLoader(settled, layout, held.flight, held.ttls, true, true) + else { + val value = Payloads::valueOf(held.value) + finish(Serving::warm(settled, layout, state.sources.nth(held.flight), value, held.ttls.localMs), layout, held.flight, value) + } + } +} diff --git a/formal/kernel/remote-writes.qnt b/formal/kernel/remote-writes.qnt new file mode 100644 index 00000000..ece2c456 --- /dev/null +++ b/formal/kernel/remote-writes.qnt @@ -0,0 +1,208 @@ +module remote_writes { + // The atomic remote lifecycle with held writes: a flight whose read was + // atomic (`serving::release`) and whose refill the drivers hold and release + // by effect index, the serialization (`dump`) first, then the write. A + // refill serializes when its source settles accepted (the dump counted + // then; `serving::refills` judged then with the retention the source + // captured and the fence its read observed, C18/C58), dispatches its write + // when the dump is released (`serving::dispatchWrite`; the frame is stamped + // with the wall clock of that release, after serialization, C33; a fence the + // wall no longer clears stops the write and the flight completes without + // one) and stores the frame when the write is released + // (`remote_frames::storeFrame` with the captured stamp, retained from the + // release). The callers the flight owns complete when its write is released + // or fenced, with the value the source recorded, and local storage is warmed + // then for the source's local TTL: publication completes with the write. + // A dump abandoned before its release (a shadow job whose budget expired, + // `shadow`) dispatches no write. Held dumps and writes are pending-only + // records keyed by the drivers' effect ordinal (`o.dumps`, `o.writes` at + // dispatch), like `remote_io`'s held reads. The adapter's dump and write + // faults are the `failed` argument of the two releases, as `remote_io` + // takes its read and decode faults (a profile passes its fault switch, or + // names the fault per effect as effects' `failDump` and `failWrite` do): a + // failed dump dispatches no write and a failed write stores nothing, and + // the flight completes either way, as `serving::publish` has it on the + // atomic path. `HeldWriting` and `settleLoader` are the same held refill + // over the held read path (`deadlines::BudgetedHeld`), for a profile whose + // drivers hold reads and loaders as well as dumps and writes. + // + // Stale-on-error on the atomic path (C40 to C46, as `recovery` states them + // and `remote_io` composes them on the held path): a flight that read the + // remote layer without serving retains its snapshot at release under the + // classifier in force (`recovery::retain`, as the held read settlement + // does); a failed source consults it once (`recovery::failure`, the + // judgment the held path applies too) and, acquisition and decoding being + // atomic here, decodes the candidate at once (the decode counted) and completes + // with the value it decodes to, or with its error, reporting the label the + // recheck gives (`recovery::recovered`) or a miss when it recovers without a + // candidate. A profile without stale-on-error passes `Recovery::NONE`. + import conformance_observations.* from "../conformance-observations" + import encodings.* from "./encodings" + import calls.* from "./calls" + import layer_policy.* from "./layer-policy" + import serving as Serving from "./serving" + import remote_frames as Remote from "./remote-frames" + import flights as Flights from "./flights" + import recovery as Recovery from "./recovery" + import payloads as Payloads from "./payloads" + import clock as Clock from "./clock" + import deadlines as Deadlines from "./deadlines" + + // A held dump: the drivers' effect ordinal, the flight it serializes for and + // the write authority it was held with, the retention its write is + // dispatched with and the fence the write must clear (a caller's refill + // carries its source's, a job's fill the one its own C0 read observed, + // `shadow`). A held write keeps the retention and adds the stamp captured + // when its dump was released. `sampled` is the wall clock the + // pre-serialization fence check sampled (`src/internal/redis-cache.ts` + // `putWithLayer`, `sampleWriteTimestamp` before `dump`), the receipt the + // first fence check leaves: a held dump's fence was cleared by that instant, + // whatever the wall clock does before the dump is released and the second + // check runs (C34). + type HeldDump = { dump: int, source: int, retentionMs: int, fence: int, sampled: int } + type HeldWrite = { write: int, source: int, retentionMs: int, stamp: int } + type Writing[r] = Serving::Served[{ dumps: List[HeldDump], writes: List[HeldWrite], retained: List[Recovery::Snapshot] | r }] + + pure def holdsDump(state: Writing[r], dump: int): bool = state.dumps.select(held => held.dump == dump).length() > 0 + pure def heldDump(state: Writing[r], dump: int): HeldDump = state.dumps.select(held => held.dump == dump).nth(0) + pure def holdsWrite(state: Writing[r], write: int): bool = state.writes.select(held => held.write == write).length() > 0 + pure def heldWrite(state: Writing[r], write: int): HeldWrite = state.writes.select(held => held.write == write).nth(0) + // The most recently held dump and write (the held lists are in dispatch + // order), for a profile whose drivers release the latest effect. + pure def latestDump(state: Writing[r]): HeldDump = state.dumps.nth(state.dumps.length() - 1) + pure def latestWrite(state: Writing[r]): HeldWrite = state.writes.nth(state.writes.length() - 1) + + // -- Release --------------------------------------------------------------------- + + // The layered release applied from its judgment, retaining the snapshot of + // a source it starts after a completed remote read that served nothing (the + // candidate, if any, is the visible frame the traversal declined). The + // failure of such a source is judged once in `recovery::failure`, as the + // held path's is. The module's one release seam: `shadow` judges the + // release and applies it here, then admits its jobs beside it. + pure def releaseJudged(state: Writing[r], layout: Serving::Layout, judged: Serving::LayeredRelease, policyCall: int, ttls: Ttls, classifier: int): Writing[r] = { + val released = Serving::releaseJudged(state, layout, judged, policyCall, ttls) + match judged.decision.outcome { + | Starts => if (judged.effective.layers.remote and not(judged.remote.failed)) + Recovery::retain(released, released.sources.length() - 1, judged.call.key, judged.remote.visible, effectiveTtls(judged.effective, ttls), classifier) + else released + | _ => released + } + } + + // -- Completion -------------------------------------------------------------------- + + // Every owner completes with the value; the flight's snapshot, if any, is dropped. + pure def complete(state: Writing[r], layout: Serving::Layout, flight: int, value: int): Writing[r] = + Recovery::drop(Serving::complete(state, layout, flight, value), flight) + pure def finish(state: Writing[r], layout: Serving::Layout, flight: int, value: int): Writing[r] = + complete(Flights::recordResult(state, flight, value), layout, flight, value) + // A failed source: without a snapshot it completes with its error, + // unclassified; with one it is classified once and, when recovery is + // allowed and the candidate's age still allows it, decodes the candidate at + // once and completes with what it decodes to (or its error after a failed + // decode, `recovery::recovered`), else completes with its error, a miss + // reported when recovery was allowed. A deadline error is a timeout for the + // recovery rules, as is a propagated timeout the profile names. + pure def failed(state: Writing[r], layout: Serving::Layout, flight: int, error: int, timeout: bool): Writing[r] = { + val recorded = Flights::recordResult(state, flight, error) + val snapshot = Recovery::retainedFor(recorded, flight) + if (snapshot.flight == NO_OWNER) complete(recorded, layout, flight, error) + else { + val judged = Recovery::failure(recorded, snapshot, error, timeout) + if (judged.serves) { + val decoded = { o: { loads: judged.state.o.loads + 1, ...judged.state.o }, ...judged.state } + val outcome = Recovery::recovered(decoded, snapshot, Payloads::decodeFails(snapshot.candidate)) + complete(Recovery::recordOutcome(decoded, outcome.label), layout, flight, + if (outcome.served) Payloads::valueOf(snapshot.candidate) else error) + } + else complete(judged.state, layout, flight, error) + } + } + + // -- Settlement and the held refill ------------------------------------------------ + + // A refill starts with its serialization: the dump is counted and held with + // the retention the source captured; the flight stays pending. + pure def holdDump(state: Writing[r], source: int, retentionMs: int, fence: int): Writing[r] = { + dumps: state.dumps.append({ dump: state.o.dumps, source: source, retentionMs: retentionMs, fence: fence, sampled: Clock::wallOf(state) }), + o: { dumps: state.o.dumps + 1, ...state.o }, + ...state + } + // A source settles: an accepted value that refills the remote layer records + // its outcome, drops its snapshot (an accepted settlement never consults + // it) and holds its dump (publication completes with the write); an + // accepted value that does not refill publishes and completes at once + // (`serving::publish`: a warm for the source's local TTL); an error is + // classified against the flight's snapshot. + pure def settle(state: Writing[r], layout: Serving::Layout, index: int, value: int, timeout: bool): Writing[r] = { + val source = state.sources.nth(index) + if (not(accepted(value))) failed(state, layout, index, value, timeout) + else if (Serving::refills(state, source, value)) holdDump(Recovery::drop(Flights::recordResult(state, index, value), index), index, source.retentionMs, source.fence) + else finish(Serving::publish(state, layout, index, value), layout, index, value) + } + // The dump released: when the wall clock still clears the fence the dump + // was held with, the write is dispatched with the dump's retention and + // stamped now (the stamp after serialization, C33); a fence it does not + // clear stops the write. Whether a write was dispatched is read from the count. + pure def dispatch(state: Writing[r], dump: int): Writing[r] = { + val held = heldDump(state, dump) + val dropped = { dumps: state.dumps.select(other => other.dump != dump), ...state } + if (not(Remote::writeAllowed(state, held.fence))) dropped + else { + writes: dropped.writes.append({ write: state.o.writes, source: held.source, retentionMs: held.retentionMs, stamp: Clock::wallOf(state) }), + ...Serving::dispatchWrite(dropped, held.retentionMs) + } + } + // A dump whose work was abandoned before its release: released, no write. + pure def abandonDump(state: Writing[r], dump: int): Writing[r] = + { dumps: state.dumps.select(other => other.dump != dump), ...state } + // A held write dropped without storing: its write failed. + pure def abandonWrite(state: Writing[r], write: int): Writing[r] = + { writes: state.writes.select(other => other.write != write), ...state } + // A caller's dump released: its write dispatched, or the flight completed + // without one when the dump failed or the fence stopped it. + pure def releaseDump(state: Writing[r], layout: Serving::Layout, dump: int, failed: bool): Writing[r] = { + val held = heldDump(state, dump) + val dispatched = if (failed) abandonDump(state, dump) else dispatch(state, dump) + if (dispatched.o.writes > state.o.writes) dispatched + else complete(Serving::warm(dispatched, layout, state.sources.nth(held.source), state.sources.nth(held.source).result, state.sources.nth(held.source).localMs), layout, held.source, state.sources.nth(held.source).result) + } + // -- The held refill over the held read path ----------------------------------------- + + // The budgeted held lifecycle (`deadlines::BudgetedHeld`) whose refills the + // drivers also hold: a loader settled by the drivers' ordinal whose accepted + // result refills (`serving::refills`, the first fence check) records its + // outcome, drops its snapshot and holds its dump, the flight staying pending + // until its write is released (`releaseDump`, `releaseWrite`, as on the + // atomic path); every other arrival is the budgeted held settlement + // (`deadlines::settleLoader`: a late result is a deadline error, a drained + // one settles nothing, an error is classified, an accepted result that does + // not refill publishes and completes at once). For a profile whose drivers + // hold reads, decodes, loaders, dumps and writes alike (effects). + type HeldWriting[r] = Deadlines::BudgetedHeld[{ dumps: List[HeldDump], writes: List[HeldWrite] | r }] + pure def settleLoader(state: HeldWriting[r], layout: Serving::Layout, ordinal: int, value: int, timeout: bool): HeldWriting[r] = { + val flight = state.loaders.nth(ordinal) + val source = state.sources.nth(flight) + val outcome = Deadlines::arrival(state, ordinal, source.result, value) + if (accepted(outcome) and Serving::refills(state, source, outcome)) + holdDump(Recovery::drop(Flights::recordResult(Deadlines::retire(state, ordinal), flight, outcome), flight), flight, source.retentionMs, source.fence) + else Deadlines::settleLoader(state, layout, ordinal, value, timeout) + } + + // The write released: the frame stored with the value the source recorded, + // the captured stamp and the dump's retention. + pure def store(state: Writing[r], write: int): Writing[r] = { + val held = heldWrite(state, write) + val source = state.sources.nth(held.source) + Remote::storeFrame({ writes: state.writes.select(other => other.write != write), ...state }, source.key, source.result, held.stamp, held.retentionMs) + } + // A caller's write released: the frame stored (nothing under a write + // fault), local storage warmed for the source's local TTL, every owner + // completed with the recorded value. + pure def releaseWrite(state: Writing[r], layout: Serving::Layout, write: int, failed: bool): Writing[r] = { + val source = state.sources.nth(heldWrite(state, write).source) + complete(Serving::warm(if (failed) abandonWrite(state, write) else store(state, write), layout, source, source.result, source.localMs), + layout, heldWrite(state, write).source, source.result) + } +} diff --git a/formal/kernel/serving.qnt b/formal/kernel/serving.qnt index aa83bdcf..cd3868dc 100644 --- a/formal/kernel/serving.qnt +++ b/formal/kernel/serving.qnt @@ -21,6 +21,15 @@ module serving { // without publication payload. A projection exists only where the layered // shape cannot meet a profile's bytes-per-state bound; it states no rule of // its own. + // + // The layered release and settlement are each split into the judgment and + // the steps a held remote effect suspends between (`remote_io`): the release + // judged with the remote layer unobserved (`judgeRelease`; with the local + // read's fault as an argument, `judgeReleaseUnder`), its prologue up + // to the remote layer (`applyRelease`), the publication authority fixed + // when a remote read completes (`authority`), completion apart from the + // recorded outcome (`complete`, `finish`) and publication apart from + // completion (`publish`, `settle`). The atomic path composes the same steps. import conformance_observations.* from "../conformance-observations" import encodings.* from "./encodings" import calls.* from "./calls" @@ -36,9 +45,15 @@ module serving { // contexts are persistent scopes, keys per entity, and whether the drivers // probe each source for the scope it started under (o.sourceScopes). TTLs // are not layout: every release and settlement takes the `Ttls` the reply - // resolved to (a fixture's constant where replies carry none). + // resolved to (a fixture's constant where replies carry none). Whether the + // fixture installs a policy provider is layout: the drivers count provider + // invocations as `o.policyCalls`, one per enabled admission where a provider + // exists; an instance that resolves policy from its key's default + // configuration (the local-clock drivers' default instances) makes none, and + // composes immediate replies, since no reply is held for it. type Layout = { - keysPerInstance: int, keysPerScope: int, persistentContexts: int, operationsPerEntity: int, probeSourceScope: bool + keysPerInstance: int, keysPerScope: int, persistentContexts: int, operationsPerEntity: int, probeSourceScope: bool, + policyProvider: bool } // A source record is flights::Source over the payload the traversal needs to // publish, captured from the reply that started it so each source publishes @@ -147,6 +162,16 @@ module serving { | ServesRemote(_) => NO_OWNER | Starts => NO_OWNER } + // The remote layer is reached (and its read counted) only when nothing + // before it served the caller. + pure def reachesRemote(outcome: Outcome): bool = match outcome { + | ServesRemote(_) => true + | Starts => true + | JoinsRequest(_) => false + | JoinsProcess(_) => false + | ServesMemo(_) => false + | ServesLocal(_) => false + } // A caller returns a layer value; an attached request memoizes it. pure def serve(state: Traversed[r, p], layout: Layout, caller: int, slot: int, value: int): Traversed[r, p] = @@ -164,26 +189,65 @@ module serving { }, ...state } - // A miss starts a layered source with the layers the call resolved to. Its - // publication authority is fixed here: a tracked flight that read the remote - // layer may not warm local storage directly (a later validated remote hit - // does), and only a flight whose remote read completed under a reply with a - // positive retention may refill it, fenced by the watermark it observed; a - // flight whose read failed, or whose reply carries no retention, captures no - // retention, never refills and takes no fence. - pure def startSource(state: Served[r], layout: Layout, caller: int, call: Call, slot: int, participating: bool, resolved: Resolution, ttls: Ttls): Served[r] = { - val read = resolved.layers.remote - val refills = read and not(state.readFailed) and ttls.retentionMs > 0 - Flights::registerSource(started(state, layout, participating), { - instance: call.instance, - key: call.key, - localMs: if (resolved.layers.local and not(state.tracked and read)) ttls.localMs else 0, - fence: if (refills) Remote::missFence(state, call.key, layout.operationsPerEntity) else NO_FENCE, - retentionMs: if (refills) ttls.retentionMs else 0, - result: CALL_PENDING, - shared: resolved.coalesce and sharedLayers(resolved.layers) - }, caller, slot, resolved.coalesce, identity(layout, call)) + // A remote hit warms local storage for the reply's local TTL when local + // participates (a positive effective TTL), whether it serves one caller at + // release, completes a flight whose decode was held, or publishes a + // settled source. + pure def warm(state: Served[r], layout: Layout, who: { instance: int, key: int | q }, value: int, localMs: int): Served[r] = + if (localMs > 0) Local::putLocal(state, who.instance, who.key, value, localMs, layout.keysPerInstance) else state + // Publication authority, fixed when a flight's remote read completes (at + // release for an atomic read, at read settlement for a held one) from the + // effective TTLs of the reply (`layer_policy::effectiveTtls`: a layer the + // reply leaves off has TTL 0): a tracked flight that read the remote layer + // may not warm local storage directly (a later validated remote hit does), + // and only a flight whose remote read completed under a reply with a + // positive retention may refill it, fenced by the watermark the read + // observed when it found no visible frame (`Remote::fenceFor`); a flight + // whose read failed, or whose reply carries no retention, captures no + // retention, never refills and takes no fence. `read` is whether the flight + // read the remote layer, `readOk` whether that read completed (the + // judgment's observation, `remote_frames::Observed.failed` negated), + // `fence` the fence the read observed. The retention captured is + // the one the refill is written with: a tracked flight's is capped + // (`Remote::physicalRetention`); the logical maximum a recovery snapshot + // carries is the reply's, untouched. + pure def authority(state: Served[r], who: { instance: int, key: int | q }, ttls: Ttls, read: bool, readOk: bool, fence: int): LayeredPayload = { + val refills = read and readOk and ttls.retentionMs > 0 + { + instance: who.instance, + key: who.key, + localMs: if (not(state.tracked and read)) ttls.localMs else 0, + fence: if (refills) fence else NO_FENCE, + retentionMs: if (refills) Remote::physicalRetention(state, ttls.retentionMs) else 0 + } + } + // A source record over a payload (a closed record cannot be spread into a wider one). + pure def sourceOf(payload: LayeredPayload, result: int, shared: bool): LayeredSource = { + result: result, shared: shared, instance: payload.instance, key: payload.key, + localMs: payload.localMs, fence: payload.fence, retentionMs: payload.retentionMs + } + // A miss starts a layered source with the layers the call resolved to and + // the authority its read fixed from the judgment's observation (`remote`: + // whether the read completed, `failed` negated, and whether it found a + // frame the traversal declined, `visible`). A source started without the + // remote layer passes `Remote::UNOBSERVED`: no read was made, and the + // authority refills only for a flight that read the remote layer. + pure def startSource(state: Served[r], layout: Layout, caller: int, call: Call, slot: int, participating: bool, resolved: Resolution, ttls: Ttls, remote: Remote::Observed): Served[r] = { + val layers = resolved.layers + Flights::registerSource(started(state, layout, participating), + sourceOf(authority(state, call, effectiveTtls(resolved, ttls), layers.remote, not(remote.failed), + Remote::fenceFor(state, call.key, layout.operationsPerEntity, remote.visible)), CALL_PENDING, resolved.coalesce and sharedLayers(layers)), + caller, slot, resolved.coalesce, identity(layout, call)) } + // A source no caller owns, started for work beside the traversal (the + // diagnostic source a served hit's shadow job runs, `shadow`): it counts + // against the profile, is probed as not participating (it started under no + // caller's scope), carries no publication authority (no local TTL, no + // retention, no fence) and, owned by nobody, completes no caller when it + // settles. + pure def startDetachedSource(state: Served[r], layout: Layout, who: { instance: int, key: int | q }): Served[r] = + Flights::registerDetached(started(state, layout, false), + sourceOf({ instance: who.instance, key: who.key, localMs: 0, fence: NO_FENCE, retentionMs: 0 }, CALL_PENDING, false)) pure def startLocalSource(state: LocalServed[r], layout: Layout, caller: int, call: Call, slot: int, participating: bool, resolved: Resolution, ttls: Ttls): LocalServed[r] = Flights::registerSource(started(state, layout, participating), { instance: call.instance, key: call.key, localMs: if (resolved.layers.local) ttls.localMs else 0, result: CALL_PENDING, shared: resolved.coalesce and sharedLayers(resolved.layers) }, @@ -198,10 +262,16 @@ module serving { // A participating caller makes a policy call and waits for the reply; any // other caller (a closed scope, a disabled context, a call outside every // request) bypasses every layer and starts its own unshared source at once (C01). - pure def entered(state: Traversed[r, p], open: bool): Traversed[r, p] = Flights::admitCaller({ + // The gate holds the caller under the policy-call count, which advances only + // where the layout has a policy provider: a composition that holds replies + // across steps (`admit` and `release` as separate transitions) needs + // `Layout.policyProvider`; without one the count stands still and every + // held caller would share one key (`policy_gate::hold`), so a layout without + // a provider composes immediate replies only (`beginLocal`, `callLocal`). + pure def entered(state: Traversed[r, p], layout: Layout, open: bool): Traversed[r, p] = Flights::admitCaller({ o: { calls: state.o.calls.append(CALL_PENDING), - policyCalls: state.o.policyCalls + (if (open) 1 else 0), + policyCalls: state.o.policyCalls + (if (open and layout.policyProvider) 1 else 0), ...state.o }, ...state @@ -209,20 +279,20 @@ module serving { pure def admit(state: Served[r], layout: Layout, call: Call): Served[r] = { val open = participating(state, layout, call) val caller = state.o.calls.length() - if (open) Gate::hold(entered(state, open), state.o.policyCalls, caller, call) - else startSource(entered(state, open), layout, caller, call, NO_OWNER, false, BYPASS, NO_TTLS) + if (open) Gate::hold(entered(state, layout, open), state.o.policyCalls, caller, call) + else startSource(entered(state, layout, open), layout, caller, call, NO_OWNER, false, BYPASS, NO_TTLS, Remote::UNOBSERVED) } pure def admitLocal(state: LocalServed[r], layout: Layout, call: Call): LocalServed[r] = { val open = participating(state, layout, call) val caller = state.o.calls.length() - if (open) Gate::hold(entered(state, open), state.o.policyCalls, caller, call) - else startLocalSource(entered(state, open), layout, caller, call, NO_OWNER, false, BYPASS, NO_TTLS) + if (open) Gate::hold(entered(state, layout, open), state.o.policyCalls, caller, call) + else startLocalSource(entered(state, layout, open), layout, caller, call, NO_OWNER, false, BYPASS, NO_TTLS) } pure def admitRequest(state: RequestServed[r], layout: Layout, call: Call): RequestServed[r] = { val open = participating(state, layout, call) val caller = state.o.calls.length() - if (open) Gate::hold(entered(state, open), state.o.policyCalls, caller, call) - else startRequestSource(entered(state, open), layout, caller, call, NO_OWNER, false, BYPASS) + if (open) Gate::hold(entered(state, layout, open), state.o.policyCalls, caller, call) + else startRequestSource(entered(state, layout, open), layout, caller, call, NO_OWNER, false, BYPASS) } // -- Release ------------------------------------------------------------------- @@ -239,47 +309,77 @@ module serving { // retained, fresh for the reply's freshness and (tracked) fence-cleared, and // a remote hit warms local storage for the reply's local TTL. // - // The release is judged once (`layeredRelease`): the held caller and its - // call, whether its scope is still open, the resolution in effect, the value - // the remote layer offered and the decision. `release` applies the judgment; - // a variant composed around the release (`receipts`) judges the same one on - // the same state. It is judged on the state before Gate::release, which - // edits only the held list, a field no layer read or decision consults. - type LayeredRelease = { caller: int, call: Call, open: bool, effective: Resolution, remoteValue: int, decision: Decision } - pure def layeredRelease(state: Served[r], layout: Layout, policyCall: int, resolved: Resolution, ttls: Ttls): LayeredRelease = { + // The release is judged once (`judgeRelease`): the held caller and its + // call, whether its scope is still open, the resolution in effect, what the + // remote read observed (`remote_frames::Observed`: the value the remote + // layer offered, whether it offered a visible frame at all, and whether the + // read failed: an adapter fault, a visible frame whose payload fails the + // read, or a read not made), whether the local read failed, and the + // decision. The local read's fault is an argument of the judgment + // (`judgeReleaseUnder`, the local storage fault switch a profile composes + // through `local_faults`; `judgeRelease` judges a healthy read): a failed + // local read hides the local value and warms nothing from this release + // (`publishable`), and leaves the layers as the reply resolved them, so + // participation and sharing follow configuration, as the implementations + // decide the process flight before the read (`src/dialcache.ts` + // `getThroughSharedLayers`) and a local read that throws + // (`getThroughActiveLocal`) disables only that call's local value and + // write. The remote observation is a + // parameter: an atomic release + // observes the frame (`layeredRelease`, the judgment `release` applies and + // the variants composed around it, `receipts`, `remote_writes` and + // `shadow`, judge on the same state); a + // held release (`remote_io`) judges the same traversal with the remote layer + // unobserved, so a decision that reaches it is `Starts` with the remote + // layer on and the read is dispatched instead. It is judged on the state + // before Gate::release, which edits only the held list, a field no layer + // read or decision consults. + type LayeredRelease = { + caller: int, call: Call, open: bool, effective: Resolution, remote: Remote::Observed, localFailed: bool, decision: Decision + } + pure def judgeReleaseUnder(state: Served[r], layout: Layout, policyCall: int, resolved: Resolution, ttls: Ttls, observed: bool, localFailed: bool): LayeredRelease = { val held = Gate::entry(state, policyCall) val call = held.call val open = participating(state, layout, call) val effective = if (open) gated(resolved, ttls) else BYPASS val layers = effective.layers - val localValue = if (layers.local) Local::localValue(state, call.instance, call.key, layout.keysPerInstance) else NO_VALUE - val remoteValue = if (layers.remote and not(state.readFailed)) - Remote::readableFrame(state, call.key, layout.operationsPerEntity, ttls.freshMs) else NO_VALUE + // The read is made when the traversal may reach the remote layer; a read + // not made, like a failed one, observes nothing. + val reads = observed and layers.remote and not(state.readFailed) + // A failed local read offers no value; the layer stays on. + val localValue = if (layers.local and not(localFailed)) Local::localValue(state, call.instance, call.key, layout.keysPerInstance) else NO_VALUE + val remote = Remote::observe(state, call.key, layout.operationsPerEntity, ttls.freshMs, not(reads)) { caller: held.caller, call: call, open: open, effective: effective, - remoteValue: remoteValue, - decision: decide(state, layout, call, effective, localValue, remoteValue) + remote: remote, + localFailed: localFailed, + decision: decide(state, layout, call, effective, localValue, remote.value) } } - pure def release(state: Served[r], layout: Layout, policyCall: int, resolved: Resolution, ttls: Ttls): Served[r] = { - val judged = layeredRelease(state, layout, policyCall, resolved, ttls) + pure def judgeRelease(state: Served[r], layout: Layout, policyCall: int, resolved: Resolution, ttls: Ttls, observed: bool): LayeredRelease = + judgeReleaseUnder(state, layout, policyCall, resolved, ttls, observed, false) + // The TTLs a release publishes for: the reply's, with no local TTL after a + // failed local read. Nothing is warmed from a faulted read: neither the + // remote hit it serves (`applyRelease`) nor, through `authority`, the source + // it starts, which captures `localMs` 0 and so publishes nothing locally + // whatever the switch says when it settles. + pure def publishable(judged: LayeredRelease, ttls: Ttls): Ttls = + if (judged.localFailed) { localMs: 0, ...ttls } else ttls + pure def layeredRelease(state: Served[r], layout: Layout, policyCall: int, resolved: Resolution, ttls: Ttls): LayeredRelease = + judgeRelease(state, layout, policyCall, resolved, ttls, true) + // The prologue every layered release shares: release the gate, attach the + // caller to the flight that completes it (or to none), and serve it from the + // layer the judgment chose. `Starts` attaches and leaves the start to the + // caller (an atomic release starts the source, a held one dispatches the read). + pure def applyRelease(state: Served[r], layout: Layout, judged: LayeredRelease, policyCall: int, ttls: Ttls): Served[r] = { val caller = judged.caller val call = judged.call val layers = judged.effective.layers - val released = Gate::release(state, policyCall) val slot = judged.decision.slot - val attached = Flights::attachCaller(released, caller, ownerOf(judged.decision.outcome), slot) - val observed = if (layers.remote) { - o: { - reads: attached.o.reads + 1, - loads: attached.o.loads + (if (judged.remoteValue > NO_VALUE) 1 else 0), - ...attached.o - }, - ...attached - } else attached + val attached = Flights::attachCaller(Gate::release(state, policyCall), caller, ownerOf(judged.decision.outcome), slot) match judged.decision.outcome { // A request-flight join is the attachment alone: the owner came from the // caller's own row. A process-flight join also registers that flight under @@ -288,11 +388,42 @@ module serving { | JoinsProcess(owner) => Flights::joinRequestFlight(attached, slot, owner) | ServesMemo(value) => serve(attached, layout, caller, slot, value) | ServesLocal(value) => serve(Local::promote(attached, call.instance, call.key), layout, caller, slot, value) - | ServesRemote(value) => serve(if (layers.local) - Local::putLocal(observed, call.instance, call.key, value, ttls.localMs, layout.keysPerInstance) else observed, layout, caller, slot, value) - | Starts => startSource(observed, layout, caller, call, slot, judged.open, judged.effective, ttls) + | ServesRemote(value) => serve(warm(attached, layout, call, value, if (layers.local) ttls.localMs else 0), layout, caller, slot, value) + | Starts => attached } } + // The atomic release: the read is counted when the traversal reaches the + // remote layer, its decode when the frame served, and a miss starts the + // source with the authority the read fixed. + // + // `releaseJudged` applies a judgment already made on this state, so a + // variant that records beside the release (`receipts`, `remote_writes`, + // `shadow`) judges once through `layeredRelease` and applies the same + // judgment, and one judged under a local read fault (`local_faults::begin`) + // publishes for the TTLs that judgment allows; `release` is its composition + // with the atomic judgment. + pure def releaseJudged(state: Served[r], layout: Layout, judged: LayeredRelease, policyCall: int, ttls: Ttls): Served[r] = { + val publishes = publishable(judged, ttls) + val applied = applyRelease(state, layout, judged, policyCall, publishes) + val observed = if (judged.effective.layers.remote and reachesRemote(judged.decision.outcome)) { + o: { + reads: applied.o.reads + 1, + loads: applied.o.loads + (if (judged.remote.value > NO_VALUE) 1 else 0), + ...applied.o + }, + ...applied + } else applied + match judged.decision.outcome { + | Starts => startSource(observed, layout, judged.caller, judged.call, judged.decision.slot, judged.open, judged.effective, publishes, judged.remote) + | JoinsRequest(_) => observed + | JoinsProcess(_) => observed + | ServesMemo(_) => observed + | ServesLocal(_) => observed + | ServesRemote(_) => observed + } + } + pure def release(state: Served[r], layout: Layout, policyCall: int, resolved: Resolution, ttls: Ttls): Served[r] = + releaseJudged(state, layout, layeredRelease(state, layout, policyCall, resolved, ttls), policyCall, ttls) pure def releaseLocal(state: LocalServed[r], layout: Layout, policyCall: int, resolved: Resolution, ttls: Ttls): LocalServed[r] = { val held = Gate::entry(state, policyCall) val caller = held.caller @@ -360,46 +491,68 @@ module serving { val admitted = admit(state, layout, call) if (participating(state, layout, call)) release(admitted, layout, state.o.policyCalls, resolved, ttls) else admitted } + pure def beginLocal(state: LocalServed[r], layout: Layout, call: Call, resolved: Resolution, ttls: Ttls): LocalServed[r] = { + val admitted = admitLocal(state, layout, call) + if (participating(state, layout, call)) releaseLocal(admitted, layout, state.o.policyCalls, resolved, ttls) else admitted + } + // A call over the local projection whose loader runs inline (the drivers' + // loader returns before the call does, the local-clock profile): the source + // a miss starts settles at once with the value the loader returned, a hit + // starts none and settles nothing. The source is the newest, since no other + // work interleaves an inline call. + pure def callLocal(state: LocalServed[r], layout: Layout, call: Call, resolved: Resolution, ttls: Ttls, value: int): LocalServed[r] = { + val begun = beginLocal(state, layout, call, resolved, ttls) + if (begun.sources.length() > state.sources.length()) settleLocal(begun, layout, Flights::latest(begun), value) else begun + } // -- Settlement ---------------------------------------------------------------- - // Every caller the source owns receives its outcome; an accepted value - // memoizes into each owning caller's still-open scope. Settling clears the - // registries. - pure def finish(state: Traversed[r, p], layout: Layout, index: int, value: int): Traversed[r, p] = { - val settled = Flights::settleSource({ + // Every caller the source owns receives the value; an accepted value + // memoizes into each owning caller's still-open scope; the registries forget + // the flight. `complete` leaves the source's own recorded outcome alone (a + // flight that recovered a retained value completes its callers with that + // value after its source failed); `finish` records the value as the + // source's outcome and completes. + pure def complete(state: Traversed[r, p], layout: Layout, index: int, value: int): Traversed[r, p] = { + val settled = Flights::forgetSource({ o: { calls: finishOwnedCalls(state.o.calls, state.owners, index, value), ...state.o }, ...state - }, index, value) + }, index) if (not(accepted(value))) settled else Flights::ownedBy(state, index).fold(settled, (out, call) => Memo::memoize(out, state.memoSlots.nth(call), value, layout.keysPerScope)) } - // A layered accepted value also refills the remote layer when the flight - // read it and its fence still allows the write, and warms local storage + pure def finish(state: Traversed[r, p], layout: Layout, index: int, value: int): Traversed[r, p] = + complete(Flights::recordResult(state, index, value), layout, index, value) + // A layered accepted value refills the remote layer when the flight read it + // and its fence still allows the write (`refills`), and warms local storage // when the flight may, each for the TTLs its source captured from the reply - // that started it. A refill serializes (a dump), then dispatches the write, - // then stores the frame: a dump fault stops the dispatch and a write fault - // the storage; the dispatched write carries the retention. - pure def settle(state: Served[r], layout: Layout, index: int, value: int): Served[r] = { + // that started it. A refill serializes (a dump), then dispatches the write + // (`dispatchWrite`, carrying the retention), then stores the frame: a dump + // fault stops the dispatch and a write fault the storage. `publish` is the + // publication without completion; `settle` completes after it. + // A refill may be written now: its authority captured a retention and the + // fence it observed still allows the write; a caller's refill (`refills`) + // and a shadow job's fill (`shadow::fill`) judge it here. + pure def refillAllowed(state: Served[r], retentionMs: int, fence: int): bool = + retentionMs > 0 and Remote::writeAllowed(state, fence) + pure def refills(state: Served[r], source: LayeredSource, value: int): bool = + accepted(value) and refillAllowed(state, source.retentionMs, source.fence) + pure def dispatchWrite(state: Served[r], retentionMs: int): Served[r] = { + o: { writes: state.o.writes + 1, writeTtls: state.o.writeTtls.append(retentionMs), ...state.o }, + ...state + } + pure def publish(state: Served[r], layout: Layout, index: int, value: int): Served[r] = { val source = state.sources.nth(index) - val success = accepted(value) - val serializes = success and source.retentionMs > 0 and Remote::writeAllowed(state, source.fence) + val serializes = refills(state, source, value) val dispatches = serializes and not(state.dumpFailed) val stored = dispatches and not(state.writeFailed) - val frames = if (stored) Remote::seedFrame(state, source.key, value, source.retentionMs) else state - val recorded = { - o: { - dumps: state.o.dumps + (if (serializes) 1 else 0), - writes: state.o.writes + (if (dispatches) 1 else 0), - writeTtls: if (dispatches) state.o.writeTtls.append(source.retentionMs) else state.o.writeTtls, - ...state.o - }, - ...frames - } - val warmed = if (success and source.localMs > 0) - Local::putLocal(recorded, source.instance, source.key, value, source.localMs, layout.keysPerInstance) else recorded - finish(warmed, layout, index, value) + val dumped = { o: { dumps: state.o.dumps + (if (serializes) 1 else 0), ...state.o }, ...state } + val dispatched = if (dispatches) dispatchWrite(dumped, source.retentionMs) else dumped + val frames = if (stored) Remote::seedFrame(dispatched, source.key, value, source.retentionMs) else dispatched + if (accepted(value)) warm(frames, layout, source, value, source.localMs) else frames } + pure def settle(state: Served[r], layout: Layout, index: int, value: int): Served[r] = + finish(publish(state, layout, index, value), layout, index, value) // A local accepted value warms the identity's local slot for the local TTL // its source captured, when it captured one. pure def settleLocal(state: LocalServed[r], layout: Layout, index: int, value: int): LocalServed[r] = { @@ -417,18 +570,42 @@ module serving { pure def closeScope(state: Traversed[r, p], layout: Layout, context: int): Traversed[r, p] = Flights::forgetScope(Memo::closeScope(state, context, layout.keysPerScope), context, layout.keysPerScope) - // Maintenance: invalidating an entity raises its watermark; without remote - // storage the request reports the missing layer and changes nothing. - pure def invalidate(state: Served[r], entity: int): Served[r] = + // Maintenance: invalidating an entity raises its watermark. The outcome is + // one rule of the write-fault switch, as the drivers classify it + // (the `invalidate` command of `test/formal/behavior-driver.ts` `apply` and + // of `go/behavior_driver_test.go` `behaviorDriver.apply`): without remote + // storage the request reports the missing layer and changes nothing, the + // adapter is never called (`src/dialcache.ts` `invalidateRemote`, + // `go/cache.go` `Invalidate` returning `ErrNoRemote`); under a write fault + // the invalidation is counted and reports the mutation error, and the + // watermark does not move, as the adapter counts it before its write fails + // (the driver adapter's `invalidate` override in + // `test/formal/behavior-driver.ts`, `go/behavior_driver_test.go` + // `behaviorRemote.Invalidate`); otherwise it is counted, reports + // ok and raises the watermark to the wall clock plus the invalidator's + // future buffer (`bufferMs`, the public `futureBufferMs`; 0 where the + // drivers pass none). `maintains` is whether an invalidation takes + // effect: the judgment the effective arm branches on, and the one a marker + // lifetime (a profile that composes one stamps its marker only then) reads + // beside this outcome. + pure def maintains(state: Served[r]): bool = state.remoteAvailable and not(state.writeFailed) + pure def invalidate(state: Served[r], entity: int, bufferMs: int): Served[r] = if (not(state.remoteAvailable)) { o: { maintenance: state.o.maintenance.append("missing_remote"), ...state.o }, ...state + } else if (not(maintains(state))) { + o: { + invalidations: state.o.invalidations + 1, + maintenance: state.o.maintenance.append("mutation_error"), + ...state.o + }, + ...state } else { o: { invalidations: state.o.invalidations + 1, maintenance: state.o.maintenance.append("ok"), ...state.o }, - ...Remote::raiseWatermark(state, entity) + ...Remote::raiseWatermark(state, entity, bufferMs) } } diff --git a/formal/kernel/shadow.qnt b/formal/kernel/shadow.qnt new file mode 100644 index 00000000..cd119537 --- /dev/null +++ b/formal/kernel/shadow.qnt @@ -0,0 +1,594 @@ +module shadow { + // Shadow jobs (C47 to C54, C57, C60): the diagnostic work a served remote + // hit or a ramped-down miss admits beside the caller, in one per-instance + // registry of bounded capacity shared by both kinds. A job is admitted + // beside the layered release judged once (`serving::layeredRelease`): a + // served hit admits a served job whose C0 is the payload the hit served and + // whose source is a detached one (`serving::startDetachedSource`: no caller + // owns it, it publishes nothing); a miss whose reply left the remote layer + // off admits a dark job over the caller's own source, reading its C0 from + // the remote layer itself (the read counted; the payload when the frame is + // fresh for the reply's freshness, `acquired`, nothing otherwise); a dark C0 + // read that fails under the adapter's read fault ends `redis_error` at once + // (the read counted, no job registered, nothing filled, as the + // implementations return from the failed read before awaiting the source); + // an ordinary serving miss, a request or local hit, a key whose cohort the + // ramp does not select, an instance without the outcome hook (C47), or a + // caller whose scope closed before its release (the bypass reply, C01) + // admits nothing; a live job for the same instance and key, or a full + // instance, drops the job (C47, `busy`, `dropped`). A job captures the TTLs + // its reply resolved to (C18): the freshness its C0 read judges by and the + // retention its fill is written with, whatever the policy says later + // (`serving::authority` at the fill, capped for a tracked write, fenced by + // the watermark the C0 read observed when it found no visible frame, C58). + // The registry is pending-only, keyed by the job's source (a source has at + // most one job: a dark job takes the caller's just-started source, a served + // job a detached one registered for it): a finished job leaves no record, + // as a settled held read or dump does. + // + // When the job's source settles: a failed source ends the job + // (`sourceOutcome`: `source_error`, or `timeout` when the caller's deadline + // failed it, the implementations reporting the caller's timeout as the + // job's); with no C0 the job fills the remote layer through the + // held refill when its captured authority still allows the write + // (`serving::refillAllowed`, judged before serializing as the + // implementations check the fence before encoding: a fence the wall does + // not clear ends the job `fill_fenced` at settlement with no dump; + // `remote_writes::holdDump`, the write stamped at dump release, where the + // fence is judged again, and stored at write release, `filled`), never + // publishing to request or local storage; with a C0 the job decodes it + // (counted) and compares its value with the source's (`valuesMatch`, the + // decoded value, `payloads::valueOf`): equal is a `match`, else a + // confirmation read (counted, under the adapter's read fault: a failed one + // ends `confirmation_error`) of the frame as it is now says whether the C0 + // bytes are still current (`mismatch`: the same bytes, `payloads::bytesOf`, + // so a text and a binary spelling of one payload confirm each other, C51) + // or were replaced meanwhile (`superseded`). A served job always has a C0, + // so it never fills (C54). Every job has the budget its admission resolved, + // kept by `deadlines` (kind `JOB`, keyed by the job's source): at expiry the + // job is timed out and says so once; a dark job still waiting for its + // source leaves the registry, releasing its slot while the caller's source + // runs on; a served job keeps its detached source and its slot until that + // source settles; a job holding a read, a decode or a fill keeps its record + // until the held work drains, a dump released after the budget dispatching + // no write while a write released after it still stores (C53). No later + // label follows a timeout. A fill whose dump or write fails (the `failed` + // argument of the two releases, as `remote_writes` takes it) ends + // `fill_error`, nothing written. + // + // Two lifecycles compose the one registry. The atomic lifecycle (`Shadowed`, + // over `remote_writes::Writing`) judges the hit and the policy in the same + // step, at release (`admitJobs` reads the whole `Shadowing`), and makes the + // dark C0 read, the decode and the confirmation read at once. The held + // lifecycle (`HeldJobs`, over `remote_io::Held`) holds them as `remote_io` + // holds a caller's read and decode, in the same lists under the drivers' + // effect indices, budgeted on the io channel like every held read and never + // deadline-registered (the job's budget bounds all its work): a held read or + // decode over a source whose job is reading or decoding belongs to that job + // (`holdsRead`, `holdsLoad`; a caller's flight never has one then). Its + // rules are stated once, over `remote_io`: the source settled holds the + // decode (`settleJobHeld`), the decode settled says `match` or holds the + // confirmation read (`settleJobLoad`: `deserialization_error` when the + // decode fails, the drivers' fault or a payload whose bytes fail to decode; + // through the comparator the drivers install, `Comparison`: ordinary value + // equality, or a callback that reports equal, unequal, or throws, + // `comparison_error`, and consumes elapsed time first: a budget the + // comparison exhausts ends `timeout` before any verdict, C54; the callback + // is counted when installed, `o.comparisons`), the read settled says the + // verdict or acquires the C0 (`settleJobRead`). A timed-out job ends + // silently at whichever step finds it so, keeping its slot until then (C54: + // a served job's capacity is owned through its pending source, decode and + // confirmation). The two profiles that compose it each take one arm of the + // held admission. Served jobs (`HeldShadowed`, the admission profile, whose + // replies all enable the remote layer): the caller's read is dispatched + // before the frame is judged, so the cohort selection is captured for the + // flight when the read is dispatched (`selected`, a pending-only list of + // flights, the kernel's consulted-record idiom as `recovery`'s snapshot) and + // consulted when the hit is judged, at the decode's settlement for a frame + // held for decoding, where a served hit admits the job under the instance's + // limits read then (`settleLoad`), or at the read's settlement otherwise, + // where no hit can follow and nothing is admitted (`settleRead`); `beginHeld` + // and `releaseHeld` are the held release with the capture. Dark jobs + // (`DiagnosedShadowed`, the shadow profile, whose replies all leave it off): + // over the diagnosed budgeted held lifecycle (`deadlines`, `diagnostics`: + // the caller's source deadline, the layer its failure is attributed to and + // the channel the shadow drivers compare), admission (`beginDark`) registers + // the job with its budget before the source's synchronous work moves the + // clock (BEHAVIOR.md `sourceWorkMs`: the job's deadline and the caller's + // source deadline are measured from the call), then dispatches the C0 read, + // or times the job out with no read when the work already exhausted the + // budget (C54, `dispatchC0`); the C0 read settles with the state then + // current (`settleJobRead`: the frame acquired when fresh for the captured + // freshness, the fence observed, a failed read `redis_error`; a job whose + // source already settled continues at once). The channel facts are recorded + // beside the settlements (`releaseRead`, `releaseLoad`, C57, C60): a `match` + // or a confirmed `mismatch` samples the C0 frame's age at the verdict's + // wall clock, clamped to zero after a rollback, and a confirmed mismatch + // warns exactly when the admission's mismatch-logging policy was on + // (captured, `Shadowing.logging`); a shadow read of a frame stamped after + // the wall clock reports the offset on the `remote_shadow` layer whatever + // the job does next; a shadow policy that fails to resolve is one + // configuration error per call (`Malformed`: an invalid ramp always; an + // invalid logging value only where the hook and the ramp would otherwise + // admit the job). The caller's source deadline delivered ends the job + // waiting on that source `timeout` at once, its slot released + // (`expireHeld`, through `settleJobHeld`); a job still holding its C0 read + // then ends the same way when the read settles; a job budget due in the + // same round finds the job gone and says nothing more. + // + // Cohort selection is the drivers' ramp decoded by the profile through + // `cohort_boundaries` (strict against the key's numerator); the module reads + // the decoded selection. + import conformance_observations.* from "../conformance-observations" + import encodings.* from "./encodings" + import calls.* from "./calls" + import layer_policy.* from "./layer-policy" + import serving as Serving from "./serving" + import remote_frames as Remote from "./remote-frames" + import remote_writes as Writes from "./remote-writes" + import remote_io as RemoteIO from "./remote-io" + import deadlines as Deadlines from "./deadlines" + import diagnostics as Diagnostics from "./diagnostics" + import payloads as Payloads from "./payloads" + import clock as Clock from "./clock" + + // A job's phases: holding its C0 read (the held lifecycle), waiting for its + // source, holding its decode, holding its confirmation read, serializing + // its fill, writing it. + pure val READING_C0 = 0 + pure val WAITING_SOURCE = 1 + pure val DECODING = 2 + pure val CONFIRMING = 3 + pure val SERIALIZING = 4 + pure val WRITING = 5 + + // The comparator the drivers install (BEHAVIOR.md `comparator`): ordinary + // decoded-value equality, or a callback reporting equal, unequal, or + // throwing, which consumes `elapsedMs` of elapsed time before it returns. + pure val COMPARE_VALUES = 0 + pure val COMPARE_EQUAL = 1 + pure val COMPARE_UNEQUAL = 2 + pure val COMPARE_ERROR = 3 + type Comparison = { comparator: int, elapsedMs: int } + pure val VALUE_COMPARISON: Comparison = { comparator: COMPARE_VALUES, elapsedMs: 0 } + + // The shadow policy in force for a call: whether the outcome hook is + // installed (C47), whether the key's cohort is selected, the per-instance + // capacity, the job budget and whether a confirmed mismatch is logged (C60, + // captured by the job at admission). + type Shadowing = { hook: bool, selected: bool, capacity: int, budgetMs: int, logging: bool } + // Whether the policy failed to resolve: the ramp, or the logging value. + type Malformed = { ramp: bool, logging: bool } + pure val WELL_FORMED: Malformed = { ramp: false, logging: false } + + // A job: the source whose result it compares or fills with (the caller's + // own source for a dark job, a detached one for a served job), whether it is + // dark, the payload its C0 found fresh (NO_VALUE when none) and that + // frame's stamp (the age a verdict samples), the fence its C0 read observed + // when it found no visible frame (C58), the TTLs its reply resolved to + // (C18), its phase, whether its budget expired and the mismatch logging it + // captured. + type Job = { source: int, dark: bool, cached: int, stamp: int, fence: int, ttls: Ttls, phase: int, timedOut: bool, logging: bool } + // The registry beside the clock and its pending budgets, over the sources + // the jobs run for: what every lifecycle composes. + type Jobs[r] = Deadlines::Scheduled[{ o: Observation, jobs: List[Job], sources: List[Serving::LayeredSource] | r }] + type Shadowed[r] = Writes::Writing[{ jobs: List[Job], deadlines: List[Deadlines::Due] | r }] + // The held lifecycle's shape: the held remote traversal with the held fills + // (a dark job's dumps and writes) and the registry. + type HeldJobs[r] = RemoteIO::Held[{ dumps: List[Writes::HeldDump], writes: List[Writes::HeldWrite], jobs: List[Job], deadlines: List[Deadlines::Due] | r }] + // Served jobs: the selection captured per pending flight beside it. + type HeldShadowed[r] = HeldJobs[{ selected: List[int] | r }] + // Dark jobs: the diagnosed budgeted held remote lifecycle (the caller's + // source deadline, the coalesced scope, the failed layer) with the held + // fills, the jobs and the two channel fields the shadow drivers compare + // beside the four every descriptor parses. + type DiagnosedShadowed[r, q] = Diagnostics::DiagnosedHeld[ + { dumps: List[Writes::HeldDump], writes: List[Writes::HeldWrite], jobs: List[Job] | r }, + { configErrors: int, futureOffsets: List[Diagnostics::FutureOffset] | q } + ] + + pure def holdsJob(state: Jobs[r], source: int): bool = state.jobs.select(job => job.source == source).length() > 0 + pure def jobOf(state: Jobs[r], source: int): Job = state.jobs.select(job => job.source == source).nth(0) + pure def sourceOf(state: Jobs[r], job: Job): Serving::LayeredSource = state.sources.nth(job.source) + // A source's job is in one of the phases. + pure def jobHolds(state: Jobs[r], source: int, phases: Set[int]): bool = + state.jobs.select(job => job.source == source and phases.contains(job.phase)).length() > 0 + pure def waiting(state: Jobs[r], source: int): bool = jobHolds(state, source, Set(WAITING_SOURCE)) + // A job already runs for the identity, or the instance's registry is full. + pure def duplicate(state: Jobs[r], instance: int, key: int): bool = + state.jobs.select(job => sourceOf(state, job).instance == instance and sourceOf(state, job).key == key).length() > 0 + pure def full(state: Jobs[r], instance: int, capacity: int): bool = + state.jobs.select(job => sourceOf(state, job).instance == instance).length() >= capacity + pure def busy(state: Jobs[r], instance: int, key: int, capacity: int): bool = + duplicate(state, instance, key) or full(state, instance, capacity) + pure def reading(job: Job): bool = job.phase == READING_C0 or job.phase == CONFIRMING + pure def confirming(state: Jobs[r]): bool = state.jobs.select(job => job.phase == CONFIRMING).length() > 0 + // The held effects a job holds, by the drivers' ordinal: a held read over a + // source whose job is reading, a held decode over one whose job is decoding. + pure def holdsRead(state: HeldJobs[r], read: int): bool = + state.reads.select(held => held.read == read and jobHolds(state, held.flight, Set(READING_C0, CONFIRMING))).length() > 0 + pure def readerOf(state: HeldJobs[r], read: int): Job = jobOf(state, RemoteIO::heldRead(state, read).flight) + pure def holdsLoad(state: HeldJobs[r], load: int): bool = + state.loads.select(held => held.load == load and jobHolds(state, held.flight, Set(DECODING))).length() > 0 + pure def decoderOf(state: HeldJobs[r], load: int): Job = jobOf(state, RemoteIO::heldLoad(state, load).flight) + // The newest read or decode a job holds (NO_OWNER when none), for a profile + // whose drivers release the latest effect rather than one by index. + pure def latestRead(state: HeldJobs[r]): int = + state.reads.foldl(NO_OWNER, (latest, held) => + if (held.read > latest and jobHolds(state, held.flight, Set(READING_C0, CONFIRMING))) held.read else latest) + pure def latestLoad(state: HeldJobs[r]): int = + state.loads.foldl(NO_OWNER, (latest, held) => if (held.load > latest and jobHolds(state, held.flight, Set(DECODING))) held.load else latest) + + // -- Admission ----------------------------------------------------------------------- + + // Shadow work runs only where the outcome hook is installed and the ramp selects the key. + pure def admits(shadowing: Shadowing): bool = shadowing.hook and shadowing.selected + pure def dropped(state: Jobs[r]): Jobs[r] = + { o: { shadow: state.o.shadow.append("dropped"), ...state.o }, ...state } + pure def newJob(source: int, dark: bool, cached: int, stamp: int, fence: int, ttls: Ttls, phase: int, logging: bool): Job = + { source: source, dark: dark, cached: cached, stamp: stamp, fence: fence, ttls: ttls, phase: phase, timedOut: false, logging: logging } + // A job registered over its source, its budget due from now. + pure def admit(state: Jobs[r], job: Job, budgetMs: int): Jobs[r] = + Deadlines::due({ jobs: state.jobs.append(job), ...state }, Deadlines::JOB, job.source, budgetMs) + pure def update(state: Jobs[r], job: Job): Jobs[r] = + { jobs: state.jobs.foldl(List(), (out, other) => out.append(if (other.source == job.source) job else other)), ...state } + // The C0 a dark read acquires: the payload when the frame is fresh for the + // reply's freshness, nothing otherwise (C22 at the dark read). + pure def acquired(observed: Remote::Observed): int = if (observed.value > NO_VALUE) observed.payload else NO_VALUE + // A served hit's job, judged once for both lifecycles: nothing unless the + // hook is installed and the reply selected the cohort; `dropped` for a live + // job of the same identity or a full instance (C47); else a served job over + // a detached source with the payload the hit served as its C0, the frame's + // stamp as the hit is judged, the reply's TTLs and no fence. + pure def admitServed(state: Serving::Served[{ jobs: List[Job], deadlines: List[Deadlines::Due] | r }], layout: Serving::Layout, + who: { instance: int, key: int | q }, cached: int, ttls: Ttls, shadowing: Shadowing): Serving::Served[{ jobs: List[Job], deadlines: List[Deadlines::Due] | r }] = + if (not(admits(shadowing))) state + else if (busy(state, who.instance, who.key, shadowing.capacity)) dropped(state) + else admit(Serving::startDetachedSource(state, layout, who), + newJob(state.sources.length(), false, cached, state.created.nth(who.key), NO_FENCE, ttls, WAITING_SOURCE, shadowing.logging), shadowing.budgetMs) + // Admission beside the release judged once, on the released state: the + // atomic lifecycle, where a dark job's C0 read is made here. + pure def admitJobs(state: Shadowed[r], layout: Serving::Layout, judged: Serving::LayeredRelease, ttls: Ttls, shadowing: Shadowing): Shadowed[r] = { + val call = judged.call + if (not(admits(shadowing))) state + else match judged.decision.outcome { + | ServesRemote(_) => admitServed(state, layout, call, judged.remote.payload, ttls, shadowing) + // A bypass reply (the caller's scope closed before its release) admits + // nothing: that caller bypasses every layer (C01), shadow work included. + | Starts => if (not(judged.open) or judged.effective.layers.remote) state + else if (busy(state, call.instance, call.key, shadowing.capacity)) dropped(state) + else { + // The dark C0 read: the frame as the reply's freshness judges it now, + // under the adapter's read fault; the job reads the remote layer on + // its own account. A failed read is the label alone: the read + // counted, no job, nothing filled. + val c0 = Remote::observe(state, call.key, layout.operationsPerEntity, ttls.freshMs, state.readFailed) + val read = { o: { reads: state.o.reads + 1, ...state.o }, ...state } + if (c0.failed) { o: { shadow: read.o.shadow.append("redis_error"), ...read.o }, ...read } + else admit(read, + newJob(state.sources.length() - 1, true, acquired(c0), state.created.nth(call.key), + Remote::fenceFor(state, call.key, layout.operationsPerEntity, c0.visible), ttls, WAITING_SOURCE, shadowing.logging), + shadowing.budgetMs) + } + | _ => state + } + } + pure def release(state: Shadowed[r], layout: Serving::Layout, policyCall: int, resolved: Resolution, ttls: Ttls, classifier: int, shadowing: Shadowing): Shadowed[r] = { + val judged = Serving::layeredRelease(state, layout, policyCall, resolved, ttls) + admitJobs(Writes::releaseJudged(state, layout, judged, policyCall, ttls, classifier), layout, judged, ttls, shadowing) + } + // An immediate policy reply: admission, the release and the job in one step. + pure def begin(state: Shadowed[r], layout: Serving::Layout, call: Call, resolved: Resolution, ttls: Ttls, classifier: int, shadowing: Shadowing): Shadowed[r] = { + val admitted = Serving::admit(state, layout, call) + if (Serving::participating(state, layout, call)) release(admitted, layout, state.o.policyCalls, resolved, ttls, classifier, shadowing) else admitted + } + + // -- Settlement ------------------------------------------------------------------------ + + // A job ends with its outcome, its record and deadline gone; a timed-out + // job said so already and adds nothing. + pure def finishJob(state: Jobs[r], source: int, outcome: str): Jobs[r] = { + val job = jobOf(state, source) + Deadlines::forget({ + jobs: state.jobs.select(other => other.source != source), + o: { shadow: if (job.timedOut) state.o.shadow else state.o.shadow.append(outcome), ...state.o }, + ...state + }, Deadlines::JOB, source) + } + // The label a failed source gives its job: the caller's deadline error is + // the job's `timeout` (the implementations race the caller's bounded + // source and report its timeout as the job's), any other failure + // `source_error`. + pure def sourceOutcome(result: int): str = if (result == DEADLINE_ERROR) "timeout" else "source_error" + // A dark fill: the authority the job captured (C18, C58), judged before + // serializing; a fence the wall does not clear ends the job with no dump. + pure def fill(state: Shadowed[r], layout: Serving::Layout, job: Job): Shadowed[r] = { + val authority = Serving::authority(state, sourceOf(state, job), job.ttls, true, true, job.fence) + if (not(Serving::refillAllowed(state, authority.retentionMs, authority.fence))) finishJob(state, job.source, "fill_fenced") + else update(Writes::holdDump(state, job.source, authority.retentionMs, authority.fence), { phase: SERIALIZING, ...job }) + } + // The comparison: the C0's decoded value against the source's, or what the + // installed callback reports. + pure def valuesMatch(cached: int, result: int): bool = Payloads::valueOf(cached) == result + pure def matches(comparison: Comparison, cached: int, result: int): bool = + comparison.comparator == COMPARE_EQUAL or (comparison.comparator == COMPARE_VALUES and valuesMatch(cached, result)) + // The confirmation read judged: a failed read, the same bytes, or replaced bytes. + pure def confirmation(observed: Remote::Observed, cached: int): str = + if (observed.failed) "confirmation_error" + else if (Payloads::bytesOf(observed.payload) == Payloads::bytesOf(cached)) "mismatch" + else "superseded" + // The job's source has settled, the atomic lifecycle: the decode and the + // confirmation read are made here. + pure def settleJob(state: Shadowed[r], layout: Serving::Layout, source: int): Shadowed[r] = { + val job = jobOf(state, source) + val result = sourceOf(state, job).result + if (job.timedOut) finishJob(state, source, "timeout") + else if (not(accepted(result))) finishJob(state, source, sourceOutcome(result)) + else if (job.cached == NO_VALUE) fill(state, layout, job) + else { + val decoded = { o: { loads: state.o.loads + 1, ...state.o }, ...state } + if (valuesMatch(job.cached, result)) finishJob(decoded, source, "match") + else { + val confirmed = Remote::observe(decoded, sourceOf(state, job).key, layout.operationsPerEntity, 0, state.readFailed) + finishJob({ o: { reads: decoded.o.reads + 1, ...decoded.o }, ...decoded }, source, confirmation(confirmed, job.cached)) + } + } + } + // A source settles (`remote_writes::settle`), then the job waiting on it. + pure def settle(state: Shadowed[r], layout: Serving::Layout, index: int, value: int, timeout: bool): Shadowed[r] = { + val settled = Writes::settle(state, layout, index, value, timeout) + if (waiting(settled, index)) settleJob(settled, layout, index) else settled + } + + // -- Held fills ------------------------------------------------------------------------- + + // A dump released: a caller's refill dispatches its write; a job's fill + // dispatches it and writes next, unless the job's budget expired meanwhile + // or the dump failed (no write, the job ends: `fill_error`, a label + // `finishJob` suppresses for a timed-out job) or the fence, judged again at + // release, stopped the write (`fill_fenced`: a wall rollback since + // settlement). A source carries a caller's refill or a job's fill, never + // both: a dark job is admitted only under a reply with the remote layer off. + pure def releaseDump(state: Shadowed[r], layout: Serving::Layout, dump: int, failed: bool): Shadowed[r] = { + val source = Writes::heldDump(state, dump).source + if (not(holdsJob(state, source))) Writes::releaseDump(state, layout, dump, failed) + else { + val job = jobOf(state, source) + if (job.timedOut or failed) finishJob(Writes::abandonDump(state, dump), source, "fill_error") + else { + val dispatched = Writes::dispatch(state, dump) + if (dispatched.o.writes > state.o.writes) update(dispatched, { phase: WRITING, ...job }) else finishJob(dispatched, source, "fill_fenced") + } + } + } + // A write released: a caller's refill stores and completes; a job's fill + // stores (`filled`; `fill_error` when the write failed and nothing is + // stored) and completes nobody. + pure def releaseWrite(state: Shadowed[r], layout: Serving::Layout, write: int, failed: bool): Shadowed[r] = { + val source = Writes::heldWrite(state, write).source + if (not(holdsJob(state, source))) Writes::releaseWrite(state, layout, write, failed) + else finishJob(if (failed) Writes::abandonWrite(state, write) else Writes::store(state, write), source, if (failed) "fill_error" else "filled") + } + + // -- Budgets ------------------------------------------------------------------------------ + + // A job's budget delivered: `timeout` said once; a dark job still waiting + // leaves the registry, any other keeps its record until its held work drains. + pure def expireJob(state: Jobs[r], due: Deadlines::Due): Jobs[r] = { + val job = jobOf(state, due.index) + val expired = { o: { shadow: state.o.shadow.append("timeout"), ...state.o }, ...state } + if (job.dark and job.phase == WAITING_SOURCE) { jobs: expired.jobs.select(other => other.source != job.source), ...expired } + else update(expired, { timedOut: true, ...job }) + } + // Time passes, delivering each job budget at its instant (a shape whose + // pending deadlines are job budgets alone). + pure def advance(state: Jobs[r], ms: int): Jobs[r] = Deadlines::deliver(state, ms, expireJob) + + // -- The held lifecycle --------------------------------------------------------------------- + + // The job's source has settled: a timed-out job ends silently, a failed + // source ends it `source_error`, a job without a C0 fills, else the job's + // decode of its C0 is held (counted) over the job's source. + pure def settleJobHeld(state: HeldJobs[r], layout: Serving::Layout, source: int): HeldJobs[r] = { + val job = jobOf(state, source) + val result = sourceOf(state, job).result + if (job.timedOut) finishJob(state, source, "timeout") + else if (not(accepted(result))) finishJob(state, source, sourceOutcome(result)) + else if (job.cached == NO_VALUE) fill(state, layout, job) + else update(RemoteIO::holdLoad(state, source, NO_TTLS, job.cached, false), { phase: DECODING, ...job }) + } + // A job's held decode settles: a timed-out job drains silently; a failed + // decode ends `deserialization_error`; else the comparison runs, its + // elapsed time moving the clock without delivering timers, and a budget it + // reached ends `timeout`, a throwing callback `comparison_error`, equality + // a `match`, and inequality holds the confirmation read (counted, under the + // read budget in force on the io channel). + pure def settleJobLoad(state: HeldJobs[r], layout: Serving::Layout, load: int, failed: bool, comparison: Comparison, budget: int): HeldJobs[r] = { + val job = decoderOf(state, load) + val source = job.source + val settled = { loads: state.loads.select(other => other.load != load), ...state } + if (job.timedOut) finishJob(settled, source, "timeout") + else if (failed or Payloads::decodeFails(job.cached)) finishJob(settled, source, "deserialization_error") + else { + val compared = Clock::advance({ + o: { comparisons: settled.o.comparisons + (if (comparison.comparator == COMPARE_VALUES) 0 else 1), ...settled.o }, ...settled + }, comparison.elapsedMs) + if (Deadlines::reached(compared, Deadlines::JOB, source)) finishJob(compared, source, "timeout") + else if (comparison.comparator == COMPARE_ERROR) finishJob(compared, source, "comparison_error") + else if (matches(comparison, job.cached, sourceOf(state, job).result)) finishJob(compared, source, "match") + else update(RemoteIO::holdRead(compared, source, NO_TTLS, budget), { phase: CONFIRMING, ...job }) + } + } + // A job's held read settles, the C0 read or the confirmation read: a + // timed-out job drains silently; the confirmation read is judged + // (`confirmation`); the C0 read acquires the frame when fresh for the + // captured freshness with the fence it observed, ends `redis_error` when it + // failed, and continues at once when the source already settled. + pure def settleJobRead(state: HeldJobs[r], layout: Serving::Layout, read: int, failed: bool): HeldJobs[r] = { + val job = readerOf(state, read) + val source = job.source + val key = sourceOf(state, job).key + val settled = { reads: state.reads.select(other => other.read != read), ...state } + val seen = Remote::observe(state, key, layout.operationsPerEntity, if (job.phase == READING_C0) job.ttls.freshMs else 0, failed) + if (job.timedOut) finishJob(settled, source, "timeout") + else if (job.phase == CONFIRMING) finishJob(settled, source, confirmation(seen, job.cached)) + else if (seen.failed) finishJob(settled, source, "redis_error") + else { + val waiting = update(settled, { + cached: acquired(seen), stamp: state.created.nth(key), fence: Remote::fenceFor(state, key, layout.operationsPerEntity, seen.visible), + phase: WAITING_SOURCE, ...job + }) + if (sourceOf(waiting, job).result != CALL_PENDING) settleJobHeld(waiting, layout, source) else waiting + } + } + + // -- Served jobs over the held remote lifecycle ------------------------------------------- + + // The selection captured for the flight whose read the step dispatched. + pure def capture(before: HeldShadowed[r], after: HeldShadowed[r], selected: bool): HeldShadowed[r] = + if (selected and after.o.reads > before.o.reads) { selected: after.selected.append(after.sources.length() - 1), ...after } else after + pure def isSelected(state: HeldShadowed[r], flight: int): bool = state.selected.select(other => other == flight).length() > 0 + // The selection consulted: the hit judged, the record is forgotten. + pure def forgetSelection(state: HeldShadowed[r], flight: int): HeldShadowed[r] = + { selected: state.selected.select(other => other != flight), ...state } + // An immediate policy reply: admission and the held release in one step + // (`remote_io::begin`), the selection captured when a read is dispatched. + pure def beginHeld(state: HeldShadowed[r], layout: Serving::Layout, call: Call, resolved: Resolution, ttls: Ttls, budget: int, selected: bool): HeldShadowed[r] = + capture(state, RemoteIO::begin(state, layout, call, resolved, ttls, budget), selected) + // A held policy reply released: the held release (`remote_io::release`), + // the selection captured the same way. + pure def releaseHeld(state: HeldShadowed[r], layout: Serving::Layout, policyCall: int, resolved: Resolution, ttls: Ttls, budget: int, selected: bool): HeldShadowed[r] = + capture(state, RemoteIO::release(state, layout, policyCall, resolved, ttls, budget), selected) + // A held read settles: a job's read as the held lifecycle has it; a + // caller's read as `remote_io` has it, and one that holds no decode (a + // miss, a failed read, a read whose deadline was delivered) can serve no + // hit, so its flight's selection is forgotten. + pure def settleRead(state: HeldShadowed[r], layout: Serving::Layout, read: int, failed: bool, classifier: int): HeldShadowed[r] = + if (holdsRead(state, read)) settleJobRead(state, layout, read, failed) + else { + val settled = RemoteIO::settleRead(state, layout, read, failed, classifier) + if (settled.o.loads > state.o.loads) settled else forgetSelection(settled, RemoteIO::heldRead(state, read).flight) + } + // A held decode settles: a job's decode as the held lifecycle has it, under + // ordinary value equality and the read budget in force; a caller's decode + // as `remote_io` has it, the selection captured for its flight consulted + // and forgotten: a fresh frame decoded completes the flight with a served + // hit, which admits the job under the instance's hook and limits as read + // now (`admitServed`, its detached source mapped to the drivers' next loader + // ordinal, `remote_io::mapLoader`); a failed decode restarts the loader and + // a recovery decode recovers, neither a served hit. + pure def settleLoad(state: HeldShadowed[r], layout: Serving::Layout, load: int, failed: bool, budget: int, shadowing: Shadowing): HeldShadowed[r] = + if (holdsLoad(state, load)) settleJobLoad(state, layout, load, failed, VALUE_COMPARISON, budget) + else { + val held = RemoteIO::heldLoad(state, load) + val settled = forgetSelection(RemoteIO::settleLoad(state, layout, load, failed), held.flight) + val served = not(held.recovery) and not(failed) and not(Payloads::decodeFails(held.value)) + if (not(served)) settled + else RemoteIO::mapLoader(settled, + admitServed(settled, layout, state.sources.nth(held.flight), held.value, held.ttls, { selected: isSelected(state, held.flight), ...shadowing })) + } + // A loader settles by the drivers' ordinal (`remote_io::settleLoader`), then + // the job waiting on its source. + pure def settleLoader(state: HeldJobs[r], layout: Serving::Layout, ordinal: int, value: int, timeout: bool): HeldJobs[r] = { + val flight = state.loaders.nth(ordinal) + val settled = RemoteIO::settleLoader(state, layout, ordinal, value, timeout) + if (waiting(settled, flight)) settleJobHeld(settled, layout, flight) else settled + } + + // -- Dark jobs over the diagnosed budgeted held lifecycle ------------------------------------ + + // Admission beside the held release: a dark job registered over the + // caller's source with its budget, its C0 read not yet dispatched. + pure def admitDark(state: Jobs[r], judged: Serving::LayeredRelease, ttls: Ttls, shadowing: Shadowing): Jobs[r] = { + val call = judged.call + if (not(admits(shadowing))) state + else match judged.decision.outcome { + | Starts => if (not(judged.open) or judged.effective.layers.remote) state + else if (busy(state, call.instance, call.key, shadowing.capacity)) dropped(state) + else admit(state, newJob(state.sources.length() - 1, true, NO_VALUE, 0, NO_FENCE, ttls, READING_C0, shadowing.logging), shadowing.budgetMs) + // The remote layer is unobserved at a held release: nothing serves from + // it here, so no served job is admitted at this step. + | _ => state + } + } + // The deferred dispatch of a dark job's C0 read: a budget the source's + // synchronous work already reached times the job out with no read (C54); + // else the read is held under the read budget in force. + pure def dispatchC0(state: HeldJobs[r], source: int, budget: int): HeldJobs[r] = + if (Deadlines::reached(state, Deadlines::JOB, source)) finishJob(state, source, "timeout") + else RemoteIO::holdRead(state, source, NO_TTLS, budget) + // An immediate policy reply over the diagnosed held lifecycle: admission and + // the diagnosed held release (the caller's source started at once under the + // source budget, or its read dispatched under `budget`), the configuration + // error a malformed shadow policy reports, the job registered, the source's + // synchronous work (`workMs`, moving the clock without delivering timers), + // and the C0 read dispatched or the job timed out. + pure def beginDark(state: DiagnosedShadowed[r, q], layout: Serving::Layout, call: Call, resolved: Resolution, ttls: Ttls, budget: int, + shadowing: Shadowing, malformed: Malformed, workMs: int): DiagnosedShadowed[r, q] = { + val admitted = Diagnostics::admit(state, layout, call) + if (not(Serving::participating(state, layout, call))) Clock::advance(admitted, workMs) + else { + val judged = Serving::judgeRelease(admitted, layout, state.o.policyCalls, resolved, ttls, false) + val released = Diagnostics::releaseJudged(admitted, layout, judged, state.o.policyCalls, ttls, budget) + val reported = if (malformed.ramp or (admits(shadowing) and malformed.logging)) Diagnostics::recordConfigError(released) else released + val registered = admitDark(reported, judged, ttls, shadowing) + val worked = Clock::advance(registered, workMs) + if (registered.jobs.length() > reported.jobs.length()) dispatchC0(worked, state.sources.length(), budget) else worked + } + } + // A loader settles by the drivers' ordinal (`diagnostics::settleLoader`: a + // result arriving after its deadline is a deadline error, one whose + // deadline already completed the flight drains), then the job waiting on + // a flight the step settled. + pure def settleHeld(state: DiagnosedShadowed[r, q], layout: Serving::Layout, ordinal: int, value: int, timeout: bool): DiagnosedShadowed[r, q] = { + val flight = state.loaders.nth(ordinal) + val settled = Diagnostics::settleLoader(state, layout, ordinal, value, timeout) + if (state.sources.nth(flight).result == CALL_PENDING and settled.sources.nth(flight).result != CALL_PENDING and waiting(settled, flight)) + settleJobHeld(settled, layout, flight) + else settled + } + // The verdict the drivers observe, recorded beside the label the settlement + // reported for the job: a `match` or a confirmed `mismatch` samples the C0 + // frame's age at the verdict, clamped to zero after a wall rollback (C57), + // and a confirmed mismatch warns under the logging policy the job captured + // (C60). A timed-out job reports no label and so no verdict. + pure def recordVerdict(before: DiagnosedShadowed[r, q], after: DiagnosedShadowed[r, q], job: Job): DiagnosedShadowed[r, q] = { + val labels = after.o.shadow + val outcome = if (labels.length() > before.o.shadow.length()) labels.nth(labels.length() - 1) else "" + if (outcome != "match" and outcome != "mismatch") after + else { + val age = Clock::wallOf(after) - job.stamp + val warned = if (outcome == "mismatch" and job.logging) Diagnostics::recordWarning(after) else after + Diagnostics::recordAge(warned, if (age < 0) 0 else age) + } + } + // The drivers release a job's held decode: the settlement, its verdict recorded. + pure def releaseLoad(state: DiagnosedShadowed[r, q], layout: Serving::Layout, load: int, failed: bool, comparison: Comparison, budget: int): DiagnosedShadowed[r, q] = + recordVerdict(state, settleJobLoad(state, layout, load, failed, comparison, budget), decoderOf(state, load)) + // The drivers release a job's held read: a visible frame stamped after the + // wall clock reports its offset on the shadow layer whatever follows, then + // the settlement, its verdict recorded. + pure def releaseRead(state: DiagnosedShadowed[r, q], layout: Serving::Layout, read: int, failed: bool): DiagnosedShadowed[r, q] = { + val job = readerOf(state, read) + val key = sourceOf(state, job).key + val stamp = state.created.nth(key) + val offset = stamp - Clock::wallOf(state) + val measured = if (offset > 0 and Remote::observe(state, key, layout.operationsPerEntity, 0, failed).visible) + Diagnostics::recordFutureOffset(state, Diagnostics::REMOTE_SHADOW_LAYER, offset) else state + recordVerdict(measured, settleJobRead(measured, layout, read, failed), job) + } + // Delivery from inside the kernel, by kind: a job budget (nothing for a job + // a source deadline of the same round already ended), a read deadline, or a + // source deadline through the diagnosed expiry, then the job waiting on the + // flight it completed (`settleJobHeld`: `timeout`, the slot released). + pure def expireHeld(state: DiagnosedShadowed[r, q], layout: Serving::Layout, due: Deadlines::Due): DiagnosedShadowed[r, q] = + if (due.kind == Deadlines::JOB) (if (holdsJob(state, due.index)) expireJob(state, due) else state) + else if (due.kind == Deadlines::READ) Deadlines::expireRead(state, layout, due.index) + else { + val flight = state.loaders.nth(due.index) + val expired = Diagnostics::expireLoader(state, layout, due.index) + if (waiting(expired, flight)) settleJobHeld(expired, layout, flight) else expired + } + pure def advanceHeld(state: DiagnosedShadowed[r, q], layout: Serving::Layout, ms: int): DiagnosedShadowed[r, q] = + Deadlines::deliver(state, ms, (current, due) => expireHeld(current, layout, due)) +} diff --git a/formal/layers-smoke.itf.json b/formal/layers-smoke.itf.json index dacf7c11..5eb29754 100644 --- a/formal/layers-smoke.itf.json +++ b/formal/layers-smoke.itf.json @@ -11,8491 +11,86 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "16" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "16" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "12" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "12" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "6" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "16" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "16" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "7" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "7" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "18" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "18" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "9" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "15" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "15" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "10" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "11" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "12" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "12" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "12" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "12" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "13" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "13" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "13" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "14" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "14" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "7" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "7" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "14" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote" - ], - "policyCalls": { - "#bigint": "14" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "14" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "15" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "15" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "11" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "11" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "16" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "13" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "13" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "17" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "17" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "18" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "18" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "18" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "7" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "7" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "18" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "11" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "11" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "18" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "18" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "18" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "16" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "16" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "7" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "19" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "13" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "13" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "7" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "19" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "7" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "19" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "14" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "14" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "7" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "7" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "closeScope" - }, - "mbt::actionTaken": "closeScope", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "closeScope" - }, - "mbt::actionTaken": "closeScope", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "7" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "7" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "closeScope" - }, - "mbt::actionTaken": "closeScope", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote", - "missing_remote" - ], - "policyCalls": { - "#bigint": "20" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"4"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"16"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"16"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"12"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"6"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"6"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"16"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"16"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"7"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"7"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"18"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"18"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"9"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"15"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"15"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"10"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"8"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"11"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"12"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"12"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"12"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"12"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"13"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"13"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"13"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"14"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"14"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"7"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"7"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"14"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote"],"policyCalls":{"#bigint":"14"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote"],"policyCalls":{"#bigint":"14"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote"],"policyCalls":{"#bigint":"15"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote"],"policyCalls":{"#bigint":"15"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"11"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"11"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote"],"policyCalls":{"#bigint":"16"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"13"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"13"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote"],"policyCalls":{"#bigint":"17"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"17"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"18"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"18"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"18"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"7"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"7"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"18"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"11"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"11"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"18"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"18"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"18"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"16"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"16"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"7"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"19"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"13"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"13"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"7"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"19"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"7"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"19"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"14"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"14"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"7"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"7"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"closeScope"},"mbt::actionTaken":"closeScope","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"closeScope"},"mbt::actionTaken":"closeScope","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"7"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"7"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"closeScope"},"mbt::actionTaken":"closeScope","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote","missing_remote"],"policyCalls":{"#bigint":"20"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } diff --git a/formal/lint-profiles.mjs b/formal/lint-profiles.mjs index 2521fe31..9fdf5580 100644 --- a/formal/lint-profiles.mjs +++ b/formal/lint-profiles.mjs @@ -11,9 +11,17 @@ // decoding. A comparison, branch, arithmetic or collection operator over // cache state, or a non-library definition applied to cache state, is rule // logic in the profile and is reported with the chain action -> helper -> -// ... -> the definition that computes it. profile-lint-baseline.json records -// each profile's count: a composed profile has zero and the other counts are -// the migration work list. +// ... -> the definition that computes it. A kernel definition that takes an +// operator (a parameter declared with an operator type, spelled inline or +// through a type alias resolved to its typedef; `deadlines::deliver` today) +// is instantiated only inside the kernel: its operator is rule logic the +// library would run where the walk cannot follow it, so a reference to such +// a definition from a profile's assigned value, as the callee (directly or +// through a `def x = ` alias of the profile's, judged as the +// kernel's application) or by name, is reported whatever the argument is. +// profile-lint-baseline.json +// records each profile's count: a composed profile has zero and the other +// counts are the migration work list. // - Witness isolation: no definition reachable from a cache guard, a cache // assignment, the profile's init or step, an input-choice domain (the // expression of a `nondet ... .oneOf()`), an observation projection (the @@ -23,7 +31,14 @@ // assignment to a witness variable is not walked. // // Quint IR facts the walk relies on (verified against Quint 0.32.0): a -// parametrized definition is a `def` whose `expr` is a `lambda`; `x' = e` is an +// parametrized definition is a `def` whose `expr` is a `lambda`; a declared +// type is the declaration's `typeAnnotation`, an `oper` whose `args` are the +// parameter types for a parametrized definition (every kernel definition +// declares one, as does the constructor Quint synthesizes for a sum type's +// variant); a parameter typed through a type alias is recorded as a `const` +// type naming the alias (wrapped in an `app` whose `ctor` is that `const` when +// the alias takes type parameters), and the table maps the `const`'s id to a +// `typedef` entry whose `type` is the aliased type; `x' = e` is an // `app` with opcode `assign` and arguments `[name x, e]`; `nondet c = D.oneOf()` // is a `let` whose `opdef` has qualifier `nondet`; `import M(C = e) as K` is an // `instance` declaration with `overrides: [[{ name }, e]]`; `K::x` resolves to @@ -116,7 +131,7 @@ export function indexModules(parsed, { main } = {}) { const labelOf = (module, name) => module === mainModule ? name : `${module}::${name}`; const register = (declaration, module, owner) => { declarations.set(declaration.id, { id: declaration.id, kind: declaration.kind, name: declaration.name, - qualifier: declaration.qualifier, module, owner, expr: declaration.expr }); + qualifier: declaration.qualifier, module, owner, expr: declaration.expr, typeAnnotation: declaration.typeAnnotation }); }; for (const module of parsed.modules) { for (const declaration of module.declarations) { @@ -277,6 +292,50 @@ export function lintComposition(index, { kernelModules = [] } = {}) { const key = `${node.key}|${detail}`; if (!violations.has(key)) violations.set(key, { definition: node.label, detail, chain }); }; + // Whether a declared parameter type is an operator type: spelled inline, or + // a type alias (`type Step[r] = (Counter[r], int) => Counter[r]`, recorded as + // a `const` type name, applied to its arguments when the alias takes type + // parameters) whose typedef the lookup table resolves to one, following + // alias chains. An alias the table does not resolve is an error here, not a + // parameter silently taken for a value. + const isOperatorType = (type, declaration, seen = new Set()) => { + if (type.kind === 'oper') return true; + const alias = type.kind === 'const' ? type : type.kind === 'app' && type.ctor?.kind === 'const' ? type.ctor : undefined; + if (alias === undefined) return false; + const typedef = index.table[alias.id]; + if (typedef?.kind !== 'typedef') { + throw new Error(`Kernel definition ${index.labelOf(declaration.module, declaration.name)} declares the parameter type ${alias.name}, which resolves to no type declaration; the composition rule judges higher-order definitions from declared parameter types`); + } + // An uninterpreted type or a cyclic alias names no operator. + if (typedef.type === undefined || seen.has(typedef.id)) return false; + return isOperatorType(typedef.type, declaration, seen.add(typedef.id)); + }; + // The kernel definitions that take an operator: a parameter declared with + // an operator type (kernel definitions declare their parameter types; a + // parametrized one without a declared type is an error here, not a + // definition silently taken for first-order). A profile may not instantiate + // one, whatever it passes: its operator is rule logic the library would run + // where the walk cannot follow it, so the kernel's own variants supply it. + const higherOrder = new Set(); + for (const declaration of index.declarations.values()) { + if (!isKernel(declaration) || declaration.owner !== String(declaration.id)) continue; + const type = declaration.typeAnnotation; + if (declaration.kind === 'def' && declaration.expr?.kind === 'lambda' && type === undefined) { + throw new Error(`Kernel definition ${index.labelOf(declaration.module, declaration.name)} declares no type; the composition rule judges higher-order definitions from declared parameter types`); + } + if (type?.kind === 'oper' && type.args.some(argument => isOperatorType(argument, declaration))) higherOrder.add(declaration.id); + } + // The kernel definition a callee is, directly or through `def x = ` + // aliases and let-bound names (a `def` whose expr is a `name`); undefined + // when the chain ends outside the kernel. A kernel definition applied + // through a profile alias is judged and recorded as the kernel's application, + // so aliasing cannot empty a profile's recorded transitions. + const kernelCallee = (declaration, seen = new Set()) => { + if (isKernel(declaration)) return declaration; + if (declaration?.kind !== 'def' || declaration.expr?.kind !== 'name' || seen.has(declaration.id)) return undefined; + return kernelCallee(resolveTarget(index, declaration.expr), seen.add(declaration.id)); + }; + const higherOrderLabel = declaration => higherOrder.has(declaration.id) ? index.labelOf(declaration.module, declaration.name) : undefined; // Walks one expression; returns whether its value carries cache state. // `tainted` maps parameter and let names of the walked body to state taint. const walk = (expr, { node, chain, tainted, variable }) => { @@ -292,7 +351,11 @@ export function lintComposition(index, { kernelModules = [] } = {}) { if (declaration.qualifier === 'nondet') return false; if (declaration.owner === node.key && !tainted.has(expr.name)) return again(declaration.expr); if (declaration.owner === node.key) return tainted.get(expr.name) === true; - return isKernel(declaration) ? false : callProfile(declaration, [], { node, chain, variable }); + if (isKernel(declaration)) { + if (higherOrderLabel(declaration)) report(node, chain, `higher-order ${higherOrderLabel(declaration)} named in the value of ${variable}`); + return false; + } + return callProfile(declaration, [], { node, chain, variable }); } case 'lambda': { const inner = new Map(tainted); @@ -311,8 +374,14 @@ export function lintComposition(index, { kernelModules = [] } = {}) { const declaration = resolveTarget(index, expr); const stateful = expr.args.map(again); if (declaration) { - if (isKernel(declaration)) { - if (declaration.kind === 'def') transitions.add(index.labelOf(declaration.module, declaration.name)); + // The kernel definition applied, named directly or through a profile + // alias: its transition is recorded, and one that takes an operator is + // reported whatever the argument. + const kernelDefinition = kernelCallee(declaration); + if (kernelDefinition) { + const label = index.labelOf(kernelDefinition.module, kernelDefinition.name); + if (kernelDefinition.kind === 'def') transitions.add(label); + if (higherOrderLabel(kernelDefinition)) report(node, chain, `higher-order ${label} instantiated in the value of ${variable}`); return true; } // A definition bound inside this body: its lambda parameters take the diff --git a/formal/local-clock-smoke.itf.json b/formal/local-clock-smoke.itf.json index 8a5f6ec5..9a8bf582 100644 --- a/formal/local-clock-smoke.itf.json +++ b/formal/local-clock-smoke.itf.json @@ -11,1982 +11,18 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "constructed": [ - false, - false - ], - "entries": [ - { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - } - ], - "fills": [], - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "probes": [], - "ticks": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "constructInstance" - }, - "mbt::actionTaken": "constructInstance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "constructed": [ - true, - false - ], - "entries": [ - { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - } - ], - "fills": [], - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "probes": [], - "ticks": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "400" - }, - "name": "advanceTicks" - }, - "mbt::actionTaken": "advanceTicks", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "400" - } - } - }, - "s": { - "constructed": [ - true, - false - ], - "entries": [ - { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - } - ], - "fills": [], - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "probes": [], - "ticks": { - "#bigint": "400" - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "constructInstance" - }, - "mbt::actionTaken": "constructInstance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "constructed": [ - true, - true - ], - "entries": [ - { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - } - ], - "fills": [], - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "probes": [], - "ticks": { - "#bigint": "400" - } - } - }, - { - "input": { - "choice": { - "#bigint": "300" - }, - "name": "advanceTicks" - }, - "mbt::actionTaken": "advanceTicks", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "300" - } - } - }, - "s": { - "constructed": [ - true, - true - ], - "entries": [ - { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - } - ], - "fills": [], - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "probes": [], - "ticks": { - "#bigint": "700" - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "call" - }, - "mbt::actionTaken": "call", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "constructed": [ - true, - true - ], - "entries": [ - { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - } - ], - "fills": [ - { - "instance": { - "#bigint": "0" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "probes": [ - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - } - ], - "ticks": { - "#bigint": "700" - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "call" - }, - "mbt::actionTaken": "call", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "constructed": [ - true, - true - ], - "entries": [ - { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - } - ], - "fills": [ - { - "instance": { - "#bigint": "0" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "instance": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "probes": [ - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - }, - { - "instance": { - "#bigint": "1" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - } - ], - "ticks": { - "#bigint": "700" - } - } - }, - { - "input": { - "choice": { - "#bigint": "999200" - }, - "name": "advanceTicks" - }, - "mbt::actionTaken": "advanceTicks", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "999200" - } - } - }, - "s": { - "constructed": [ - true, - true - ], - "entries": [ - { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - } - ], - "fills": [ - { - "instance": { - "#bigint": "0" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "instance": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "probes": [ - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - }, - { - "instance": { - "#bigint": "1" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - } - ], - "ticks": { - "#bigint": "999900" - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "call" - }, - "mbt::actionTaken": "call", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "constructed": [ - true, - true - ], - "entries": [ - { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - } - ], - "fills": [ - { - "instance": { - "#bigint": "0" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "instance": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "probes": [ - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - }, - { - "instance": { - "#bigint": "1" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - }, - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "2" - }, - "previous": { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - "ranSource": false, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "999900" - } - } - ], - "ticks": { - "#bigint": "999900" - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "call" - }, - "mbt::actionTaken": "call", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "constructed": [ - true, - true - ], - "entries": [ - { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - } - ], - "fills": [ - { - "instance": { - "#bigint": "0" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "instance": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "probes": [ - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - }, - { - "instance": { - "#bigint": "1" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - }, - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "2" - }, - "previous": { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - "ranSource": false, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "999900" - } - }, - { - "instance": { - "#bigint": "1" - }, - "offered": { - "#bigint": "2" - }, - "previous": { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - "ranSource": false, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "999900" - } - } - ], - "ticks": { - "#bigint": "999900" - } - } - }, - { - "input": { - "choice": { - "#bigint": "100" - }, - "name": "advanceTicks" - }, - "mbt::actionTaken": "advanceTicks", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "100" - } - } - }, - "s": { - "constructed": [ - true, - true - ], - "entries": [ - { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - } - ], - "fills": [ - { - "instance": { - "#bigint": "0" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "instance": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "probes": [ - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - }, - { - "instance": { - "#bigint": "1" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - }, - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "2" - }, - "previous": { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - "ranSource": false, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "999900" - } - }, - { - "instance": { - "#bigint": "1" - }, - "offered": { - "#bigint": "2" - }, - "previous": { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - "ranSource": false, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "999900" - } - } - ], - "ticks": { - "#bigint": "1000000" - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "call" - }, - "mbt::actionTaken": "call", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "constructed": [ - true, - true - ], - "entries": [ - { - "insertedTicks": { - "#bigint": "1000000" - }, - "value": { - "#bigint": "2" - } - }, - { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - } - ], - "fills": [ - { - "instance": { - "#bigint": "0" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "instance": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "instance": { - "#bigint": "0" - }, - "ticks": { - "#bigint": "1000000" - }, - "value": { - "#bigint": "2" - } - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "probes": [ - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - }, - { - "instance": { - "#bigint": "1" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - }, - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "2" - }, - "previous": { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - "ranSource": false, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "999900" - } - }, - { - "instance": { - "#bigint": "1" - }, - "offered": { - "#bigint": "2" - }, - "previous": { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - "ranSource": false, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "999900" - } - }, - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "2" - }, - "previous": { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - "ranSource": true, - "returned": { - "#bigint": "2" - }, - "ticks": { - "#bigint": "1000000" - } - } - ], - "ticks": { - "#bigint": "1000000" - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "call" - }, - "mbt::actionTaken": "call", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "constructed": [ - true, - true - ], - "entries": [ - { - "insertedTicks": { - "#bigint": "1000000" - }, - "value": { - "#bigint": "2" - } - }, - { - "insertedTicks": { - "#bigint": "1000000" - }, - "value": { - "#bigint": "2" - } - } - ], - "fills": [ - { - "instance": { - "#bigint": "0" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "instance": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - { - "instance": { - "#bigint": "0" - }, - "ticks": { - "#bigint": "1000000" - }, - "value": { - "#bigint": "2" - } - }, - { - "instance": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "1000000" - }, - "value": { - "#bigint": "2" - } - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "probes": [ - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - }, - { - "instance": { - "#bigint": "1" - }, - "offered": { - "#bigint": "1" - }, - "previous": { - "insertedTicks": { - "#bigint": "0" - }, - "value": { - "#bigint": "0" - } - }, - "ranSource": true, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "700" - } - }, - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "2" - }, - "previous": { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - "ranSource": false, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "999900" - } - }, - { - "instance": { - "#bigint": "1" - }, - "offered": { - "#bigint": "2" - }, - "previous": { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - "ranSource": false, - "returned": { - "#bigint": "1" - }, - "ticks": { - "#bigint": "999900" - } - }, - { - "instance": { - "#bigint": "0" - }, - "offered": { - "#bigint": "2" - }, - "previous": { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - "ranSource": true, - "returned": { - "#bigint": "2" - }, - "ticks": { - "#bigint": "1000000" - } - }, - { - "instance": { - "#bigint": "1" - }, - "offered": { - "#bigint": "2" - }, - "previous": { - "insertedTicks": { - "#bigint": "700" - }, - "value": { - "#bigint": "1" - } - }, - "ranSource": true, - "returned": { - "#bigint": "2" - }, - "ticks": { - "#bigint": "1000000" - } - } - ], - "ticks": { - "#bigint": "1000000" - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"constructInstance"},"mbt::actionTaken":"constructInstance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"400"},"name":"advanceTicks"},"mbt::actionTaken":"advanceTicks","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"400"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"constructInstance"},"mbt::actionTaken":"constructInstance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"300"},"name":"advanceTicks"},"mbt::actionTaken":"advanceTicks","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"300"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"call"},"mbt::actionTaken":"call","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"call"},"mbt::actionTaken":"call","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"999200"},"name":"advanceTicks"},"mbt::actionTaken":"advanceTicks","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"999200"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"call"},"mbt::actionTaken":"call","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"call"},"mbt::actionTaken":"call","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"100"},"name":"advanceTicks"},"mbt::actionTaken":"advanceTicks","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"100"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"call"},"mbt::actionTaken":"call","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"call"},"mbt::actionTaken":"call","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } diff --git a/formal/local-failure-smoke.itf.json b/formal/local-failure-smoke.itf.json index c923f725..8b9f1ee1 100644 --- a/formal/local-failure-smoke.itf.json +++ b/formal/local-failure-smoke.itf.json @@ -11,998 +11,14 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedRemote": false, - "failed": false, - "localBefore": { - "#bigint": "0" - }, - "localMiss": false, - "localValue": { - "#bigint": "0" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "pending": false, - "readFailed": false, - "receipts": [], - "remoteEnabled": true, - "remoteValue": { - "#bigint": "0" - }, - "scope": { - "#bigint": "2" - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "acceptedRemote": true, - "failed": false, - "localBefore": { - "#bigint": "0" - }, - "localMiss": true, - "localValue": { - "#bigint": "0" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "pending": true, - "readFailed": false, - "receipts": [], - "remoteEnabled": true, - "remoteValue": { - "#bigint": "0" - }, - "scope": { - "#bigint": "2" - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "acceptedRemote": true, - "failed": false, - "localBefore": { - "#bigint": "0" - }, - "localMiss": true, - "localValue": { - "#bigint": "1" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "pending": false, - "readFailed": false, - "receipts": [ - { - "after": { - "#bigint": "1" - }, - "before": { - "#bigint": "0" - }, - "call": { - "#bigint": "0" - }, - "readFailed": false, - "returned": { - "#bigint": "1" - }, - "writeFailed": false - } - ], - "remoteEnabled": true, - "remoteValue": { - "#bigint": "1" - }, - "scope": { - "#bigint": "2" - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "acceptedRemote": true, - "failed": false, - "localBefore": { - "#bigint": "0" - }, - "localMiss": true, - "localValue": { - "#bigint": "1" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "pending": false, - "readFailed": false, - "receipts": [ - { - "after": { - "#bigint": "1" - }, - "before": { - "#bigint": "0" - }, - "call": { - "#bigint": "0" - }, - "readFailed": false, - "returned": { - "#bigint": "1" - }, - "writeFailed": false - } - ], - "remoteEnabled": true, - "remoteValue": { - "#bigint": "2" - }, - "scope": { - "#bigint": "2" - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "localFault" - }, - "mbt::actionTaken": "localFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "acceptedRemote": true, - "failed": true, - "localBefore": { - "#bigint": "0" - }, - "localMiss": true, - "localValue": { - "#bigint": "1" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "pending": false, - "readFailed": false, - "receipts": [ - { - "after": { - "#bigint": "1" - }, - "before": { - "#bigint": "0" - }, - "call": { - "#bigint": "0" - }, - "readFailed": false, - "returned": { - "#bigint": "1" - }, - "writeFailed": false - } - ], - "remoteEnabled": true, - "remoteValue": { - "#bigint": "2" - }, - "scope": { - "#bigint": "2" - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "acceptedRemote": true, - "failed": true, - "localBefore": { - "#bigint": "1" - }, - "localMiss": false, - "localValue": { - "#bigint": "1" - }, - "memo": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "pending": false, - "readFailed": true, - "receipts": [ - { - "after": { - "#bigint": "1" - }, - "before": { - "#bigint": "0" - }, - "call": { - "#bigint": "0" - }, - "readFailed": false, - "returned": { - "#bigint": "1" - }, - "writeFailed": false - }, - { - "after": { - "#bigint": "1" - }, - "before": { - "#bigint": "1" - }, - "call": { - "#bigint": "1" - }, - "readFailed": true, - "returned": { - "#bigint": "2" - }, - "writeFailed": false - } - ], - "remoteEnabled": true, - "remoteValue": { - "#bigint": "2" - }, - "scope": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "localFault" - }, - "mbt::actionTaken": "localFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "acceptedRemote": true, - "failed": false, - "localBefore": { - "#bigint": "1" - }, - "localMiss": false, - "localValue": { - "#bigint": "1" - }, - "memo": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "pending": false, - "readFailed": true, - "receipts": [ - { - "after": { - "#bigint": "1" - }, - "before": { - "#bigint": "0" - }, - "call": { - "#bigint": "0" - }, - "readFailed": false, - "returned": { - "#bigint": "1" - }, - "writeFailed": false - }, - { - "after": { - "#bigint": "1" - }, - "before": { - "#bigint": "1" - }, - "call": { - "#bigint": "1" - }, - "readFailed": true, - "returned": { - "#bigint": "2" - }, - "writeFailed": false - } - ], - "remoteEnabled": true, - "remoteValue": { - "#bigint": "2" - }, - "scope": { - "#bigint": "0" - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "acceptedRemote": true, - "failed": false, - "localBefore": { - "#bigint": "1" - }, - "localMiss": true, - "localValue": { - "#bigint": "1" - }, - "memo": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "pending": false, - "readFailed": false, - "receipts": [ - { - "after": { - "#bigint": "1" - }, - "before": { - "#bigint": "0" - }, - "call": { - "#bigint": "0" - }, - "readFailed": false, - "returned": { - "#bigint": "1" - }, - "writeFailed": false - }, - { - "after": { - "#bigint": "1" - }, - "before": { - "#bigint": "1" - }, - "call": { - "#bigint": "1" - }, - "readFailed": true, - "returned": { - "#bigint": "2" - }, - "writeFailed": false - } - ], - "remoteEnabled": true, - "remoteValue": { - "#bigint": "2" - }, - "scope": { - "#bigint": "2" - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "acceptedRemote": true, - "failed": false, - "localBefore": { - "#bigint": "1" - }, - "localMiss": true, - "localValue": { - "#bigint": "1" - }, - "memo": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "pending": false, - "readFailed": false, - "receipts": [ - { - "after": { - "#bigint": "1" - }, - "before": { - "#bigint": "0" - }, - "call": { - "#bigint": "0" - }, - "readFailed": false, - "returned": { - "#bigint": "1" - }, - "writeFailed": false - }, - { - "after": { - "#bigint": "1" - }, - "before": { - "#bigint": "1" - }, - "call": { - "#bigint": "1" - }, - "readFailed": true, - "returned": { - "#bigint": "2" - }, - "writeFailed": false - } - ], - "remoteEnabled": true, - "remoteValue": { - "#bigint": "2" - }, - "scope": { - "#bigint": "0" - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"localFault"},"mbt::actionTaken":"localFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"localFault"},"mbt::actionTaken":"localFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} ] } diff --git a/formal/measure-go-semantics.mjs b/formal/measure-go-semantics.mjs index 08b987a3..bd86a7de 100644 --- a/formal/measure-go-semantics.mjs +++ b/formal/measure-go-semantics.mjs @@ -4,7 +4,13 @@ import { cpSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, writ import { resolve, relative } from 'node:path'; import { tmpdir } from 'node:os'; import { fileURLToPath } from 'node:url'; -import { fingerprintFiles, gateDetections, languages, partitionMutations, shardDirectory, shardFromArguments } from './mutation-reports.mjs'; +import { checkMutantAnchors, mutantsForPort, readMutantCatalog } from './execution.mjs'; +import { classifyCohort, fingerprintFiles, finishPartial, gateDetections, languages, noncompilingResult, portableCohort, selectMutations, selectionDirectory, selectionFromArguments } from './mutation-reports.mjs'; +import { settlementViolationPattern } from './replay/settlement.mjs'; + +// The whole output line that carries a settlement violation. Anchored per +// line so a multi-kilobyte expected/actual line costs a linear scan. +const violationLine = new RegExp(`^.*${settlementViolationPattern.source}.*$`, 'm'); const root = fileURLToPath(new URL('../', import.meta.url)); const hash = bytes => createHash('sha256').update(bytes).digest('hex'); @@ -86,8 +92,24 @@ export function evaluateGoTestEvents(lines, exitCode) { const output = outputs.get(name) ?? ''; if (!/\b[\w-]+_test\.go:\d+:/.test(output)) throw new Error(`failure has no assertion location: ${name}`); if (/^Test(?:Core|Effects|Feature|Behavior|LocalClock)Conformance(?:\/|$)/.test(name)) { + // A settlement violation is the coordinator's verdict on the driver's + // receipt, never comparison evidence about the cache. The violating line + // travels with the error so the runner records a mutant's cohort against + // it by name (mutation-reports.mjs classifyCohort) instead of crediting + // or discounting it. + const violation = violationLine.exec(output); + if (violation !== null) { + const error = new Error(`settlement violation under mutation is not comparison evidence: ${name}`); + error.settlementViolation = violation[0].trim(); + throw error; + } if (/expected:[\s\S]*actual:/.test(output)) assertionKinds[name] = 'observation-mismatch'; else if (causalPropertyAssertion(output)) assertionKinds[name] = 'causal-property'; + // The core replay asserts that a coalesced pair (or a request pair) + // returns one value before it records the pair's observation; those two + // assertions carry no expected/actual pair, so they are recognized by + // their exact text. + else if (/core_replay_test\.go:\d+: (?:pair returned different values|request pair differs)/.test(output)) assertionKinds[name] = 'pair-value-mismatch'; else throw new Error(`replay failure lacks observation or validated causal property evidence: ${name}`); } else { assertionKinds[name] = 'native-assertion'; @@ -100,31 +122,34 @@ export function evaluateGoTestEvents(lines, exitCode) { executedTests: leaves }; } -function union(generated, fixed) { - return { state: generated.failed + fixed.failed ? 'detected' : 'survived', passed: generated.passed + fixed.passed, - failed: generated.failed + fixed.failed, failingTests: [...generated.failingTests, ...fixed.failingTests], components: ['generated', 'fixed'] }; -} - // --shard=/ measures a contiguous slice of the catalog after the -// compile check and the full baselines; the default is the complete -// single-process measurement. -export function measureGoSemantics({ shard = { index: 1, count: 1 } } = {}) { +// compile check and the full baselines; --only=, measures the named +// mutants into a partial report that is never complete evidence; the default +// is the complete single-process measurement. +export function measureGoSemantics({ shard = { index: 1, count: 1 }, only } = {}) { const language = languages.go; const reportRoot = resolve(root, language.output); - const output = shardDirectory(reportRoot, shard); + const output = selectionDirectory(reportRoot, { shard, only }); const started = Date.now(); mkdirSync(reportRoot, { recursive: true }); - // Invalidate old completion before loading catalog, dependencies, or evidence. - // A shard also invalidates the merged report above it, which is evidence only - // while every shard beneath it is current. - const report = { schemaVersion: 1, complete: false, ...(shard.count > 1 ? { shard: { index: shard.index, count: shard.count } } : {}), startedAt: new Date(started).toISOString(), baselines: {}, mutations: [] }; + const report = { schemaVersion: 1, complete: false, ...(only ? { partial: true, only } : shard.count > 1 ? { shard: { index: shard.index, count: shard.count } } : {}), startedAt: new Date(started).toISOString(), baselines: {}, mutations: [] }; const save = () => { report.elapsedSeconds = Math.round((Date.now() - started) / 1000); writeFileSync(resolve(output, 'report.json'), JSON.stringify(report, null, 2) + '\n'); }; - if (output !== reportRoot) { - writeFileSync(resolve(reportRoot, 'report.json'), JSON.stringify({ schemaVersion: 1, complete: false, startedAt: report.startedAt }, null, 2) + '\n'); + if (only) { + // A partial run leaves the complete report and the shards alone. rmSync(output, { recursive: true, force: true }); mkdirSync(output, { recursive: true }); + save(); + } else { + // Invalidate old completion before loading catalog, dependencies, or evidence. + // A shard also invalidates the merged report above it, which is evidence only + // while every shard beneath it is current. + if (output !== reportRoot) { + writeFileSync(resolve(reportRoot, 'report.json'), JSON.stringify({ schemaVersion: 1, complete: false, startedAt: report.startedAt }, null, 2) + '\n'); + rmSync(output, { recursive: true, force: true }); + mkdirSync(output, { recursive: true }); + } + save(); rmSync(resolve(reportRoot, 'report.md'), { force: true }); } - save(); rmSync(resolve(reportRoot, 'report.md'), { force: true }); const workspace = mkdtempSync(resolve(tmpdir(), 'dialcache-go-semantic-')); const go = process.env.GO_BIN ?? 'go'; // Bounds a hung mutant, not a slow runner: hosted runners vary by about @@ -138,27 +163,16 @@ export function measureGoSemantics({ shard = { index: 1, count: 1 } } = {}) { // touch the user's implementation or trace corpus. for (const path of ['formal', 'go', 'test', 'src']) cpSync(resolve(root, path), resolve(workspace, path), { recursive: true }); const moduleDirectory = resolve(workspace, 'go'); - const catalogPath = resolve(workspace, 'formal/go-mutations.json'); - const catalog = json(catalogPath); - const typescript = json(resolve(workspace, 'formal/semantic-mutations.json')); - if (catalog.schemaVersion !== 1 || !Array.isArray(catalog.mutations) || catalog.mutations.length < 13) throw new Error('expected versioned Go fault catalog with all 13 TypeScript counterparts'); - const originals = new Map(), ids = new Set(); - for (const mutation of catalog.mutations) { - if (!/^M\d+$/.test(mutation.id) || ids.has(mutation.id)) throw new Error('invalid/duplicate mutation ID'); - ids.add(mutation.id); - const counterpart = typescript.mutations.find(item => item.id === mutation.typescriptMutation); - if (!counterpart || counterpart.case !== mutation.case) throw new Error(`invalid TypeScript counterpart ${mutation.id}`); - if (!Array.isArray(mutation.edits) || !mutation.edits.length || !mutation.requiredDetections?.every(name => ['ordinary', 'generated', 'fixed', 'portable'].includes(name))) throw new Error(`invalid mutation ${mutation.id}`); - for (const edit of mutation.edits) { - if (!/^go\/[\w-]+\.go$/.test(edit.path) || edit.path.endsWith('_test.go') || !edit.before || edit.before === edit.after) throw new Error(`invalid production edit ${mutation.id}`); - const original = readFileSync(resolve(workspace, edit.path), 'utf8'); - if (original.split(edit.before).length !== 2) throw new Error(`${mutation.id}: anchor must occur exactly once; review source drift in ${edit.path}`); - originals.set(edit.path, original); - } - } - for (const counterpart of typescript.mutations) if (!catalog.mutations.some(m => m.typescriptMutation === counterpart.id)) throw new Error(`missing TypeScript counterpart ${counterpart.id}`); - const selected = partitionMutations(catalog.mutations, shard); - if (shard.count > 1) report.shard = { index: shard.index, count: shard.count, mutationIds: selected.map(m => m.id) }; + const catalogPath = resolve(workspace, language.catalog); + // The catalog is validated and every anchor checked in the workspace copy by + // the one implementation the audit uses; the originals restore the + // workspace after each mutant. + const readWorkspace = path => readFileSync(resolve(workspace, path), 'utf8'); + const mutantCatalog = readMutantCatalog(readWorkspace); + const originals = checkMutantAnchors(mutantCatalog, readWorkspace); + const catalog = { mutations: mutantsForPort(mutantCatalog, language.port) }; + const selected = selectMutations(catalog.mutations, { shard, only }); + if (!only && shard.count > 1) report.shard = { index: shard.index, count: shard.count, mutationIds: selected.map(m => m.id) }; const ordinaryFiles = readdirSync(moduleDirectory).filter(file => file.endsWith('_test.go') && !infrastructureTestFile.test(file)).sort(); const ordinary = ordinaryFiles.flatMap(file => [...readFileSync(resolve(moduleDirectory, file), 'utf8').matchAll(/^func (Test\w+)\(t \*testing\.T\)/gm)].map(match => match[1])); if (!ordinary.length || new Set(ordinary).size !== ordinary.length) throw new Error('invalid ordinary Go test selection'); @@ -179,13 +193,15 @@ export function measureGoSemantics({ shard = { index: 1, count: 1 } } = {}) { report.inputs = fingerprintFiles(workspace, language.inputs); report.corpus = fingerprintFiles(root, ['.formal-traces/conformance', '.formal-traces/effects', '.formal-traces/features', '.formal-traces/regressions']); report.witnesses = fingerprintFiles(witnessDirectory, ['.']); - report.sourceSha256 = Object.fromEntries([...originals].map(([path, text]) => [path, hash(text)])); + report.sourceSha256 = Object.fromEntries([...originals].filter(([path]) => path.startsWith('go/')).map(([path, text]) => [path, hash(text)])); report.selections = cohorts; report.ordinaryFiles = ordinaryFiles; const compile = label => { const result = spawnSync(go, ['test', '-run', '^$', '-count=1', '.'], { cwd: moduleDirectory, env, encoding: 'utf8', timeout, maxBuffer: 32 * 1024 * 1024 }); writeFileSync(resolve(output, `${label}-compile.log`), (result.stdout ?? '') + (result.stderr ?? '')); - if (result.error || result.signal || result.status !== 0) throw new Error(`${label}: noncompiling mutant/baseline, not detection; see compile log`); + // A compiler that could not run is infrastructure; one that rejected the edit is a noncompiling mutant. + if (result.error || result.signal) throw new Error(`${label}: compile step failed to run: ${result.error ?? result.signal}`); + if (result.status !== 0) throw new Error(`${label}: noncompiling mutant/baseline, not detection; see compile log`); }; const run = (label, cohort, baseline) => { const result = spawnSync(go, ['test', '-json', '-count=1', '-timeout=480s', '-run', `^(${cohorts[cohort].join('|')})$`, '.'], { @@ -194,7 +210,17 @@ export function measureGoSemantics({ shard = { index: 1, count: 1 } } = {}) { writeFileSync(resolve(output, `${label}-${cohort}.jsonl`), result.stdout ?? ''); writeFileSync(resolve(output, `${label}-${cohort}.stderr.log`), result.stderr ?? ''); if (result.error || result.signal) throw new Error(`${label}/${cohort}: runner infrastructure failed: ${result.error ?? result.signal}`); - const parsed = evaluateGoTestEvents(result.stdout, result.status); + // A hung cohort is a measurement bound, not a crash the fault explains: it + // ends the shard, which is what the shard budget assumes. + if (/panic: test timed out/.test(result.stdout ?? '')) throw new Error(`${label}/${cohort}: go test hit its timeout; a hung cohort is not measured`); + const parsed = classifyCohort({ baseline, cohort }, () => evaluateGoTestEvents(result.stdout, result.status)); + if (parsed.state === 'crashed') { + // Name the panic or the failing test so the report stands on its own. + const cause = /panic: [^"\\]+|fatal error: [^"\\]+|--- FAIL: \S+/.exec(result.stdout ?? '')?.[0]; + if (cause) parsed.reason = `${parsed.reason} (${cause.trim()})`; + writeFileSync(resolve(output, `${label}-${cohort}.json`), JSON.stringify(parsed, null, 2) + '\n'); + return parsed; + } if (baseline && parsed.failed) throw new Error(`${cohort}: unmodified baseline must pass; see baseline event log`); const currentTop = new Set(parsed.executedTests.map(name => name.split('/')[0])); if (cohorts[cohort].some(name => !currentTop.has(name))) throw new Error(`${label}/${cohort}: missing selected test`); @@ -210,23 +236,31 @@ export function measureGoSemantics({ shard = { index: 1, count: 1 } } = {}) { report.baselines[cohort] = run('baseline', cohort, true); console.log(`baseline ${cohort}: ${report.baselines[cohort].passed} passing leaf tests`); save(); } - report.baselines.portable = union(report.baselines.generated, report.baselines.fixed); + report.baselines.portable = portableCohort(report.baselines.generated, report.baselines.fixed); for (const mutation of selected) { const editedPaths = new Set(); try { + // The replacement is a function so a `$` in the edit text is literal. for (const edit of mutation.edits) { const path = resolve(workspace, edit.path), current = readFileSync(path, 'utf8'); - if (current.split(edit.before).length !== 2) throw new Error(`${mutation.id}: overlapping edits`); - writeFileSync(path, current.replace(edit.before, edit.after)); editedPaths.add(edit.path); + if (current.split(edit.before).length !== 2) throw new Error(`${mutation.id}: overlapping edits in ${edit.path}`); + writeFileSync(path, current.replace(edit.before, () => edit.after)); editedPaths.add(edit.path); + } + try { compile(mutation.id); } catch (error) { + // Recorded, never measured: the gate names the mutant while the rest + // of the shard is still measured. + report.mutations.push(noncompilingResult(mutation, [...Object.keys(cohorts), 'portable'], error.message)); + console.log(`${mutation.id}: noncompiling`); save(); + continue; } - compile(mutation.id); const result = { id: mutation.id, case: mutation.case, description: mutation.description, cohorts: {} }; for (const cohort of Object.keys(cohorts)) result.cohorts[cohort] = run(mutation.id, cohort, false); - result.cohorts.portable = union(result.cohorts.generated, result.cohorts.fixed); + result.cohorts.portable = portableCohort(result.cohorts.generated, result.cohorts.fixed); report.mutations.push(result); console.log(`${mutation.id}: ${Object.entries(result.cohorts).map(([name, value]) => `${name}=${value.state}(${value.failed})`).join(', ')}`); save(); } finally { for (const path of editedPaths) writeFileSync(resolve(workspace, path), originals.get(path)); } } + if (only) return finishPartial(report, selected, { output: relative(root, output), save }); if (shard.count > 1) { // A shard gates its own slice and stays incomplete; the merge recomputes // the gate and the detection summary over the whole catalog. @@ -243,5 +277,5 @@ export function measureGoSemantics({ shard = { index: 1, count: 1 } } = {}) { finally { rmSync(workspace, { recursive: true, force: true }); } } if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { - try { measureGoSemantics({ shard: shardFromArguments(process.argv.slice(2)) }); } catch (error) { console.error(error); process.exitCode = 1; } + try { measureGoSemantics(selectionFromArguments(process.argv.slice(2))); } catch (error) { console.error(error); process.exitCode = 1; } } diff --git a/formal/measure-semantics.mjs b/formal/measure-semantics.mjs index 6efd9065..e9f12e6a 100644 --- a/formal/measure-semantics.mjs +++ b/formal/measure-semantics.mjs @@ -6,32 +6,41 @@ import { tmpdir } from 'node:os'; import { fileURLToPath } from 'node:url'; import { checkSemanticCoverage } from './check-semantic-coverage.mjs'; import { evaluateSemanticTestReport } from './semantic-reporter.mjs'; -import { fingerprintFiles, gateDetections, languages, partitionMutations, shardDirectory, shardFromArguments } from './mutation-reports.mjs'; +import { checkMutantAnchors, mutantsForPort, readMutantCatalog } from './execution.mjs'; +import { classifyCohort, fingerprintFiles, finishPartial, gateDetections, languages, noncompilingResult, portableCohort, selectMutations, selectionDirectory, selectionFromArguments } from './mutation-reports.mjs'; const root = fileURLToPath(new URL('../', import.meta.url)); const language = languages.ts; // --shard=/ measures a contiguous slice of the catalog after the -// full baselines; the default is the complete single-process measurement. -const shard = shardFromArguments(process.argv.slice(2)); +// full baselines; --only=, measures the named mutants into a partial +// report that is never complete evidence; the default is the complete +// single-process measurement. +const { shard, only } = selectionFromArguments(process.argv.slice(2)); const reportRoot = resolve(root, language.output); -const output = shardDirectory(reportRoot, shard); +const output = selectionDirectory(reportRoot, { shard, only }); const read = path => readFileSync(resolve(root, path), 'utf8'); const started = Date.now(); -// Invalidate any previous completed report even if preflight fails before an -// isolated workspace can be created (for example, a stale mutation anchor). -// A shard also invalidates the merged report above it, which is evidence only -// while every shard beneath it is current. mkdirSync(reportRoot, { recursive: true }); -writeFileSync(resolve(reportRoot, 'report.json'), JSON.stringify({ schemaVersion: 1, complete: false, startedAt: new Date(started).toISOString() }) + '\n'); -rmSync(resolve(reportRoot, 'report.md'), { force: true }); -if (output !== reportRoot) { +if (only) { + // A partial run leaves the complete report and the shards alone. rmSync(output, { recursive: true, force: true }); mkdirSync(output, { recursive: true }); - writeFileSync(resolve(output, 'report.json'), JSON.stringify({ schemaVersion: 1, complete: false, shard: { index: shard.index, count: shard.count }, startedAt: new Date(started).toISOString() }) + '\n'); +} else { + // Invalidate any previous completed report even if preflight fails before an + // isolated workspace can be created (for example, a stale mutation anchor). + // A shard also invalidates the merged report above it, which is evidence only + // while every shard beneath it is current. + writeFileSync(resolve(reportRoot, 'report.json'), JSON.stringify({ schemaVersion: 1, complete: false, startedAt: new Date(started).toISOString() }) + '\n'); + rmSync(resolve(reportRoot, 'report.md'), { force: true }); + if (output !== reportRoot) { + rmSync(output, { recursive: true, force: true }); + mkdirSync(output, { recursive: true }); + writeFileSync(resolve(output, 'report.json'), JSON.stringify({ schemaVersion: 1, complete: false, shard: { index: shard.index, count: shard.count }, startedAt: new Date(started).toISOString() }) + '\n'); + } } const declaredCoverage = checkSemanticCoverage(); -const catalog = JSON.parse(read(language.catalog)); -if (catalog.schemaVersion !== 1 || catalog.mutations.length === 0) throw new Error('Expected semantic mutation catalog'); +const mutantCatalog = readMutantCatalog(); +const catalog = { mutations: mutantsForPort(mutantCatalog, language.port) }; const formalTests = ['test/formal-conformance.test.ts', 'test/formal-effects.test.ts', 'test/formal-features.test.ts', 'test/formal-local-clock.test.ts', 'test/formal-protocol-vectors.test.ts']; const portableTests = ['test/formal-behavior.test.ts', 'test/formal-protocol-vectors.test.ts']; const generatedPattern = 'replays |reaches every action|covers every action|reaches fractional expiry and shared instance grid|formal protocol conformance vectors (?!keeps |requires )'; @@ -43,41 +52,27 @@ const cohorts = { generated: [...formalTests, `--testNamePattern=${generatedPattern}`], fixed: [...portableTests, `--testNamePattern=${portablePattern}`], }; -const comparisons = ['ordinary', 'generated', 'portable']; // Generated and fixed cohorts select disjoint protocol rows. Their union // measures the full portable suite without replaying any history or vector // twice. Keep both component reports, including every failing assertion. -function portableResult({ generated, fixed }) { - return { state: generated.failed + fixed.failed > 0 ? 'detected' : 'survived', - passed: generated.passed + fixed.passed, failed: generated.failed + fixed.failed, - failingTests: [...generated.failingTests, ...fixed.failingTests], components: ['generated', 'fixed'] }; -} -const sourceText = new Map(); -const ids = new Set(); -// Every shard validates the whole catalog: a stale anchor anywhere fails each -// shard the same way it fails the single run. -for (const mutation of catalog.mutations) { - if (!/^M\d+$/.test(mutation.id) || ids.has(mutation.id)) throw new Error('Invalid/duplicate mutation ID'); - ids.add(mutation.id); - if (!/^src\/[\w/-]+\.ts$/.test(mutation.path) || mutation.before === mutation.after || !mutation.before) throw new Error(`Invalid edit: ${mutation.id}`); - const original = read(mutation.path); - if (original.split(mutation.before).length !== 2) throw new Error(`${mutation.id}: mutation anchor must match exactly once; review source drift`); - if (!mutation.requiredDetections.every(c => comparisons.includes(c))) throw new Error(`Unknown cohort: ${mutation.id}`); - sourceText.set(mutation.path, original); -} -const selected = partitionMutations(catalog.mutations, shard); +// Every shard anchors the whole catalog in the port text before measuring, so +// a stale anchor anywhere fails each shard the same way it fails the single +// run; the originals restore the workspace after each mutant. +const sourceText = checkMutantAnchors(mutantCatalog); +const selected = selectMutations(catalog.mutations, { shard, only }); // A hard CI cancellation may bypass finally. Keep temporary dependency links // outside the artifact tree even when that happens. const workspace = mkdtempSync(resolve(tmpdir(), 'dialcache-semantic-')); const report = { schemaVersion: 1, complete: false, - ...(shard.count > 1 ? { shard: { index: shard.index, count: shard.count, mutationIds: selected.map(m => m.id) } } : {}), + ...(only ? { partial: true, only } : shard.count > 1 ? { shard: { index: shard.index, count: shard.count, mutationIds: selected.map(m => m.id) } } : {}), startedAt: new Date(started).toISOString(), revision: spawnSync('git', ['rev-parse', 'HEAD'], { cwd: root, encoding: 'utf8' }).stdout.trim(), node: process.version, catalogSha256: createHash('sha256').update(read(language.catalog)).digest('hex'), - sourceSha256: Object.fromEntries([...sourceText].map(([path, text]) => [path, createHash('sha256').update(text).digest('hex')])), + // The anchors span both ports; this report fingerprints only the files this port's edits touch. + sourceSha256: Object.fromEntries([...sourceText].filter(([path]) => path.startsWith('src/')).map(([path, text]) => [path, createHash('sha256').update(text).digest('hex')])), declaredCoverage, baselines: {}, mutations: [], }; @@ -105,10 +100,13 @@ function run(label, cohort, baseline) { }); writeFileSync(resolve(output, `${label}-${cohort}.log`), (result.stdout ?? '') + (result.stderr ?? '')); if (result.error || result.signal) throw new Error(`${label}/${cohort}: runner failed: ${result.error ?? result.signal}`); - let data, execution; - try { data = JSON.parse(readFileSync(json, 'utf8')); execution = JSON.parse(readFileSync(meta, 'utf8')); } catch { throw new Error(`${label}/${cohort}: missing test report`); } - const evaluated = evaluateSemanticTestReport(data, execution, result.status, `${label}/${cohort}`); + const evaluated = classifyCohort({ baseline, cohort }, () => { + let data, execution; + try { data = JSON.parse(readFileSync(json, 'utf8')); execution = JSON.parse(readFileSync(meta, 'utf8')); } catch { throw new Error(`${label}/${cohort}: missing test report`); } + return evaluateSemanticTestReport(data, execution, result.status, `${label}/${cohort}`); + }); const { state, passed } = evaluated; + if (state === 'crashed') return evaluated; if (baseline && state !== 'survived') throw new Error(`${cohort}: unmodified baseline must pass`); if (!baseline && state === 'survived' && passed !== report.baselines[cohort].passed) throw new Error(`${label}/${cohort}: incomplete surviving run`); return evaluated; @@ -134,7 +132,7 @@ try { console.log(`baseline ${cohort}: ${report.baselines[cohort].passed} passed`); save(); } - report.baselines.portable = portableResult(report.baselines); + report.baselines.portable = portableCohort(report.baselines.generated, report.baselines.fixed); // The shared language-neutral evaluator produces the baseline witness // evidence over the unmodified corpus; the TypeScript suite only checks the gate. const evaluated = spawnSync(process.execPath, [resolve(root, 'formal/witnesses.mjs'), 'evaluate', '--profile', 'all', '--out', resolve(output, 'witnesses')], @@ -148,20 +146,40 @@ try { report.reachedWitnesses[profile] = { required: required.length, reached: required.filter(w => evidence.seen.includes(w)).length, traces: evidence.traces }; } for (const mutation of selected) { - const path = resolve(workspace, mutation.path), original = sourceText.get(mutation.path); + const touched = new Set(); try { - writeFileSync(path, original.replace(mutation.before, mutation.after)); + // Edits apply in order, each against the text the previous one left, and + // each anchor must still match exactly once there. The replacement is a + // function so a `$` in the edit text is literal. + for (const edit of mutation.edits) { + const path = resolve(workspace, edit.path), current = readFileSync(path, 'utf8'); + if (current.split(edit.before).length !== 2) throw new Error(`${mutation.id}: overlapping edits in ${edit.path}`); + writeFileSync(path, current.replace(edit.before, () => edit.after)); + touched.add(edit.path); + } const compile = spawnSync(process.execPath, [resolve(root, 'node_modules/typescript/bin/tsc'), '--noEmit'], { cwd: workspace, encoding: 'utf8', timeout: 60_000 }); - if (compile.status !== 0 || compile.error) throw new Error(`${mutation.id}: invalid/noncompiling mutant\n${compile.stdout ?? ''}${compile.stderr ?? ''}`); + // A compiler that could not run is infrastructure; a compiler that rejected the edit is a noncompiling mutant. + if (compile.error || compile.signal) throw new Error(`${mutation.id}: compile step failed to run: ${compile.error ?? compile.signal}`); + if (compile.status !== 0) { + // Recorded, never measured: the gate names the mutant while the rest of + // the shard is still measured. + writeFileSync(resolve(output, `${mutation.id}-compile.log`), (compile.stdout ?? '') + (compile.stderr ?? '')); + report.mutations.push(noncompilingResult(mutation, [...Object.keys(cohorts), 'portable'], `${mutation.id}: noncompiling mutant; see ${mutation.id}-compile.log`)); + console.log(`${mutation.id}: noncompiling`); + save(); + continue; + } const result = { id: mutation.id, case: mutation.case, description: mutation.description, cohorts: {} }; for (const cohort of Object.keys(cohorts)) result.cohorts[cohort] = run(mutation.id, cohort, false); - result.cohorts.portable = portableResult(result.cohorts); + result.cohorts.portable = portableCohort(result.cohorts.generated, result.cohorts.fixed); report.mutations.push(result); console.log(`${mutation.id}: ${Object.entries(result.cohorts).map(([name, run]) => `${name}=${run.state}`).join(', ')}`); save(); - } finally { writeFileSync(path, original); } + } finally { for (const path of touched) writeFileSync(resolve(workspace, path), sourceText.get(path)); } } - if (shard.count > 1) { + if (only) { + finishPartial(report, selected, { output: relative(root, output), save }); + } else if (shard.count > 1) { // A shard gates its own slice and stays incomplete; the merge recomputes the // gate and the detection summary over the whole catalog. gateDetections(language, report, selected, { directory: root, summarize: false }); diff --git a/formal/merge-mutation-reports.mjs b/formal/merge-mutation-reports.mjs index 1085028b..39a29344 100644 --- a/formal/merge-mutation-reports.mjs +++ b/formal/merge-mutation-reports.mjs @@ -1,6 +1,7 @@ import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'node:fs'; import { resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; +import { mutantsForPort, readMutantCatalog } from './execution.mjs'; import { fingerprintFiles, gateDetections, languages, sha256 } from './mutation-reports.mjs'; const root = fileURLToPath(new URL('../', import.meta.url)); @@ -123,8 +124,10 @@ export function mergeMutationReports(name, { directory = root, shardsDirectory, try { const catalogText = readFileSync(resolve(directory, language.catalog)); const catalog = JSON.parse(catalogText); + // The gate reads this port's section of each catalog entry through the one catalog reader. + const entries = mutantsForPort(readMutantCatalog(path => readFileSync(resolve(directory, path), 'utf8')), language.port); merged = mergeShardReports(language, readShardReports(shards), { catalog, catalogSha256: sha256(catalogText), inputs: fingerprintFiles(directory, language.inputs) }); - gateDetections(language, merged, catalog.mutations, { directory }); + gateDetections(language, merged, entries, { directory }); } catch (error) { const failed = merged ?? { schemaVersion: 1, complete: false, startedAt }; failed.complete = false; @@ -133,7 +136,7 @@ export function mergeMutationReports(name, { directory = root, shardsDirectory, throw error; } save(merged); - writeFileSync(resolve(output, 'report.md'), language.markdown(merged)); + writeFileSync(resolve(output, 'report.md'), language.markdown(merged, directory)); return merged; } diff --git a/formal/mutation-reports.mjs b/formal/mutation-reports.mjs index 2c15ee9d..e28eaf32 100644 --- a/formal/mutation-reports.mjs +++ b/formal/mutation-reports.mjs @@ -2,16 +2,18 @@ import { createHash } from 'node:crypto'; import { readFileSync, readdirSync } from 'node:fs'; import { resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; +import { challengesByMutant, mutantCatalogPath, mutantIdPattern, mutantPorts } from './execution.mjs'; // Shared by measure-semantics.mjs, measure-go-semantics.mjs and -// merge-mutation-reports.mjs: the shard partition, the input fingerprint, the -// detection summary and the required-detection gate. One implementation keeps -// a merged report exactly as strict as a single-process one. +// merge-mutation-reports.mjs: the catalog selection, the input fingerprint, +// the detection summary and the required-detection gate. One implementation +// keeps a merged report exactly as strict as a single-process one. const root = fileURLToPath(new URL('../', import.meta.url)); export const sha256 = bytes => createHash('sha256').update(bytes).digest('hex'); // --shard=/ is 1-based; the default 1/1 is the complete -// single-process measurement. +// single-process measurement. The differential (formal/differential.mjs) and +// the runner's DIFFERENTIAL_SHARD read the same form with this parser. export function parseShard(value) { if (value === undefined) return { index: 1, count: 1 }; const match = /^([1-9]\d*)\/([1-9]\d*)$/.exec(value); @@ -19,13 +21,27 @@ export function parseShard(value) { return { index: Number(match[1]), count: Number(match[2]) }; } -export function shardFromArguments(argv) { - let value; +// --only=, names distinct catalog mutants for a partial measurement. +export function parseOnly(value) { + if (value === undefined) return undefined; + const ids = value.split(','); + if (ids.some(id => !mutantIdPattern.test(id)) || new Set(ids).size !== ids.length) throw new Error(`Expected , naming distinct mutant ids; got ${JSON.stringify(value)}`); + return ids; +} + +// A measurement selects the whole catalog, one shard of it, or the named +// mutants. A shard is evidence once every shard is merged; a partial run of +// named mutants is a local iteration aid and never complete evidence, so the +// two exclude each other. +export function selectionFromArguments(argv) { + let shard, only; for (const argument of argv) { - if (!argument.startsWith('--shard=') || value !== undefined) throw new Error(`Usage: --shard=/; unexpected argument ${argument}`); - value = argument.slice('--shard='.length); + if (argument.startsWith('--shard=') && shard === undefined) shard = argument.slice('--shard='.length); + else if (argument.startsWith('--only=') && only === undefined) only = argument.slice('--only='.length); + else throw new Error(`Usage: --shard=/ or --only=,; unexpected argument ${argument}`); } - return parseShard(value); + if (shard !== undefined && only !== undefined) throw new Error('--shard and --only exclude each other: a partial run is never merged'); + return { shard: parseShard(shard), only: parseOnly(only) }; } // A contiguous slice of the catalog in catalog order; the first @@ -37,9 +53,19 @@ export function partitionMutations(mutations, { index, count }) { return mutations.slice(start, start + base + (index <= extra ? 1 : 0)); } -// Shards from separate jobs land in one tree without colliding; the single -// run keeps today's location. -export function shardDirectory(output, shard) { +// The catalog entries one measurement runs, in catalog order. +export function selectMutations(mutations, { shard, only }) { + if (only === undefined) return partitionMutations(mutations, shard); + const unknown = only.filter(id => !mutations.some(mutation => mutation.id === id)); + if (unknown.length) throw new Error(`Unknown mutation ids: ${unknown.join(', ')}`); + return mutations.filter(mutation => only.includes(mutation.id)); +} + +// Shards from separate jobs land in one tree without colliding, a partial run +// lands beside them without touching the complete report, and the single run +// keeps today's location. +export function selectionDirectory(output, { shard, only }) { + if (only !== undefined) return resolve(output, 'partial'); return shard.count === 1 ? output : resolve(output, 'shards', `${shard.index}-of-${shard.count}`); } @@ -70,27 +96,102 @@ export function requiredDetectionRegressions(entries, results) { }); } +// A cohort the measurement could not run (a noncompiling mutant, or the port's +// own suite crashing under it) is outside the measured total and listed apart +// from survivors; it is never a detection. +const unmeasured = (mutations, cohort) => mutations.filter(m => m.cohorts[cohort].state === 'crashed').map(m => m.id); export function typescriptDetection(mutations, cases) { - const comparisons = ['ordinary', 'generated', 'portable']; + const comparisons = mutantPorts.typescript.cohorts; const score = selected => Object.fromEntries(comparisons.map(cohort => { - const detected = selected.filter(m => m.cohorts[cohort].state === 'detected'); - const ordinary = selected.filter(m => m.cohorts.ordinary.state === 'detected'); - return [cohort, { detected: detected.length, total: selected.length, + const measured = selected.filter(m => m.cohorts[cohort].state !== 'crashed'); + const detected = measured.filter(m => m.cohorts[cohort].state === 'detected'); + const ordinary = measured.filter(m => m.cohorts.ordinary.state === 'detected'); + const crashed = unmeasured(selected, cohort); + return [cohort, { detected: detected.length, total: measured.length, ordinaryParity: { detected: ordinary.filter(m => m.cohorts[cohort].state === 'detected').length, total: ordinary.length }, - survivors: selected.filter(m => m.cohorts[cohort].state === 'survived').map(m => m.id) }]; + survivors: measured.filter(m => m.cohorts[cohort].state === 'survived').map(m => m.id), ...(crashed.length ? { crashed } : {}) }]; })); const protocol = m => cases.find(c => c.id === m.case).vectors.length > 0; return { all: score(mutations), behavioral: score(mutations.filter(m => !protocol(m))), protocol: score(mutations.filter(protocol)) }; } export function goDetection(mutations) { - return Object.fromEntries(['ordinary', 'generated', 'fixed', 'portable'].map(cohort => [cohort, { - detected: mutations.filter(m => m.cohorts[cohort].state === 'detected').length, total: mutations.length, - survivors: mutations.filter(m => m.cohorts[cohort].state === 'survived').map(m => m.id), - }])); + return Object.fromEntries(mutantPorts.go.cohorts.map(cohort => { + const measured = mutations.filter(m => m.cohorts[cohort].state !== 'crashed'); + const crashed = unmeasured(mutations, cohort); + return [cohort, { + detected: measured.filter(m => m.cohorts[cohort].state === 'detected').length, total: measured.length, + survivors: measured.filter(m => m.cohorts[cohort].state === 'survived').map(m => m.id), + ...(crashed.length ? { crashed } : {}), + }]; + })); +} + +// The record of a cohort the measurement could not run for a mutant. +export const crashedCohort = reason => ({ state: 'crashed', reason, passed: 0, failed: 0, failingTests: [] }); + +// Portable evidence is the generated and fixed replay cohorts together. A +// component the measurement could not run leaves portable unmeasured as well, +// as a noncompiling mutant does: the other component alone is not portable +// evidence, and a crashed cohort is never a detection. +export function portableCohort(generated, fixed) { + for (const [name, component] of Object.entries({ generated, fixed })) { + if (component.state === 'crashed') return crashedCohort(`${name}: ${component.reason}`); + } + return { state: generated.failed + fixed.failed > 0 ? 'detected' : 'survived', + passed: generated.passed + fixed.passed, failed: generated.failed + fixed.failed, + failingTests: [...generated.failingTests, ...fixed.failingTests], components: ['generated', 'fixed'] }; +} + +// One rule for both ports: the port's own unit suite is informational for a +// mutant, so when its evaluation throws (a synctest bubble panicking on a +// goroutine the fault leaves blocked, an unhandled rejection with no failed +// assertion) the cohort is recorded as crashed and the run continues. A +// settlement violation under a mutant is the driver failing its own contract, +// never comparison evidence; it is recorded as a crashed cohort naming the +// first violating history and rule, so the gate fails by mutant id while the +// rest of the shard is measured. The baseline and every other replay-cohort +// failure keep the strict rule: their throw fails the measurement. +export function classifyCohort({ baseline, cohort }, evaluate) { + try { return evaluate(); } catch (error) { + if (baseline) { + // A baseline that violates settlement fails the measurement; name the rule so the log alone says why. + if (error.settlementViolation !== undefined) error.message += ` (settlement violation: ${error.settlementViolation})`; + throw error; + } + if (error.settlementViolation !== undefined) return crashedCohort(`settlement violation: ${error.settlementViolation}`); + if (cohort !== 'ordinary') throw error; + return crashedCohort(error.message); + } +} + +// A mutant that does not compile is recorded with every cohort crashed, so +// the gate names the mutant and the rest of the shard is still measured. +export function noncompilingResult(mutation, cohorts, reason) { + return { id: mutation.id, case: mutation.case, description: mutation.description, cohorts: Object.fromEntries(cohorts.map(cohort => [cohort, crashedCohort(reason)])) }; +} + +// A partial (--only) run reports its lost required detections and stops: it +// is not gated and never completes, so the complete report is untouched. +export function finishPartial(report, selected, { output, save }) { + const lost = requiredDetectionRegressions(selected, report.mutations); + save(); + console.log(lost.length ? `Lost required detections (a partial run is not gated): ${lost.join(', ')}` : 'Every required detection of the selected mutants held'); + console.log(`Partial measurement of ${selected.map(m => m.id).join(', ')}: ${output}/report.json; measure the complete catalog for evidence`); + // An authoring loop should notice a lost detection without reading the log. + if (lost.length) process.exitCode = 1; + return report; +} + +// The model challenges each mutant is the native twin of, from the execution +// manifest of the checkout the report describes. +function challengesColumn(directory) { + const index = challengesByMutant(JSON.parse(readFileSync(resolve(directory, 'formal/execution.json'), 'utf8'))); + return id => (index.get(id) ?? []).join(', ') || 'none'; } -function typescriptMarkdown(report) { +function typescriptMarkdown(report, directory = root) { + const challenges = challengesColumn(directory); return ['# Semantic coverage measurement', '', `Completed in ${report.elapsedSeconds}s. Inventory and mutation counts describe named cases, not universal semantic completeness.`, '', ...shardsMarkdown(report), @@ -98,17 +199,18 @@ function typescriptMarkdown(report) { '| --- | ---: | ---: | ---: |', ...['cases', 'behavioral', 'protocol'].map(scope => { const c = report.declaredCoverage[scope]; return `| ${scope} | ${c.total} | ${c.portable} | ${c.generated} |`; }), '', 'Protocol references include invalidation vectors exercised separately by integration CI. Model references are a conservative named-property subset, not total model coverage.', '', - '| Mutation | Case | Ordinary | Generated | Full portable |', '| --- | --- | --- | --- | --- |', - ...report.mutations.map(m => `| ${m.id} | ${m.case} | ${m.cohorts.ordinary.state} | ${m.cohorts.generated.state} | ${m.cohorts.portable.state} |`), '', - 'Full JSON includes exact input/corpus hashes, cohort counts, reached witnesses, behavioral/protocol scores, and failing test names. Adjacent JSON/log files retain assertion diagnostics and trace paths.', ''].join('\n'); + '| Mutation | Case | Challenges | Ordinary | Generated | Full portable |', '| --- | --- | --- | --- | --- | --- |', + ...report.mutations.map(m => `| ${m.id} | ${m.case} | ${challenges(m.id)} | ${m.cohorts.ordinary.state} | ${m.cohorts.generated.state} | ${m.cohorts.portable.state} |`), '', + 'Challenges are the model property challenges whose fault the mutant injects natively (nativeMutants in formal/execution.json). Full JSON includes exact input/corpus hashes, cohort counts, reached witnesses, behavioral/protocol scores, and failing test names. Adjacent JSON/log files retain assertion diagnostics and trace paths.', ''].join('\n'); } -function goMarkdown(report) { +function goMarkdown(report, directory = root) { + const challenges = challengesColumn(directory); return ['# Go semantic mutation measurement', '', `Completed in ${report.elapsedSeconds}s. Counts measure this named fault catalog and exact corpus, not universal equivalence.`, '', ...shardsMarkdown(report), - '| Mutation | Contract case | Ordinary | Quint generated | Fixed supplement | Full portable |', '| --- | --- | --- | --- | --- | --- |', - ...report.mutations.map(m => `| ${m.id} | ${m.case} | ${m.cohorts.ordinary.state} | ${m.cohorts.generated.state} | ${m.cohorts.fixed.state} | ${m.cohorts.portable.state} |`), '', - 'Full JSON records snapshot/corpus/witness fingerprints, selected tests, actual passing/failing leaf counts, and assertion diagnostics. Compilation errors, crashes, timeouts, missing witnesses, and skipped executions cannot count as detections.', ''].join('\n'); + '| Mutation | Contract case | Challenges | Ordinary | Quint generated | Fixed supplement | Full portable |', '| --- | --- | --- | --- | --- | --- | --- |', + ...report.mutations.map(m => `| ${m.id} | ${m.case} | ${challenges(m.id)} | ${m.cohorts.ordinary.state} | ${m.cohorts.generated.state} | ${m.cohorts.fixed.state} | ${m.cohorts.portable.state} |`), '', + 'Challenges are the model property challenges whose fault the mutant injects natively (nativeMutants in formal/execution.json). Full JSON records snapshot/corpus/witness fingerprints, selected tests, actual passing/failing leaf counts, and assertion diagnostics. Compilation errors, crashes, timeouts, missing witnesses, and skipped executions cannot count as detections.', ''].join('\n'); } // Only a merged report carries `shards`; the single run's markdown is unchanged. @@ -122,10 +224,10 @@ function shardsMarkdown(report) { // report records the regression list (the Go report does; the TypeScript // report only fails on it). export const languages = { - ts: { name: 'TypeScript', output: '.formal-traces/semantic', catalog: 'formal/semantic-mutations.json', inputs: ['src', 'test', 'formal'], + ts: { name: 'TypeScript', port: 'typescript', output: '.formal-traces/semantic', catalog: mutantCatalogPath, inputs: ['src', 'test', 'formal'], detection: (mutations, directory) => typescriptDetection(mutations, JSON.parse(readFileSync(resolve(directory, 'formal/semantic-cases.json'), 'utf8')).cases), markdown: typescriptMarkdown, recordsRegressions: false }, - go: { name: 'Go', output: '.formal-traces/go-semantic', catalog: 'formal/go-mutations.json', inputs: ['formal', 'go', 'test', 'src'], + go: { name: 'Go', port: 'go', output: '.formal-traces/go-semantic', catalog: mutantCatalogPath, inputs: ['formal', 'go', 'test', 'src'], detection: mutations => goDetection(mutations), markdown: goMarkdown, recordsRegressions: true }, }; diff --git a/formal/mutations.json b/formal/mutations.json new file mode 100644 index 00000000..c8abf6b7 --- /dev/null +++ b/formal/mutations.json @@ -0,0 +1,1817 @@ +{ + "schemaVersion": 1, + "mutations": [ + { + "id": "M01", + "case": "C45.maximum-age-exclusive", + "description": "Accept a retained candidate at the exact maximum age after decoding", + "rationale": "TypeScript src/internal/redis-cache.ts RedisCache.recoverRetainedCandidate and Go go/engine.go recover make the post-decode age check inclusive, so a retained candidate whose re-sampled age equals the configured maximum is served instead of rejected. The ports check the ceiling at initial-read retention, before decode and after decode; flipping an earlier site alone is masked by the post-decode recheck because ages only grow, so this is the one observable single-site inclusive edit. Already detected by recovery/maximumAgeAfterDecodePreservesSourceTest and witness recovery:exact-maximum-after-decode-rejects in both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "servingAge.ageMs >= maximumAgeMs", + "after": "servingAge.ageMs > maximumAgeMs" + } + ], + "requiredDetections": [ + "ordinary", + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "age, valid = x.frameAge(frame, \"remote\")\n\tif !valid || age >= maxAge {", + "after": "age, valid = x.frameAge(frame, \"remote\")\n\tif !valid || age > maxAge {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M02", + "case": "C45.recheck-after-decode", + "description": "Reuse the pre-decode age instead of observing age after asynchronous decoding", + "rationale": "TypeScript src/internal/redis-cache.ts RedisCache.recoverRetainedCandidate reuses the pre-decode age as the serving age, and Go go/engine.go recover keeps the pre-decode age and validity instead of re-sampling after decoding. A retained candidate that crosses the maximum age while it is being decoded is therefore served.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "const servingAge = this.frameAge(key, frame, CacheLayer.REMOTE);", + "after": "const servingAge = initialAge;" + } + ], + "requiredDetections": [ + "ordinary", + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "age, valid = x.frameAge(frame, \"remote\")", + "after": "// Fault injection: retain the pre-decode age and validity." + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M03", + "case": "C25.late-source-rejected", + "description": "Accept an externally settled result after its elapsed deadline when the timer has not run", + "rationale": "TypeScript src/internal/deadline.ts withMonotonicDeadline stops checking elapsed time when the operation settles, and Go go/deadline.go awaitDeadline accepts every result that arrives on its done channel. A source that settles after its deadline but before the timer fires is accepted instead of timed out; timer-delivered timeouts are unchanged.", + "typescript": { + "edits": [ + { + "path": "src/internal/deadline.ts", + "before": "if (elapsedMs() >= timeoutMs) {", + "after": "if (false) {" + } + ], + "requiredDetections": [ + "ordinary", + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/deadline.go", + "before": "case <-p.done:\n\t\t\ttimer.Stop()\n\t\t\tif elapsedNow(clock)-started < duration {", + "after": "case <-p.done:\n\t\t\ttimer.Stop()\n\t\t\tif true {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M04", + "case": "C34.second-fence", + "description": "Skip the tracked fence recheck after serialization", + "rationale": "TypeScript src/internal/redis-cache.ts RedisCache.putWithLayer and Go go/engine.go putRemote skip the fence recheck that runs after serialization, so a frame stamped at or before a watermark observed during the dump is written anyway. The shadow fill reaches the same line through putForShadow in TypeScript and putRemote in Go, so a fenced dark fill writes and reports filled instead of fill_fenced. shadow/fenceRejudgedAtDumpReleaseAfterRollbackTest, whose dump is released after a wall rollback below the fence, is the expected evidence in both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "if (createdAtMs <= observedWatermarkMs) {", + "after": "if (false) {" + } + ], + "requiredDetections": [ + "ordinary", + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "if fence != nil && uint64(stamp) <= *fence {", + "after": "if false && fence != nil && uint64(stamp) <= *fence {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M05", + "case": "C03.detached-bypass", + "description": "Treat a detached context whose outer scope closed as still enabled", + "rationale": "TypeScript src/context.ts DialCacheContext.isEnabled and Go go/cache.go IsEnabled report an enabled scope without checking that its owning holder is still live. A detached continuation whose outer enable call already returned is therefore treated as still inside the request and keeps caching.", + "typescript": { + "edits": [ + { + "path": "src/context.ts", + "before": "return store?.enabled === true && store.holder?.closed === false;", + "after": "return store?.enabled === true;" + } + ], + "requiredDetections": [ + "ordinary", + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/cache.go", + "before": "return state.enabled && state.owner != nil && state.owner.live", + "after": "return state.enabled" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M06", + "case": "W04.strict-fence", + "description": "Accept a tracked frame timestamp equal to its watermark", + "rationale": "TypeScript src/internal/redis-payload.ts decodeTrackedFrame and Go go/protocol.go DecodeFrame make the tracked fence comparison strict, so a frame whose timestamp equals the observed watermark decodes as a hit instead of being fenced. Already detected by the equal-timestamp row of the generated tracked decode vectors in both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-payload.ts", + "before": "observedWatermarkMs !== undefined && createdAtMs <= observedWatermarkMs", + "after": "observedWatermarkMs !== undefined && createdAtMs < observedWatermarkMs" + } + ], + "requiredDetections": [ + "ordinary", + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/protocol.go", + "before": "if tracked && fence != nil && stamp <= *fence {", + "after": "if tracked && fence != nil && stamp < *fence {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M07", + "case": "C51.changed-confirmation", + "description": "Confirm an unequal shadow result even when C1 contains different payload bytes", + "rationale": "TypeScript src/dialcache.ts DialCache.runShadowValidation and Go go/shadow.go runShadow confirm a shadow mismatch whenever the confirmation read returns a frame, no longer requiring its payload bytes to equal the original. A C1 frame whose payload changed between the two reads is therefore reported as a confirmed mismatch rather than a changed value.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": "confirmationFrame === null || !redisPayloadsEqual(originalFrame.payload, confirmationFrame.payload)", + "after": "confirmationFrame === null" + } + ], + "requiredDetections": [ + "ordinary", + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/shadow.go", + "before": "confirmation.Kind == \"miss\" || !bytes.Equal(frame.Payload, confirmation.Frame.Payload)", + "after": "confirmation.Kind == \"miss\" || false && !bytes.Equal(frame.Payload, confirmation.Frame.Payload)" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M08", + "case": "C60.invalid-logging-policy", + "description": "Enable mismatch logging after a malformed runtime logging flag", + "rationale": "TypeScript src/dialcache.ts DialCache.resolveShadowLogging returns true after recording the config_resolution error for a malformed runtime logging flag, and Go go/policy.go ResolvePolicy turns LogMismatches on when the flag is invalid. A malformed logMismatches value therefore enables mismatch logging instead of leaving it off.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": "this.recordError(key, CacheLayer.REMOTE, \"config_resolution\");\n return false;\n }\n return configuredLogMismatches;", + "after": "this.recordError(key, CacheLayer.REMOTE, \"config_resolution\");\n return true;\n }\n return configuredLogMismatches;" + } + ], + "requiredDetections": [ + "ordinary", + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/policy.go", + "before": "resolved.Shadow.LogMismatches = flag\n\t\t\tresolved.Shadow.LoggingConfigError = !valid", + "after": "resolved.Shadow.LogMismatches = flag || !valid\n\t\t\tresolved.Shadow.LoggingConfigError = !valid" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M09", + "case": "C60.logging-default-off", + "description": "Enable mismatch logging when its flag is omitted", + "rationale": "TypeScript src/dialcache.ts DialCache.resolveShadowLogging returns true when the runtime logging flag is omitted, and Go go/policy.go ResolvePolicy starts the resolved policy with LogMismatches on. Mismatch logging is therefore enabled by default instead of off.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": "if (configuredLogMismatches === undefined) {\n return false;", + "after": "if (configuredLogMismatches === undefined) {\n return true;" + } + ], + "requiredDetections": [ + "ordinary", + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/policy.go", + "before": "resolved := ResolvedPolicy{Coalesce: true, RemoteReadTimeout: defaults.RemoteReadTimeout}", + "after": "resolved := ResolvedPolicy{Coalesce: true, RemoteReadTimeout: defaults.RemoteReadTimeout, Shadow: ResolvedShadow{LogMismatches: true}}" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M10", + "case": "C31.tracked-no-local-fill", + "description": "Publish an unvalidated tracked source value directly into local storage", + "rationale": "TypeScript src/dialcache.ts DialCache.finishRedisChain no longer suppresses the local write for a tracked key that reached the Redis write path, and Go go/engine.go shared publishes the source value locally regardless of the Tracked flag. A tracked source value is therefore written into process-local storage before any watermark validation. Already detected by layers/trackedSourceWaitsForValidatedReadToWarmLocalTest and recovery-read/trackedSourceNeedsRemoteValidationBeforeLocalReuseTest in both ports.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": "const suppressLocalWrite = (remote.status === \"disabled\" && remote.skipCacheWrite === true)\n || (remoteWriteConfig !== undefined && key.trackForInvalidation);", + "after": "const suppressLocalWrite = remote.status === \"disabled\" && remote.skipCacheWrite === true;" + } + ], + "requiredDetections": [ + "ordinary", + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "if localMiss && !x.op.Identity.Tracked {", + "after": "if localMiss {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M11", + "case": "C09.fixed-local-ttl", + "description": "Renew the local insertion TTL on every cache hit", + "rationale": "TypeScript src/internal/local-cache.ts LocalCache.constructor turns on the lru-cache option that refreshes an entry's age on every read, and Go go/cache.go localGet re-stamps the insertion time and re-adds the entry on a hit. A local entry that is read often therefore never expires on its insertion TTL. Already detected by policy/localHitDoesNotRenewInsertionTtlTest and local-clock/fractionalInsertionExpiresAtWholeMillisecondTest in both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/local-cache.ts", + "before": "ttlResolution: 0,", + "after": "ttlResolution: 0,\n updateAgeOnGet: true," + } + ], + "requiredDetections": [ + "ordinary", + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/cache.go", + "before": "\tc.local.Get(key)\n\treturn item.value, true", + "after": "\titem.insertedMS = c.settings.clock.ElapsedMS()\n\tc.local.Add(key, item)\n\treturn item.value, true" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M12", + "case": "W02.sorted-arguments", + "description": "Reverse the prescribed argument-name ordering", + "rationale": "TypeScript src/key.ts normalizeArgs and Go go/protocol.go NormalizeArgs sort argument names in descending order instead of the prescribed ascending UTF-16 code-unit order. Keys with more than one named argument therefore serialize differently from the protocol vectors.", + "typescript": { + "edits": [ + { + "path": "src/key.ts", + "before": ".sort(([left], [right]) => compareCodePoints(left, right));", + "after": ".sort(([left], [right]) => -compareCodePoints(left, right));" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/protocol.go", + "before": "return utf16Less(result[i][0], result[j][0])", + "after": "return utf16Less(result[j][0], result[i][0])" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M13", + "case": "C54.expired-before-start", + "description": "Dispatch dark shadow reads after the job deadline already elapsed before deferred work starts", + "rationale": "TypeScript src/dialcache.ts DialCache.runShadowValidation and Go go/shadow.go runShadow drop the expiry check that runs before deferred shadow work starts. A dark read is therefore dispatched even when the job deadline elapsed while the job was queued.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": " try {\n if (abandonIfExpired()) {\n return \"timeout\";\n }\n\n let shadowFillConfig:", + "after": " try {\n let shadowFillConfig:" + } + ], + "requiredDetections": [ + "ordinary", + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/shadow.go", + "before": "if expired() {\n\t\t\treturn out(\"timeout\")\n\t\t}\n\t\tfill := false", + "after": "if false && expired() {\n\t\t\treturn out(\"timeout\")\n\t\t}\n\t\tfill := false" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M14", + "case": "C01.no-deadline", + "description": "Bound a disabled or outside call's source with the configured fallback deadline", + "rationale": "TypeScript src/dialcache.ts DialCache.executeCacheOperation wraps the raw fallback of a disabled or outside call in withFallbackTimeout, and Go go/engine.go GetOrLoad runs it under awaitDeadline with the operation's budget. A call that bypasses the cache is therefore bounded by the configured fallback deadline instead of running unbounded. Detected by source-budgets/outsideAndInvalidOutsideCallsIgnoreDeadlineAndSharingTest at its advance(100) step in both ports.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": " return await rawFallback();", + "after": " return await withFallbackTimeout(rawFallback, options.useCase, fallbackTimeoutMs, () => undefined);" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "\t\treturn callSafely(func() (T, error) { return load(ctx) })", + "after": "\t\treturn awaitDeadline(c.settings.clock, startPending(func() (T, error) { return load(ctx) }), elapsedNow(c.settings.clock), x.budget(), func() error { return &FallbackTimeoutError{UseCase: x.op.Identity.UseCase, Timeout: time.Duration(x.budget()) * time.Millisecond} }, nil)" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M15", + "case": "C02.reenabled-memo", + "description": "Evict the enclosing request's memo when a nested enable() completes", + "rationale": "TypeScript src/context.ts DialCacheContext.enable deletes the enclosing holder's request-local cache when a nested enable call completes, and Go go/cache.go Enable's done closure clears the scope's memo on its not-owned branch. A completed nested scope therefore evicts the outer request's memo while the outer scope is still open; the TypeScript edit also drops the outer in-flight registry. A nested handle can only reach its own enclosing row, so the port evicts one outer row rather than every row. Detected by scope/nestedCloseAndDisabledBypassKeepOuterMemoTest step 11 in both ports.", + "typescript": { + "edits": [ + { + "path": "src/context.ts", + "before": " return this.run({ enabled: true, holder: currentHolder }, fn);", + "after": " return this.run({ enabled: true, holder: currentHolder }, fn).finally(() => {\n delete currentHolder.requestLocalCache;\n });" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/cache.go", + "before": "\tdone := func() {\n\t\tif !owned {\n\t\t\treturn\n\t\t}", + "after": "\tdone := func() {\n\t\tif !owned {\n\t\t\tc.mu.Lock()\n\t\t\tclear(s.memo)\n\t\t\tc.mu.Unlock()\n\t\t\treturn\n\t\t}" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M17", + "case": "C05.local-hit-stops-traversal", + "description": "Serve a local hit with a value the layer never stored while still skipping the loader", + "rationale": "TypeScript src/internal/local-cache.ts LocalCache.getWithResolvedConfig reports a hit whose value is undefined, and Go go/engine.go shared builds its localResult literal without the asserted value, so a found entry serves the zero value. The loader is still bypassed, so a local hit serves a value the layer never stored while loader counts stay unchanged. The Go runner records the ordinary (unit) cohort as crashed because TestBorrowedReferencesSurviveFollowersAndCacheHits dereferences the nil pointer a hit now returns inside its synctest bubble, a panic rather than a failed assertion; the generated cohort is the required detection. core/localValueSurvivesSourceChangeTest detects both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/local-cache.ts", + "before": " return { status: \"hit\", value: hit.value };", + "after": " return { status: \"hit\", value: undefined as unknown as T };" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "\t\t\t\tvalue, ok := assertValue[T](raw)\n\t\t\t\treturn localResult[T]{value: value, found: ok, mismatch: !ok}, nil", + "after": "\t\t\t\t_, ok := assertValue[T](raw)\n\t\t\t\treturn localResult[T]{found: ok, mismatch: !ok}, nil" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M18", + "case": "C09.fixed-local-ttl", + "description": "Serve a local entry at its exact insertion expiry", + "rationale": "TypeScript src/internal/local-cache.ts LocalCache.put drops the one-millisecond reduction from the lru-cache ttl that encodes the exclusive expiry boundary, and Go go/cache.go localGet makes the expiry comparison strict. A local entry is therefore served at the exact millisecond its insertion TTL elapses. Detected by policy/localHitDoesNotRenewInsertionTtlTest step 10 and source-budgets/localEntryExpiresAfterItsTtlTest in both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/local-cache.ts", + "before": " const ttlMs = cacheTtlSecToMs(config.ttlSec) - 1;", + "after": " const ttlMs = cacheTtlSecToMs(config.ttlSec);" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/cache.go", + "before": "if c.settings.clock.ElapsedMS()-item.insertedMS >= item.ttlMS {", + "after": "if c.settings.clock.ElapsedMS()-item.insertedMS > item.ttlMS {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M19", + "case": "C09.fractional-clock-grid", + "description": "Compute local insertion and expiry on the precise clock instead of the whole-millisecond grid", + "rationale": "TypeScript src/internal/local-cache.ts LocalCache.constructor stops flooring the performance clock and LocalCache.put shortens the ttl by a microsecond instead of a millisecond; Go go/cache.go localGet compares the precise clock against a nanosecond ttl and localPut stamps the precise instant. Insertion and expiry therefore fall on the fractional clock instead of the whole-millisecond grid. The feature-profile driver clocks are integer, so the fault is silent outside the local-clock profile; local-clock/fractionalInsertionExpiresAtWholeMillisecondTest detects both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/local-cache.ts", + "before": " perf: { now: () => Math.floor(performance.now()) + 1 },", + "after": " perf: { now: () => performance.now() + 1 }," + }, + { + "path": "src/internal/local-cache.ts", + "before": " const ttlMs = cacheTtlSecToMs(config.ttlSec) - 1;", + "after": " const ttlMs = cacheTtlSecToMs(config.ttlSec) - 1e-6;" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/cache.go", + "before": "if c.settings.clock.ElapsedMS()-item.insertedMS >= item.ttlMS {", + "after": "if int64(elapsedNow(c.settings.clock))-item.insertedMS >= item.ttlMS*int64(time.Millisecond) {" + }, + { + "path": "go/cache.go", + "before": "insertedMS: c.settings.clock.ElapsedMS()", + "after": "insertedMS: int64(elapsedNow(c.settings.clock))" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M20", + "case": "C11.distinct-keys", + "description": "Register process flights in one process-wide registry so a flight on one instance is joined from another (detection rests on sampled layers histories and the different-instances-own-distinct-flights witness, not on the case's exported replay)", + "rationale": "TypeScript src/dialcache.ts makes the DialCache processFlights field an alias of one static Map shared by every instance, and Go go/cache.go New takes its flights map from a package-level holder. A pending flight on one instance is therefore joined from another instance with the same key. In Go the process flights of every instance run under one package-level lock (singleFlight locks it instead of the instance mutex when the scope owner is nil), so the shared registry is race-free even when two instances' goroutines run in one synctest bubble; the first encoding shared only the map and crashed a hosted shard with a concurrent map write. The C11 quintReplay survives, so detection rests on sampled layers histories and the witness layers:different-instances-own-distinct-flights.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": " private readonly processFlights = new Map();", + "after": " private static readonly sharedProcessFlights = new Map();\n private readonly processFlights = DialCache.sharedProcessFlights;" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/cache.go", + "before": "type scopeState struct {\n\tenabled bool\n\towner *scope\n}", + "after": "type scopeState struct {\n\tenabled bool\n\towner *scope\n}\n\n// Fault injection: one process-wide flight registry shared by every instance,\n// guarded by one lock in singleFlight so the shared map stays race-free.\nvar sharedProcessFlights = make(map[string]*flight)\nvar sharedProcessFlightsMu sync.Mutex" + }, + { + "path": "go/cache.go", + "before": "c := &Cache{settings: s, flights: make(map[string]*flight), shadows:", + "after": "c := &Cache{settings: s, flights: sharedProcessFlights, shadows:" + }, + { + "path": "go/engine.go", + "before": "\tstarted := elapsedNow(c.settings.clock)\n\tc.mu.Lock()\n\tif owner != nil && !owner.live {\n\t\tc.mu.Unlock()\n\t\treturn run()\n\t}\n\tif f := flights[x.key]; f != nil {\n\t\tf.followers++\n\t\tc.mu.Unlock()\n\t\tx.event(\"coalesced\", \"\", map[string]any{\"scope\": label})\n\t\t<-f.done\n\t\treturn followerResult[T](f)\n\t}\n\tf := &flight{done: make(chan struct{}), started: started}\n\tflights[x.key] = f\n\tc.mu.Unlock()\n\tvalue, err := callSafely(run)\n\tf.value, f.err = value, err\n\tc.mu.Lock()\n\tif flights[x.key] == f {\n\t\tdelete(flights, x.key)\n\t}\n\tclose(f.done)\n\tc.mu.Unlock()\n\treturn value, err\n}", + "after": "\tstarted := elapsedNow(c.settings.clock)\n\t// Fault injection: process flights live in one registry shared by every\n\t// instance, guarded by one lock so the shared map itself stays race-free.\n\tmu := &c.mu\n\tif owner == nil {\n\t\tmu = &sharedProcessFlightsMu\n\t}\n\tmu.Lock()\n\tif owner != nil && !owner.live {\n\t\tmu.Unlock()\n\t\treturn run()\n\t}\n\tif f := flights[x.key]; f != nil {\n\t\tf.followers++\n\t\tmu.Unlock()\n\t\tx.event(\"coalesced\", \"\", map[string]any{\"scope\": label})\n\t\t<-f.done\n\t\treturn followerResult[T](f)\n\t}\n\tf := &flight{done: make(chan struct{}), started: started}\n\tflights[x.key] = f\n\tmu.Unlock()\n\tvalue, err := callSafely(run)\n\tf.value, f.err = value, err\n\tmu.Lock()\n\tif flights[x.key] == f {\n\t\tdelete(flights, x.key)\n\t}\n\tclose(f.done)\n\tmu.Unlock()\n\treturn value, err\n}" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M21", + "case": "C13.uncoalesced-caching", + "description": "Serve a live local entry before joining the pending process flight", + "rationale": "TypeScript src/dialcache.ts DialCache.getThroughSharedLayers peeks LocalCache.getWithResolvedConfig before deciding whether to join the process flight, and Go go/engine.go shared peeks localGet before its coalesce branch. A live local entry is therefore served ahead of a pending process flight registered for the key. Detected by policy/independentCompletionKeepsRegisteredLeaderTest step 9 in both ports and by runtime-boundaries/defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": " return coalesce ? await this.singleFlightProcess(key, run) : await run();", + "after": " let early: CacheGetResult | null = null;\n try {\n early = this.localCache.getWithResolvedConfig(key, localLayer.config);\n } catch {\n early = null;\n }\n if (early?.status === \"hit\") {\n return await run();\n }\n return coalesce ? await this.singleFlightProcess(key, run) : await run();" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "\tif p.Local.Enabled {\n\t\tif p.Coalesce {", + "after": "\tif p.Local.Enabled {\n\t\tif early, _ := callSafely(func() (localResult[T], error) {\n\t\t\traw, found := c.localGet(x.key)\n\t\t\tif !found {\n\t\t\t\treturn localResult[T]{}, nil\n\t\t\t}\n\t\t\tvalue, ok := assertValue[T](raw)\n\t\t\treturn localResult[T]{value: value, found: ok, mismatch: !ok}, nil\n\t\t}); early.found {\n\t\t\treturn run()\n\t\t}\n\t\tif p.Coalesce {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M22", + "case": "C13.uncoalesced-caching", + "description": "Join a pending process flight from a non-coalescing caller while registration still respects coalesce", + "rationale": "TypeScript src/dialcache.ts DialCache.getThroughSharedLayers and Go go/engine.go shared also enter the single-flight path when a flight for the key is already pending, even though coalesce is false. A non-coalescing caller therefore joins a pending process flight while registration still respects coalesce. Detected by policy/independentCompletionKeepsRegisteredLeaderTest step 5 and policy/independentFailureKeepsRegisteredLeaderTest in both ports.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": " return coalesce ? await this.singleFlightProcess(key, run) : await run();", + "after": " return coalesce || this.processFlights.has(key.urn) ? await this.singleFlightProcess(key, run) : await run();" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "\t\tif p.Coalesce {\n\t\t\treturn x.singleFlight(c.flights, nil, \"process\", run)\n\t\t}\n\t\treturn run()\n\t}", + "after": "\t\tc.mu.Lock()\n\t\tpending := c.flights[x.key] != nil\n\t\tc.mu.Unlock()\n\t\tif p.Coalesce || pending {\n\t\t\treturn x.singleFlight(c.flights, nil, \"process\", run)\n\t\t}\n\t\treturn run()\n\t}" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M23", + "case": "C13.local-last-writer", + "description": "Never let a local publication replace an entry already occupying the slot, even an expired one", + "rationale": "TypeScript src/internal/local-cache.ts LocalCache.put writes only when a peek that allows stale entries finds the slot empty, and Go go/cache.go localPut writes only when Peek finds no entry. A local publication therefore never replaces an entry already occupying the slot, even an expired one. Both ports purge an expired entry at the read that starts the source, so the model's declared reproducer does not transfer; policy/independentLocalPublicationUsesLastCompletionTest is the portable evidence (calls 1,2,2 instead of 1,2,1 in both ports).", + "typescript": { + "edits": [ + { + "path": "src/internal/local-cache.ts", + "before": " this.cache?.set(key.urn, { value }, { size: 1, ttl: ttlMs });", + "after": " if (this.cache?.peek(key.urn, { allowStale: true }) === undefined) {\n this.cache?.set(key.urn, { value }, { size: 1, ttl: ttlMs });\n }" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/cache.go", + "before": "\tc.local.Add(key, entry{value: value, insertedMS: c.settings.clock.ElapsedMS(), ttlMS: ttl})", + "after": "\tif _, present := c.local.Peek(key); !present {\n\t\tc.local.Add(key, entry{value: value, insertedMS: c.settings.clock.ElapsedMS(), ttlMS: ttl})\n\t}" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M24", + "case": "C13.local-last-writer", + "description": "Clear the key's local entry when a source settlement fails", + "rationale": "TypeScript src/dialcache.ts DialCache.finishRedisChain deletes the key's lru-cache entry before rethrowing a rejected source, and Go go/engine.go shared removes the local entry on the error branch of its no-Redis-client, remote-disabled and remote-read paths. A failed settlement therefore clears a local entry that an earlier accepted settlement published. The ports are asymmetric in three ways that stay off the boundary the regression observes: Go also clears when the remote read itself failed, a path the TypeScript edit never reaches; Go removes the entry before the stale-recovery attempt while TypeScript deletes only after recovery fails to serve; and Go covers the path with no Redis client, which TypeScript finishLocalOnly never reaches. The declared reproducer's failing source is an outside bypass, so policy/independentFailureKeepsSettledLocalValueTest is the portable evidence.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": " throw fallbackError;", + "after": " (this.localCache as unknown as { cache: { delete(key: string): boolean } | null }).cache?.delete(key.urn);\n throw fallbackError;" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "\t\tif c.settings.remote == nil {\n\t\t\tv, e := x.source(fallbackLayer)\n\t\t\tif e == nil && localMiss {\n\t\t\t\tx.putLocal(v)\n\t\t\t}\n\t\t\treturn v, e\n\t\t}", + "after": "\t\tif c.settings.remote == nil {\n\t\t\tv, e := x.source(fallbackLayer)\n\t\t\tif e == nil && localMiss {\n\t\t\t\tx.putLocal(v)\n\t\t\t} else if e != nil {\n\t\t\t\tc.mu.Lock()\n\t\t\t\tif c.local != nil {\n\t\t\t\t\tc.local.Remove(x.key)\n\t\t\t\t}\n\t\t\t\tc.mu.Unlock()\n\t\t\t}\n\t\t\treturn v, e\n\t\t}" + }, + { + "path": "go/engine.go", + "before": "\t\t\t\treturn x.darkSource(fallbackLayer, localMiss)\n\t\t\t}\n\t\t\tv, e := x.source(fallbackLayer)\n\t\t\tif e == nil && localMiss {\n\t\t\t\tx.putLocal(v)\n\t\t\t}\n\t\t\treturn v, e", + "after": "\t\t\t\treturn x.darkSource(fallbackLayer, localMiss)\n\t\t\t}\n\t\t\tv, e := x.source(fallbackLayer)\n\t\t\tif e == nil && localMiss {\n\t\t\t\tx.putLocal(v)\n\t\t\t} else if e != nil {\n\t\t\t\tc.mu.Lock()\n\t\t\t\tif c.local != nil {\n\t\t\t\t\tc.local.Remove(x.key)\n\t\t\t\t}\n\t\t\t\tc.mu.Unlock()\n\t\t\t}\n\t\t\treturn v, e" + }, + { + "path": "go/engine.go", + "before": "\t\tv, err := x.source(\"remote\")\n\t\tif err != nil {\n", + "after": "\t\tv, err := x.source(\"remote\")\n\t\tif err != nil {\n\t\t\tc.mu.Lock()\n\t\t\tif c.local != nil {\n\t\t\t\tc.local.Remove(x.key)\n\t\t\t}\n\t\t\tc.mu.Unlock()\n" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M25", + "case": "C15.shared-error-retry", + "description": "Keep a rejected request-local flight registered so a later same-scope caller receives the rejection instead of retrying", + "rationale": "TypeScript src/dialcache.ts DialCache.singleFlightRequestLocal no longer clears the in-flight registry entry when the promise rejects, and Go go/engine.go singleFlight keeps a request-scoped flight registered when it ended in error. A later same-scope caller therefore receives the rejection instead of retrying the source. Neither memo can hold an error (TypeScript RequestLocalCache.set runs only on success and Go writes the memo only without an error), so the request in-flight registry is the only request-scoped error carrier. scope/rejectedFlightAllowsRetryTest and the witnesses scope:rejected-flight-retry and shared-rejection are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": "inFlight.delete(key.urn);\n }\n };\n void promise.then(clear, clear);", + "after": "inFlight.delete(key.urn);\n }\n };\n void promise.then(clear, () => undefined);" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "if flights[x.key] == f {", + "after": "if flights[x.key] == f && (owner == nil || f.err == nil) {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M26", + "case": "C15.shared-error-retry", + "description": "Never remove a settled process flight from the registry so later same-key callers join finished work", + "rationale": "TypeScript src/dialcache.ts DialCache.singleFlightProcess inverts the identity check in its clear routine so a settled flight stays in the registry, and Go go/engine.go singleFlight deletes a process flight only when an owner is present. Later same-key callers therefore join finished work and receive its stale outcome. Joiners complete rather than strand because a blocked follower would deadlock synctest and the Go runner would classify that as a crash. source-budgets/defaultSourceBudgetExpiresAtSixtySecondsTest and policy/independentCompletionKeepsRegisteredLeaderTest are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": " if (this.processFlights.get(key.urn) === flight) {\n this.activeProcessFollowers -= flight.followers;", + "after": " if (this.processFlights.get(key.urn) !== flight) {\n this.activeProcessFollowers -= flight.followers;" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "if flights[x.key] == f {", + "after": "if flights[x.key] == f && owner != nil {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M27", + "case": "C16.runtime-enables-coalescing", + "description": "Capture the operation's coalesce default as true so an omitted runtime leaf or null provider inherits sharing over a configured false", + "rationale": "TypeScript src/dialcache.ts snapshotDefaultConfig records the operation's coalesce default as true whenever it is set, and Go go/policy.go staticPolicyMap always publishes coalesce as true. An omitted runtime leaf or a null provider therefore inherits sharing over a configured false. The TypeScript edit is deliberately in snapshotDefaultConfig rather than the identical text in runtime-config.ts mergeKeyConfig. runtime-boundaries/inheritedFalseKeepsIndependentMemoizingSourcesTest and the independent profile replays whose fixture sets coalesce false are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": "...(coalesce === undefined ? {} : { coalesce }),", + "after": "...(coalesce === undefined ? {} : { coalesce: true })," + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/policy.go", + "before": "\t\tcoalesce = *p.Coalesce\n\t}", + "after": "\t\tcoalesce = true\n\t}" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M28", + "case": "C17.library-defaults", + "description": "Default coalescing off when the static coalesce leaf is omitted while an explicit true still shares", + "rationale": "TypeScript src/dialcache.ts DialCache.getThroughSharedLayers and DialCache.getThroughRequestLocal treat coalescing as on only when the static leaf is explicitly true, and Go go/policy.go ParsePolicy sets Coalesce to false when the static coalesce leaf is absent. An omitted leaf therefore defaults to no sharing while an explicit true still shares. Go ParsePolicy returns the zero Policy when the fixture supplies no static policy map at all, so that corner keeps coalescing on; both Go drivers pass the fixture's policy map through ParsePolicy, so an omitted leaf inside a supplied map resolves to no sharing. runtime-boundaries/omittedRampAndSharingUseLibraryDefaultsTest and source-budgets/lateFollowerUsesLeadersRemainingBudgetTest are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": "const coalesce = keyConfig?.coalesce !== false;", + "after": "const coalesce = keyConfig?.coalesce === true;" + }, + { + "path": "src/dialcache.ts", + "before": "if (keyConfig.coalesce === false) {", + "after": "if (keyConfig.coalesce !== true) {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/policy.go", + "before": "\t\tv, present := optionalLeaf(m, field)\n\t\tif !present {\n\t\t\tcontinue\n\t\t}", + "after": "\t\tv, present := optionalLeaf(m, field)\n\t\tif !present {\n\t\t\tif field == \"coalesce\" {\n\t\t\t\tp.Coalesce = Ptr(false)\n\t\t\t}\n\t\t\tcontinue\n\t\t}" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M29", + "case": "C18.captured-shadow-fill", + "description": "Re-resolve the runtime policy at fill time and write the dark fill with the retention then in force", + "rationale": "TypeScript src/dialcache.ts DialCache.runShadowValidation re-fetches the key config through fetchKeyConfig at fill time instead of using the captured shadowFillConfig, and Go go/shadow.go runShadow re-runs ResolvePolicy before putRemote and overwrites the remote TTL and retention. The dark fill is therefore written with the retention in force at fill time rather than the one captured at admission. Detection most likely fires on the extra provider call (policyCalls) before writeTtls diverge; shadow-layers/darkFillRetainsPolicyThroughSerializationTest is the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": " shadowFillConfig,", + "after": " await fetchKeyConfig(this.configProvider, key).then((current) => {\n const resolved = resolveRemoteLayerConfigResult({ config: current, key });\n return \"config\" in resolved ? resolved.config : shadowFillConfig!;\n })," + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/shadow.go", + "before": "if fill {\n\t\t\tfilled, writeErr := x.putRemote(value, fence, \"remote_shadow\", func() bool { return !expired() })", + "after": "if fill {\n\t\t\tif provider := x.cache.settings.policyProvider; provider != nil {\n\t\t\t\tif overlay, err := callSafely(func() (RuntimePolicy, error) { return provider(x.ctx, x.op.Identity) }); err == nil {\n\t\t\t\t\tif current, err := ResolvePolicy(x.op.Policy, overlay, x.op.Identity, PolicyDefaults{RemoteReadTimeout: x.cache.settings.remoteReadTimeout}); err == nil {\n\t\t\t\t\t\tx.policy.Remote.TTL, x.policy.StaleOnErrorMaxAge = current.Remote.TTL, current.StaleOnErrorMaxAge\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfilled, writeErr := x.putRemote(value, fence, \"remote_shadow\", func() bool { return !expired() })" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M30", + "case": "C22.freshness-boundary", + "description": "Serve a remote frame whose age equals the fresh TTL as a hit", + "rationale": "TypeScript src/internal/redis-cache.ts RedisCache.getWithResolvedConfig and Go go/engine.go readServing make the freshness comparison strict, so a remote frame whose age equals the fresh TTL is served as a hit instead of starting a source. When no stale-on-error retention is configured the maximum-age check runs first and masks the flip. policy/exactRemoteFreshBoundaryStartsSourceTest with the 5 s retention fixture and witness policy:remote-exact-fresh-boundary-miss are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "frameAge.ageMs >= freshAgeMs", + "after": "frameAge.ageMs > freshAgeMs" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "if age >= ms(x.policy.Remote.TTL) {", + "after": "if age > ms(x.policy.Remote.TTL) {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M31", + "case": "C22.freshness-boundary", + "description": "Acquire a dark C0 frame whose age equals the fresh TTL instead of treating it as expired", + "rationale": "TypeScript src/internal/redis-cache.ts RedisCache.validateFrameAge, reached only through the shadow read path, accepts an age equal to the maximum, and Go go/shadow.go runShadow treats a C0 frame as expired only when its age exceeds the fresh TTL. A dark C0 frame exactly at the fresh TTL is therefore acquired instead of treated as expired. shadow/c0AtExactFreshnessBoundaryRefillsTest is the expected evidence in both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "age.ageMs < maxAgeMs ? result", + "after": "age.ageMs <= maxAgeMs ? result" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/shadow.go", + "before": "} else if maxAge && age >= ms(x.policy.Remote.TTL) {", + "after": "} else if maxAge && age > ms(x.policy.Remote.TTL) {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M32", + "case": "C22.physical-vs-logical", + "description": "Write every remote frame with the fresh TTL, ignoring stale-on-error retention", + "rationale": "TypeScript src/internal/redis-cache.ts retentionTtlSecFor returns the fresh TTL instead of the stale-on-error maximum age, and Go go/engine.go putRemote sets the physical ttl to the fresh TTL. Every remote frame is therefore written with the fresh TTL, so no retained candidate survives for stale recovery. policy/eachSourceKeepsPublicationPolicyTest (writeTtls 4000 and 5000) and every recovery-profile write are the evidence, since the drivers compare writeTtls on each step.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "return config.staleOnErrorMaxAgeSec ?? config.ttlSec;", + "after": "return config.ttlSec;" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "ttl = x.policy.StaleOnErrorMaxAge", + "after": "ttl = x.policy.Remote.TTL" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M33", + "case": "C23.policy-does-not-spend-source-budget", + "description": "Judge a source settlement against a deadline anchored at the clock origin instead of the source start; the timer still fires at the source's own deadline", + "rationale": "TypeScript src/internal/deadline.ts withMonotonicDeadline (its settleBeforeDeadline closure) judges a settlement by comparing the current reading of performance.now with the budget instead of the time elapsed since the source started, and Go go/deadline.go awaitDeadline compares the clock's elapsed reading with the budget in its settlement branch instead of subtracting the start, so in both ports the settlement is judged against a deadline anchored at the clock origin. Only the settlement judgement changes; the timers still fire at the source's own deadline. src/internal/deadline.ts imports performance from node:perf_hooks, and every TypeScript driver in the generated cohort mocks that object: test/formal/behavior-driver.ts:154 for the feature and the effects profiles, test/formal/local-clock-profile.ts:16 for local-clock, and test/formal-conformance.test.ts:163 pins it to 0 for the core profile, where the fault is therefore inert. So, like Go's manual clocks that start at 0, any settlement at history time at or past the budget is rejected regardless of when its source started. In the ordinary unit suite the clock is real, so detection there depends on worker uptime and is not required; source-budgets/heldPolicyDoesNotSpendSourceBudgetTest and defaultSourceBudgetExpiresAtSixtySecondsTest are the expected evidence in both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/deadline.ts", + "before": " if (elapsedMs() >= timeoutMs) {", + "after": " if (performance.now() >= timeoutMs) {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/deadline.go", + "before": "\t\tcase <-p.done:\n\t\t\ttimer.Stop()\n\t\t\tif elapsedNow(clock)-started < duration {", + "after": "\t\tcase <-p.done:\n\t\t\ttimer.Stop()\n\t\t\tif elapsedNow(clock) < duration {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M34", + "case": "C24.follower-source", + "description": "Complete followers of a joined flight with an undefined or zero value instead of the leader's accepted value while errors still propagate", + "rationale": "TypeScript src/dialcache.ts DialCache.singleFlightProcess and DialCache.singleFlightRequestLocal resolve a follower's promise to undefined instead of the leader's value, and Go go/engine.go singleFlight returns the zero value to followers once the flight completes. Errors still propagate, so followers of a joined flight receive an undefined or zero value instead of the accepted value. Followers complete with a wrong value rather than staying pending because a blocked follower would deadlock synctest and the Go runner would classify that as a crash. The Go runner records the ordinary (unit) cohort as crashed because TestBorrowedReferencesSurviveFollowersAndCacheHits dereferences the nil pointer a follower now receives inside its synctest bubble, a panic rather than a failed assertion; the generated cohort is the required detection. recovery/crossRequestRecoveryMemoizesBothScopesTest and coalescedRecoveryClassifiesAndDecodesOnceTest are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": "return existing.promise as Promise;", + "after": "return existing.promise.then(() => undefined as unknown as T);" + }, + { + "path": "src/dialcache.ts", + "before": "return existing as Promise;", + "after": "return (existing as Promise).then(() => undefined as unknown as T);" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "<-f.done\n\t\treturn followerResult[T](f)", + "after": "<-f.done\n\t\tvar zero T\n\t\treturn zero, f.err" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M35", + "case": "C25.late-source-rejected", + "description": "Accept a settlement observed at exactly the elapsed deadline", + "rationale": "TypeScript src/internal/deadline.ts withMonotonicDeadline and Go go/deadline.go awaitDeadline accept a settlement observed at exactly the elapsed deadline, making the settlement-time boundary inclusive while timer-delivered timeouts are unchanged. M03 shares this anchor as the coarse late-acceptance fault and stays a separate entry. Timer-delivered regressions do not distinguish this mutant, so the effects jumpClock histories (effects/lateReadCannotBecomeHitTest, lateReadRejectionUsesDeadlineCategoryTest and the late-resolve and late-reject witnesses) are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/internal/deadline.ts", + "before": "if (elapsedMs() >= timeoutMs) {", + "after": "if (elapsedMs() > timeoutMs) {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/deadline.go", + "before": "case <-p.done:\n\t\t\ttimer.Stop()\n\t\t\tif elapsedNow(clock)-started < duration {", + "after": "case <-p.done:\n\t\t\ttimer.Stop()\n\t\t\tif elapsedNow(clock)-started <= duration {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M36", + "case": "C25.late-source-rejected", + "description": "Stamp the serialization-start receipt one millisecond late so the dump duration is measured short", + "rationale": "TypeScript src/internal/redis-cache.ts RedisCache.putWithLayer and Go go/engine.go putRemote take the serialization-start receipt one millisecond late, so the dump duration is measured one millisecond short. The connection monitor's acceptance receipt is model bookkeeping with no native line, so this stamp is the only native acceptance receipt. effects/sourceDurationExcludesPublicationTest (dump amount 0.009 instead of 0.010) is the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "const start = performance.now();\n let serialized: string | Buffer;", + "after": "const start = performance.now() + 1;\n let serialized: string | Buffer;" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "start := elapsedNow(clock)\n\tpayload, err := callSafely(func() (Payload, error) {", + "after": "start := elapsedNow(clock) + time.Millisecond\n\tpayload, err := callSafely(func() (Payload, error) {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M37", + "case": "C27.source-error-no-publication", + "description": "Publish a rejected source's result into process-local storage before rethrowing", + "rationale": "TypeScript src/dialcache.ts DialCache.finishRedisChain publishes the rejected source's result into local storage on a local miss before rethrowing, and Go go/engine.go shared calls putLocal under localMiss before returning the Redis-chain error. A rejected source therefore seeds process-local storage. M24 anchors the same TypeScript statement with its indentation and stays a distinct entry. None of the four pinned local-failure regressions reach reject-then-re-begin on a healthy miss; local-failure/rejectedSourceDoesNotSeedLocalTest is the portable evidence.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": "throw fallbackError;", + "after": "if (local.status === \"miss\") {\n await this.putLocalFailOpen(key, fallbackError, local.config);\n }\n throw fallbackError;" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "\t\t\treturn v, err\n\t\t}\n\t\tif remote.kind != \"error\" {", + "after": "\t\t\tif localMiss {\n\t\t\t\tx.putLocal(v)\n\t\t\t}\n\t\t\treturn v, err\n\t\t}\n\t\tif remote.kind != \"error\" {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M38", + "case": "C28.no-refill-after-read-failure", + "description": "Skip the Redis publication after a semantic miss, including a decode failure, so only retained-candidate misses refill", + "rationale": "TypeScript src/dialcache.ts DialCache.finishRedisChain writes to Redis only when a retained frame exists, and Go go/engine.go shared also skips the publication for miss and decode_error reads. After a semantic miss, including a decode failure, the source value is therefore never published to Redis; only retained-candidate misses refill. core/invalidationRefillsFromCurrentSourceTest (redisWrites 3 and a later hit) and effects/nullReplyRefillsAndIsReadableTest are the expected evidence in both ports.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": "if (remoteWriteConfig !== undefined) {", + "after": "if (remoteWriteConfig !== undefined && retainedFrame !== null) {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "if remote.kind != \"error\" {", + "after": "if remote.kind != \"error\" && remote.kind != \"miss\" && remote.kind != \"decode_error\" {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M39", + "case": "C34.first-fence", + "description": "Drop the pre-serialization fence check so a source accepted behind an observed fence is serialized while the post-serialization recheck still blocks the write", + "rationale": "TypeScript src/internal/redis-cache.ts RedisCache.putWithLayer and Go go/engine.go putRemote drop the fence check that runs before serialization. A source accepted behind an observed fence is therefore serialized, while the post-serialization recheck still blocks the write. effects/absentReplyWithFutureFenceBlocksRefillTest (dumps 0 becomes 1) and witness effects:normalized-fence-blocks-publication are the expected evidence in both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "&& this.sampleWriteTimestamp(key, metricLayer) <= observedWatermarkMs", + "after": "&& false" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "if stamp <= int64(*fence) {", + "after": "if false && stamp <= int64(*fence) {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M40", + "case": "C40.future-rejected", + "description": "Classify a frame dated after the reader clock as a valid frame of age zero instead of rejecting it as future", + "rationale": "TypeScript src/internal/redis-cache.ts RedisCache.frameAge and Go go/engine.go frameAge classify a frame dated after the reader clock as valid with age zero instead of rejecting it as future. The age is clamped to zero because the drivers' observation schema rejects a negative age before any comparison, which the measurement would classify as a malformed observation rather than detection. Both ports implement the future clause once in frameAge and use it for serving, retained-candidate recovery and shadow reads, so a recovery-only edit is not expressible. recovery/rollbackDuringRetainedDecodeRejectsFutureSnapshotTest, policy/wallRollbackRejectsFutureRemoteFrameTest and the witnesses recovery:rollback-rejects-retained-future and policy:rollback-rejects-future-remote are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "return { status: \"future\" };", + "after": "return { status: \"valid\", ageMs: 0 };" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "\t\treturn age, false\n", + "after": "\t\treturn 0, true\n" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M41", + "case": "C43.independent-values", + "description": "Decode the retained candidate but serve an undefined or zero value instead of it from stale recovery", + "rationale": "TypeScript src/internal/redis-cache.ts RedisCache.recoverRetainedCandidate decodes the retained candidate but returns a hit whose value is undefined, and Go go/engine.go recover discards the decoded value and serves the zero value. Stale recovery therefore serves a value other than the decoded candidate. The port is generic in its value type, so the zero value is the only expressible wrong constant. independent/independentRecoveriesServeDistinctAcquiredSnapshotsTest and recovery/coalescedRecoveryClassifiesAndDecodesOnceTest are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "return { status: \"hit\", value };", + "after": "return { status: \"hit\", value: undefined as unknown as T };" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "value, err := x.decode(*frame, \"remote\")", + "after": "_, err := x.decode(*frame, \"remote\")\n\tvalue := zero" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M42", + "case": "C43.request-memo", + "description": "Publish a recovered stale value into process-local storage", + "rationale": "TypeScript src/dialcache.ts DialCache.finishRedisChain publishes a recovered stale value into local storage on a local miss before returning it, and Go go/engine.go shared calls putLocal under localMiss once recover succeeds. A recovered value therefore warms process-local storage. The recovery profile has no local TTL, so detection rests on the recovery-read profile with its 1 s local TTL; recovery-read/untrackedCompressedRecoveryDoesNotWarmLocalTest and compressedRecoveryMemoizesWithoutLocalPublicationTest are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": " if (recovered.status === \"hit\") {\n return recovered.value;\n }", + "after": " if (recovered.status === \"hit\") {\n if (local.status === \"miss\") {\n await this.putLocalFailOpen(key, recovered.value, local.config);\n }\n return recovered.value;\n }" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "if value, ok := x.recover(remote.frame); ok {\n\t\t\t\t\treturn value, nil", + "after": "if value, ok := x.recover(remote.frame); ok {\n\t\t\t\t\tif localMiss {\n\t\t\t\t\t\tx.putLocal(value)\n\t\t\t\t\t}\n\t\t\t\t\treturn value, nil" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M43", + "case": "C44.retained-invalidation", + "description": "Retain the stale candidate with a creation timestamp one millisecond after the acquired frame", + "rationale": "TypeScript src/internal/redis-cache.ts RedisCache.getWithResolvedConfig retains the stale candidate as a copy whose creation timestamp is one millisecond later than the acquired frame, and Go go/engine.go readServing retains a Frame copy with CreatedAtMS advanced by one. The candidate's recorded snapshot therefore differs from the acquired frame by one millisecond. M44 shares this anchor with a different wrong behavior and stays a distinct entry. recovery/maximumAgeAfterDecodePreservesSourceTest and maximumAgeBeforeDecodePreservesSourceTest plus the recovery diagnostic ages compared to the millisecond are the expected evidence in both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "return { status: \"retained\", config: layerConfig, frame: result };", + "after": "return { status: \"retained\", config: layerConfig, frame: { ...result, createdAtMs: result.createdAtMs + 1 } };" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "return remoteValue[T]{kind: \"retained\", frame: &r.Frame}", + "after": "return remoteValue[T]{kind: \"retained\", frame: &Frame{CreatedAtMS: r.Frame.CreatedAtMS + 1, Binary: r.Frame.Binary, Payload: r.Frame.Payload}}" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M44", + "case": "C44.retained-invalidation", + "description": "Stamp the retained candidate with the read time instead of its frame timestamp", + "rationale": "TypeScript src/internal/redis-cache.ts RedisCache.getWithResolvedConfig retains the stale candidate with its creation timestamp replaced by the wall clock at read time, and Go go/engine.go readServing copies the frame with CreatedAtMS set to the injected clock's wall reading. TypeScript reads Date.now, which the drivers fake, while Go reads the injected clock, so both stamps are the history's wall time. The retained candidate therefore appears to have been created at the read and always passes the recovery maximum. recovery/maximumAgeAfterDecodePreservesSourceTest, recovery-read/compressedRecoveryRechecksMaximumAfterDecodeTest and witness recovery:expired-during-decode are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "return { status: \"retained\", config: layerConfig, frame: result };", + "after": "return { status: \"retained\", config: layerConfig, frame: { ...result, createdAtMs: Date.now() } };" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "return remoteValue[T]{kind: \"retained\", frame: &r.Frame}", + "after": "return remoteValue[T]{kind: \"retained\", frame: &Frame{CreatedAtMS: uint64(x.cache.settings.clock.WallMS()), Binary: r.Frame.Binary, Payload: r.Frame.Payload}}" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M45", + "case": "C45.captured-policy", + "description": "Admit calls with a recovery maximum one second larger than the configured policy", + "rationale": "TypeScript src/internal/runtime-config.ts resolveRemoteLayerConfigResult admits the call with a stale-on-error maximum one second larger than configured, and Go go/policy.go ResolvePolicy adds one second to the resolved StaleOnErrorMaxAge. TypeScript config granularity is seconds, so one second is the smallest unit and Go mirrors it. recovery/maximumAgeAfterDecodePreservesSourceTest and independent/independentRecoveryAtCapturedAgeBoundaryTest are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/internal/runtime-config.ts", + "before": "config: { ...resolution.config, staleOnErrorMaxAgeSec: configuredMaxAge },", + "after": "config: { ...resolution.config, staleOnErrorMaxAgeSec: configuredMaxAge + 1 }," + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/policy.go", + "before": "resolved.StaleOnErrorMaxAge = time.Duration(ms) * time.Millisecond", + "after": "resolved.StaleOnErrorMaxAge = time.Duration(ms)*time.Millisecond + time.Second" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M46", + "case": "C45.captured-policy", + "description": "Capture the static default recovery maximum at admission, ignoring the runtime overlay (in the policy profile this also hides overlay configuration errors)", + "rationale": "TypeScript src/internal/runtime-config.ts mergeKeyConfig takes the stale-on-error maximum from the static default only, ignoring the runtime overlay, and Go go/policy.go ResolvePolicy drops staleOnErrorMaxAgeSec from its runtime leaf merge loop. The admitted recovery maximum is therefore the static default even when the overlay changes it. The port has no constant to substitute for a generic policy, so ignoring the overlay is the faithful analog; in the policy profile the mutant is broader because it also hides overlay configuration errors. independent/independentRecoveryAtCapturedAgeBoundaryTest and recovery-read/physicalCapDoesNotClampLogicalRecoveryTest are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/internal/runtime-config.ts", + "before": "const staleOnErrorMaxAgeSec = overlay?.staleOnErrorMaxAgeSec !== undefined\n ? overlay.staleOnErrorMaxAgeSec\n : defaultConfig?.staleOnErrorMaxAgeSec;", + "after": "const staleOnErrorMaxAgeSec = defaultConfig?.staleOnErrorMaxAgeSec;" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/policy.go", + "before": "for _, name := range []string{\"requestLocal\", \"coalesce\", \"staleOnErrorMaxAgeSec\", \"remoteReadTimeoutMs\"} {", + "after": "for _, name := range []string{\"requestLocal\", \"coalesce\", \"remoteReadTimeoutMs\"} {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M47", + "case": "C49.dark-source-reuse", + "description": "Continue dark shadow work without waiting for the caller source", + "rationale": "TypeScript src/dialcache.ts DialCache.runShadowValidation replaces the branch that waits for the caller's source with an already-resolved undefined value, and Go go/shadow.go runShadow replaces the case that waits on the source's done channel with a default case. Dark shadow work therefore compares and fills with an undefined or zero value without waiting for the source. shadow/darkReadBeforeSourceWaitsForItTest (no dump while the loader is held) and shadow-layers/darkSourcePublishesLocalBeforeShadowWriteTest are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": "start.source.then((value) => ({ kind: \"value\" as const, value })),", + "after": "Promise.resolve({ kind: \"value\" as const, value: undefined as unknown as T })," + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/shadow.go", + "before": "\t\t\tcase <-source.done:\n\t\t\t\tvalue, err = source.result.value, source.result.err", + "after": "\t\t\tdefault:" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M48", + "case": "C54.deduplication", + "description": "Admit a shadow job for an identity that already has a live job", + "rationale": "TypeScript src/dialcache.ts DialCache.scheduleShadowValidation and Go go/shadow.go scheduleShadow drop the live-job check from the admission guard. A shadow job is therefore admitted for an identity that already has one, subject only to capacity. admission/duplicateDropsBeforeCapacityIsFullTest and shadow-layers/deduplicatedJobKeepsIndependentCallerSourcesTest are the expected evidence in both ports.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": "if (this.shadowFlights.has(key.urn) || this.shadowFlights.size >= this.shadowMaxInFlight) {", + "after": "if (this.shadowFlights.size >= this.shadowMaxInFlight) {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/shadow.go", + "before": "if c.shadows[x.key] != nil || len(c.shadows) >= c.settings.shadowCapacity {", + "after": "if len(c.shadows) >= c.settings.shadowCapacity {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M49", + "case": "C54.instance-isolation", + "description": "Admit one shadow job beyond the per-instance capacity", + "rationale": "TypeScript src/dialcache.ts DialCache.scheduleShadowValidation and Go go/shadow.go scheduleShadow make the capacity comparison strict. One shadow job beyond the per-instance capacity is therefore admitted. admission/fullInstanceDoesNotBlockOtherInstanceTest and shadow-layers/fullMixedInstanceDoesNotBlockAnotherInstanceTest are the expected evidence in both ports.", + "typescript": { + "edits": [ + { + "path": "src/dialcache.ts", + "before": "this.shadowFlights.size >= this.shadowMaxInFlight", + "after": "this.shadowFlights.size > this.shadowMaxInFlight" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/shadow.go", + "before": "len(c.shadows) >= c.settings.shadowCapacity", + "after": "len(c.shadows) > c.settings.shadowCapacity" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M50", + "case": "W01.key-identity", + "description": "Reject braces in keyType and id for untracked keys as well", + "rationale": "TypeScript src/key.ts DialCacheKey.constructor builds the untracked prefix through invalidationPrefix, which throws on braces, instead of joinUrnComponents, and Go go/protocol.go Keys always includes KeyType and ID among the hash-tag components instead of only for tracked keys. Braces in keyType or id are therefore rejected for untracked keys as well. quint-key-vectors 050, 052, 062, 064, 411 and 413 (untracked keys with braces expected valid) are the expected evidence in the TypeScript constructs test and Go TestProtocolKeys.", + "typescript": { + "edits": [ + { + "path": "src/key.ts", + "before": "const rawPrefix = joinUrnComponents(this.namespace, this.keyType, this.id);", + "after": "const rawPrefix = invalidationPrefix(this.namespace, this.keyType, this.id);" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/protocol.go", + "before": "\tparts := []string{id.Namespace}\n\tif id.Tracked {\n\t\tparts = append(parts, id.KeyType, id.ID)\n\t}", + "after": "\tparts := []string{id.Namespace, id.KeyType, id.ID}" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M51", + "case": "W03.cohort-assignment", + "description": "Admit a key whose cohort sample equals the configured ramp", + "rationale": "TypeScript src/internal/runtime-config.ts resolveLayerConfigResult and Go go/policy.go ResolvePolicy make the serving-layer cohort comparison inclusive, so a key whose cohort sample equals the configured ramp is admitted. The rampVectors pin hash samples, not admission, so detection is behavioral through runtime-boundaries/localCohortEqualityBypassesBeforeAboveSampleCachesTest and remoteCohortEqualityBypassesBeforeAboveSampleCachesTest, whose fixture ramps equal the driver key's FNV numerators. The shadow-cohort comparison is a separate site left to a follow-up.", + "typescript": { + "edits": [ + { + "path": "src/internal/runtime-config.ts", + "before": "return sample < ramp", + "after": "return sample <= ramp" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/policy.go", + "before": "Cohort(logical, layer) < ramp", + "after": "Cohort(logical, layer) <= ramp" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M52", + "case": "W04.untracked-decoder", + "description": "Read and apply the entity watermark fence on untracked keys", + "rationale": "TypeScript src/internal/redis-cache.ts RedisCache.startRawPayloadRead always requests the watermark key instead of only for tracked keys, and Go go/protocol.go DecodeFrame applies a parsed watermark fence without consulting the tracked flag. The entity watermark fence is therefore read and applied on untracked keys. The TypeScript twin sits at read-request construction because TypeScript splits the decoders and its untracked decoder receives no watermark, while the Go twin sits at the decoder. Go TestProtocolDecoders untracked vectors (345 and its siblings) and the TypeScript witness layers:untracked-ignores-watermark plus layers replays are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "...(key.trackForInvalidation ? { watermarkKey: this.redisWatermarkKeyFromKey(key) } : {}),", + "after": "watermarkKey: this.redisWatermarkKeyFromKey(key)," + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/protocol.go", + "before": "if tracked && fence != nil && stamp <= *fence {", + "after": "if f, _ := parseWatermark(watermark); f != nil && stamp <= *f {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M53", + "case": "W06.envelope-markers", + "description": "Leave the escape prefix in place before an escaped binary-zstd marker", + "rationale": "TypeScript src/internal/compression.ts decompressPayload and Go go/codec.go DecompressPayload stop treating the binary-zstd marker as an escapable byte. The escape prefix is therefore left in place before an escaped binary-zstd marker. Envelope vectors 008 (0002 to 02), 003 and 013 are the expected evidence in both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/compression.ts", + "before": "return next !== undefined && next <= MARKER_ZSTD_BINARY", + "after": "return next !== undefined && next <= MARKER_ZSTD_UTF8" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/codec.go", + "before": "if len(payload.Bytes) > 1 && payload.Bytes[1] <= 2 {", + "after": "if len(payload.Bytes) > 1 && payload.Bytes[1] <= 1 {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M54", + "case": "W06.envelope-markers", + "description": "Strip a leading zero byte even when the next byte is not an envelope marker", + "rationale": "TypeScript src/internal/compression.ts decompressPayload and Go go/codec.go DecompressPayload strip a leading zero byte whenever a second byte exists, no longer requiring it to be an envelope marker. M53 shares this anchor with a different edit and stays a distinct entry. Envelope vectors 009 (0003 stays 0003) and 010 are the expected evidence in both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/compression.ts", + "before": "return next !== undefined && next <= MARKER_ZSTD_BINARY", + "after": "return next !== undefined" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/codec.go", + "before": "if len(payload.Bytes) > 1 && payload.Bytes[1] <= 2 {", + "after": "if len(payload.Bytes) > 1 {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M55", + "case": "W07.compression-selection", + "description": "Store a compressed payload whose marked size ties the escaped raw size", + "rationale": "TypeScript src/internal/compression.ts compressPayload and Go go/codec.go CompressPayload make the size comparison strict, so a compressed payload whose marked size ties the escaped raw size is stored compressed instead of raw. The compressionWriteVectors tie rows, which record per-binding codec sizes (TypeScript 192, 193, 195, 196, 210, 211, 213 and 214; Go 219, 220, 222, 223, 264, 265, 267 and 268), are the expected evidence.", + "typescript": { + "edits": [ + { + "path": "src/internal/compression.ts", + "before": "if (markedBytes >= raw.storedBytes) {", + "after": "if (markedBytes > raw.storedBytes) {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/codec.go", + "before": "if len(compressed)+1 >= len(raw.Bytes) {", + "after": "if len(compressed)+1 > len(raw.Bytes) {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + }, + { + "id": "M56", + "case": "C37.physical-cap", + "description": "Write a tracked value for its full configured retention above the one-hour cap", + "rationale": "TypeScript src/internal/redis-cache.ts RedisCache.putWithLayer writes a tracked value with its configured TTL instead of the smaller of that and MAX_TRACKED_REDIS_VALUE_TTL_MS, and Go go/engine.go putRemote skips the one-hour clamp (tracked_ttl_clamped) for a tracked write. A tracked value is therefore retained for its full configured retention, which its watermark, kept for twice the cap, need not outlive. recovery-read/trackedPhysicalRetentionExpiresAtCapTest (write TTL 14400000 against 3600000) is the expected evidence in both ports.", + "typescript": { + "edits": [ + { + "path": "src/internal/redis-cache.ts", + "before": "? Math.min(configuredTtlMs, MAX_TRACKED_REDIS_VALUE_TTL_MS)", + "after": "? configuredTtlMs" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + }, + "go": { + "edits": [ + { + "path": "go/engine.go", + "before": "if x.op.Identity.Tracked && ttl > time.Hour {", + "after": "if false {" + } + ], + "requiredDetections": [ + "generated", + "portable" + ] + } + } + ] +} diff --git a/formal/policy-smoke.itf.json b/formal/policy-smoke.itf.json index 0040fa31..9091e67f 100644 --- a/formal/policy-smoke.itf.json +++ b/formal/policy-smoke.itf.json @@ -11,2120 +11,16 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "created": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [] - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [], - "policy": { - "#bigint": "0" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "-1" - }, - "key": { - "#bigint": "-1" - }, - "layer": { - "#bigint": "0" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "created": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "held": [ - { - "call": { - "context": { - "#bigint": "0" - }, - "enabled": true, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "keyFailed": false - }, - "caller": { - "#bigint": "0" - }, - "policyCall": { - "#bigint": "0" - } - } - ], - "localExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [] - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - } - ], - "policy": { - "#bigint": "0" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "-1" - }, - "key": { - "#bigint": "-1" - }, - "layer": { - "#bigint": "0" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "created": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [] - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "0" - } - ], - "policy": { - "#bigint": "0" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "0" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "1000" - }, - "result": { - "#bigint": "0" - }, - "retentionMs": { - "#bigint": "5000" - }, - "shared": true - } - ], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "1000" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "owners": [ - { - "#bigint": "0" - } - ], - "policy": { - "#bigint": "0" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "1000" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "5000" - }, - "shared": true - } - ], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "providerFault" - }, - "mbt::actionTaken": "providerFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "1000" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "owners": [ - { - "#bigint": "0" - } - ], - "policy": { - "#bigint": "0" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": true, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "1000" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "5000" - }, - "shared": true - } - ], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [ - { - "call": { - "context": { - "#bigint": "0" - }, - "enabled": true, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "keyFailed": false - }, - "caller": { - "#bigint": "1" - }, - "policyCall": { - "#bigint": "1" - } - } - ], - "localExpires": [ - { - "#bigint": "1000" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "owners": [ - { - "#bigint": "0" - }, - { - "#bigint": "-1" - } - ], - "policy": { - "#bigint": "0" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": true, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "1000" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "5000" - }, - "shared": true - } - ], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "1000" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "owners": [ - { - "#bigint": "0" - }, - { - "#bigint": "1" - } - ], - "policy": { - "#bigint": "0" - }, - "policyErrors": [ - { - "errorType": "config_resolution", - "layer": "noop" - } - ], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": true, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "1" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "1000" - }, - "localValue": { - "#bigint": "1" - } - }, - "remoteValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "1000" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "5000" - }, - "shared": true - }, - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "0" - }, - "retentionMs": { - "#bigint": "0" - }, - "shared": false - } - ], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "1000" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "owners": [ - { - "#bigint": "0" - }, - { - "#bigint": "1" - } - ], - "policy": { - "#bigint": "0" - }, - "policyErrors": [ - { - "errorType": "config_resolution", - "layer": "noop" - } - ], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": true, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "1" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "1000" - }, - "localValue": { - "#bigint": "1" - } - }, - "remoteValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "1000" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "5000" - }, - "shared": true - }, - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "2" - }, - "retentionMs": { - "#bigint": "0" - }, - "shared": false - } - ], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "providerFault" - }, - "mbt::actionTaken": "providerFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "1000" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "owners": [ - { - "#bigint": "0" - }, - { - "#bigint": "1" - } - ], - "policy": { - "#bigint": "0" - }, - "policyErrors": [ - { - "errorType": "config_resolution", - "layer": "noop" - } - ], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "1" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "1000" - }, - "localValue": { - "#bigint": "1" - } - }, - "remoteValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "1000" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "5000" - }, - "shared": true - }, - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "2" - }, - "retentionMs": { - "#bigint": "0" - }, - "shared": false - } - ], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [ - { - "call": { - "context": { - "#bigint": "0" - }, - "enabled": true, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "keyFailed": false - }, - "caller": { - "#bigint": "2" - }, - "policyCall": { - "#bigint": "2" - } - } - ], - "localExpires": [ - { - "#bigint": "1000" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "owners": [ - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "-1" - } - ], - "policy": { - "#bigint": "0" - }, - "policyErrors": [ - { - "errorType": "config_resolution", - "layer": "noop" - } - ], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "1" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "1000" - }, - "localValue": { - "#bigint": "1" - } - }, - "remoteValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "1000" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "5000" - }, - "shared": true - }, - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "2" - }, - "retentionMs": { - "#bigint": "0" - }, - "shared": false - } - ], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "1000" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "owners": [ - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "-1" - } - ], - "policy": { - "#bigint": "0" - }, - "policyErrors": [ - { - "errorType": "config_resolution", - "layer": "noop" - } - ], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "2" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "2" - }, - "localExpires": { - "#bigint": "1000" - }, - "localValue": { - "#bigint": "1" - } - }, - "remoteValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "1000" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "5000" - }, - "shared": true - }, - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "2" - }, - "retentionMs": { - "#bigint": "0" - }, - "shared": false - } - ], - "writeFailed": false - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"created":[{"#bigint":"0"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"0"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"0"},{"#bigint":"0"}],"localValues":[{"#bigint":"0"},{"#bigint":"0"}],"lru":[[]],"now":{"#bigint":"0"},"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[],"policy":{"#bigint":"0"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"-1"},"key":{"#bigint":"-1"},"layer":{"#bigint":"0"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"0"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"created":[{"#bigint":"0"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"0"},{"#bigint":"0"}],"held":[{"call":{"context":{"#bigint":"0"},"enabled":true,"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"keyFailed":false},"caller":{"#bigint":"0"},"policyCall":{"#bigint":"0"}}],"localExpires":[{"#bigint":"0"},{"#bigint":"0"}],"localValues":[{"#bigint":"0"},{"#bigint":"0"}],"lru":[[]],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"}],"policy":{"#bigint":"0"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"-1"},"key":{"#bigint":"-1"},"layer":{"#bigint":"0"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"0"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"created":[{"#bigint":"0"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"0"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"0"},{"#bigint":"0"}],"localValues":[{"#bigint":"0"},{"#bigint":"0"}],"lru":[[]],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"}],"policy":{"#bigint":"0"},"policyErrors":[],"processFlights":[{"#bigint":"0"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"0"},"key":{"#bigint":"0"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"0"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"1000"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"5000"},"shared":true}],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"1000"},{"#bigint":"0"}],"localValues":[{"#bigint":"1"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"}],"policy":{"#bigint":"0"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"0"},"key":{"#bigint":"0"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"1"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"1000"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"5000"},"shared":true}],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"1"},"name":"providerFault"},"mbt::actionTaken":"providerFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"1000"},{"#bigint":"0"}],"localValues":[{"#bigint":"1"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"}],"policy":{"#bigint":"0"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":true,"readFailed":false,"receipt":{"caller":{"#bigint":"0"},"key":{"#bigint":"0"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"1"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"1000"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"5000"},"shared":true}],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[{"call":{"context":{"#bigint":"0"},"enabled":true,"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"keyFailed":false},"caller":{"#bigint":"1"},"policyCall":{"#bigint":"1"}}],"localExpires":[{"#bigint":"1000"},{"#bigint":"0"}],"localValues":[{"#bigint":"1"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"-1"}],"policy":{"#bigint":"0"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":true,"readFailed":false,"receipt":{"caller":{"#bigint":"0"},"key":{"#bigint":"0"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"1"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"1000"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"5000"},"shared":true}],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"1000"},{"#bigint":"0"}],"localValues":[{"#bigint":"1"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"}],"policy":{"#bigint":"0"},"policyErrors":[{"errorType":"config_resolution","layer":"noop"}],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":true,"readFailed":false,"receipt":{"caller":{"#bigint":"1"},"key":{"#bigint":"0"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"1000"},"localValue":{"#bigint":"1"}},"remoteValues":[{"#bigint":"1"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"1000"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"5000"},"shared":true},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"1000"},{"#bigint":"0"}],"localValues":[{"#bigint":"1"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"}],"policy":{"#bigint":"0"},"policyErrors":[{"errorType":"config_resolution","layer":"noop"}],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":true,"readFailed":false,"receipt":{"caller":{"#bigint":"1"},"key":{"#bigint":"0"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"1000"},"localValue":{"#bigint":"1"}},"remoteValues":[{"#bigint":"1"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"1000"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"5000"},"shared":true},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"0"},"shared":false}],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"0"},"name":"providerFault"},"mbt::actionTaken":"providerFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"1000"},{"#bigint":"0"}],"localValues":[{"#bigint":"1"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"}],"policy":{"#bigint":"0"},"policyErrors":[{"errorType":"config_resolution","layer":"noop"}],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"1"},"key":{"#bigint":"0"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"1000"},"localValue":{"#bigint":"1"}},"remoteValues":[{"#bigint":"1"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"1000"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"5000"},"shared":true},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"0"},"shared":false}],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[{"call":{"context":{"#bigint":"0"},"enabled":true,"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"keyFailed":false},"caller":{"#bigint":"2"},"policyCall":{"#bigint":"2"}}],"localExpires":[{"#bigint":"1000"},{"#bigint":"0"}],"localValues":[{"#bigint":"1"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"-1"}],"policy":{"#bigint":"0"},"policyErrors":[{"errorType":"config_resolution","layer":"noop"}],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"1"},"key":{"#bigint":"0"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"1000"},"localValue":{"#bigint":"1"}},"remoteValues":[{"#bigint":"1"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"1000"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"5000"},"shared":true},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"0"},"shared":false}],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"1000"},{"#bigint":"0"}],"localValues":[{"#bigint":"1"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"-1"}],"policy":{"#bigint":"0"},"policyErrors":[{"errorType":"config_resolution","layer":"noop"}],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"2"},"key":{"#bigint":"0"},"layer":{"#bigint":"2"},"localExpires":{"#bigint":"1000"},"localValue":{"#bigint":"1"}},"remoteValues":[{"#bigint":"1"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"1000"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"5000"},"shared":true},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"0"},"shared":false}],"writeFailed":false}} ] } diff --git a/formal/profile-lint-baseline.json b/formal/profile-lint-baseline.json index 121ccbb6..e9ab1c28 100644 --- a/formal/profile-lint-baseline.json +++ b/formal/profile-lint-baseline.json @@ -2,22 +2,33 @@ "schemaVersion": 3, "quintVersion": "0.32.0", "kernelModules": [ + "adapter_replies", "calls", "clock", + "compression", "config_errors", "deadlines", "diagnostics", "encodings", "flights", + "instances", "layer_policy", + "local_faults", "local_storage", + "markers", + "metrics", + "payloads", "policy_gate", "policy_overlay", "receipts", + "recovery", "remote_frames", + "remote_io", + "remote_writes", "request_memo", "runtime_policy", - "serving" + "serving", + "shadow" ], "profiles": [ { @@ -31,8 +42,24 @@ "id": "effects", "model": "formal/dialcache-effects-conformance.qnt", "module": "dialcache_effects_conformance", - "libraryTransitions": [], - "compositionViolations": 64 + "libraryTransitions": [ + "adapter_replies::queue", + "clock::advance", + "clock::shiftWall", + "metrics::advance", + "metrics::begin", + "metrics::invalidate", + "metrics::releaseDump", + "metrics::releaseWrite", + "metrics::settleLoad", + "metrics::settleLoader", + "metrics::settleRead", + "remote_frames::seedFrame", + "remote_io::latestLoad", + "remote_writes::latestDump", + "remote_writes::latestWrite" + ], + "compositionViolations": 0 }, { "id": "scope", @@ -52,8 +79,18 @@ "id": "recovery", "model": "formal/dialcache-recovery-conformance.qnt", "module": "dialcache_recovery_conformance", - "libraryTransitions": [], - "compositionViolations": 80 + "libraryTransitions": [ + "clock::shiftWall", + "diagnostics::advance", + "diagnostics::beginRead", + "diagnostics::settleLoad", + "diagnostics::settleLoader", + "remote_frames::seedAged", + "remote_io::latestLoad", + "serving::closeScope", + "serving::invalidate" + ], + "compositionViolations": 0 }, { "id": "policy", @@ -78,15 +115,38 @@ "id": "shadow", "model": "formal/dialcache-shadow-conformance.qnt", "module": "dialcache_shadow_conformance", - "libraryTransitions": [], - "compositionViolations": 96 + "libraryTransitions": [ + "clock::shiftWall", + "remote_frames::seedFrame", + "remote_io::latestOrdinal", + "remote_writes::latestDump", + "remote_writes::latestWrite", + "serving::invalidate", + "shadow::advanceHeld", + "shadow::beginDark", + "shadow::latestLoad", + "shadow::latestRead", + "shadow::releaseDump", + "shadow::releaseLoad", + "shadow::releaseRead", + "shadow::releaseWrite", + "shadow::settleHeld" + ], + "compositionViolations": 0 }, { "id": "admission", "model": "formal/dialcache-admission-conformance.qnt", "module": "dialcache_admission_conformance", - "libraryTransitions": [], - "compositionViolations": 65 + "libraryTransitions": [ + "remote_frames::seedFrame", + "shadow::advance", + "shadow::beginHeld", + "shadow::settleLoad", + "shadow::settleLoader", + "shadow::settleRead" + ], + "compositionViolations": 0 }, { "id": "layers", @@ -108,22 +168,50 @@ "id": "independent", "model": "formal/dialcache-independent-conformance.qnt", "module": "dialcache_independent_conformance", - "libraryTransitions": [], - "compositionViolations": 66 + "libraryTransitions": [ + "deadlines::advance", + "deadlines::begin", + "deadlines::settleLoad", + "deadlines::settleLoader", + "deadlines::settleRead", + "remote_frames::seedAged", + "serving::invalidate" + ], + "compositionViolations": 0 }, { "id": "recovery-read", "model": "formal/dialcache-recovery-read-conformance.qnt", "module": "dialcache_recovery_read_conformance", - "libraryTransitions": [], - "compositionViolations": 80 + "libraryTransitions": [ + "compression::settleLoader", + "compression::settleRead", + "markers::advance", + "markers::invalidate", + "markers::observe", + "remote_frames::seedAged", + "remote_frames::storeFrame", + "remote_io::begin", + "remote_io::latestLoad", + "remote_io::latestOrdinal", + "remote_io::latestRead", + "remote_io::settleLoad", + "serving::closeScope" + ], + "compositionViolations": 0 }, { "id": "local-failure", "model": "formal/dialcache-local-failure-conformance.qnt", "module": "dialcache_local_failure_conformance", - "libraryTransitions": [], - "compositionViolations": 24 + "libraryTransitions": [ + "flights::latest", + "layer_policy::resolution", + "local_faults::begin", + "local_faults::settle", + "remote_frames::seedFrame" + ], + "compositionViolations": 0 }, { "id": "runtime-boundaries", @@ -143,15 +231,26 @@ "id": "shadow-layers", "model": "formal/dialcache-shadow-layers-conformance.qnt", "module": "dialcache_shadow_layers_conformance", - "libraryTransitions": [], - "compositionViolations": 98 + "libraryTransitions": [ + "remote_frames::seedAged", + "shadow::advance", + "shadow::begin", + "shadow::releaseDump", + "shadow::releaseWrite", + "shadow::settle" + ], + "compositionViolations": 0 }, { "id": "local-clock", "model": "formal/dialcache-local-clock-conformance.qnt", "module": "dialcache_local_clock_conformance", - "libraryTransitions": [], - "compositionViolations": 11 + "libraryTransitions": [ + "clock::advanceTicks", + "instances::construct", + "serving::callLocal" + ], + "compositionViolations": 0 }, { "id": "source-budgets", diff --git a/formal/profiles.json b/formal/profiles.json index 17fa6e2e..ae8bbecc 100644 --- a/formal/profiles.json +++ b/formal/profiles.json @@ -39,7 +39,8 @@ "formal/replay/witnesses/trace.mjs", "formal/replay/witnesses/evidence.mjs", "formal/replay/witnesses/effects.mjs", - "formal/replay/witnesses/effects-authority.mjs" + "formal/replay/witnesses/effects-authority.mjs", + "formal/replay/witnesses/fidelity.mjs" ] }, { @@ -69,8 +70,8 @@ "formal/replay/witnesses/trace.mjs", "formal/replay/witnesses/evidence.mjs", "formal/replay/witnesses/recovery.mjs", - "formal/replay/witnesses/labels.mjs", - "formal/replay/witnesses/recovery-shadow.mjs" + "formal/replay/witnesses/fidelity.mjs", + "formal/replay/witnesses/labels.mjs" ], "inputEncoding": "explicit-v1" }, @@ -87,6 +88,7 @@ "formal/replay/witnesses/trace.mjs", "formal/replay/witnesses/evidence.mjs", "formal/replay/witnesses/policy.mjs", + "formal/replay/witnesses/fidelity.mjs", "formal/replay/witnesses/labels.mjs" ] }, @@ -104,9 +106,9 @@ "formal/replay/witnesses/evidence.mjs", "formal/replay/witnesses/shadow.mjs", "formal/replay/witnesses/labels.mjs", - "formal/replay/witnesses/recovery-shadow.mjs", "formal/replay/witnesses/shadow-diagnostics.mjs", - "formal/replay/witnesses/public-prefix.mjs" + "formal/replay/witnesses/public-prefix.mjs", + "formal/replay/witnesses/fidelity.mjs" ] }, { @@ -120,7 +122,8 @@ "formal/replay/witnesses/index.mjs", "formal/replay/witnesses/trace.mjs", "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/admission.mjs" + "formal/replay/witnesses/admission.mjs", + "formal/replay/witnesses/fidelity.mjs" ], "inputEncoding": "explicit-v1" }, @@ -152,7 +155,8 @@ "formal/replay/witnesses/index.mjs", "formal/replay/witnesses/trace.mjs", "formal/replay/witnesses/evidence.mjs", - "formal/replay/witnesses/independent.mjs" + "formal/replay/witnesses/independent.mjs", + "formal/replay/witnesses/fidelity.mjs" ] }, { @@ -337,6 +341,8 @@ "formal/replay/protocol.schema.json", "formal/replay/schema.d.mts", "formal/replay/schema.mjs", + "formal/replay/settlement.d.mts", + "formal/replay/settlement.mjs", "formal/replay/sources.d.mts", "formal/replay/sources.mjs", "formal/replay/validation.d.mts", @@ -349,6 +355,8 @@ "formal/replay/witnesses/effects.mjs", "formal/replay/witnesses/evidence.d.mts", "formal/replay/witnesses/evidence.mjs", + "formal/replay/witnesses/fidelity.d.mts", + "formal/replay/witnesses/fidelity.mjs", "formal/replay/witnesses/independent.d.mts", "formal/replay/witnesses/independent.mjs", "formal/replay/witnesses/index.d.mts", @@ -371,8 +379,6 @@ "formal/replay/witnesses/recovery-admission.mjs", "formal/replay/witnesses/recovery-read.d.mts", "formal/replay/witnesses/recovery-read.mjs", - "formal/replay/witnesses/recovery-shadow.d.mts", - "formal/replay/witnesses/recovery-shadow.mjs", "formal/replay/witnesses/recovery.d.mts", "formal/replay/witnesses/recovery.mjs", "formal/replay/witnesses/runtime-boundaries.d.mts", diff --git a/formal/quint-case-audit.json b/formal/quint-case-audit.json deleted file mode 100644 index 8e907640..00000000 --- a/formal/quint-case-audit.json +++ /dev/null @@ -1,5133 +0,0 @@ -{ - "schemaVersion": 1, - "scope": "Manual applicability audit. A scheduled check supports only its stated scope, not necessarily every clause of a semantic case. Definitions describe transition semantics and are not independent invariants or extra coverage. No model state-space exhaustion or universal refinement is claimed.", - "checks": [ - { - "case": "C01.no-cache-plumbing", - "reference": "formal/dialcache-core.qnt:passThroughSkipsCacheMachinery", - "kind": "invariant", - "scope": "Disabled/outside/closed calls make zero policy, key, cache read, or cache write operations in the presence-bit model; no clock claim." - }, - { - "case": "C02.nested-memo", - "reference": "formal/dialcache-core.qnt:nestedDisablePreservesMemoTest", - "kind": "regression", - "scope": "Nested enable/disable leaves the outer memo available on reenable." - }, - { - "case": "C02.reenabled-memo", - "reference": "formal/dialcache-scope-conformance.qnt:nestedCloseAndDisabledBypassKeepOuterMemoTest", - "kind": "regression", - "scope": "One nested enabled, disabled, and reenabled history preserves the root value; other sibling histories remain generated replay evidence." - }, - { - "case": "C03.late-publication", - "reference": "formal/dialcache-core.qnt:requestValueBelongsToCurrentScope", - "kind": "invariant", - "scope": "A memo value belongs to the currently open scope; replacement scope receives no late old value." - }, - { - "case": "C03.late-publication", - "reference": "formal/dialcache-core.qnt:lateResultCannotEnterReplacementScopeTest", - "kind": "regression", - "scope": "A memo value belongs to the currently open scope; replacement scope receives no late old value." - }, - { - "case": "C03.late-publication", - "reference": "formal/dialcache-scope-conformance.qnt:closedScopesHaveNoMemo", - "kind": "invariant", - "scope": "Closed slots contain no memo/flight, and a replacement probe starts new source work after the old source settles." - }, - { - "case": "C03.late-publication", - "reference": "formal/dialcache-scope-conformance.qnt:lateSourceCannotPopulateReplacementTest", - "kind": "regression", - "scope": "Closed slots contain no memo/flight, and a replacement probe starts new source work after the old source settles." - }, - { - "case": "C03.detached-bypass", - "reference": "formal/dialcache-core.qnt:passThroughSkipsCacheMachinery", - "kind": "invariant", - "scope": "Outside/closed calls have no key, policy, or cache effects in the presence-bit model; source deadlines are not modeled here." - }, - { - "case": "C04.pending-policy", - "reference": "formal/dialcache-scope-conformance.qnt:policyReplyAfterCloseBypassesRequestTest", - "kind": "regression", - "scope": "A provider released after root closure invokes source outside caching and writes no memo." - }, - { - "case": "C06.absent-request", - "reference": "formal/dialcache-scope-conformance.qnt:absentValueIsMemoizedTest", - "kind": "regression", - "scope": "The explicit absent value code is memoized and reused without a second source." - }, - { - "case": "C06.absent-local", - "reference": "formal/dialcache-policy-conformance.qnt:absentValueIsStoredAndReusedTest", - "kind": "regression", - "scope": "A source absent value is published and the subsequent local hit reuses it; this regression does not probe remote-only reuse." - }, - { - "case": "C07.no-capacity-limit", - "reference": "formal/dialcache-layers-conformance.qnt:requestMemoExceedsLocalCapacityTest", - "kind": "regression", - "scope": "Three request identities remain memoized with zero process-local capacity; a bounded independence check, not an unbounded allocation claim." - }, - { - "case": "C08.shared-capacity", - "reference": "formal/dialcache-layers-conformance.qnt:capacityIsPerInstance", - "kind": "invariant", - "scope": "Capacity applies across operation identities within each instance, with a concrete eviction probe after recency promotion." - }, - { - "case": "C08.shared-capacity", - "reference": "formal/dialcache-layers-conformance.qnt:localReadPromotesBeforeEvictionTest", - "kind": "regression", - "scope": "Capacity applies across operation identities within each instance, with a concrete eviction probe after recency promotion." - }, - { - "case": "C08.read-promotes", - "reference": "formal/dialcache-layers-conformance.qnt:localReadPromotesBeforeEvictionTest", - "kind": "regression", - "scope": "A middle local hit promotes recency, and subsequent probes distinguish which operation identity was evicted." - }, - { - "case": "C09.fixed-local-ttl", - "reference": "formal/dialcache-policy-conformance.qnt:localHitDoesNotRenewInsertionTtlTest", - "kind": "regression", - "scope": "A hit at 500ms leaves the original 1000ms insertion deadline; the exact-boundary probe starts a new source." - }, - { - "case": "C09.fixed-local-ttl", - "reference": "formal/dialcache-source-budgets-conformance.qnt:localEntryExpiresAfterItsTtlTest", - "kind": "regression", - "scope": "In the composed source-budgets profile a local entry published at settlement is served to a same-key enabled call one millisecond before its 1000ms insertion expiry and no longer at the exact boundary, where the next call starts a source; the deterministic regression pins the public result and loader count at both instants." - }, - { - "case": "C09.wall-rollback", - "reference": "formal/dialcache-policy-conformance.qnt:wallRollbackDoesNotExtendLocalTtlTest", - "kind": "regression", - "scope": "Local expiry advances on elapsed time despite wall-clock rollback." - }, - { - "case": "C10.zero-capacity", - "reference": "formal/dialcache-layers-conformance.qnt:zeroCapacityHasNoLocalValues", - "kind": "invariant", - "scope": "Zero capacity stores no local values, shares concurrent work, and starts a new source after settlement." - }, - { - "case": "C10.zero-capacity", - "reference": "formal/dialcache-layers-conformance.qnt:zeroCapacityKeepsSharingWithoutStorageTest", - "kind": "regression", - "scope": "Zero capacity stores no local values, shares concurrent work, and starts a new source after settlement." - }, - { - "case": "C11.one-registered-flight", - "reference": "formal/dialcache-effects-conformance.qnt:oneRegisteredSource", - "kind": "invariant", - "scope": "At most one source has registered ownership in the one-key effects profile. Abandoned external work is distinct." - }, - { - "case": "C11.one-registered-flight", - "reference": "formal/dialcache-flight-deadlines.qnt:oneSourcePerRegisteredFlight", - "kind": "invariant", - "scope": "At most one source starts for a registered eligible one-key flight; abandoned raw work is separate." - }, - { - "case": "C12.separate-request-memos", - "reference": "formal/dialcache-layers-conformance.qnt:requestMissesShareProcessAndMemoizeSeparatelyTest", - "kind": "regression", - "scope": "Two request scopes join one process source and both reuse their separate memos after shared settlement." - }, - { - "case": "C14.inactive-layers", - "reference": "formal/dialcache-flight-deadlines.qnt:flightsRequireEligibleCaching", - "kind": "invariant", - "scope": "A registered flight requires enabled caching, coalescing policy, and an eligible request/shared layer." - }, - { - "case": "C14.inactive-layers", - "reference": "formal/dialcache-flight-deadlines.qnt:noFlightWhenCoalescingIneligible", - "kind": "invariant", - "scope": "A registered flight requires enabled caching, coalescing policy, and an eligible request/shared layer." - }, - { - "case": "C15.shared-error-retry", - "reference": "formal/dialcache-scope-conformance.qnt:rejectedFlightAllowsRetryTest", - "kind": "regression", - "scope": "One rejected source supplies both request followers, then a later call starts another source." - }, - { - "case": "C16.sparse-leaves", - "reference": "formal/dialcache-runtime-policy.qnt:runtimeOverlayIsLeafWise", - "kind": "invariant", - "scope": "Independently checks all eight captured leaves against runtime/base precedence without calling the transition resolve helper. This valid-overlay abstraction does not classify malformed host values." - }, - { - "case": "C16.ttl-implies-ramp", - "reference": "formal/dialcache-runtime-policy.qnt:configuredTtlImpliesDefaultFullRamp", - "kind": "invariant", - "scope": "When both runtime and static ramps are omitted and resolved TTL is positive, independently require a full ramp." - }, - { - "case": "C17.library-defaults", - "reference": "formal/dialcache-runtime-policy.qnt:featureLibraryDefaults", - "kind": "invariant", - "scope": "When both layers of policy omit each feature, independently require request/recovery/shadow off and coalescing on." - }, - { - "case": "C18.captured-insertion", - "reference": "formal/dialcache-runtime-policy.qnt:existingLocalEntryKeepsInsertionTtl", - "kind": "invariant", - "scope": "An invocation captures its TTL before later overlay changes; the installed local TTL remains the insertion value." - }, - { - "case": "C18.captured-insertion", - "reference": "formal/dialcache-runtime-policy.qnt:policyChangeDuringInvocationTest", - "kind": "regression", - "scope": "An invocation captures its TTL before later overlay changes; the installed local TTL remains the insertion value." - }, - { - "case": "C18.existing-leader", - "reference": "formal/dialcache-policy-conformance.qnt:sharedSourcesKeepRegistration", - "kind": "invariant", - "scope": "Independent completion/failure cannot remove the shared leader registration; a reenabled caller joins that leader before a newer local hit." - }, - { - "case": "C18.existing-leader", - "reference": "formal/dialcache-policy-conformance.qnt:independentCompletionKeepsRegisteredLeaderTest", - "kind": "regression", - "scope": "Independent completion/failure cannot remove the shared leader registration; a reenabled caller joins that leader before a newer local hit." - }, - { - "case": "C18.existing-leader", - "reference": "formal/dialcache-policy-conformance.qnt:independentFailureKeepsRegisteredLeaderTest", - "kind": "regression", - "scope": "Independent completion/failure cannot remove the shared leader registration; a reenabled caller joins that leader before a newer local hit." - }, - { - "case": "C20.invalid-invocation-policy", - "reference": "formal/dialcache-policy-conformance.qnt:invalidReadBudgetBypassesAllCachingTest", - "kind": "regression", - "scope": "An invalid read budget causes two separate sources and no reads, local storage, or remote publication." - }, - { - "case": "C21.invalid-shadow", - "reference": "formal/dialcache-policy-conformance.qnt:invalidShadowPreservesNormalServingTest", - "kind": "regression", - "scope": "Invalid shadow ramp leaves normal source publication and subsequent remote serving available, with no shadow outcome." - }, - { - "case": "C23.library-read-budget", - "reference": "formal/dialcache-effects-conformance.qnt:libraryReadBudgetIsFiftyMillisecondsTest", - "kind": "regression", - "scope": "Default read remains pending before 50ms and starts a fresh 10ms source budget at exactly 50ms." - }, - { - "case": "C23.source-start", - "reference": "formal/dialcache-flight-deadlines.qnt:fallbackDeadlineStartsWithFallback", - "kind": "invariant", - "scope": "The deadline equals actual fallback start plus the budget; the delayed lookup regression preserves the entire source budget after cache lookup time." - }, - { - "case": "C23.source-start", - "reference": "formal/dialcache-flight-deadlines.qnt:delayedLookupKeepsFullSourceBudgetTest", - "kind": "regression", - "scope": "The deadline equals actual fallback start plus the budget; the delayed lookup regression preserves the entire source budget after cache lookup time." - }, - { - "case": "C23.source-start", - "reference": "formal/dialcache-effects-conformance.qnt:readTimeoutStartsIndependentSourceDeadlineTest", - "kind": "regression", - "scope": "Two shared callers consume one read timeout, then get the full source budget and no remote refill." - }, - { - "case": "C24.follower-read", - "reference": "formal/dialcache-effects-conformance.qnt:followerKeepsAcceptedReadBudgetTest", - "kind": "regression", - "scope": "A later runtime budget change and follower do not replace the leader read's accepted 30ms budget." - }, - { - "case": "C24.independent-reads", - "reference": "formal/dialcache-independent-conformance.qnt:independentReadDeadlinesStartSeparateSourcesTest", - "kind": "regression", - "scope": "Two uncoalesced reads started 1ms apart expire separately and start separate sources." - }, - { - "case": "C25.late-source-rejected", - "reference": "formal/dialcache-flight-deadlines.qnt:timedOutSourceCannotPublish", - "kind": "invariant", - "scope": "The abstract late-settlement action represents either success or rejection at elapsed >= budget; timeout prevents acceptance/publication before timer delivery." - }, - { - "case": "C25.late-source-rejected", - "reference": "formal/dialcache-flight-deadlines.qnt:lateSettlementBeforeTimerTest", - "kind": "regression", - "scope": "The abstract late-settlement action represents either success or rejection at elapsed >= budget; timeout prevents acceptance/publication before timer delivery." - }, - { - "case": "C25.late-rejection", - "reference": "formal/dialcache-flight-deadlines.qnt:timedOutSourceCannotPublish", - "kind": "invariant", - "scope": "The abstract late-settlement action represents either success or rejection at elapsed >= budget; timeout prevents acceptance/publication before timer delivery." - }, - { - "case": "C25.late-rejection", - "reference": "formal/dialcache-flight-deadlines.qnt:lateSettlementBeforeTimerTest", - "kind": "regression", - "scope": "The abstract late-settlement action represents either success or rejection at elapsed >= budget; timeout prevents acceptance/publication before timer delivery." - }, - { - "case": "C25.abandoned-overlap", - "reference": "formal/dialcache-flight-deadlines.qnt:abandonedSourceMayOverlapNewFlightTest", - "kind": "regression", - "scope": "After timeout, old raw source may settle while a new registered source remains active." - }, - { - "case": "C25.abandoned-overlap", - "reference": "formal/dialcache-effects-conformance.qnt:timedOutLoaderOverlapsNewFlightTest", - "kind": "regression", - "scope": "A timeout caller and pending new caller coexist with one abandoned and one registered source." - }, - { - "case": "C26.publication-ownership", - "reference": "formal/dialcache-flight-deadlines.qnt:publicationRequiresAcceptedSource", - "kind": "invariant", - "scope": "Publication requires accepted source and may complete after the former source deadline." - }, - { - "case": "C26.publication-ownership", - "reference": "formal/dialcache-flight-deadlines.qnt:acceptedPublicationOutlivesDeadlineTest", - "kind": "regression", - "scope": "Publication requires accepted source and may complete after the former source deadline." - }, - { - "case": "C26.publication-ownership", - "reference": "formal/dialcache-effects-conformance.qnt:writeRequiresAcceptedSource", - "kind": "invariant", - "scope": "Accepted serialization and dispatched write may remain pending beyond source deadline, then return the source value." - }, - { - "case": "C26.publication-ownership", - "reference": "formal/dialcache-effects-conformance.qnt:acceptedWriteOutlivesDeadlineTest", - "kind": "regression", - "scope": "Accepted serialization and dispatched write may remain pending beyond source deadline, then return the source value." - }, - { - "case": "C26.decode-ownership", - "reference": "formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest", - "kind": "regression", - "scope": "Accepted fresh decode survives later invalidation and elapsed read/source-sized budget without starting source or cancelling the acquired read." - }, - { - "case": "C27.dump-failure", - "reference": "formal/dialcache-effects-conformance.qnt:dumpFailurePreservesSourceTest", - "kind": "regression", - "scope": "Serialization failure returns source value and dispatches no write." - }, - { - "case": "C27.write-failure", - "reference": "formal/dialcache-effects-conformance.qnt:writeFailurePreservesSourceTest", - "kind": "regression", - "scope": "Failed write preserves the source value and does not commit remote storage in this adapter fixture." - }, - { - "case": "C27.local-read-failure", - "reference": "formal/dialcache-core.qnt:failedLocalReadSkipsReuseAndPublication", - "kind": "invariant", - "scope": "A local read failure forbids local reuse and publication; local failures are modeled as injected environment health, without a real public fault-injection replay." - }, - { - "case": "C27.local-write-failure", - "reference": "formal/dialcache-core.qnt:failedLocalWritePreservesAcceptedResult", - "kind": "invariant", - "scope": "A local write failure preserves the accepted result; local failures are modeled as injected environment health, without a real public fault-injection replay." - }, - { - "case": "C28.no-refill-after-read-failure", - "reference": "formal/dialcache-core.qnt:remoteFailureNeverRefills", - "kind": "invariant", - "scope": "Remote read failure prevents refill in the layer presence abstraction." - }, - { - "case": "C28.no-refill-after-read-failure", - "reference": "formal/dialcache-effects-conformance.qnt:readTimeoutStartsIndependentSourceDeadlineTest", - "kind": "regression", - "scope": "Timeout suppresses refill; a late read accepted only after elapsed budget starts source and cannot be decoded into a hit." - }, - { - "case": "C28.no-refill-after-read-failure", - "reference": "formal/dialcache-effects-conformance.qnt:lateReadCannotBecomeHitTest", - "kind": "regression", - "scope": "Timeout suppresses refill; a late read accepted only after elapsed budget starts source and cannot be decoded into a hit." - }, - { - "case": "C29.missing-redis-local", - "reference": "formal/dialcache-layers-conformance.qnt:absentRemoteHasNoAdapterEffects", - "kind": "invariant", - "scope": "Missing adapter creates no remote effects; valid local storage is still filled and reused." - }, - { - "case": "C29.missing-redis-local", - "reference": "formal/dialcache-layers-conformance.qnt:absentRemotePreservesLocalReuseTest", - "kind": "regression", - "scope": "Missing adapter creates no remote effects; valid local storage is still filled and reused." - }, - { - "case": "C29.missing-redis-maintenance", - "reference": "formal/dialcache-layers-conformance.qnt:absentRemoteMaintenancePreservesLocalReuseTest", - "kind": "regression", - "scope": "Missing-remote maintenance returns its distinct error, invokes no remote adapter, and preserves a later local hit." - }, - { - "case": "C31.tracked-no-local-fill", - "reference": "formal/dialcache-core.qnt:trackedRemoteFallbackSuppressesLocalPublication", - "kind": "invariant", - "scope": "Tracked source after semantic remote miss cannot publish to local storage." - }, - { - "case": "C31.tracked-no-local-fill", - "reference": "formal/dialcache-layers-conformance.qnt:trackedSourceWaitsForValidatedReadToWarmLocalTest", - "kind": "regression", - "scope": "Tracked source leaves local empty; a later validated remote hit warms it and the next local hit avoids remote." - }, - { - "case": "C34.second-fence", - "reference": "formal/dialcache-effects-conformance.qnt:rollbackDuringDumpRechecksObservedFenceTest", - "kind": "regression", - "scope": "Rollback during serialization makes the second observed-fence check skip native write while preserving source result." - }, - { - "case": "C35.delayed-old-write", - "reference": "formal/dialcache-tracked-invalidation.qnt:staleValueAfterInvalidationIsFenced", - "kind": "invariant", - "scope": "Safety is conditional on the explicit future-buffer, stale-write-delay, and writer-lead bounds in the model." - }, - { - "case": "C35.delayed-old-write", - "reference": "formal/dialcache-tracked-invalidation.qnt:acquiredAfterInvalidationDoesNotServeStale", - "kind": "invariant", - "scope": "Safety is conditional on the explicit future-buffer, stale-write-delay, and writer-lead bounds in the model." - }, - { - "case": "C35.delayed-old-write", - "reference": "formal/dialcache-effects-conformance.qnt:delayedWriteRemainsFencedTest", - "kind": "regression", - "scope": "A dispatched old write completing after invalidation does not become a readable tracked hit on the next call." - }, - { - "case": "C36.acquired-fresh", - "reference": "formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest", - "kind": "regression", - "scope": "The acquired fresh snapshot survives a later invalidation before asynchronous decode returns." - }, - { - "case": "C36.acquired-fresh", - "reference": "formal/dialcache-independent-conformance.qnt:acceptedFreshDecodeSurvivesOtherInvalidationTest", - "kind": "regression", - "scope": "An already acquired snapshot still returns while a later independent call observes invalidation and starts source." - }, - { - "case": "C36.acquired-local", - "reference": "formal/dialcache-layers-conformance.qnt:invalidationGroupsOperationsButPreservesAcquiredCachesTest", - "kind": "regression", - "scope": "A remote watermark change fences later remote reads while earlier local and request values remain reusable." - }, - { - "case": "C36.acquired-request", - "reference": "formal/dialcache-layers-conformance.qnt:invalidationGroupsOperationsButPreservesAcquiredCachesTest", - "kind": "regression", - "scope": "A remote watermark change fences later remote reads while earlier local and request values remain reusable." - }, - { - "case": "C38.marker-transition", - "reference": "formal/dialcache-recovery-conformance.qnt:rollbackCannotLowerInvalidationWatermarkTest", - "kind": "regression", - "scope": "A second invalidation after wall rollback does not lower the existing watermark; exact Redis retention remains vector/integration evidence." - }, - { - "case": "C40.first-stale", - "reference": "formal/dialcache-stale-recovery.qnt:recoveredStaleHasNoSharedPublication", - "kind": "invariant", - "scope": "At exact fresh boundary F=2, authorized failure returns stale with no remote/local/shadow publication; later age does not revoke the returned value." - }, - { - "case": "C40.first-stale", - "reference": "formal/dialcache-stale-recovery.qnt:servedValueCanAgeTest", - "kind": "regression", - "scope": "At exact fresh boundary F=2, authorized failure returns stale with no remote/local/shadow publication; later age does not revoke the returned value." - }, - { - "case": "C40.maximum-age", - "reference": "formal/dialcache-stale-recovery.qnt:retainedCandidateWasEligible", - "kind": "invariant", - "scope": "Every retained candidate has initial age strictly below M; therefore age exactly M cannot be retained." - }, - { - "case": "C40.future-rejected", - "reference": "formal/dialcache-stale-recovery.qnt:retainedCandidateWasEligible", - "kind": "invariant", - "scope": "Retained candidates have nonnegative stale age; a directly seeded future frame takes a plain miss without retention." - }, - { - "case": "C40.future-rejected", - "reference": "formal/dialcache-stale-recovery.qnt:futureFrameIsNotRetainedTest", - "kind": "regression", - "scope": "Retained candidates have nonnegative stale age; a directly seeded future frame takes a plain miss without retention." - }, - { - "case": "C41.success-skips-decode", - "reference": "formal/dialcache-stale-recovery.qnt:sourceSuccessDoesNotDecodeCandidate", - "kind": "invariant", - "scope": "Source success precludes any candidate decoding." - }, - { - "case": "C41.denial-keeps-error", - "reference": "formal/dialcache-recovery-conformance.qnt:operationDenialReplacesInstanceAllowTest", - "kind": "regression", - "scope": "An operation denial over instance allow preserves ordinary source error and does not start candidate decode." - }, - { - "case": "C42.timeout-only-default", - "reference": "formal/dialcache-recovery-conformance.qnt:defaultRejectsOrdinaryFailureTest", - "kind": "regression", - "scope": "The inherited timeout-only classifier preserves ordinary source error without custom classification or decode." - }, - { - "case": "C42.propagated-timeout", - "reference": "formal/dialcache-recovery-conformance.qnt:defaultRecoversPropagatedTimeoutTest", - "kind": "regression", - "scope": "A timeout error propagated by source is recovered by the default classifier without invoking a custom classifier." - }, - { - "case": "C42.explicit-denial", - "reference": "formal/dialcache-recovery-conformance.qnt:explicitDenialReplacesDefaultTest", - "kind": "regression", - "scope": "Explicit operation or instance denial preserves timeout and avoids decode." - }, - { - "case": "C42.explicit-denial", - "reference": "formal/dialcache-recovery-conformance.qnt:instanceDenialReplacesTimeoutOnlyDefaultTest", - "kind": "regression", - "scope": "Explicit operation or instance denial preserves timeout and avoids decode." - }, - { - "case": "C43.request-memo", - "reference": "formal/dialcache-recovery-conformance.qnt:closedScopesHaveNoMemo", - "kind": "invariant", - "scope": "Recovered value is reusable only in attached live request scope; closure prevents late memo publication." - }, - { - "case": "C43.request-memo", - "reference": "formal/dialcache-recovery-conformance.qnt:recoveredValueMemoizesOnlyInAttachedRequestTest", - "kind": "regression", - "scope": "Recovered value is reusable only in attached live request scope; closure prevents late memo publication." - }, - { - "case": "C43.request-memo", - "reference": "formal/dialcache-recovery-conformance.qnt:closedRequestCannotReceiveLateRecoveryMemoTest", - "kind": "regression", - "scope": "Recovered value is reusable only in attached live request scope; closure prevents late memo publication." - }, - { - "case": "C43.request-memo", - "reference": "formal/dialcache-stale-recovery.qnt:recoveredStaleHasNoSharedPublication", - "kind": "invariant", - "scope": "Recovered stale results do not publish into shared local or remote caches or schedule shadow work." - }, - { - "case": "C43.independent-values", - "reference": "formal/dialcache-independent-conformance.qnt:independentRecoveryKeepsDistinctSnapshotsTest", - "kind": "regression", - "scope": "Two independent callers retain different values and return those exact values despite invalidation and reverse decode completion." - }, - { - "case": "C44.retained-invalidation", - "reference": "formal/dialcache-independent-conformance.qnt:independentRecoveryKeepsDistinctSnapshotsTest", - "kind": "regression", - "scope": "Retained acquired bytes survive replacement for another caller and later invalidation; each caller still returns its own snapshot." - }, - { - "case": "C44.no-reread", - "reference": "formal/dialcache-stale-recovery.qnt:recoveryUsesSingleRedisRead", - "kind": "invariant", - "scope": "One initial read at most; failed read retains no candidate, never begins recovery, and preserves source rejection." - }, - { - "case": "C44.no-reread", - "reference": "formal/dialcache-stale-recovery.qnt:readFailureNeverRetains", - "kind": "invariant", - "scope": "One initial read at most; failed read retains no candidate, never begins recovery, and preserves source rejection." - }, - { - "case": "C44.no-reread", - "reference": "formal/dialcache-stale-recovery.qnt:readFailureNeverAttemptsRecovery", - "kind": "invariant", - "scope": "One initial read at most; failed read retains no candidate, never begins recovery, and preserves source rejection." - }, - { - "case": "C44.no-reread", - "reference": "formal/dialcache-stale-recovery.qnt:failedReadSkipsRecoveryTest", - "kind": "regression", - "scope": "One initial read at most; failed read retains no candidate, never begins recovery, and preserves source rejection." - }, - { - "case": "C45.maximum-age-exclusive", - "reference": "formal/dialcache-stale-recovery.qnt:servedStaleIsStrictlyWithinMaxAge", - "kind": "invariant", - "scope": "Return-event age must be < M and nonnegative; crossing to exact M during decode preserves source rejection and writes no request memo." - }, - { - "case": "C45.maximum-age-exclusive", - "reference": "formal/dialcache-stale-recovery.qnt:decodingAtMaxAgeRejectsTest", - "kind": "regression", - "scope": "Return-event age must be < M and nonnegative; crossing to exact M during decode preserves source rejection and writes no request memo." - }, - { - "case": "C45.recheck-after-decode", - "reference": "formal/dialcache-stale-recovery.qnt:servedStaleIsStrictlyWithinMaxAge", - "kind": "invariant", - "scope": "Return-event age must be < M and nonnegative; crossing to exact M during decode preserves source rejection and writes no request memo." - }, - { - "case": "C45.recheck-after-decode", - "reference": "formal/dialcache-stale-recovery.qnt:decodingAtMaxAgeRejectsTest", - "kind": "regression", - "scope": "Return-event age must be < M and nonnegative; crossing to exact M during decode preserves source rejection and writes no request memo." - }, - { - "case": "C45.captured-policy", - "reference": "formal/dialcache-independent-conformance.qnt:recoveryPolicyIsCapturedPerCallerTest", - "kind": "regression", - "scope": "Two acquired candidates retain their own max-age snapshots; after decode delay the older policy serves while the newer shorter policy preserves that caller's source error." - }, - { - "case": "C45.preserve-source-error", - "reference": "formal/dialcache-recovery-conformance.qnt:failedRecoveryPreservesDeadlineErrorTest", - "kind": "regression", - "scope": "Recovery load failure preserves the original deadline result and emits deserialization_error." - }, - { - "case": "C45.rollback-future", - "reference": "formal/dialcache-recovery-conformance.qnt:rollbackDuringRetainedDecodeRejectsFutureSnapshotTest", - "kind": "regression", - "scope": "Wall rollback during decode makes the retained snapshot future and preserves the original deadline with recovery miss/no age sample." - }, - { - "case": "C46.ignore-late-source", - "reference": "formal/dialcache-recovery-conformance.qnt:lateSuccessCannotReplaceRecoveredValueTest", - "kind": "regression", - "scope": "Late successful source cannot replace timeout recovery or create dump/write effects." - }, - { - "case": "C47.requires-hook", - "reference": "formal/dialcache-shadow-conformance.qnt:missingHookHasNoShadowEffects", - "kind": "invariant", - "scope": "Without the outcome hook no dark cache/read/load/write machinery runs; caller still returns its source value." - }, - { - "case": "C47.requires-hook", - "reference": "formal/dialcache-shadow-conformance.qnt:missingHookSkipsDarkJobTest", - "kind": "regression", - "scope": "Without the outcome hook no dark cache/read/load/write machinery runs; caller still returns its source value." - }, - { - "case": "C47.requires-capacity", - "reference": "formal/dialcache-admission-conformance.qnt:capacityIsPerInstance", - "kind": "invariant", - "scope": "Per-instance capacity bounds admitted jobs; a full instance drops its next key while another instance can admit." - }, - { - "case": "C47.requires-capacity", - "reference": "formal/dialcache-admission-conformance.qnt:fullInstanceDoesNotBlockOtherInstanceTest", - "kind": "regression", - "scope": "Per-instance capacity bounds admitted jobs; a full instance drops its next key while another instance can admit." - }, - { - "case": "C48.source-disabled", - "reference": "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic", - "kind": "invariant", - "scope": "Served-hit detached shadow sources observe disabled caching; all their outcomes remain diagnostic with no dump/write effects in this profile." - }, - { - "case": "C48.ordinary-miss", - "reference": "formal/dialcache-shadow-validation.qnt:ordinaryRemoteMissHasNoShadowJob", - "kind": "invariant", - "scope": "Ordinary remote miss always leaves shadow job idle." - }, - { - "case": "C49.dark-source-reuse", - "reference": "formal/dialcache-shadow-validation.qnt:rampedDownDoesNotDuplicateSource", - "kind": "invariant", - "scope": "Ramped-down dark work never starts a detached source; fill/comparison wait for the accepted, committed caller result." - }, - { - "case": "C49.dark-source-reuse", - "reference": "formal/dialcache-shadow-validation.qnt:comparisonAndFillWaitForSource", - "kind": "invariant", - "scope": "Ramped-down dark work never starts a detached source; fill/comparison wait for the accepted, committed caller result." - }, - { - "case": "C49.dark-source-reuse", - "reference": "formal/dialcache-shadow-validation.qnt:darkReadCanPrecedeCallerResultTest", - "kind": "regression", - "scope": "Ramped-down dark work never starts a detached source; fill/comparison wait for the accepted, committed caller result." - }, - { - "case": "C50.custom-equal", - "reference": "formal/dialcache-shadow-conformance.qnt:explicitEqualityOverridesValuesTest", - "kind": "regression", - "scope": "Explicit equal comparator overrides unequal values and yields one match and age sample." - }, - { - "case": "C50.custom-unequal", - "reference": "formal/dialcache-shadow-conformance.qnt:explicitInequalityRequiresConfirmationTest", - "kind": "regression", - "scope": "Explicit unequal comparator overrides equal values, requires C1 confirmation, and only then yields mismatch/warning." - }, - { - "case": "C50.comparator-error", - "reference": "formal/dialcache-shadow-conformance.qnt:comparisonFailureKeepsCallerTest", - "kind": "regression", - "scope": "Comparator error emits comparison_error without changing already acquired caller result or recording age." - }, - { - "case": "C51.changed-confirmation", - "reference": "formal/dialcache-shadow-validation.qnt:verdictsRequireSingleConfirmation", - "kind": "invariant", - "scope": "A mismatch requires exactly one C1 and unchanged payload bytes; changed/absent C1 cannot be reported as mismatch. The superseded outcome itself is defined by confirmation transitions." - }, - { - "case": "C51.changed-confirmation", - "reference": "formal/dialcache-shadow-validation.qnt:mismatchMeansSameC1Bytes", - "kind": "invariant", - "scope": "A mismatch requires exactly one C1 and unchanged payload bytes; changed/absent C1 cannot be reported as mismatch. The superseded outcome itself is defined by confirmation transitions." - }, - { - "case": "C51.payload-representation", - "reference": "formal/dialcache-shadow-conformance.qnt:identicalTextAndBinaryBytesConfirmMismatchTest", - "kind": "regression", - "scope": "Text and binary C0/C1 representations with identical UTF-8 bytes confirm mismatch; the byte identity is a finite fixture encoding." - }, - { - "case": "C51.bytes-not-decoded-value", - "reference": "formal/dialcache-shadow-conformance.qnt:sameDecodedValueWithDifferentBytesIsSupersededTest", - "kind": "regression", - "scope": "Padding changes C1 bytes even when decoded value is equal, so the model produces superseded." - }, - { - "case": "C52.present-not-repaired", - "reference": "formal/dialcache-shadow-validation.qnt:presentC0IsNeverRepaired", - "kind": "invariant", - "scope": "Present C0 is never repaired, irrespective of comparison verdict." - }, - { - "case": "C52.undecodable-not-repaired", - "reference": "formal/dialcache-shadow-validation.qnt:presentC0IsNeverRepaired", - "kind": "invariant", - "scope": "Undecodable present C0 still forbids fill/repair." - }, - { - "case": "C53.fill-fenced", - "reference": "formal/dialcache-shadow-validation.qnt:fillsRequireMiss", - "kind": "invariant", - "scope": "Fill only follows C0 miss; a fenced fill outcome has no write. The exact timestamp comparison is in finishFill." - }, - { - "case": "C53.fill-fenced", - "reference": "formal/dialcache-shadow-validation.qnt:fencedFillDoesNotWrite", - "kind": "invariant", - "scope": "Fill only follows C0 miss; a fenced fill outcome has no write. The exact timestamp comparison is in finishFill." - }, - { - "case": "C53.confirmation-fails-open", - "reference": "formal/dialcache-shadow-validation.qnt:presentC0IsNeverRepaired", - "kind": "invariant", - "scope": "C1 failure occurs for present C0 and cannot initiate a repair; caller preservation is separately replayed." - }, - { - "case": "C54.deduplication", - "reference": "formal/dialcache-admission-conformance.qnt:oneJobPerIdentity", - "kind": "invariant", - "scope": "At most one live job per identity; another same-key eligible hit drops even when capacity is not full." - }, - { - "case": "C54.deduplication", - "reference": "formal/dialcache-admission-conformance.qnt:duplicateDropsBeforeCapacityIsFullTest", - "kind": "regression", - "scope": "At most one live job per identity; another same-key eligible hit drops even when capacity is not full." - }, - { - "case": "C54.source-ownership", - "reference": "formal/dialcache-admission-conformance.qnt:timeoutRetainsSourceCapacityTest", - "kind": "regression", - "scope": "Job timeout keeps raw source capacity live until source settlement, which releases it without changing caller or emitting another outcome." - }, - { - "case": "C54.decode-ownership", - "reference": "formal/dialcache-admission-conformance.qnt:timeoutRetainsDecodeCapacityTest", - "kind": "regression", - "scope": "Job timeout keeps raw decode capacity live until load settlement; no later confirmation is started." - }, - { - "case": "C54.comparison-budget", - "reference": "formal/dialcache-shadow-conformance.qnt:slowComparisonTimesOutBeforeConfirmationTest", - "kind": "regression", - "scope": "Successful or failing comparator work reaching the job budget produces timeout before any confirmation read; caller result remains unchanged." - }, - { - "case": "C54.comparison-budget", - "reference": "formal/dialcache-shadow-conformance.qnt:slowComparisonFailureStillTimesOutTest", - "kind": "regression", - "scope": "Successful or failing comparator work reaching the job budget produces timeout before any confirmation read; caller result remains unchanged." - }, - { - "case": "C54.expired-before-start", - "reference": "formal/dialcache-shadow-conformance.qnt:expiredSourceWorkSkipsRedis", - "kind": "invariant", - "scope": "At 9ms source work, deferred read can start and source settlement can succeed; at exactly 10ms, no Redis read starts and late success/rejection gives the source deadline. These fixtures observe later timer progress only in complete 10ms windows." - }, - { - "case": "C54.expired-before-start", - "reference": "formal/dialcache-shadow-conformance.qnt:sourceWorkBeforeDeadlineStillReadsTest", - "kind": "regression", - "scope": "At 9ms source work, deferred read can start and source settlement can succeed; at exactly 10ms, no Redis read starts and late success/rejection gives the source deadline. These fixtures observe later timer progress only in complete 10ms windows." - }, - { - "case": "C54.expired-before-start", - "reference": "formal/dialcache-shadow-conformance.qnt:sourceWorkAtDeadlineSkipsDeferredReadTest", - "kind": "regression", - "scope": "At 9ms source work, deferred read can start and source settlement can succeed; at exactly 10ms, no Redis read starts and late success/rejection gives the source deadline. These fixtures observe later timer progress only in complete 10ms windows." - }, - { - "case": "C54.expired-before-start", - "reference": "formal/dialcache-shadow-conformance.qnt:expiredDeferredJobRetainsSourceRejectionDeadlineTest", - "kind": "regression", - "scope": "At 9ms source work, deferred read can start and source settlement can succeed; at exactly 10ms, no Redis read starts and late success/rejection gives the source deadline. These fixtures observe later timer progress only in complete 10ms windows." - }, - { - "case": "C55.miss-discriminator", - "reference": "formal/dialcache-effects-conformance.qnt:missDiscriminatorWinsOverFrameFieldsTest", - "kind": "regression", - "scope": "A miss discriminator wins over stray frame fields and starts source without decode; other metadata trust rules remain the adapterReply/releaseRead transition." - }, - { - "case": "C55.unknown-reason", - "reference": "formal/dialcache-effects-conformance.qnt:unknownReasonKeepsValidFenceTest", - "kind": "regression", - "scope": "Unknown reason is normalized to unclassified while a valid future fence still suppresses serialization." - }, - { - "case": "C55.ignore-untracked-fence", - "reference": "formal/dialcache-effects-conformance.qnt:untrackedReplyCannotCarryFenceTest", - "kind": "regression", - "scope": "Untracked reply strips observed fence and normalizes reason, allowing serialization." - }, - { - "case": "C56.cooperative-cancel", - "reference": "formal/dialcache-effects-conformance.qnt:readTimeoutStartsIndependentSourceDeadlineTest", - "kind": "regression", - "scope": "One shared read deadline requests one cancellation for two pending callers." - }, - { - "case": "C56.late-read", - "reference": "formal/dialcache-effects-conformance.qnt:lateReadCannotBecomeHitTest", - "kind": "regression", - "scope": "A reply observed after elapsed read budget cannot start fresh decode even before timer delivery." - }, - { - "case": "C56.clear-read-timer", - "reference": "formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest", - "kind": "regression", - "scope": "A read accepted before deadline does not request cancellation when decoding later crosses the budget." - }, - { - "case": "C57.shadow-age", - "reference": "formal/dialcache-shadow-conformance.qnt:confirmationKeepsOriginalAgeTest", - "kind": "regression", - "scope": "A mismatch records C0's age at verdict, not the replacement C1 timestamp." - }, - { - "case": "C57.clamp-age", - "reference": "formal/dialcache-shadow-conformance.qnt:ageClampsAfterWallRollbackTest", - "kind": "regression", - "scope": "A match age sample after wall rollback clamps to zero." - }, - { - "case": "C59.remote-includes-decode", - "reference": "formal/dialcache-effects-conformance.qnt:readDurationIncludesDecodeTest", - "kind": "regression", - "scope": "Remote get duration includes delayed fresh decode while accepted decoding starts no source budget." - }, - { - "case": "C59.remote-includes-decode", - "reference": "formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest", - "kind": "regression", - "scope": "Remote get duration includes delayed fresh decode while accepted decoding starts no source budget." - }, - { - "case": "C59.source-excludes-publication", - "reference": "formal/dialcache-effects-conformance.qnt:sourceDurationExcludesPublicationTest", - "kind": "regression", - "scope": "Source duration stays at its accepted settlement interval while serialization has a separate later duration." - }, - { - "case": "C60.logging-enabled", - "reference": "formal/dialcache-shadow-conformance.qnt:explicitInequalityRequiresConfirmationTest", - "kind": "regression", - "scope": "Confirmed mismatch warns only after C1; accepted enabled logging remains in effect despite later policy disable." - }, - { - "case": "C60.logging-enabled", - "reference": "formal/dialcache-shadow-conformance.qnt:acceptedLoggingSurvivesPolicyChangeTest", - "kind": "regression", - "scope": "Confirmed mismatch warns only after C1; accepted enabled logging remains in effect despite later policy disable." - }, - { - "case": "C60.no-warning-on-match", - "reference": "formal/dialcache-shadow-conformance.qnt:warningsRequireValidCapturedPolicy", - "kind": "invariant", - "scope": "Warnings equal the captured authorizations recorded only for mismatches. This constrains warnings for match but does not test every logger implementation." - }, - { - "case": "C60.no-warning-on-superseded", - "reference": "formal/dialcache-shadow-conformance.qnt:warningsRequireValidCapturedPolicy", - "kind": "invariant", - "scope": "Warnings equal the captured authorizations recorded only for mismatches. Superseded itself adds no warning authorization." - }, - { - "case": "C60.invalid-logging-policy", - "reference": "formal/dialcache-shadow-conformance.qnt:invalidLoggingCannotBeCaptured", - "kind": "invariant", - "scope": "An invalid logging flag is never captured as enabled. Admission still records one configuration error, comparison reaches mismatch, and no warning is emitted." - }, - { - "case": "C60.invalid-logging-policy", - "reference": "formal/dialcache-shadow-conformance.qnt:warningsRequireValidCapturedPolicy", - "kind": "invariant", - "scope": "An invalid logging flag is never captured as enabled. Admission still records one configuration error, comparison reaches mismatch, and no warning is emitted." - }, - { - "case": "C60.invalid-logging-policy", - "reference": "formal/dialcache-shadow-conformance.qnt:invalidLoggingKeepsComparisonWithoutWarningTest", - "kind": "regression", - "scope": "An invalid logging flag is never captured as enabled. Admission still records one configuration error, comparison reaches mismatch, and no warning is emitted." - }, - { - "case": "W04.tracked-decoder", - "reference": "formal/dialcache-redis-protocol.qnt:nilValueIsValueAbsent", - "kind": "invariant", - "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors." - }, - { - "case": "W04.tracked-decoder", - "reference": "formal/dialcache-redis-protocol.qnt:fenceCanPrecedeEncodingError", - "kind": "invariant", - "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors." - }, - { - "case": "W04.tracked-decoder", - "reference": "formal/dialcache-redis-protocol.qnt:malformedWatermarkPrecedesEncodingError", - "kind": "invariant", - "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors." - }, - { - "case": "W04.tracked-decoder", - "reference": "formal/dialcache-redis-protocol.qnt:trackedZeroTimestampIsNotHit", - "kind": "invariant", - "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors." - }, - { - "case": "W04.tracked-decoder", - "reference": "formal/dialcache-redis-protocol.qnt:encodingErrorRequiresSupportedFrame", - "kind": "invariant", - "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors." - }, - { - "case": "W04.tracked-decoder", - "reference": "formal/dialcache-redis-protocol.qnt:fencedEncodingTest", - "kind": "regression", - "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors." - }, - { - "case": "W04.tracked-decoder", - "reference": "formal/dialcache-redis-protocol.qnt:malformedWatermarkTest", - "kind": "regression", - "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors." - }, - { - "case": "W04.strict-fence", - "reference": "formal/dialcache-redis-protocol.qnt:fenceCanPrecedeEncodingError", - "kind": "invariant", - "scope": "Tracked supported positive frames at equality are fenced; zero timestamp cannot yield a hit." - }, - { - "case": "W04.strict-fence", - "reference": "formal/dialcache-redis-protocol.qnt:trackedZeroTimestampIsNotHit", - "kind": "invariant", - "scope": "Tracked supported positive frames at equality are fenced; zero timestamp cannot yield a hit." - }, - { - "case": "W04.strict-fence", - "reference": "formal/dialcache-tracked-invalidation.qnt:servedSnapshotClearedObservedFence", - "kind": "invariant", - "scope": "Every served tracked snapshot has timestamp strictly above its acquired watermark." - }, - { - "case": "C22.freshness-boundary", - "reference": "formal/dialcache-stale-recovery.qnt:lastFreshAgeSkipsSourceTest", - "kind": "regression", - "scope": "Zero-age evidence also closes fresh-side boundary; exact F continues to use independent tests. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C22.freshness-boundary", - "reference": "formal/dialcache-recovery-conformance.qnt:lastFreshReadDoesNotInvokeSourceTest", - "kind": "regression", - "scope": "remote exact fresh TTL expires This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C40.first-stale", - "reference": "formal/dialcache-stale-recovery.qnt:firstStaleAgeRetainsWithoutDecodingTest", - "kind": "regression", - "scope": "first stale age is recoverable without shared publication This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C40.last-stale", - "reference": "formal/dialcache-recovery-conformance.qnt:lastRecoveryMillisecondIsServedTest", - "kind": "regression", - "scope": "last millisecond before M is recoverable This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C40.last-stale", - "reference": "formal/dialcache-stale-recovery.qnt:lastRecoveryAgeStillServesTest", - "kind": "regression", - "scope": "last millisecond before M is recoverable This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C40.maximum-age", - "reference": "formal/dialcache-recovery-conformance.qnt:maximumAgeAtReadDoesNotDecodeTest", - "kind": "regression", - "scope": "maximum age is not retained for recovery This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C40.maximum-age", - "reference": "formal/dialcache-stale-recovery.qnt:exactMaximumAgeDoesNotRetainTest", - "kind": "regression", - "scope": "maximum age is not retained for recovery This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C40.fenced-candidate", - "reference": "formal/dialcache-recovery-conformance.qnt:fencedInitialBytesNeverRecoverTest", - "kind": "regression", - "scope": "A fenced initial value is not retained or decoded for recovery; an allowed failure remains the original source error. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C40.fenced-candidate", - "reference": "formal/dialcache-stale-recovery.qnt:fencedFrameNeverBecomesRecoveryCandidateTest", - "kind": "regression", - "scope": "A fenced initial value is not retained or decoded for recovery; an allowed failure remains the original source error. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C33.reject-unsafe-before-decode", - "reference": "formal/dialcache-stale-recovery.qnt:invalidFrameNeverBecomesRecoveryCandidateTest", - "kind": "regression", - "scope": "Verification model abstracts invalid frame structure; wire vectors separately distinguish unsafe timestamps from malformed/version/encoding fields. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C41.success-skips-decode", - "reference": "formal/dialcache-stale-recovery.qnt:acceptedSourceNeverDecodesRetainedBytesTest", - "kind": "regression", - "scope": "source success skips retained candidate decoding This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C41.denial-keeps-error", - "reference": "formal/dialcache-stale-recovery.qnt:deniedRecoveryNeverDecodesRetainedBytesTest", - "kind": "regression", - "scope": "denied recovery preserves source error without decoding This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C41.classifier-failure", - "reference": "formal/dialcache-recovery-conformance.qnt:classifierErrorPreservesSourceWithoutDecodeTest", - "kind": "regression", - "scope": "A failing recovery classifier preserves the source error without decoding retained bytes or publishing them. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C44.no-reread", - "reference": "formal/dialcache-recovery-conformance.qnt:initialReadFailureSkipsRecoveryClassificationTest", - "kind": "regression", - "scope": "read failure never causes a recovery reread This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C44.retained-invalidation", - "reference": "formal/dialcache-recovery-conformance.qnt:replacementDoesNotChangeRetainedRecoveryTest", - "kind": "regression", - "scope": "recovery uses acquired snapshot after invalidation and replacement This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C44.retained-invalidation", - "reference": "formal/dialcache-stale-recovery.qnt:retainedBytesSurviveRedisDeletionAndFenceTest", - "kind": "regression", - "scope": "recovery uses acquired snapshot after invalidation and replacement This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C45.maximum-age-exclusive", - "reference": "formal/dialcache-recovery-conformance.qnt:maximumAgeAfterDecodePreservesSourceTest", - "kind": "regression", - "scope": "Distinguish equality after decode from greater-than-M; do not count the same fixed scenario twice as independent evidence. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C45.recheck-before-decode", - "reference": "formal/dialcache-recovery-conformance.qnt:maximumAgeBeforeDecodePreservesSourceTest", - "kind": "regression", - "scope": "This bounded regression retains a candidate at M-1, advances to M before source rejection, and checks a source-error result with no load and one recovery miss. The separate recovery-read replay and required witness additionally bind compressed bytes and original source-error identity." - }, - { - "case": "C45.recheck-before-decode", - "reference": "formal/dialcache-stale-recovery.qnt:maximumAgeBeforeDecodeSkipsLoadingTest", - "kind": "regression", - "scope": "This abstract regression advances a retained candidate to its maximum age before the recovery check, preserving the source-rejection category without decoding or request publication. The separate recovery-read replay and required witness additionally bind compressed bytes and original source-error identity." - }, - { - "case": "C45.preserve-source-error", - "reference": "formal/dialcache-stale-recovery.qnt:recoveryDecodeFailureKeepsSourceOutcomeTest", - "kind": "regression", - "scope": "Verification outcome enum checks source-vs-recovery error category; portable fixed driver/native errors carry exact original identity. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C45.failed-fresh-not-stale", - "reference": "formal/dialcache-recovery-conformance.qnt:freshDecodeFailureCannotBeRetriedAsRecoveryTest", - "kind": "regression", - "scope": "failed fresh deserialization is never retried as stale recovery This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C45.rollback-below-fresh", - "reference": "formal/dialcache-recovery-conformance.qnt:rollbackBelowFreshCeilingStillRecoversTest", - "kind": "regression", - "scope": "After retaining stale bytes, wall rollback to a nonnegative age below the fresh ceiling still permits recovery; only future age or the exclusive maximum rejects. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C45.rollback-below-fresh", - "reference": "formal/dialcache-stale-recovery.qnt:rollbackBelowFreshAgeStillRecoversTest", - "kind": "regression", - "scope": "After retaining stale bytes, wall rollback to a nonnegative age below the fresh ceiling still permits recovery; only future age or the exclusive maximum rejects. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C45.rollback-future", - "reference": "formal/dialcache-stale-recovery.qnt:rollbackToFutureCandidateRejectsTest", - "kind": "regression", - "scope": "wall rollback during recovery decode rejects a now future snapshot This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C57.recovery-age", - "reference": "formal/dialcache-recovery-conformance.qnt:agesRequireRecovery", - "kind": "invariant", - "scope": "Witness checks successful decode age against observed diagnostic; existing agesRequireRecovery invariant checks no nonserved age samples. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C49.dark-no-delay", - "reference": "formal/dialcache-shadow-validation.qnt:callerResultCanPrecedeDarkReadTest", - "kind": "regression", - "scope": "dark read does not delay caller source result This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C49.dark-no-delay", - "reference": "formal/dialcache-shadow-validation.qnt:darkReadCanPrecedeCallerResultTest", - "kind": "regression", - "scope": "dark read does not delay caller source result This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C53.dark-read-error-keeps-caller", - "reference": "formal/dialcache-shadow-conformance.qnt:darkReadErrorCannotReplaceCallerSourceTest", - "kind": "regression", - "scope": "A failed dark C0 read completes the diagnostic job but an independent caller source can still succeed; no decode or fill follows the failed read. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C53.dark-read-error-keeps-caller", - "reference": "formal/dialcache-shadow-validation.qnt:darkReadFailureStillAllowsCallerResultTest", - "kind": "regression", - "scope": "A failed dark C0 read completes the diagnostic job but an independent caller source can still succeed; no decode or fill follows the failed read. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C53.dark-source-error", - "reference": "formal/dialcache-shadow-conformance.qnt:sourceErrorDoesNotDecodePresentDarkBytesTest", - "kind": "regression", - "scope": "A rejected dark caller source is preserved as the caller failure, emits source_error, and never decodes or fills C0. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C53.dark-source-error", - "reference": "formal/dialcache-shadow-validation.qnt:sourceFailureNeverFillsTest", - "kind": "regression", - "scope": "A rejected dark caller source is preserved as the caller failure, emits source_error, and never decodes or fills C0. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C52.future-miss-may-fill", - "reference": "formal/dialcache-shadow-conformance.qnt:futureDarkBytesFillWithoutDecodingTest", - "kind": "regression", - "scope": "A future C0 is a semantic miss; after caller success a dark job may fill from that source subject to its observed fence. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C52.fenced-miss-may-fill", - "reference": "formal/dialcache-shadow-conformance.qnt:fencedDarkBytesCanAdmitNewerFillTest", - "kind": "regression", - "scope": "A fenced C0 is a semantic miss; a source-success fill may proceed once its own timestamp clears the observed fence, without decoding C0. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C51.fenced-confirmation", - "reference": "formal/dialcache-shadow-conformance.qnt:fencedConfirmationNeverRepairsTest", - "kind": "regression", - "scope": "A watermark-fenced C1 supersedes an unequal C0/source comparison without repair, warning, or value-age verdict. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C51.future-confirmation", - "reference": "formal/dialcache-shadow-conformance.qnt:futureConfirmationStillComparesBytesTest", - "kind": "regression", - "scope": "A future-dated C1 still participates in payload confirmation after C0 was accepted; identical bytes confirm mismatch without cache repair. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C50.equal-skips-confirmation", - "reference": "formal/dialcache-shadow-validation.qnt:equalComparisonSkipsConfirmationTest", - "kind": "regression", - "scope": "A semantic C0/source match emits match without issuing a C1 read or repairing the cache. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C50.equal-skips-confirmation", - "reference": "formal/dialcache-shadow-conformance.qnt:binarySnapshotComparesDecodedValueTest", - "kind": "regression", - "scope": "A semantic C0/source match emits match without issuing a C1 read or repairing the cache. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C52.undecodable-not-repaired", - "reference": "formal/dialcache-shadow-validation.qnt:undecodablePresentFrameNeverFillsTest", - "kind": "regression", - "scope": "dark present undecodable value is never repaired This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C53.fill-serialization-error", - "reference": "formal/dialcache-shadow-conformance.qnt:fillSerializationFailureNeverDispatchesWriteTest", - "kind": "regression", - "scope": "A dark fill serialization failure emits fill_error without dispatching a Redis write and preserves the accepted caller result. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C53.fill-write-error", - "reference": "formal/dialcache-shadow-conformance.qnt:fillWriteFailurePreservesCallerResultTest", - "kind": "regression", - "scope": "A dispatched dark Redis write failure emits fill_error and preserves the accepted caller result; it does not retry or emit a second verdict. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C54.dark-read-ownership", - "reference": "formal/dialcache-shadow-conformance.qnt:lateDarkReadCannotStartDecodeOrFillTest", - "kind": "regression", - "scope": "This witness proves late-effect suppression only. Capacity retention is a separate fixed-scenario observation for the dark read. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C54.read-ownership", - "reference": "formal/dialcache-shadow-conformance.qnt:lateConfirmationCannotEmitAnotherVerdictTest", - "kind": "regression", - "scope": "This witness proves late-effect suppression; existing admission confirmation-timeout-keeps-slot and fixed separate-read-deadline scenario cover owned capacity. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C54.decode-ownership", - "reference": "formal/dialcache-shadow-conformance.qnt:lateDecodeCannotStartConfirmationTest", - "kind": "regression", - "scope": "This witness proves late-effect suppression; existing admission decode-timeout-keeps-slot proves capacity ownership. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C54.dump-ownership", - "reference": "formal/dialcache-shadow-conformance.qnt:lateFillSerializationCannotDispatchWriteTest", - "kind": "regression", - "scope": "This witness proves late-effect suppression only. Fixed capacity probes must remain attached to this case. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C54.write-ownership", - "reference": "formal/dialcache-shadow-conformance.qnt:lateFillWriteCannotEmitAnotherVerdictTest", - "kind": "regression", - "scope": "This witness proves post-timeout completion does not alter result/verdict; fixed capacity probe proves retained slot. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C47.requires-capacity", - "reference": "formal/dialcache-shadow-validation.qnt:droppedShadowStillAllowsCallerResultTest", - "kind": "regression", - "scope": "shadow global capacity drops another key instead of queueing This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C54.unowned-caller-releases-slot", - "reference": "formal/dialcache-shadow-validation.qnt:timedOutShadowStillAllowsCallerResultTest", - "kind": "regression", - "scope": "This abstract regression allows independent caller settlement after diagnostic timeout and checks no fill or detached source; it does not model slot reuse or finite-versus-unbounded source budgets. The separate shadow-layers regression and required witness establish slot release with an explicitly unbounded caller by admitting a second same-key dark read." - }, - { - "case": "C51.changed-confirmation", - "reference": "formal/dialcache-shadow-validation.qnt:missingConfirmationSupersedesWithoutRepairTest", - "kind": "regression", - "scope": "served hit shadow superseded remains diagnostic This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C51.changed-confirmation", - "reference": "formal/dialcache-shadow-validation.qnt:changedConfirmationSupersedesWithoutRepairTest", - "kind": "regression", - "scope": "served hit shadow superseded remains diagnostic This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C51.changed-confirmation", - "reference": "formal/dialcache-shadow-validation.qnt:identicalConfirmationDiagnosesWithoutRepairTest", - "kind": "regression", - "scope": "served hit shadow superseded remains diagnostic This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C36.acquired-fresh", - "reference": "formal/dialcache-tracked-invalidation.qnt:acquiredSnapshotSurvivesLaterInvalidationTest", - "kind": "regression", - "scope": "acquired tracked snapshot survives later invalidation This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C35.delayed-old-write", - "reference": "formal/dialcache-tracked-invalidation.qnt:acquisitionAfterInvalidationRejectsOldBytesTest", - "kind": "regression", - "scope": "Stale-write guarantee requires documented buffer >= stale work delay + writer clock lead; regression is conditional on those model bounds. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C35.delayed-old-write", - "reference": "formal/dialcache-tracked-invalidation.qnt:staleWriteAtCoveredDelayEqualityRemainsFencedTest", - "kind": "regression", - "scope": "Stale-write guarantee requires documented buffer >= stale work delay + writer clock lead; regression is conditional on those model bounds. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C35.delayed-old-write", - "reference": "formal/dialcache-tracked-invalidation.qnt:freshWriteBeyondBufferBecomesReadableTest", - "kind": "regression", - "scope": "Stale-write guarantee requires documented buffer >= stale work delay + writer clock lead; regression is conditional on those model bounds. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C34.first-fence", - "reference": "formal/dialcache-tracked-invalidation.qnt:observedFutureFenceSkipsRefillTest", - "kind": "regression", - "scope": "observed future fence suppresses serialization and refill This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C34.first-fence", - "reference": "formal/dialcache-tracked-invalidation.qnt:refillAtFenceEqualitySkipsWriteTest", - "kind": "regression", - "scope": "observed future fence suppresses serialization and refill This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C34.observed-fence-snapshot", - "reference": "formal/dialcache-tracked-invalidation.qnt:laterInvalidationDoesNotRewriteMissFenceTest", - "kind": "regression", - "scope": "A conditional refill uses the miss-time observed fence; later invalidation can fence a dispatched write on subsequent reads without retroactively rewriting that miss. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C38.value-work-does-not-extend-marker", - "reference": "formal/dialcache-tracked-invalidation.qnt:readsAndValueWritesDoNotMoveWatermarkTest", - "kind": "regression", - "scope": "This regression checks cutoff preservation only; it does not model marker existence or TTL. The separate recovery-read regressions and required witnesses probe continued marker absence or unchanged cutoff and expiry across ordinary reads and value writes, with real-server protocol integration remaining additional evidence." - }, - { - "case": "C51.changed-confirmation", - "reference": "formal/dialcache-shadow-conformance.qnt:sameDecodedValueWithDifferentBytesIsSupersededTest", - "kind": "regression", - "scope": "The common confirmation rule is checked on the dark generated profile and on served-hit fixed scenarios; this witness does not establish source detachment. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C51.identical-payload-confirmation", - "reference": "formal/dialcache-shadow-conformance.qnt:identicalTextAndBinaryBytesConfirmMismatchTest", - "kind": "regression", - "scope": "Shared confirmation rule; source detachment and caller-path differences have separate cases. This cited bounded model clause complements the fixed and generated consequences; it does not prove every host input or scheduling combination." - }, - { - "case": "C01.no-deadline", - "reference": "formal/dialcache-flight-deadlines.qnt:outsideSourceHasNoDeadline", - "kind": "invariant", - "scope": "outside calls have no fallback deadline or sharing. This check covers the bounded model clause: outsideSourceHasNoDeadline. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C01.no-deadline", - "reference": "formal/dialcache-flight-deadlines.qnt:outsideCallsIgnoreConfiguredSourceDeadlineTest", - "kind": "regression", - "scope": "outside calls have no fallback deadline or sharing. This check covers the bounded model clause: outsideCallsIgnoreConfiguredSourceDeadlineTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C05.participating-publication", - "reference": "formal/dialcache-core.qnt:untrackedSourcePublishesToAllParticipatingLayersTest", - "kind": "regression", - "scope": "untracked source fills remote local and request layers. This check covers the bounded model clause: untrackedSourcePublishesToAllParticipatingLayersTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C09.insertion-age", - "reference": "formal/dialcache-policy-conformance.qnt:remoteHitStartsFullLocalInsertionTtlTest", - "kind": "regression", - "scope": "nearly expired remote hit warms local for its full insertion TTL. This check covers the bounded model clause: remoteHitStartsFullLocalInsertionTtlTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C09.insertion-age", - "reference": "formal/dialcache-policy-conformance.qnt:remoteHitWarmsLocalForTheReplysLocalTtlTest", - "kind": "regression", - "scope": "A remote hit warms local storage for the reply's local TTL (2 s), not for the frame's remaining freshness (1 s): the entry still serves locally after the freshness has passed. This check covers the bounded model clause: remoteHitWarmsLocalForTheReplysLocalTtlTest." - }, - { - "case": "C13.uncoalesced-caching", - "reference": "formal/dialcache-policy-conformance.qnt:independentLocalCallsStillReuseSettledValueTest", - "kind": "regression", - "scope": "coalescing off keeps settled caching. This check covers the bounded model clause: independentLocalCallsStillReuseSettledValueTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C13.uncoalesced-caching", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:disabledSharingDoesNotJoinRegisteredFlightTest", - "kind": "regression", - "scope": "Once a runtime reply disables sharing, a caller does not join the request flight an earlier shared caller registered under the same memo slot; its independent source memoizes, and the memo keeps the last settled value." - }, - { - "case": "C13.uncoalesced-caching", - "reference": "formal/dialcache-scope-conformance.qnt:independentSourceIsNotRegisteredForLaterSharingTest", - "kind": "regression", - "scope": "A source started with coalescing off is registered under no memo row, so a later caller whose reply coalesces starts its own source instead of joining it." - }, - { - "case": "C13.local-last-writer", - "reference": "formal/dialcache-policy-conformance.qnt:independentLocalPublicationUsesLastCompletionTest", - "kind": "regression", - "scope": "independent local publication is last writer wins. This check covers the bounded model clause: independentLocalPublicationUsesLastCompletionTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C13.local-last-writer", - "reference": "formal/dialcache-source-budgets-conformance.qnt:rejectedSourceLeavesPublishedLocalEntryTest", - "kind": "regression", - "scope": "In the composed source-budgets profile a source that settles with the source error completes its caller with that error and leaves the local entry an earlier accepted source published: the next enabled call is served locally without a third source. The rejected source is a bypass (outside) one, since a source that may warm local starts only while no live entry exists; no remote or memo claim." - }, - { - "case": "C13.local-last-writer", - "reference": "formal/dialcache-source-budgets-conformance.qnt:republishedEqualValueRestampsLocalExpiryTest", - "kind": "regression", - "scope": "In the composed source-budgets profile the source started at the exact 1000ms expiry of a local entry republishes the same value and stamps a new insertion expiry: an enabled call one millisecond before the second boundary is served locally without a third source. Distinguishes a publication that skips an equal value from one that replaces it; no remote or memo claim." - }, - { - "case": "C13.remote-last-writer", - "reference": "formal/dialcache-policy-conformance.qnt:independentRemotePublicationUsesLastCompletionTest", - "kind": "regression", - "scope": "independent remote publication is last writer wins. This check covers the bounded model clause: independentRemotePublicationUsesLastCompletionTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C14.inactive-layers", - "reference": "formal/dialcache-flight-deadlines.qnt:inactiveServingLayersKeepConcurrentCallsIndependentTest", - "kind": "regression", - "scope": "inactive serving layers do not coalesce. This check covers the bounded model clause: inactiveServingLayersKeepConcurrentCallsIndependentTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C16.null-inherits", - "reference": "formal/dialcache-runtime-policy.qnt:nullProviderRetainsEveryBaselineLeafTest", - "kind": "regression", - "scope": "The omitted overlay representation preserves every baseline leaf. Literal null-to-omission normalization is exercised by the portable fixed scenario, not this abstract valid-policy model." - }, - { - "case": "C16.sparse-leaves", - "reference": "formal/dialcache-runtime-policy.qnt:sparseLocalOverridePreservesRemoteAndFeaturesTest", - "kind": "regression", - "scope": "Runtime overlays replace only supplied leaves. This check covers the bounded model clause: sparseLocalOverridePreservesRemoteAndFeaturesTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C16.explicit-null-leaf", - "reference": "formal/dialcache-core.qnt:invalidInvocationPolicyNeverTouchesStorage", - "kind": "invariant", - "scope": "Malformed boolean leaves are abstracted as invalid invocation admission. The check asserts no storage effects and retained memo; the fixed scenario binds actual JSON null to this invalid branch." - }, - { - "case": "C16.explicit-null-leaf", - "reference": "formal/dialcache-core.qnt:invalidBooleanOverlayBypassesAndPreservesMemoTest", - "kind": "regression", - "scope": "Malformed boolean leaves are abstracted as invalid invocation admission. The check asserts no storage effects and retained memo; the fixed scenario binds actual JSON null to this invalid branch." - }, - { - "case": "C17.library-defaults", - "reference": "formal/dialcache-runtime-policy.qnt:omittedPolicyUsesLibraryDefaultsTest", - "kind": "regression", - "scope": "Request memoization, recovery, and shadow default off; coalescing defaults on. This check covers the bounded model clause: omittedPolicyUsesLibraryDefaultsTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C17.disable-keeps-entry", - "reference": "formal/dialcache-runtime-policy.qnt:disablingPolicyDoesNotEvictInsertedEntriesTest", - "kind": "regression", - "scope": "runtime ramp changes preserve existing entries. This check covers the bounded model clause: disablingPolicyDoesNotEvictInsertedEntriesTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C17.disable-keeps-entry", - "reference": "formal/dialcache-policy-conformance.qnt:disablingServingKeepsExistingLocalForReenablementTest", - "kind": "regression", - "scope": "runtime ramp changes preserve existing entries. This check covers the bounded model clause: disablingServingKeepsExistingLocalForReenablementTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C20.provider-failure", - "reference": "formal/dialcache-policy-conformance.qnt:providerFailureBypassesAndPreservesExistingLocalTest", - "kind": "regression", - "scope": "provider failure fails open without caching. This check covers the bounded model clause: providerFailureBypassesAndPreservesExistingLocalTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C22.freshness-boundary", - "reference": "formal/dialcache-policy-conformance.qnt:exactRemoteFreshBoundaryStartsSourceTest", - "kind": "regression", - "scope": "remote exact fresh TTL expires. This check covers the bounded model clause: exactRemoteFreshBoundaryStartsSourceTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C22.physical-vs-logical", - "reference": "formal/dialcache-policy-conformance.qnt:increasedFreshTtlCanReusePhysicallyRetainedValueTest", - "kind": "regression", - "scope": "runtime changes preserve in-flight physical TTL and affect later freshness. This check covers the bounded model clause: increasedFreshTtlCanReusePhysicallyRetainedValueTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C22.physical-vs-logical", - "reference": "formal/dialcache-policy-conformance.qnt:increasedFreshTtlCannotResurrectExpiredStorageTest", - "kind": "regression", - "scope": "runtime changes preserve in-flight physical TTL and affect later freshness. This check covers the bounded model clause: increasedFreshTtlCannotResurrectExpiredStorageTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C23.default-source-budget", - "reference": "formal/dialcache-flight-deadlines.qnt:omittedSourceBudgetUsesSixtySeconds", - "kind": "invariant", - "scope": "The independent-source submodel captures omitted budget as 60000ms; the regression checks rejection at that exact deadline. Generated main-flight samples retain their separately bounded budget." - }, - { - "case": "C23.default-source-budget", - "reference": "formal/dialcache-flight-deadlines.qnt:librarySourceDeadlineIsSixtySecondsTest", - "kind": "regression", - "scope": "The independent-source submodel captures omitted budget as 60000ms; the regression checks rejection at that exact deadline. Generated main-flight samples retain their separately bounded budget." - }, - { - "case": "C24.follower-source", - "reference": "formal/dialcache-flight-deadlines.qnt:lateFollowerKeepsLeaderSourceDeadlineTest", - "kind": "regression", - "scope": "late follower inherits remaining fallback deadline. This check covers the bounded model clause: lateFollowerKeepsLeaderSourceDeadlineTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C26.unbounded-source", - "reference": "formal/dialcache-flight-deadlines.qnt:disabledSourceDeadlineNeverTimesOut", - "kind": "invariant", - "scope": "disabled fallback deadline accepts later source settlement. This check covers the bounded model clause: disabledSourceDeadlineNeverTimesOut. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C26.unbounded-source", - "reference": "formal/dialcache-flight-deadlines.qnt:explicitlyUnboundedEnabledSourceAcceptsLateValueTest", - "kind": "regression", - "scope": "disabled fallback deadline accepts later source settlement. This check covers the bounded model clause: explicitlyUnboundedEnabledSourceAcceptsLateValueTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C27.key-failure", - "reference": "formal/dialcache-flight-deadlines.qnt:keyFailureKeepsEnabledSourceDeadlineTest", - "kind": "regression", - "scope": "key construction failure runs source with its enabled deadline. This check covers the bounded model clause: keyFailureKeepsEnabledSourceDeadlineTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C27.key-failure", - "reference": "formal/dialcache-flight-deadlines.qnt:independentAcceptanceChecksCapturedDeadline", - "kind": "invariant", - "scope": "key construction failure runs source with its enabled deadline. This check covers the bounded model clause: independentAcceptanceChecksCapturedDeadline. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C27.local-read-failure", - "reference": "formal/dialcache-core.qnt:localReadFailureContinuesToRemoteTest", - "kind": "regression", - "scope": "Failed local reads skip reuse and local publication. This check covers the bounded model clause: localReadFailureContinuesToRemoteTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C27.local-read-failure", - "reference": "formal/dialcache-core.qnt:localReadFailureSuppressesSourcePublicationTest", - "kind": "regression", - "scope": "Failed local reads skip reuse and local publication. This check covers the bounded model clause: localReadFailureSuppressesSourcePublicationTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C27.local-write-failure", - "reference": "formal/dialcache-core.qnt:localWriteFailurePreservesSourceAndMemoTest", - "kind": "regression", - "scope": "A failed local write preserves the accepted source result. This check covers the bounded model clause: localWriteFailurePreservesSourceAndMemoTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C27.local-write-failure", - "reference": "formal/dialcache-core.qnt:localWriteFailurePreservesRemoteHitTest", - "kind": "regression", - "scope": "A failed local write preserves the accepted source result. This check covers the bounded model clause: localWriteFailurePreservesRemoteHitTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C28.untracked-local-publication", - "reference": "formal/dialcache-core.qnt:remoteReadFailureStillPublishesUntrackedLocalAndRequestTest", - "kind": "regression", - "scope": "untracked read failure still permits active local publication. This check covers the bounded model clause: remoteReadFailureStillPublishesUntrackedLocalAndRequestTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C28.untracked-local-publication", - "reference": "formal/dialcache-policy-conformance.qnt:untrackedReadFailureStillWarmsActiveLocalTest", - "kind": "regression", - "scope": "untracked read failure still permits active local publication. This check covers the bounded model clause: untrackedReadFailureStillWarmsActiveLocalTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C31.local-only-publication", - "reference": "formal/dialcache-core.qnt:trackedWithoutRemoteStillPublishesLocalTest", - "kind": "regression", - "scope": "Tracked local-only calls retain eligible local source publication. This check covers the bounded model clause: trackedWithoutRemoteStillPublishesLocalTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C31.ramped-down-publication", - "reference": "formal/dialcache-core.qnt:trackedWithoutRemoteStillPublishesLocalTest", - "kind": "regression", - "scope": "Tracked calls excluded from remote serving retain eligible local source publication. This check covers the bounded model clause: trackedWithoutRemoteStillPublishesLocalTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C05.request-hit-stops-traversal", - "reference": "formal/dialcache-core.qnt:firstHitStopsLowerTraversal", - "kind": "invariant", - "scope": "A request memo hit skips local and remote traversal and source execution. This check covers the bounded model clause: firstHitStopsLowerTraversal. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C05.request-hit-stops-traversal", - "reference": "formal/dialcache-core.qnt:untrackedSourcePublishesToAllParticipatingLayersTest", - "kind": "regression", - "scope": "A request memo hit skips local and remote traversal and source execution. This check covers the bounded model clause: untrackedSourcePublishesToAllParticipatingLayersTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C05.local-hit-stops-traversal", - "reference": "formal/dialcache-core.qnt:firstHitStopsLowerTraversal", - "kind": "invariant", - "scope": "A local hit skips remote reads and source execution while warming an eligible request memo. This check covers the bounded model clause: firstHitStopsLowerTraversal. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C05.local-hit-stops-traversal", - "reference": "formal/dialcache-core.qnt:localHitWarmsRequestAndSkipsRemoteTest", - "kind": "regression", - "scope": "A local hit skips remote reads and source execution while warming an eligible request memo. This check covers the bounded model clause: localHitWarmsRequestAndSkipsRemoteTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C16.reenable-default-coalescing", - "reference": "formal/dialcache-runtime-policy.qnt:reenablingDisabledBaselineKeepsDefaultCoalescingTest", - "kind": "regression", - "scope": "Reenabling a shared serving layer over the disabled baseline retains library coalescing when its leaf is omitted. This check covers the bounded model clause: reenablingDisabledBaselineKeepsDefaultCoalescingTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C17.explicit-feature-kill-switch", - "reference": "formal/dialcache-runtime-policy.qnt:explicitOffReplacesInheritedFeaturesTest", - "kind": "regression", - "scope": "Explicit zero or false runtime feature leaves replace inherited request, recovery, and shadow enablement while preserving omitted coalescing policy. This check covers the bounded model clause: explicitOffReplacesInheritedFeaturesTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C21.invalid-local-ramp", - "reference": "formal/dialcache-policy-conformance.qnt:invalidLocalRampPreservesRemoteTest", - "kind": "regression", - "scope": "Invalid local ramp preserves valid remote hits. This check covers the bounded model clause: invalidLocalRampPreservesRemoteTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C21.invalid-remote-ramp", - "reference": "formal/dialcache-policy-conformance.qnt:invalidRemoteRampPreservesLocalTest", - "kind": "regression", - "scope": "Invalid remote ramp preserves valid local hits. This check covers the bounded model clause: invalidRemoteRampPreservesLocalTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C27.source-error-no-publication", - "reference": "formal/dialcache-core.qnt:sourceFailureNeverPublishes", - "kind": "invariant", - "scope": "A rejected source preserves its failure and publishes no successful value to participating cache layers. This check covers the bounded model clause: sourceFailureNeverPublishes. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C27.source-error-no-publication", - "reference": "formal/dialcache-core.qnt:rejectedSourceNeverPublishesTest", - "kind": "regression", - "scope": "A rejected source preserves its failure and publishes no successful value to participating cache layers. This check covers the bounded model clause: rejectedSourceNeverPublishesTest. Host representations and other feature combinations retain separate fixed/native evidence." - }, - { - "case": "C27.decode-failure-refill", - "reference": "formal/dialcache-effects-conformance.qnt:decodeFailureMayRefillTest", - "kind": "regression", - "scope": "A failed fresh decode falls through to the source and may refill Redis when the read itself granted publication authority. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C33.reject-future-before-decode", - "reference": "formal/dialcache-recovery-conformance.qnt:futureFrameDoesNotCarryMissFenceTest", - "kind": "regression", - "scope": "The model rejects an acquired future frame and excludes it from recovery; generated rollback evidence exercises future rejection, while fixed scenarios exercise direct future timestamps before deserialization." - }, - { - "case": "C33.reject-version-before-decode", - "reference": "formal/dialcache-redis-protocol.qnt:unsupportedFramePrecedesEncodingError", - "kind": "invariant", - "scope": "The decoder classifies unsupported frame versions before consulting payload encoding. Fixed cache-path scenarios establish that this miss skips application deserialization." - }, - { - "case": "C50.served-match-diagnostic", - "reference": "formal/dialcache-admission-conformance.qnt:callsKeepAcquiredValue", - "kind": "invariant", - "scope": "A served-hit shadow match keeps the originally returned value and emits a match without cache repair. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C50.served-match-diagnostic", - "reference": "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic", - "kind": "invariant", - "scope": "A served-hit shadow match keeps the originally returned value and emits a match without cache repair. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C50.served-mismatch-diagnostic", - "reference": "formal/dialcache-admission-conformance.qnt:callsKeepAcquiredValue", - "kind": "invariant", - "scope": "A confirmed served-hit shadow mismatch keeps the originally returned value and does not repair the cache. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C50.served-mismatch-diagnostic", - "reference": "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic", - "kind": "invariant", - "scope": "A confirmed served-hit shadow mismatch keeps the originally returned value and does not repair the cache. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C53.source-error-keeps-caller", - "reference": "formal/dialcache-admission-conformance.qnt:callsKeepAcquiredValue", - "kind": "invariant", - "scope": "A detached shadow source failure reports its diagnostic outcome without replacing the value already served to the caller. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C53.source-error-keeps-caller", - "reference": "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic", - "kind": "invariant", - "scope": "A detached shadow source failure reports its diagnostic outcome without replacing the value already served to the caller. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C20.invalid-coalesce", - "reference": "formal/dialcache-core.qnt:invalidInvocationPolicyNeverTouchesStorage", - "kind": "invariant", - "scope": "The core model abstracts malformed invocation-level leaves as invalid admission and checks bypass plus preserved memo. Fixed scenarios supply the actual malformed coalesce/requestLocal values." - }, - { - "case": "C20.invalid-coalesce", - "reference": "formal/dialcache-core.qnt:invalidBooleanOverlayBypassesAndPreservesMemoTest", - "kind": "regression", - "scope": "The core model abstracts malformed invocation-level leaves as invalid admission and checks bypass plus preserved memo. Fixed scenarios supply the actual malformed coalesce/requestLocal values." - }, - { - "case": "C20.invalid-request-local", - "reference": "formal/dialcache-core.qnt:invalidInvocationPolicyNeverTouchesStorage", - "kind": "invariant", - "scope": "The core model abstracts malformed invocation-level leaves as invalid admission and checks bypass plus preserved memo. Fixed scenarios supply the actual malformed coalesce/requestLocal values." - }, - { - "case": "C20.invalid-request-local", - "reference": "formal/dialcache-core.qnt:invalidBooleanOverlayBypassesAndPreservesMemoTest", - "kind": "regression", - "scope": "The core model abstracts malformed invocation-level leaves as invalid admission and checks bypass plus preserved memo. Fixed scenarios supply the actual malformed coalesce/requestLocal values." - }, - { - "case": "C42.operation-denial", - "reference": "formal/dialcache-recovery-conformance.qnt:operationDenialReplacesInstanceAllowTest", - "kind": "regression", - "scope": "An operation recovery denial replaces an instance allow predicate and preserves the original source failure. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C24.independent-source-budgets", - "reference": "formal/dialcache-flight-deadlines.qnt:independentAcceptanceChecksCapturedDeadline", - "kind": "invariant", - "scope": "The independent-source submodel checks each recorded source start and captured budget; the generated independent profile supplies per-call source/read ownership and the fixed scenario isolates different source start times." - }, - { - "case": "C23.policy-does-not-spend-source-budget", - "reference": "formal/dialcache-flight-deadlines.qnt:delayedLookupKeepsFullSourceBudgetTest", - "kind": "regression", - "scope": "The model abstracts pre-source waiting as cache lookup and independently checks a full budget from source start. The fixed policy-delay scenario binds runtime-provider waiting to that rule." - }, - { - "case": "C30.original-source-error", - "reference": "formal/dialcache-effects-conformance.qnt:observerFailuresCannotReplaceSourceErrorTest", - "kind": "regression", - "scope": "Observer failure preserves the identity of the original source rejection. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C47.recovery-skips-shadow", - "reference": "formal/dialcache-stale-recovery.qnt:recoveredStaleHasNoSharedPublication", - "kind": "invariant", - "scope": "The stale model keeps a zero-shadow-job projection after recovery but does not model otherwise eligible shadow admission. The fixed selected-shadow/absent-recovery scenario supplies the discriminating implementation check." - }, - { - "case": "C47.coalesced-hit-one-job", - "reference": "formal/dialcache-admission-conformance.qnt:coalescedHitAdmitsOneJobTest", - "kind": "regression", - "scope": "Coalesced callers sharing one remote hit admit only one detached shadow source. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C03.late-recovery-publication", - "reference": "formal/dialcache-recovery-conformance.qnt:closedRequestCannotReceiveLateRecoveryMemoTest", - "kind": "regression", - "scope": "Late stale recovery returns to original callers but cannot populate a closed or replacement request scope. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C54.instance-isolation", - "reference": "formal/dialcache-admission-conformance.qnt:capacityIsPerInstance", - "kind": "invariant", - "scope": "Shadow capacity and job identity deduplication apply within each cache instance independently. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C54.instance-isolation", - "reference": "formal/dialcache-admission-conformance.qnt:fullInstanceDoesNotBlockOtherInstanceTest", - "kind": "regression", - "scope": "Shadow capacity and job identity deduplication apply within each cache instance independently. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C18.captured-shadow-admission", - "reference": "formal/dialcache-shadow-conformance.qnt:admittedComparisonSurvivesPolicyDisableTest", - "kind": "regression", - "scope": "Disabling shadow prevents new admission while an already admitted comparison retains its captured policy. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C36.independent-invalidation-snapshots", - "reference": "formal/dialcache-independent-conformance.qnt:acceptedFreshDecodeSurvivesOtherInvalidationTest", - "kind": "regression", - "scope": "Independent tracked reads acquired before and after invalidation keep their own snapshot and fencing outcomes. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C55.valid-fence-independent-of-cause", - "reference": "formal/dialcache-redis-protocol.qnt:validMissWatermarksArePreserved", - "kind": "invariant", - "scope": "A valid future fence suppresses serialization despite an absent cause; zero-fence expired metadata permits serialization. Protocol invariants separately require valid metadata retention for semantic misses." - }, - { - "case": "C55.frame-ignores-miss-metadata", - "reference": "formal/dialcache-effects-conformance.qnt:frameWithoutMissDiscriminatorIgnoresMetadataTest", - "kind": "regression", - "scope": "The scheduled regression asserts the frame is served without a source. Generated reply15 is an additional required input category, not by itself proof that a frame was served." - }, - { - "case": "C56.late-read", - "reference": "formal/dialcache-effects-conformance.qnt:lateReadRejectionUsesDeadlineCategoryTest", - "kind": "regression", - "scope": "late read fulfillment checks deadline before timer delivery The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C56.clear-read-timer", - "reference": "formal/dialcache-effects-conformance.qnt:successfulReadClearsDeadlineBeforeDecodeTest", - "kind": "regression", - "scope": "successful read does not request cancellation after its timer is cleared The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C58.failure-categories", - "reference": "formal/dialcache-effects-conformance.qnt:readFailureKeepsCategoryAndDeniesRefillTest", - "kind": "regression", - "scope": "Each added model regression requires the phase label alongside its source-result and write/no-write consequence. Fixed scenarios additionally check policy-resolution diagnostics." - }, - { - "case": "C58.failure-categories", - "reference": "formal/dialcache-effects-conformance.qnt:decodeFailureKeepsCategoryAndAllowsRefillTest", - "kind": "regression", - "scope": "Each added model regression requires the phase label alongside its source-result and write/no-write consequence. Fixed scenarios additionally check policy-resolution diagnostics." - }, - { - "case": "C58.failure-categories", - "reference": "formal/dialcache-effects-conformance.qnt:dumpFailureKeepsCategoryAndSourceValueTest", - "kind": "regression", - "scope": "Each added model regression requires the phase label alongside its source-result and write/no-write consequence. Fixed scenarios additionally check policy-resolution diagnostics." - }, - { - "case": "C58.failure-categories", - "reference": "formal/dialcache-effects-conformance.qnt:writeFailureKeepsCategoryAndSourceValueTest", - "kind": "regression", - "scope": "Each added model regression requires the phase label alongside its source-result and write/no-write consequence. Fixed scenarios additionally check policy-resolution diagnostics." - }, - { - "case": "C58.request-follower-trail", - "reference": "formal/dialcache-scope-conformance.qnt:sharedFailureHasOneAttributedErrorTest", - "kind": "regression", - "scope": "Request followers report request-local coalescing without repeating lower cache traversal or the leader error trail. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C58.late-rejection-not-recounted", - "reference": "formal/dialcache-effects-conformance.qnt:lateSourceCannotRepeatFailureMetricTest", - "kind": "regression", - "scope": "A source deadline records one failure; a later rejection of the abandoned loader does not emit another fallback failure. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence." - }, - { - "case": "C60.logging-explicit-off", - "reference": "formal/dialcache-shadow-conformance.qnt:warningsRequireValidCapturedPolicy", - "kind": "invariant", - "scope": "A confirmed mismatch with an explicitly disabled logging flag has no warning. Omitted/default logging and malformed flags have separate named cases." - }, - { - "case": "C40.maximum-age", - "reference": "formal/dialcache-stale-recovery.qnt:initiallyTooOldCannotRecoverAfterRollbackTest", - "kind": "regression", - "scope": "Initial rejected bytes stay unavailable after the clock makes their age eligible before authorized source failure. The final error, no decode, and single initial read distinguish initial retention from failure-time age checking alone." - }, - { - "case": "C40.future-rejected", - "reference": "formal/dialcache-stale-recovery.qnt:initiallyFutureCannotRecoverAfterClockAdvanceTest", - "kind": "regression", - "scope": "Initial rejected bytes stay unavailable after the clock makes their age eligible before authorized source failure. The final error, no decode, and single initial read distinguish initial retention from failure-time age checking alone." - }, - { - "case": "C22.freshness-after-read", - "reference": "formal/dialcache-recovery-read-conformance.qnt:freshnessUsesReadSettlement", - "kind": "invariant", - "scope": "Read acquisition samples the settlement wall clock; a frame initially fresh becomes stale during the held read and subsequently recovers after source rejection." - }, - { - "case": "C22.freshness-after-read", - "reference": "formal/dialcache-recovery-read-conformance.qnt:freshnessAfterHeldReadTest", - "kind": "regression", - "scope": "Read acquisition samples the settlement wall clock; a frame initially fresh becomes stale during the held read and subsequently recovers after source rejection." - }, - { - "case": "C22.freshness-after-read", - "reference": "formal/dialcache-recovery-read-conformance.qnt:heldReadJustBeforeFreshnessBoundaryStillHitsTest", - "kind": "regression", - "scope": "Read acquisition samples the settlement wall clock; a frame initially fresh becomes stale during the held read and subsequently recovers after source rejection." - }, - { - "case": "C28.encoding-error-suppresses-refill", - "reference": "formal/dialcache-recovery-read-conformance.qnt:trackedEncodingFailureSuppressesRefillTest", - "kind": "regression", - "scope": "Unsupported encoding is classified after presence/fence checks and denies remote refill; source success remains visible, and untracked local publication remains eligible." - }, - { - "case": "C28.encoding-error-suppresses-refill", - "reference": "formal/dialcache-recovery-read-conformance.qnt:untrackedEncodingFailureStillPublishesLocalTest", - "kind": "regression", - "scope": "Unsupported encoding is classified after presence/fence checks and denies remote refill; source success remains visible, and untracked local publication remains eligible." - }, - { - "case": "C37.physical-cap", - "reference": "formal/dialcache-recovery-read-conformance.qnt:trackedWritesRespectPhysicalCap", - "kind": "invariant", - "scope": "Native write TTL is capped at 3600000ms, and a public read at that physical deadline starts another source even with longer logical freshness." - }, - { - "case": "C37.physical-cap", - "reference": "formal/dialcache-recovery-read-conformance.qnt:trackedPhysicalRetentionExpiresAtCapTest", - "kind": "regression", - "scope": "Native write TTL is capped at 3600000ms, and a public read at that physical deadline starts another source even with longer logical freshness." - }, - { - "case": "C37.logical-age-unclamped", - "reference": "formal/dialcache-recovery-read-conformance.qnt:recoveredAgeUsesLogicalMaximum", - "kind": "invariant", - "scope": "An externally retained candidate older than the physical cap but younger than the captured logical maximum is served after source failure; no new write is credited." - }, - { - "case": "C37.logical-age-unclamped", - "reference": "formal/dialcache-recovery-read-conformance.qnt:physicalCapDoesNotClampLogicalRecoveryTest", - "kind": "regression", - "scope": "An externally retained candidate older than the physical cap but younger than the captured logical maximum is served after source failure; no new write is credited." - }, - { - "case": "C38.value-work-does-not-extend-marker", - "reference": "formal/dialcache-recovery-read-conformance.qnt:ordinaryValueWorkDoesNotCreateMarkerTest", - "kind": "regression", - "scope": "External marker cutoff and TTL probes before/after ordinary tracked reads and value writes distinguish missing-marker creation, cutoff movement and lifetime extension. Controlled adapter observation, not a proof of native Redis internals." - }, - { - "case": "C38.value-work-does-not-extend-marker", - "reference": "formal/dialcache-recovery-read-conformance.qnt:ordinaryValueWorkDoesNotExtendMarkerTest", - "kind": "regression", - "scope": "External marker cutoff and TTL probes before/after ordinary tracked reads and value writes distinguish missing-marker creation, cutoff movement and lifetime extension. Controlled adapter observation, not a proof of native Redis internals." - }, - { - "case": "C45.compressed-candidate", - "reference": "formal/dialcache-recovery-read-conformance.qnt:recoveredResultsNeverPublishShared", - "kind": "invariant", - "scope": "The modeled input domain includes valid/corrupt compressed bytes; retained recovery either serves the decoded value with request-only publication or preserves the indexed original source error. Compression algorithm correctness remains vector/native evidence." - }, - { - "case": "C45.compressed-candidate", - "reference": "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryMemoizesWithoutLocalPublicationTest", - "kind": "regression", - "scope": "The modeled input domain includes valid/corrupt compressed bytes; retained recovery either serves the decoded value with request-only publication or preserves the indexed original source error. Compression algorithm correctness remains vector/native evidence." - }, - { - "case": "C45.compressed-candidate", - "reference": "formal/dialcache-recovery-read-conformance.qnt:corruptCompressedRecoveryKeepsOriginalSourceErrorTest", - "kind": "regression", - "scope": "The modeled input domain includes valid/corrupt compressed bytes; retained recovery either serves the decoded value with request-only publication or preserves the indexed original source error. Compression algorithm correctness remains vector/native evidence." - }, - { - "case": "C45.compressed-candidate", - "reference": "formal/dialcache-recovery-read-conformance.qnt:untrackedCompressedRecoveryDoesNotWarmLocalTest", - "kind": "regression", - "scope": "The modeled input domain includes valid/corrupt compressed bytes; retained recovery either serves the decoded value with request-only publication or preserves the indexed original source error. Compression algorithm correctness remains vector/native evidence." - }, - { - "case": "C45.compressed-candidate", - "reference": "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryRechecksMaximumAfterDecodeTest", - "kind": "regression", - "scope": "The modeled input domain includes valid/corrupt compressed bytes; retained recovery either serves the decoded value with request-only publication or preserves the indexed original source error. Compression algorithm correctness remains vector/native evidence." - }, - { - "case": "C43.request-memo", - "reference": "formal/dialcache-recovery-read-conformance.qnt:recoveredResultsNeverPublishShared", - "kind": "invariant", - "scope": "A same-scope public probe reuses recovered value; another scope performs remote work, distinguishing request memo from local publication." - }, - { - "case": "C43.request-memo", - "reference": "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryMemoizesWithoutLocalPublicationTest", - "kind": "regression", - "scope": "A same-scope public probe reuses recovered value; another scope performs remote work, distinguishing request memo from local publication." - }, - { - "case": "C44.retained-invalidation", - "reference": "formal/dialcache-recovery-read-conformance.qnt:retainedCompressedRecoverySurvivesInvalidationTest", - "kind": "regression", - "scope": "A candidate acquired before invalidation recovers and memoizes in its request, while a new request must observe the fence and preserve its different source error." - }, - { - "case": "C03.late-recovery-publication", - "reference": "formal/dialcache-recovery-read-conformance.qnt:closedContextsStayEmpty", - "kind": "invariant", - "scope": "Closing the attached request during held recovery decode permits the caller result but prevents request/local publication, distinguished by a new-scope read." - }, - { - "case": "C03.late-recovery-publication", - "reference": "formal/dialcache-recovery-read-conformance.qnt:closedRequestCannotReceiveCompressedRecoveryTest", - "kind": "regression", - "scope": "Closing the attached request during held recovery decode permits the caller result but prevents request/local publication, distinguished by a new-scope read." - }, - { - "case": "C31.tracked-no-local-fill", - "reference": "formal/dialcache-recovery-read-conformance.qnt:trackedSourceNeedsRemoteValidationBeforeLocalReuseTest", - "kind": "regression", - "scope": "Tracked source success memoizes in its request but requires remote read/decode before another scope can warm local; the subsequent transient caller reuses local." - }, - { - "case": "C29.maintenance-failure", - "reference": "formal/dialcache-recovery-read-conformance.qnt:failedInvalidationPreservesExistingMarkerTest", - "kind": "regression", - "scope": "An explicit invalidation failure returns mutation_error while external marker probes preserve absence or prior cutoff and remaining lifetime." - }, - { - "case": "C29.maintenance-failure", - "reference": "formal/dialcache-recovery-read-conformance.qnt:failedInvalidationDoesNotCreateMarkerTest", - "kind": "regression", - "scope": "An explicit invalidation failure returns mutation_error while external marker probes preserve absence or prior cutoff and remaining lifetime." - }, - { - "case": "C59.compression-read-telemetry", - "reference": "formal/dialcache-recovery-read-conformance.qnt:freshCompressedReadReportsDecompressionTest", - "kind": "regression", - "scope": "Previously compressed inputs emit exact decompressed or fallback_raw diagnostics at decode start; later public completion distinguishes successful hit from source fallback while new compression writes remain disabled." - }, - { - "case": "C59.compression-read-telemetry", - "reference": "formal/dialcache-recovery-read-conformance.qnt:corruptCompressedReadReportsRawFallbackTest", - "kind": "regression", - "scope": "Previously compressed inputs emit exact decompressed or fallback_raw diagnostics at decode start; later public completion distinguishes successful hit from source fallback while new compression writes remain disabled." - }, - { - "case": "C06.absent-distinct-from-text", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:requestAbsenceAndLiteralTextStayDistinctTest", - "kind": "regression", - "scope": "Both actual absence and literal string undefined settle as independent same-key source results and are distinguished by subsequent request/local/remote reads." - }, - { - "case": "C06.absent-distinct-from-text", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:localAbsenceAndLiteralTextStayDistinctTest", - "kind": "regression", - "scope": "Both actual absence and literal string undefined settle as independent same-key source results and are distinguished by subsequent request/local/remote reads." - }, - { - "case": "C06.absent-distinct-from-text", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteAbsenceAndLiteralTextStayDistinctTest", - "kind": "regression", - "scope": "Both actual absence and literal string undefined settle as independent same-key source results and are distinguished by subsequent request/local/remote reads." - }, - { - "case": "C13.request-last-writer", - "reference": "formal/dialcache-scope-conformance.qnt:independentRequestMemoUsesLastCompletionTest", - "kind": "regression", - "scope": "Disabling coalescing preserves request memoization; independent successful completions replace its value in settlement order.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C13.request-last-writer", - "reference": "formal/dialcache-scope-conformance.qnt:rejectedIndependentSourceKeepsMemoizedValueTest", - "kind": "regression", - "scope": "A failed independent completion neither replaces nor clears the memoized value: the row keeps the last successful settlement and a later call in the same scope is served from it without a new source." - }, - { - "case": "C13.request-last-writer", - "reference": "formal/dialcache-scope-conformance.qnt:memoFollowsLatestSuccessfulSettlement", - "kind": "invariant", - "scope": "Disabling coalescing preserves request memoization; independent successful completions replace its value in settlement order.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C16.runtime-enables-coalescing", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeTrueEnablesSharingOverFalseDefaultTest", - "kind": "regression", - "scope": "Explicit runtime coalesce true replaces an operation default of false and enables eligible sharing.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C16.runtime-enables-coalescing", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:inheritedFalseKeepsIndependentMemoizingSourcesTest", - "kind": "regression", - "scope": "Explicit runtime coalesce true replaces an operation default of false and enables eligible sharing.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C16.runtime-enables-coalescing", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:inheritedDisabledSharingNeverJoins", - "kind": "invariant", - "scope": "Explicit runtime coalesce true replaces an operation default of false and enables eligible sharing.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C19.exact-serving-cohort", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:localCohortEqualityBypassesBeforeAboveSampleCachesTest", - "kind": "regression", - "scope": "One fixed independently published canonical key numerator per serving layer, strict below/equality/above integer sample thresholds bound to floating percentage inputs; full FNV/hash key construction stays W03 wire-vector authority." - }, - { - "case": "C19.exact-serving-cohort", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteCohortEqualityBypassesBeforeAboveSampleCachesTest", - "kind": "regression", - "scope": "One fixed independently published canonical key numerator per serving layer, strict below/equality/above integer sample thresholds bound to floating percentage inputs; full FNV/hash key construction stays W03 wire-vector authority." - }, - { - "case": "C19.exact-serving-cohort", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:equalAndLowerCohortsNeverTraverse", - "kind": "invariant", - "scope": "One fixed independently published canonical key numerator per serving layer, strict below/equality/above integer sample thresholds bound to floating percentage inputs; full FNV/hash key construction stays W03 wire-vector authority." - }, - { - "case": "C21.invalid-remote-ttl", - "reference": "formal/dialcache-policy-conformance.qnt:invalidRemoteTtlPreservesLocalServingTest", - "kind": "regression", - "scope": "Invalid remote TTL preserves valid local serving. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C27.local-read-failure", - "reference": "formal/dialcache-local-failure-conformance.qnt:failedReadKeepsPriorLocalValue", - "kind": "invariant", - "scope": "Real local storage remains behind a native exception/clock-failure injection seam. Distinct request and transient public probes check the old local value, accepted caller result and request-only memo; read failure remains publication-ineligible after the injected fault is cleared. No elapsed-time or concurrent-source claim." - }, - { - "case": "C27.local-read-failure", - "reference": "formal/dialcache-local-failure-conformance.qnt:localReadFailureFallsThroughAndPreservesOldLocalTest", - "kind": "regression", - "scope": "Real local storage remains behind a native exception/clock-failure injection seam. Distinct request and transient public probes check the old local value, accepted caller result and request-only memo; read failure remains publication-ineligible after the injected fault is cleared. No elapsed-time or concurrent-source claim." - }, - { - "case": "C27.local-read-failure", - "reference": "formal/dialcache-local-failure-conformance.qnt:localReadFailureSkipsSourcePublicationButMemoizesTest", - "kind": "regression", - "scope": "Real local storage remains behind a native exception/clock-failure injection seam. Distinct request and transient public probes check the old local value, accepted caller result and request-only memo; read failure remains publication-ineligible after the injected fault is cleared. No elapsed-time or concurrent-source claim." - }, - { - "case": "C27.local-write-failure", - "reference": "formal/dialcache-local-failure-conformance.qnt:failedWriteKeepsAcceptedCallerResult", - "kind": "invariant", - "scope": "Real local storage remains behind a native exception/clock-failure injection seam. Distinct request and transient public probes check the old local value, accepted caller result and request-only memo; read failure remains publication-ineligible after the injected fault is cleared. No elapsed-time or concurrent-source claim." - }, - { - "case": "C27.local-write-failure", - "reference": "formal/dialcache-local-failure-conformance.qnt:localWriteFailureKeepsSourceAndRequestMemoTest", - "kind": "regression", - "scope": "Real local storage remains behind a native exception/clock-failure injection seam. Distinct request and transient public probes check the old local value, accepted caller result and request-only memo; read failure remains publication-ineligible after the injected fault is cleared. No elapsed-time or concurrent-source claim." - }, - { - "case": "C27.source-error-no-publication", - "reference": "formal/dialcache-local-failure-conformance.qnt:sourceErrorsNeverReplaceLocalValue", - "kind": "invariant", - "scope": "Real local storage remains behind a native exception/clock-failure injection seam. Distinct request and transient public probes check the old local value, accepted caller result and request-only memo; read failure remains publication-ineligible after the injected fault is cleared. No elapsed-time or concurrent-source claim." - }, - { - "case": "C27.source-error-no-publication", - "reference": "formal/dialcache-local-failure-conformance.qnt:sourceFailureKeepsPreviouslyAcceptedStorageTest", - "kind": "regression", - "scope": "Real local storage remains behind a native exception/clock-failure injection seam. Distinct request and transient public probes check the old local value, accepted caller result and request-only memo; read failure remains publication-ineligible after the injected fault is cleared. No elapsed-time or concurrent-source claim." - }, - { - "case": "C44.retained-expiry", - "reference": "formal/dialcache-recovery-read-conformance.qnt:retainedSnapshotSurvivesPhysicalExpiryTest", - "kind": "regression", - "scope": "A call retains otherwise eligible bytes before their physical expiration; its recovery succeeds afterward, while a new request observes absence and preserves its own source error." - }, - { - "case": "C33.reject-unsafe-before-decode", - "reference": "formal/dialcache-recovery-read-conformance.qnt:unsafeTimestampSkipsSerializerAndAllowsRefillTest", - "kind": "regression", - "scope": "A real frame with timestamp 2^53+1 and supported payload encoding never reaches the serializer; source refill remains allowed and is verified by a later public hit. Payload envelope decoding precedes core timestamp validation; this case does not assert timestamp validation before payload encoding checks." - }, - { - "case": "C33.reject-version-before-decode", - "reference": "formal/dialcache-recovery-read-conformance.qnt:unsupportedVersionSkipsSerializerAndAllowsRefillTest", - "kind": "regression", - "scope": "Unsupported version-2 bytes never reach the serializer; source refill remains allowed and a subsequent independent request reads the new value." - }, - { - "case": "C45.recheck-before-decode", - "reference": "formal/dialcache-recovery-read-conformance.qnt:maximumAgeBeforeDecodeKeepsOriginalErrorTest", - "kind": "regression", - "scope": "A compressed retained candidate acquired at M-1 reaches M before source rejection; the original source error survives without decompression/serializer work or shared publication." - }, - { - "case": "C34.observed-fence-snapshot", - "reference": "formal/dialcache-recovery-read-conformance.qnt:laterInvalidationDoesNotRewriteObservedMissFenceTest", - "kind": "regression", - "scope": "A miss captures the absent watermark baseline before invalidation. Source publication still dispatches at the later watermark timestamp; a new request rejects that now-fenced write, proving both captured-refill authority and subsequent fence visibility." - }, - { - "case": "C42.allow-override", - "reference": "formal/dialcache-recovery-conformance.qnt:operationAllowReplacesInstanceDenialTest", - "kind": "regression", - "scope": "An operation allow classifier overrides instance denial for an ordinary source error and produces one successful retained recovery." - }, - { - "case": "C43.coalesced-once", - "reference": "formal/dialcache-recovery-conformance.qnt:coalescedRecoveryClassifiesAndDecodesOnceTest", - "kind": "regression", - "scope": "Three callers across two request scopes share one read, source, classifier decision and decode; all receive the recovered value with one served diagnostic and no remote write." - }, - { - "case": "C24.independent-source-budgets", - "reference": "formal/dialcache-independent-conformance.qnt:eachSourceKeepsItsFullBudget", - "kind": "invariant", - "scope": "Two uncoalesced same-key callers start sources five milliseconds apart. First timeout does not cancel the second, which can succeed at elapsed11 or time out at its own elapsed15 deadline. Both reads acquire fenced storage, so recovery cannot mask shortened deadlines. Clock advance delivers modeled due timers; no timer-undelivered acceptance claim." - }, - { - "case": "C24.independent-source-budgets", - "reference": "formal/dialcache-independent-conformance.qnt:sourceSettlementsRespectOwnDeadline", - "kind": "invariant", - "scope": "Two uncoalesced same-key callers start sources five milliseconds apart. First timeout does not cancel the second, which can succeed at elapsed11 or time out at its own elapsed15 deadline. Both reads acquire fenced storage, so recovery cannot mask shortened deadlines. Clock advance delivers modeled due timers; no timer-undelivered acceptance claim." - }, - { - "case": "C24.independent-source-budgets", - "reference": "formal/dialcache-independent-conformance.qnt:staggeredSourceStartsKeepIndependentBudgetsTest", - "kind": "regression", - "scope": "Two uncoalesced same-key callers start sources five milliseconds apart. First timeout does not cancel the second, which can succeed at elapsed11 or time out at its own elapsed15 deadline. Both reads acquire fenced storage, so recovery cannot mask shortened deadlines. Clock advance delivers modeled due timers; no timer-undelivered acceptance claim." - }, - { - "case": "C24.independent-source-budgets", - "reference": "formal/dialcache-independent-conformance.qnt:staggeredSourcesExpireAtTheirOwnDeadlineTest", - "kind": "regression", - "scope": "Two uncoalesced same-key callers start sources five milliseconds apart. First timeout does not cancel the second, which can succeed at elapsed11 or time out at its own elapsed15 deadline. Both reads acquire fenced storage, so recovery cannot mask shortened deadlines. Clock advance delivers modeled due timers; no timer-undelivered acceptance claim." - }, - { - "case": "C30.observer-isolation", - "reference": "formal/dialcache-effects-conformance.qnt:observerFailuresCannotPreventCacheHitTest", - "kind": "regression", - "scope": "Observer callback failure preserves cached value, accepted source publication and original source error. Model abstracts contained callback failure; existing witness conditions need final-public-consequence tightening (reported root)." - }, - { - "case": "C30.observer-isolation", - "reference": "formal/dialcache-effects-conformance.qnt:observerFailuresCannotPreventPublicationTest", - "kind": "regression", - "scope": "Observer callback failure preserves cached value, accepted source publication and original source error. Model abstracts contained callback failure; existing witness conditions need final-public-consequence tightening (reported root)." - }, - { - "case": "C30.observer-isolation", - "reference": "formal/dialcache-effects-conformance.qnt:observerFailuresCannotReplaceSourceErrorTest", - "kind": "regression", - "scope": "Observer callback failure preserves cached value, accepted source publication and original source error. Model abstracts contained callback failure; existing witness conditions need final-public-consequence tightening (reported root)." - }, - { - "case": "C34.write-timestamp", - "reference": "formal/dialcache-effects-conformance.qnt:writeStampAfterSerializationClearsInterveningFenceTest", - "kind": "regression", - "scope": "Serialization is held across invalidation and a wall-clock advance; native write stamp must clear the intervening watermark, verified by a subsequent public cache hit." - }, - { - "case": "C49.local-publication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:darkPresentC0NeverBecomesLocalPublicationTest", - "kind": "regression", - "scope": "With request memo disabled, a present C0=1 cannot satisfy a later dark caller before source settlement; source=2 alone becomes the subsequent local hit. A separate absent-C0 history proves source publication precedes the held shadow fill write and a local hit stops new shadow admission." - }, - { - "case": "C49.local-publication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesLocalBeforeShadowWriteTest", - "kind": "regression", - "scope": "With request memo disabled, a present C0=1 cannot satisfy a later dark caller before source settlement; source=2 alone becomes the subsequent local hit. A separate absent-C0 history proves source publication precedes the held shadow fill write and a local hit stops new shadow admission." - }, - { - "case": "C49.request-publication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:darkPresentC0NeverBecomesRequestPublicationTest", - "kind": "regression", - "scope": "With local disabled, present C0=1 cannot satisfy a same-scope caller before source settlement; source=2 alone becomes that scope's memo hit. A sibling scope starts an independent source. The absent-C0 history proves request publication precedes held shadow fill." - }, - { - "case": "C49.request-publication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesRequestBeforeShadowWriteTest", - "kind": "regression", - "scope": "With local disabled, present C0=1 cannot satisfy a same-scope caller before source settlement; source=2 alone becomes that scope's memo hit. A sibling scope starts an independent source. The absent-C0 history proves request publication precedes held shadow fill." - }, - { - "case": "C49.job-dedup-keeps-independent-sources", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:deduplicatedJobKeepsIndependentCallerSourcesTest", - "kind": "regression", - "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result." - }, - { - "case": "C54.deduplication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:deduplicatedJobKeepsIndependentCallerSourcesTest", - "kind": "regression", - "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result." - }, - { - "case": "C49.no-stale-recovery", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:darkFailureDoesNotUseEligibleStaleBytesTest", - "kind": "regression", - "scope": "Dark acquisition sees physical C0 exactly F=60000ms old and younger than M=120000ms, with an always-allow recovery classifier. Source rejection preserves that one original error, emits source_error, and performs no classification, deserialization, recovery, or write." - }, - { - "case": "C21.invalid-dark-shadow", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:invalidShadowKeepsLocalPublicationTest", - "kind": "regression", - "scope": "Shadow ramp101 disables optional dark work while valid local policy remains active; source success is reusable locally by a later serving-enabled invocation, with zero Redis reads/writes or diagnostic jobs." - }, - { - "case": "C54.unbounded-source-bounded-shadow", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:unboundedCallerSurvivesDarkJobDeadlineTest", - "kind": "regression", - "scope": "At the finite60000ms dark-job deadline an explicitly unbounded caller remains pending. A same-key second dark read is admitted, proving release of the old diagnostic slot; the first source later returns its value without late fill, while the second can start its own fill." - }, - { - "case": "C54.unowned-caller-releases-slot", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:unboundedCallerSurvivesDarkJobDeadlineTest", - "kind": "regression", - "scope": "At the finite60000ms dark-job deadline an explicitly unbounded caller remains pending. A same-key second dark read is admitted, proving release of the old diagnostic slot; the first source later returns its value without late fill, while the second can start its own fill." - }, - { - "case": "C47.requires-capacity", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:servedAndDarkJobsShareCapacityButNotSourceOwnershipTest", - "kind": "regression", - "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs." - }, - { - "case": "C54.source-ownership", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:servedAndDarkJobsShareCapacityButNotSourceOwnershipTest", - "kind": "regression", - "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs." - }, - { - "case": "C54.instance-isolation", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:fullMixedInstanceDoesNotBlockAnotherInstanceTest", - "kind": "regression", - "scope": "A served and a dark job fill instance0; its third key is dropped, while the same key on instance1 admits a C0 read. Recorded source contexts distinguish the disabled served source from enabled independent caller sources." - }, - { - "case": "C05.first-hit", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesLocalBeforeShadowWriteTest", - "kind": "regression", - "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold." - }, - { - "case": "C05.first-hit", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesRequestBeforeShadowWriteTest", - "kind": "regression", - "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold." - }, - { - "case": "C05.first-hit", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:validatedRemoteHitStopsFurtherShadowTest", - "kind": "regression", - "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold." - }, - { - "case": "C05.first-hit", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:servedDiagnosticSourceDoesNotPopulateLocalTest", - "kind": "regression", - "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold." - }, - { - "case": "C47.requires-cohort", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:shadowCohortBelowDoesNotAdmitTest", - "kind": "regression", - "scope": "For the tracked key{urn:id:0}#ShadowLayers and independent shadow FNV numerator3203834406, thresholds exactly one uint32unit below/equal/above the sample produce no-read/no-job below/equal and an actual C0 read/fill serialization above. Caller success remains independent of diagnostic admission." - }, - { - "case": "C47.requires-cohort", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:shadowCohortEqualityDoesNotAdmitTest", - "kind": "regression", - "scope": "For the tracked key{urn:id:0}#ShadowLayers and independent shadow FNV numerator3203834406, thresholds exactly one uint32unit below/equal/above the sample produce no-read/no-job below/equal and an actual C0 read/fill serialization above. Caller success remains independent of diagnostic admission." - }, - { - "case": "C47.requires-cohort", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:shadowCohortAboveAdmitsTest", - "kind": "regression", - "scope": "For the tracked key{urn:id:0}#ShadowLayers and independent shadow FNV numerator3203834406, thresholds exactly one uint32unit below/equal/above the sample produce no-read/no-job below/equal and an actual C0 read/fill serialization above. Caller success remains independent of diagnostic admission." - }, - { - "case": "C18.captured-shadow-fill", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:darkFillRetainsPolicyThroughSerializationTest", - "kind": "regression", - "scope": "The job captures fresh60s/retention120s. Runtime policy changes to fresh120s/retention180s while its caller source and then serialization are held; dispatched write TTL remains120000ms. At that physical expiry a serving probe under the newer logical policy rejects its source and reports recovery miss, proving the old value was not retained for180s." - }, - { - "case": "C51.retained-candidate-not-reclassified", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:retainedFreshC0StillComparesAfterFreshnessBoundaryTest", - "kind": "regression", - "scope": "C0 is acquired at age59999ms, then source=2 settles exactly at F=60000ms before the60000ms job deadline. Retained C0=1 is decoded once, one C1 payload read confirms mismatch, caller gets2, and no fill occurs." - }, - { - "case": "C52.expired-miss-may-fill", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:expiredC0CanFillAndServeNewValueTest", - "kind": "regression", - "scope": "C0=1 acquired exactly at freshness age60000ms is a semantic miss despite physical presence. Source=2 fills once without decoding old bytes; a later serving probe reads2 and starts no new source." - }, - { - "case": "C53.acquired-miss-no-reread", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:acquiredMissDoesNotRereadBeforeFillTest", - "kind": "regression", - "scope": "An absent C0 is acquired, external storage is then seeded to1, and source=2 fills without rereading/reclassifying C0. Read count stays1 through write completion; a later serving probe observes2." - }, - { - "case": "C53.dark-propagated-timeout", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:darkPropagatedTimeoutIsSourceFailureTest", - "kind": "regression", - "scope": "The single dark caller source rejects its exact controlled nested timeout object at time0. Caller classification remains original source error and the diagnostic verdict is source_error, with no classification/recovery/serialization/write or own deadline event." - }, - { - "case": "C53.served-propagated-timeout", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:servedPropagatedTimeoutPreservesHitTest", - "kind": "regression", - "scope": "The detached served-hit source runs with caching disabled and rejects its controlled nested timeout at time0. The caller keeps its already served C0=1 and the job reports source_error, with no write or own job deadline event." - }, - { - "case": "C01.no-deadline", - "reference": "formal/dialcache-source-budgets-conformance.qnt:outsideSourcesHaveNoDeadline", - "kind": "invariant", - "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim." - }, - { - "case": "C01.no-deadline", - "reference": "formal/dialcache-source-budgets-conformance.qnt:outsideAndInvalidOutsideCallsIgnoreDeadlineAndSharingTest", - "kind": "regression", - "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim." - }, - { - "case": "C23.default-source-budget", - "reference": "formal/dialcache-source-budgets-conformance.qnt:defaultSourceBudgetExpiresAtSixtySecondsTest", - "kind": "regression", - "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim." - }, - { - "case": "C24.follower-source", - "reference": "formal/dialcache-source-budgets-conformance.qnt:followersKeepTheirOwnersOutcome", - "kind": "invariant", - "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim." - }, - { - "case": "C24.follower-source", - "reference": "formal/dialcache-source-budgets-conformance.qnt:lateFollowerUsesLeadersRemainingBudgetTest", - "kind": "regression", - "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim." - }, - { - "case": "C26.unbounded-source", - "reference": "formal/dialcache-source-budgets-conformance.qnt:unboundedEnabledSourcePublishesAfterSixtySecondsTest", - "kind": "regression", - "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim." - }, - { - "case": "C27.key-failure", - "reference": "formal/dialcache-source-budgets-conformance.qnt:onlyEnabledValidCallsResolvePolicy", - "kind": "invariant", - "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim." - }, - { - "case": "C27.key-failure", - "reference": "formal/dialcache-source-budgets-conformance.qnt:invalidKeyStillKeepsEnabledSourceDeadlineTest", - "kind": "regression", - "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim." - }, - { - "case": "C23.policy-does-not-spend-source-budget", - "reference": "formal/dialcache-source-budgets-conformance.qnt:acceptedSourceRespectsItsOwnStart", - "kind": "invariant", - "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim." - }, - { - "case": "C23.policy-does-not-spend-source-budget", - "reference": "formal/dialcache-source-budgets-conformance.qnt:heldPolicyDoesNotSpendSourceBudgetTest", - "kind": "regression", - "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim." - }, - { - "case": "C09.fractional-clock-grid", - "reference": "formal/dialcache-local-clock-conformance.qnt:fractionalInsertionExpiresAtWholeMillisecondTest", - "kind": "regression", - "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C09.fractional-clock-grid", - "reference": "formal/dialcache-local-clock-conformance.qnt:fractionalConstructionKeepsCommonInstanceGridTest", - "kind": "regression", - "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C09.fractional-clock-grid", - "reference": "formal/dialcache-local-clock-conformance.qnt:nonzeroOriginKeepsWholeMillisecondBoundaryTest", - "kind": "regression", - "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C09.fractional-clock-grid", - "reference": "formal/dialcache-local-clock-conformance.qnt:integerInsertionRetainsFullTtlTest", - "kind": "regression", - "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C09.fractional-clock-grid", - "reference": "formal/dialcache-local-clock-conformance.qnt:localReadsUseCommonWholeMilliseconds", - "kind": "invariant", - "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C09.fractional-clock-grid", - "reference": "formal/dialcache-local-clock-conformance.qnt:readsNeverRenewLocalInsertion", - "kind": "invariant", - "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C09.fractional-clock-grid", - "reference": "formal/dialcache-local-clock-conformance.qnt:publicCallsPreserveProbeResults", - "kind": "invariant", - "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C06.null-request", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest", - "kind": "regression", - "scope": "null remains a value in request cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C06.false-request", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest", - "kind": "regression", - "scope": "false remains a value in request cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C06.zero-request", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest", - "kind": "regression", - "scope": "zero remains a value in request cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C06.empty-string-request", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest", - "kind": "regression", - "scope": "empty string remains a value in request cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C06.null-local", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest", - "kind": "regression", - "scope": "null remains a value in local cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C06.false-local", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest", - "kind": "regression", - "scope": "false remains a value in local cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C06.zero-local", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest", - "kind": "regression", - "scope": "zero remains a value in local cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C06.empty-string-local", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest", - "kind": "regression", - "scope": "empty string remains a value in local cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C06.null-remote", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", - "kind": "regression", - "scope": "null remains a value in remote cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C06.false-remote", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", - "kind": "regression", - "scope": "false remains a value in remote cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C06.zero-remote", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", - "kind": "regression", - "scope": "zero remains a value in remote cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C06.empty-string-remote", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", - "kind": "regression", - "scope": "empty string remains a value in remote cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C06.absent-remote", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteAbsenceAndLiteralTextStayDistinctTest", - "kind": "regression", - "scope": "absent result remains cacheable in remote storage. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C07.scope-isolation", - "reference": "formal/dialcache-layers-conformance.qnt:separateRequestRootsRetainIndependentValuesTest", - "kind": "regression", - "scope": "concurrent outer request scopes retain independent flights and memo. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C08.instance-capacity", - "reference": "formal/dialcache-layers-conformance.qnt:oneInstanceEvictionCannotEvictAnotherInstanceTest", - "kind": "regression", - "scope": "instances isolate local storage and registered flights. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C08.instance-capacity", - "reference": "formal/dialcache-layers-conformance.qnt:sourceOwnershipNeverCrossesKeyOrInstance", - "kind": "invariant", - "scope": "instances isolate local storage and registered flights. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C11.distinct-keys", - "reference": "formal/dialcache-layers-conformance.qnt:pendingSourcesKeepEntityAndOperationIdentityTest", - "kind": "regression", - "scope": "different keys own independent flights. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C11.distinct-keys", - "reference": "formal/dialcache-layers-conformance.qnt:sourceOwnershipNeverCrossesKeyOrInstance", - "kind": "invariant", - "scope": "different keys own independent flights. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C19.memo-bypass", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:falseRequestLeafPreservesMemoForReenablementTest", - "kind": "regression", - "scope": "request policy bypass retains memo for later reenabling. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C19.memo-bypass", - "reference": "formal/dialcache-scope-conformance.qnt:bypassedRequestFailureIsAttributedToLocalTest", - "kind": "regression", - "scope": "A call whose reply disables the request layer starts its source inside the cache (its scope is open) but memoizes nothing: its failure is attributed to the shared layers' fallback and both memo rows stay untouched." - }, - { - "case": "C21.invalid-layer", - "reference": "formal/dialcache-policy-conformance.qnt:invalidLocalTtlStillServesFreshRemoteTest", - "kind": "regression", - "scope": "invalid local TTL leaves valid remote serving available. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C21.invalid-recovery", - "reference": "formal/dialcache-policy-conformance.qnt:recoveryAgeEqualToFreshTtlStillServesFreshRemoteTest", - "kind": "regression", - "scope": "invalid optional staleOnErrorMaxAgeSec preserves fresh remote serving. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C21.invalid-recovery", - "reference": "formal/dialcache-policy-conformance.qnt:negativeRecoveryAgeStillServesFreshRemoteTest", - "kind": "regression", - "scope": "invalid optional staleOnErrorMaxAgeSec preserves fresh remote serving. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C16.null-inherits", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:nullProviderInheritsConfiguredServingAndDefaultSharingTest", - "kind": "regression", - "scope": "Actual null provider response preserves configured remoteTTL/full omitted ramp/default sharing; existing runtime-policy leafwise invariant covers other leaves." - }, - { - "case": "C16.ttl-implies-ramp", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlWithoutRampActivatesLayerTest", - "kind": "regression", - "scope": "A configured TTL with omitted ramp enables the layer fully. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C16.ttl-implies-ramp", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeRemoteTtlWithoutRampActivatesLayerTest", - "kind": "regression", - "scope": "A configured TTL with omitted ramp enables the layer fully. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C16.explicit-null-leaf", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:explicitNullCoalesceBypassesWithoutReplacingRemoteTest", - "kind": "regression", - "scope": "Explicit null coalesce is invalid and bypasses existing cached entries without replacing them. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C16.reenable-default-coalescing", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:disabledBaselineRampedUpKeepsDefaultSharingTest", - "kind": "regression", - "scope": "Reenabling a shared serving layer over the disabled baseline retains library coalescing when its leaf is omitted. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C17.library-defaults", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:omittedRampAndSharingUseLibraryDefaultsTest", - "kind": "regression", - "scope": "Request memoization, recovery, and shadow default off; coalescing defaults on. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C17.explicit-feature-kill-switch", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:fullFeatureKillSwitchKeepsOmittedSharingAndRetainedMemoTest", - "kind": "regression", - "scope": "Explicit zero or false runtime feature leaves replace inherited request, recovery, and shadow enablement while preserving omitted coalescing policy. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C20.invalid-coalesce", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:invalidCoalesceBypassesWithoutReplacingRemoteTest", - "kind": "regression", - "scope": "An invalid runtime coalesce leaf bypasses every layer and sharing rather than inheriting or coercing the invalid value.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C20.invalid-coalesce", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:invalidBooleanLeavesBypassAllCaching", - "kind": "invariant", - "scope": "An invalid runtime coalesce leaf bypasses every layer and sharing rather than inheriting or coercing the invalid value.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C20.invalid-request-local", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:invalidRequestLocalBypassesWithoutReplacingRemoteTest", - "kind": "regression", - "scope": "An invalid runtime requestLocal leaf bypasses every layer rather than disabling only request memoization.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C20.invalid-request-local", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:invalidBooleanLeavesBypassAllCaching", - "kind": "invariant", - "scope": "An invalid runtime requestLocal leaf bypasses every layer rather than disabling only request memoization.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C31.local-only-publication", - "reference": "formal/dialcache-layers-conformance.qnt:trackedWithoutRemotePublishesReusableLocalTest", - "kind": "regression", - "scope": "Tracked local-only calls retain eligible local source publication. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C32.grouped-invalidation", - "reference": "formal/dialcache-layers-conformance.qnt:invalidationGroupsOperationsButPreservesAcquiredCachesTest", - "kind": "regression", - "scope": "one invalidation fences all tracked operation variants only for its entity. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C32.untracked-unaffected", - "reference": "formal/dialcache-layers-conformance.qnt:untrackedReadsIgnoreGroupedInvalidationTest", - "kind": "regression", - "scope": "untracked Redis values ignore invalidation markers. The deterministic regression checks the public result and subsequent reuse for this bounded fixture." - }, - { - "case": "C48.ordinary-miss", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:ordinaryServingMissDoesNotAdmitDiagnosticSourceTest", - "kind": "regression", - "scope": "A serving-enabled remote miss with shadow100 starts exactly one enabled caller source; source success fills normally and a later no-shadow serving probe returns that value. No disabled diagnostic source or shadow verdict occurs." - }, - { - "case": "C52.present-not-repaired", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:darkPresentC0NeverBecomesLocalPublicationTest", - "kind": "regression", - "scope": "Fresh present C0=1 and caller source=2 produce a confirmed mismatch with one C1 read and zero Redis writes. Local publication of2 belongs only to the caller source; diagnostic work never repairs the present C0." - }, - { - "case": "C23.instance-read-budget", - "reference": "formal/dialcache-effects-conformance.qnt:instanceReadBudgetOverridesLibraryTest", - "kind": "regression", - "scope": "Initial instance read budget20 overrides library50; no source at10, read timeout and full source starts at20, source value survives without refill." - }, - { - "case": "C23.operation-read-budget", - "reference": "formal/dialcache-effects-conformance.qnt:operationReadBudgetOverridesInstanceTest", - "kind": "regression", - "scope": "Initial operation read budget10 overrides instance20; read timeout starts source at10 and source value survives without refill." - }, - { - "case": "C23.runtime-read-budget", - "reference": "formal/dialcache-effects-conformance.qnt:runtimeReadBudgetOverridesOperationTest", - "kind": "regression", - "scope": "Initial runtime read budget30 overrides operation10 and instance20; no source at20, timeout starts source at30." - }, - { - "case": "C57.future-offset", - "reference": "formal/dialcache-effects-conformance.qnt:futureFrameReportsPositiveObservingOffsetTest", - "kind": "regression", - "scope": "Serving future frame emits one remote futureOffset at +1000 modeled milliseconds, projected as +1 public second, skips serializer and preserves source error. Dark and confirmation observing locations remain outside this model." - }, - { - "case": "C58.shared-trail", - "reference": "formal/dialcache-effects-conformance.qnt:coalescedFailureKeepsOneLeaderAndFollowerTrailTest", - "kind": "regression", - "scope": "Two coalesced callers share one failed read/source trail. Public event ordering includes one remote request, one process follower, remote cache_read error then fallback error, with both original caller errors." - }, - { - "case": "C55.legacy-reply-normalization", - "reference": "formal/dialcache-effects-conformance.qnt:nullReplyRefillsAndIsReadableTest", - "kind": "regression", - "scope": "Null, primitive, obsolete discriminator and kindless replies are semantic misses, permit one refill, and a subsequent public read hits the written value." - }, - { - "case": "C55.legacy-reply-normalization", - "reference": "formal/dialcache-effects-conformance.qnt:primitiveReplyRefillsAndIsReadableTest", - "kind": "regression", - "scope": "Null, primitive, obsolete discriminator and kindless replies are semantic misses, permit one refill, and a subsequent public read hits the written value." - }, - { - "case": "C55.legacy-reply-normalization", - "reference": "formal/dialcache-effects-conformance.qnt:legacyReplyRefillsAndIsReadableTest", - "kind": "regression", - "scope": "Null, primitive, obsolete discriminator and kindless replies are semantic misses, permit one refill, and a subsequent public read hits the written value." - }, - { - "case": "C55.legacy-reply-normalization", - "reference": "formal/dialcache-effects-conformance.qnt:kindlessReplyRefillsAndIsReadableTest", - "kind": "regression", - "scope": "Null, primitive, obsolete discriminator and kindless replies are semantic misses, permit one refill, and a subsequent public read hits the written value." - }, - { - "case": "C55.invalid-fence-discarded", - "reference": "formal/dialcache-effects-conformance.qnt:missingFenceRefillsAndIsReadableTest", - "kind": "regression", - "scope": "Missing, negative, fractional and unsafe fences do not suppress refill; resulting native value is readable on the subsequent call. Valid semantic miss categories are preserved where present." - }, - { - "case": "C55.invalid-fence-discarded", - "reference": "formal/dialcache-effects-conformance.qnt:negativeFenceRefillsAndIsReadableTest", - "kind": "regression", - "scope": "Missing, negative, fractional and unsafe fences do not suppress refill; resulting native value is readable on the subsequent call. Valid semantic miss categories are preserved where present." - }, - { - "case": "C55.invalid-fence-discarded", - "reference": "formal/dialcache-effects-conformance.qnt:fractionalFenceRefillsAndIsReadableTest", - "kind": "regression", - "scope": "Missing, negative, fractional and unsafe fences do not suppress refill; resulting native value is readable on the subsequent call. Valid semantic miss categories are preserved where present." - }, - { - "case": "C55.invalid-fence-discarded", - "reference": "formal/dialcache-effects-conformance.qnt:unsafeFenceRefillsAndIsReadableTest", - "kind": "regression", - "scope": "Missing, negative, fractional and unsafe fences do not suppress refill; resulting native value is readable on the subsequent call. Valid semantic miss categories are preserved where present." - }, - { - "case": "C58.recovered-failure", - "reference": "formal/dialcache-recovery-conformance.qnt:recoveredValueKeepsOriginalFallbackDiagnosticTest", - "kind": "regression", - "scope": "Successful retained recovery preserves one original remote fallback error diagnostic, one classifier/decode and served outcome with no shared publication." - }, - { - "case": "C25.abandoned-overlap", - "reference": "formal/dialcache-source-budgets-conformance.qnt:abandonedSourceCannotReplaceSuccessfulRetryTest", - "kind": "regression", - "scope": "First source times out, retry source2 succeeds and publishes, then abandoned source1 settles. Both original timeout and retry result remain unchanged and a later local probe returns2 without a third source." - }, - { - "case": "C38.marker-transition", - "reference": "formal/dialcache-invalidation-transition.qnt:successfulCutoffIsExactMaximum", - "kind": "invariant", - "scope": "Successful invalidation keeps the larger prior valid cutoff or newly proposed buffered cutoff; selected prior future markers are verified on real servers." - }, - { - "case": "C38.marker-transition", - "reference": "formal/dialcache-invalidation-transition.qnt:futureCutoffDoesNotMoveBackwardsTest", - "kind": "regression", - "scope": "Successful invalidation keeps the larger prior valid cutoff or newly proposed buffered cutoff; selected prior future markers are verified on real servers." - }, - { - "case": "C39.reject-before-mutation", - "reference": "formal/dialcache-invalidation-transition.qnt:argumentValidationIsExact", - "kind": "invariant", - "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input." - }, - { - "case": "C39.reject-before-mutation", - "reference": "formal/dialcache-invalidation-transition.qnt:rejectedInputPreservesEntireRedisState", - "kind": "invariant", - "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input." - }, - { - "case": "C39.reject-before-mutation", - "reference": "formal/dialcache-invalidation-transition.qnt:rejectedFractionPreservesOrderedListTest", - "kind": "regression", - "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input." - }, - { - "case": "C39.reject-before-mutation", - "reference": "formal/dialcache-invalidation-transition.qnt:rejectedUnsafeSumPreservesPersistentMalformedTextTest", - "kind": "regression", - "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input." - }, - { - "case": "C39.reject-before-mutation", - "reference": "formal/dialcache-invalidation-transition.qnt:newlineAndPlusAreNotDecimalGrammarTest", - "kind": "regression", - "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input." - }, - { - "case": "C38.retention", - "reference": "formal/dialcache-invalidation-transition.qnt:successfulRetentionMeetsBothFloors", - "kind": "invariant", - "scope": "Finite results meet the two-hour floor and cutoff-relative value-retention horizon exactly, preserve longer string TTL and preserve string persistence." - }, - { - "case": "C38.retention", - "reference": "formal/dialcache-invalidation-transition.qnt:stringsKeepExistingRetention", - "kind": "invariant", - "scope": "Finite results meet the two-hour floor and cutoff-relative value-retention horizon exactly, preserve longer string TTL and preserve string persistence." - }, - { - "case": "C38.retention", - "reference": "formal/dialcache-invalidation-transition.qnt:finiteRetentionIsExact", - "kind": "invariant", - "scope": "Finite results meet the two-hour floor and cutoff-relative value-retention horizon exactly, preserve longer string TTL and preserve string persistence." - }, - { - "case": "C38.retention", - "reference": "formal/dialcache-invalidation-transition.qnt:absentMarkerGetsRetentionFloorTest", - "kind": "regression", - "scope": "Finite results meet the two-hour floor and cutoff-relative value-retention horizon exactly, preserve longer string TTL and preserve string persistence." - }, - { - "case": "C38.retention", - "reference": "formal/dialcache-invalidation-transition.qnt:longBufferExtendsRequiredRetentionTest", - "kind": "regression", - "scope": "Finite results meet the two-hour floor and cutoff-relative value-retention horizon exactly, preserve longer string TTL and preserve string persistence." - }, - { - "case": "C38.marker-repair", - "reference": "formal/dialcache-invalidation-transition.qnt:stringsKeepExistingRetention", - "kind": "invariant", - "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention." - }, - { - "case": "C38.marker-repair", - "reference": "formal/dialcache-invalidation-transition.qnt:unrelatedTypesReceiveFiniteRepair", - "kind": "invariant", - "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention." - }, - { - "case": "C38.marker-repair", - "reference": "formal/dialcache-invalidation-transition.qnt:persistentMalformedStringStaysPersistentTest", - "kind": "regression", - "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention." - }, - { - "case": "C38.marker-repair", - "reference": "formal/dialcache-invalidation-transition.qnt:wrongTypeLongTtlIsNotInheritedTest", - "kind": "regression", - "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention." - }, - { - "case": "C38.marker-repair", - "reference": "formal/dialcache-invalidation-transition.qnt:wrongTypePersistenceIsNotInheritedTest", - "kind": "regression", - "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention." - }, - { - "case": "C38.marker-repair", - "reference": "formal/dialcache-invalidation-transition.qnt:emptyStringRetentionIsPreservedTest", - "kind": "regression", - "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention." - }, - { - "case": "C39.numeric-limits", - "reference": "formal/dialcache-invalidation-transition.qnt:argumentValidationIsExact", - "kind": "invariant", - "scope": "Maximum365day buffer and maximum safe timestamp/sum accepted with exact canonical decimal output; surrounding invalid boundary forms have separate preservation evidence." - }, - { - "case": "C39.numeric-limits", - "reference": "formal/dialcache-invalidation-transition.qnt:maximumBufferAndTimestampSumAreAcceptedTest", - "kind": "regression", - "scope": "Maximum365day buffer and maximum safe timestamp/sum accepted with exact canonical decimal output; surrounding invalid boundary forms have separate preservation evidence." - }, - { - "case": "C38.buffer-cutoff", - "reference": "formal/dialcache-invalidation-transition.qnt:successfulCutoffIsExactMaximum", - "kind": "invariant", - "scope": "Without a greater prior cutoff, timestamp plus requested future buffer becomes the exact marker value; long buffers also change retention." - }, - { - "case": "C38.buffer-cutoff", - "reference": "formal/dialcache-invalidation-transition.qnt:longBufferExtendsRequiredRetentionTest", - "kind": "regression", - "scope": "Without a greater prior cutoff, timestamp plus requested future buffer becomes the exact marker value; long buffers also change retention." - }, - { - "case": "C39.decimal-normalization", - "reference": "formal/dialcache-invalidation-transition.qnt:outputIsCanonicalDecimalString", - "kind": "invariant", - "scope": "Leading-zero decimal arguments are accepted and output zero/positive watermark text is canonical; valid prior values can still dominate the buffered proposal." - }, - { - "case": "C39.decimal-normalization", - "reference": "formal/dialcache-invalidation-transition.qnt:decimalZerosAreCanonicalizedTest", - "kind": "regression", - "scope": "Leading-zero decimal arguments are accepted and output zero/positive watermark text is canonical; valid prior values can still dominate the buffered proposal." - }, - { - "case": "W04.frame-encoding", - "reference": "formal/dialcache-frame-vectors.qnt:encodedFrameKeepsHeaderAndPayload", - "kind": "invariant", - "scope": "Concrete version-1 header and big-endian timestamp bytes, text UTF-16 replacement and binary identity across the declared finite byte/code-unit inputs; actual frame bytes checked in both ports." - }, - { - "case": "W04.frame-encoding", - "reference": "formal/dialcache-frame-vectors.qnt:payloadUnpairedSurrogateUsesReplacementTest", - "kind": "regression", - "scope": "Concrete version-1 header and big-endian timestamp bytes, text UTF-16 replacement and binary identity across the declared finite byte/code-unit inputs; actual frame bytes checked in both ports." - }, - { - "case": "W04.tracked-decoder", - "reference": "formal/dialcache-frame-vectors.qnt:trackedHitsStrictlyClearValidFence", - "kind": "invariant", - "scope": "Tracked decoder matrix covers missing/short/unsupported/zero/supported frames, decimal watermark validity and payload tags; paired miss metadata and exact decoded scalar/byte output are replayed. Invalid host reply object types stay in the existing abstraction and native binding tests." - }, - { - "case": "W04.tracked-decoder", - "reference": "formal/dialcache-frame-vectors.qnt:absentValueKeepsItsOwnClassification", - "kind": "invariant", - "scope": "Tracked decoder matrix covers missing/short/unsupported/zero/supported frames, decimal watermark validity and payload tags; paired miss metadata and exact decoded scalar/byte output are replayed. Invalid host reply object types stay in the existing abstraction and native binding tests." - }, - { - "case": "W04.tracked-decoder", - "reference": "formal/dialcache-frame-vectors.qnt:trackedFencePrecedesEncodingErrorTest", - "kind": "regression", - "scope": "Tracked decoder matrix covers missing/short/unsupported/zero/supported frames, decimal watermark validity and payload tags; paired miss metadata and exact decoded scalar/byte output are replayed. Invalid host reply object types stay in the existing abstraction and native binding tests." - }, - { - "case": "W04.untracked-decoder", - "reference": "formal/dialcache-frame-vectors.qnt:untrackedIgnoresMalformedWatermarkTest", - "kind": "regression", - "scope": "Untracked decoder ignores watermark content and permits zero timestamp while preserving byte/scalar output and payload-encoding errors in its finite frame matrix." - }, - { - "case": "W04.untracked-decoder", - "reference": "formal/dialcache-frame-vectors.qnt:decodedTextContainsOnlyScalars", - "kind": "invariant", - "scope": "Untracked decoder ignores watermark content and permits zero timestamp while preserving byte/scalar output and payload-encoding errors in its finite frame matrix." - }, - { - "case": "W04.invalid-timestamps", - "reference": "formal/dialcache-frame-vectors.qnt:writerRejectsInvalidNumericDomain", - "kind": "invariant", - "scope": "Writer rejects negative, fractional, first-unsafe, NaN and positive/negative infinity inputs; native bindings convert explicit numeric tags only, while Quint computes rejection." - }, - { - "case": "W04.strict-fence", - "reference": "formal/dialcache-frame-vectors.qnt:trackedHitsStrictlyClearValidFence", - "kind": "invariant", - "scope": "Tracked hit requires positive timestamp strictly greater than an observed valid watermark. A distinguishing equality regression rejects before unsupported payload encoding." - }, - { - "case": "W04.strict-fence", - "reference": "formal/dialcache-frame-vectors.qnt:trackedFencePrecedesEncodingErrorTest", - "kind": "regression", - "scope": "Tracked hit requires positive timestamp strictly greater than an observed valid watermark. A distinguishing equality regression rejects before unsupported payload encoding." - }, - { - "case": "W04.malformed-text", - "reference": "formal/dialcache-frame-vectors.qnt:decodedTextContainsOnlyScalars", - "kind": "invariant", - "scope": "Pure UTF-8 maximal-subpart consumption and UTF-16 writer replacement compute expected Unicode scalars/bytes; finite lead/continuation/truncation/overlong/surrogate/ceiling/BOM inputs replay against real codecs. Zstd wrapper binding uses separate generated envelope cases." - }, - { - "case": "W04.malformed-text", - "reference": "formal/dialcache-frame-vectors.qnt:maximalSubpartConsumesAcceptedPrefixOnceTest", - "kind": "regression", - "scope": "Pure UTF-8 maximal-subpart consumption and UTF-16 writer replacement compute expected Unicode scalars/bytes; finite lead/continuation/truncation/overlong/surrogate/ceiling/BOM inputs replay against real codecs. Zstd wrapper binding uses separate generated envelope cases." - }, - { - "case": "W04.malformed-text", - "reference": "formal/dialcache-frame-vectors.qnt:malformedSurrogateBytesRemainSeparateErrorsTest", - "kind": "regression", - "scope": "Pure UTF-8 maximal-subpart consumption and UTF-16 writer replacement compute expected Unicode scalars/bytes; finite lead/continuation/truncation/overlong/surrogate/ceiling/BOM inputs replay against real codecs. Zstd wrapper binding uses separate generated envelope cases." - }, - { - "case": "W04.malformed-text", - "reference": "formal/dialcache-frame-vectors.qnt:payloadUnpairedSurrogateUsesReplacementTest", - "kind": "regression", - "scope": "Pure UTF-8 maximal-subpart consumption and UTF-16 writer replacement compute expected Unicode scalars/bytes; finite lead/continuation/truncation/overlong/surrogate/ceiling/BOM inputs replay against real codecs. Zstd wrapper binding uses separate generated envelope cases." - }, - { - "case": "W05.duration-bounds", - "reference": "formal/dialcache-frame-vectors.qnt:acceptedDurationWithinCeiling", - "kind": "invariant", - "scope": "Rational finite inputs and explicit nonfinite tags distinguish ceil-to-positive-integer acceptance through 365 days, exclusive overflow, zero and invalid inputs; actual adapter-level duration APIs replay the Quint prediction." - }, - { - "case": "W05.duration-bounds", - "reference": "formal/dialcache-frame-vectors.qnt:physicalDurationRoundsUpWithinBoundTest", - "kind": "regression", - "scope": "Rational finite inputs and explicit nonfinite tags distinguish ceil-to-positive-integer acceptance through 365 days, exclusive overflow, zero and invalid inputs; actual adapter-level duration APIs replay the Quint prediction." - }, - { - "case": "W01.key-identity", - "reference": "formal/dialcache-key-protocol.qnt:successfulKeysHaveOneOperationDelimiter", - "kind": "invariant", - "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests." - }, - { - "case": "W01.key-identity", - "reference": "formal/dialcache-key-protocol.qnt:encodingSeparatesReservedDelimitersTest", - "kind": "regression", - "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests." - }, - { - "case": "W01.key-identity", - "reference": "formal/dialcache-key-protocol.qnt:surrogatePairEncodesOneFourByteScalarTest", - "kind": "regression", - "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests." - }, - { - "case": "W01.key-identity", - "reference": "formal/dialcache-key-protocol.qnt:trackedArgumentsDoNotChangeWatermarkTest", - "kind": "regression", - "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests." - }, - { - "case": "W01.invalid-identity", - "reference": "formal/dialcache-key-protocol.qnt:keyAcceptanceRespectsTextAndHashTagDomain", - "kind": "invariant", - "scope": "Reject unpaired UTF-16 units in each encoded component, namespace braces in either mode, and keyType/id braces only when tracked. Raw unit overrides construct actual malformed native inputs; removed properties and host type errors remain fixed/native API boundaries." - }, - { - "case": "W01.invalid-identity", - "reference": "formal/dialcache-key-protocol.qnt:rejectedKeysExposeNoPartialIdentity", - "kind": "invariant", - "scope": "Reject unpaired UTF-16 units in each encoded component, namespace braces in either mode, and keyType/id braces only when tracked. Raw unit overrides construct actual malformed native inputs; removed properties and host type errors remain fixed/native API boundaries." - }, - { - "case": "W01.invalid-identity", - "reference": "formal/dialcache-key-protocol.qnt:malformedUtf16RejectsInsteadOfReplacementTest", - "kind": "regression", - "scope": "Reject unpaired UTF-16 units in each encoded component, namespace braces in either mode, and keyType/id braces only when tracked. Raw unit overrides construct actual malformed native inputs; removed properties and host type errors remain fixed/native API boundaries." - }, - { - "case": "W01.invalid-identity", - "reference": "formal/dialcache-key-protocol.qnt:bracesDependOnEntityTrackingTest", - "kind": "regression", - "scope": "Reject unpaired UTF-16 units in each encoded component, namespace braces in either mode, and keyType/id braces only when tracked. Raw unit overrides construct actual malformed native inputs; removed properties and host type errors remain fixed/native API boundaries." - }, - { - "case": "W02.sorted-arguments", - "reference": "formal/dialcache-key-protocol.qnt:normalizedNamesAreOrderedAndValuesAssociated", - "kind": "invariant", - "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries." - }, - { - "case": "W02.sorted-arguments", - "reference": "formal/dialcache-key-protocol.qnt:normalizedIntegersRetainExactMagnitude", - "kind": "invariant", - "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries." - }, - { - "case": "W02.sorted-arguments", - "reference": "formal/dialcache-key-protocol.qnt:normalizedNamesUseUtf16OrderingTest", - "kind": "regression", - "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries." - }, - { - "case": "W02.sorted-arguments", - "reference": "formal/dialcache-key-protocol.qnt:normalizedPrimitivesPreserveFalsyAndOmittedValuesTest", - "kind": "regression", - "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries." - }, - { - "case": "W02.sorted-arguments", - "reference": "formal/dialcache-key-protocol.qnt:signedBigintsPreserveEveryDecimalDigitTest", - "kind": "regression", - "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries." - }, - { - "case": "W02.sorted-arguments", - "reference": "formal/dialcache-key-protocol.qnt:orderedKeyArgumentsRetainDuplicatesTest", - "kind": "regression", - "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries." - }, - { - "case": "W03.cohort-assignment", - "reference": "formal/dialcache-key-protocol.qnt:cohortNumeratorsAreUnsignedAndBoundariesStrict", - "kind": "invariant", - "scope": "Compute FNV-1a over UTF-16 units of logical key plus local/remote/shadow discriminator with XOR and modulo-2^32 multiplication. Generated exact numerators are converted only to the public percent representation. Strict admission is checked in Quint; runtime-boundaries and shadow-layers replay actual equal/below/above policy consequences." - }, - { - "case": "W03.cohort-assignment", - "reference": "formal/dialcache-key-protocol.qnt:publishedCohortNumeratorsRemainStableTest", - "kind": "regression", - "scope": "Compute FNV-1a over UTF-16 units of logical key plus local/remote/shadow discriminator with XOR and modulo-2^32 multiplication. Generated exact numerators are converted only to the public percent representation. Strict admission is checked in Quint; runtime-boundaries and shadow-layers replay actual equal/below/above policy consequences." - }, - { - "case": "W06.envelope-markers", - "reference": "formal/dialcache-envelope-vectors.qnt:rawEscapeIsLossless", - "kind": "invariant", - "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result." - }, - { - "case": "W06.envelope-markers", - "reference": "formal/dialcache-envelope-vectors.qnt:escapeConsumesExactlyOnePrefix", - "kind": "invariant", - "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result." - }, - { - "case": "W06.envelope-markers", - "reference": "formal/dialcache-envelope-vectors.qnt:escapedCompressedMarkerRemainsLiteralTest", - "kind": "regression", - "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result." - }, - { - "case": "W06.envelope-markers", - "reference": "formal/dialcache-envelope-vectors.qnt:unknownLegacyZeroPrefixRemainsUntouchedTest", - "kind": "regression", - "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result." - }, - { - "case": "W06.envelope-markers", - "reference": "formal/dialcache-envelope-vectors.qnt:corruptCompressionPreservesMarkedBytesTest", - "kind": "regression", - "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result." - }, - { - "case": "W06.compressed-decode", - "reference": "formal/dialcache-envelope-vectors.qnt:readFailuresPreserveOriginalBinary", - "kind": "invariant", - "scope": "Both markers decode ten independently verified raw-block codec fixtures, including malformed UTF-8 and BOM/scalar boundaries; three rejected codec headers and injected output limits retain exact original marked bytes. Arbitrary zstd streams, dictionaries and windows are native boundaries." - }, - { - "case": "W06.compressed-decode", - "reference": "formal/dialcache-envelope-vectors.qnt:successfulReadRespectsMarkerAndLimit", - "kind": "invariant", - "scope": "Both markers decode ten independently verified raw-block codec fixtures, including malformed UTF-8 and BOM/scalar boundaries; three rejected codec headers and injected output limits retain exact original marked bytes. Arbitrary zstd streams, dictionaries and windows are native boundaries." - }, - { - "case": "W06.compressed-decode", - "reference": "formal/dialcache-envelope-vectors.qnt:corruptCompressionPreservesMarkedBytesTest", - "kind": "regression", - "scope": "Both markers decode ten independently verified raw-block codec fixtures, including malformed UTF-8 and BOM/scalar boundaries; three rejected codec headers and injected output limits retain exact original marked bytes. Arbitrary zstd streams, dictionaries and windows are native boundaries." - }, - { - "case": "W06.compressed-decode", - "reference": "formal/dialcache-envelope-vectors.qnt:decoderLimitKeepsRawBytesTest", - "kind": "regression", - "scope": "Both markers decode ten independently verified raw-block codec fixtures, including malformed UTF-8 and BOM/scalar boundaries; three rejected codec headers and injected output limits retain exact original marked bytes. Arbitrary zstd streams, dictionaries and windows are native boundaries." - }, - { - "case": "W07.compression-selection", - "reference": "formal/dialcache-envelope-vectors.qnt:compressionUsesByteThresholdAndStrictShrink", - "kind": "invariant", - "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload." - }, - { - "case": "W07.compression-selection", - "reference": "formal/dialcache-envelope-vectors.qnt:utf8ThresholdCountsBytesTest", - "kind": "regression", - "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload." - }, - { - "case": "W07.compression-selection", - "reference": "formal/dialcache-envelope-vectors.qnt:compressionTieKeepsRawRepresentationTest", - "kind": "regression", - "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload." - }, - { - "case": "W07.compression-selection", - "reference": "formal/dialcache-envelope-vectors.qnt:shrinkComparedWithEscapedRawBytesTest", - "kind": "regression", - "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload." - }, - { - "case": "W07.compression-selection", - "reference": "formal/dialcache-envelope-vectors.qnt:thresholdPrecedesWriteLimitTest", - "kind": "regression", - "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload." - }, - { - "case": "W07.compression-selection", - "reference": "formal/dialcache-envelope-vectors.qnt:writeLimitPrecedesCompressionTest", - "kind": "regression", - "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload." - }, - { - "case": "W08.legacy-reading", - "reference": "formal/dialcache-envelope-vectors.qnt:readDoesNotConsultNewWritePolicy", - "kind": "invariant", - "scope": "The envelope reader ignores the model new-write policy input. Its native helper has no policy argument; combine primitive vectors with the actual compression:false recovery-read cached compressed history for the cache binding." - }, - { - "case": "W08.legacy-reading", - "reference": "formal/dialcache-envelope-vectors.qnt:disabledNewWritesStillReadLegacyCompressionTest", - "kind": "regression", - "scope": "The envelope reader ignores the model new-write policy input. Its native helper has no policy argument; combine primitive vectors with the actual compression:false recovery-read cached compressed history for the cache binding." - }, - { - "case": "W08.legacy-reading", - "reference": "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryMemoizesWithoutLocalPublicationTest", - "kind": "regression", - "scope": "Actual cache with new compression writes disabled still decodes the acquired compressed stale candidate and memoizes only in its request scope. This connects the unconditional envelope reader to resolved cache policy." - }, - { - "case": "C60.logging-default-off", - "reference": "formal/dialcache-shadow-conformance.qnt:omittedLoggingKeepsMismatchMetricsOnlyTest", - "kind": "regression", - "scope": "The comparator fixture omits logging entirely. Confirmed mismatch still emits one age sample and verdict, with zero warning and zero configuration failure; public action history never includes a false logging reply." - }, - { - "case": "C60.logging-explicit-off", - "reference": "formal/dialcache-shadow-conformance.qnt:explicitFalseLoggingOverridesEnabledDefaultTest", - "kind": "regression", - "scope": "A logging-enabled fixture receives an explicit false runtime reply before admission. Confirmed mismatch and age metric remain, while warning and configuration-error counts remain zero." - }, - { - "case": "C51.confirmation-age", - "reference": "formal/dialcache-shadow-conformance.qnt:confirmationPastFreshnessKeepsOriginalPayloadAndAgeTest", - "kind": "regression", - "scope": "C0=1 is acquired fresh and retained; source2 compares unequal and C1 is held. Advancing application time exactly60000ms crosses F while elapsed job time and physical retention stay unchanged. C1 matching bytes confirm mismatch with read count2, no repair, source caller2 preserved and age60000ms." - }, - { - "case": "C51.confirmation-rollback", - "reference": "formal/dialcache-shadow-conformance.qnt:confirmationRollbackKeepsPayloadAndClampsAgeTest", - "kind": "regression", - "scope": "After fresh C0/source inequality starts C1, application time rolls backward1000ms. The now-future C1 still confirms identical payload bytes, preserves source caller2, writes nothing and emits mismatch with age clamped0 and remote_shadow future offset1000ms." - }, - { - "case": "C57.clamp-age", - "reference": "formal/dialcache-shadow-conformance.qnt:confirmationRollbackKeepsPayloadAndClampsAgeTest", - "kind": "regression", - "scope": "A held C1 confirmation after1000ms wall rollback still confirms mismatch, and reported retained-C0 age is exactly0 rather than a negative or absolute duration." - }, - { - "case": "C57.future-offset", - "reference": "formal/dialcache-shadow-conformance.qnt:confirmationRollbackKeepsPayloadAndClampsAgeTest", - "kind": "regression", - "scope": "A successful C1 read of now-future bytes reports exactly one futureTimestampOffset event with namespace urn, useCase Behavior, keyType id, layer remote_shadow and offset1000ms. The frame remains a valid C1 payload-identity participant and confirms mismatch without repair." - }, - { - "case": "C57.future-offset", - "reference": "formal/dialcache-shadow-conformance.qnt:futureDarkAcquisitionReportsOffsetAndFillsMissTest", - "kind": "regression", - "scope": "A fresh seeded C0 becomes1000ms future after wall rollback. Dark acquisition emits exactly one futureTimestampOffset event labeled urn/Behavior/id/remote_shadow with1000ms; it treats the frame as semantic miss, never decodes it, and may fill from accepted source2." - }, - { - "case": "C57.future-offset", - "reference": "formal/dialcache-shadow-conformance.qnt:futureLateDarkReadKeepsTimeoutAndReportsOffsetTest", - "kind": "regression", - "scope": "A raw dark read returns after the10ms job/caller deadline but inside its separate60s read budget. Its now-future frame emits remote_shadow offset990ms while caller timeout and single job timeout verdict remain; no decode, serialization or write can resume." - }, - { - "case": "C47.recovery-skips-shadow", - "reference": "formal/dialcache-recovery-read-conformance.qnt:recoveredAbsenceSkipsSelectedShadowTest", - "kind": "regression", - "scope": "With tracked stale bytes, a selected 100% shadow policy, installed outcome hook and available capacity, source failure recovers the retained value, including absence. Recovery and its same-request memo probe start no diagnostic source/read/job and publish no remote/local value; an independent request repeats source failure and recovery for the absence case." - }, - { - "case": "C47.recovery-skips-shadow", - "reference": "formal/dialcache-recovery-read-conformance.qnt:recoveredValueSkipsSelectedShadowTest", - "kind": "regression", - "scope": "With tracked stale bytes, a selected 100% shadow policy, installed outcome hook and available capacity, source failure recovers the retained value, including absence. Recovery and its same-request memo probe start no diagnostic source/read/job and publish no remote/local value; an independent request repeats source failure and recovery for the absence case." - }, - { - "case": "C16.ttl-implies-ramp", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", - "kind": "regression", - "scope": "A runtime local TTL adds a full-ramp local layer to an initially remote-only operation, capturing source publication into both layers; a source completion while a later policy reply is held is retained and served locally without another Redis read." - }, - { - "case": "C16.ttl-implies-ramp", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest", - "kind": "regression", - "scope": "Runtime local TTL activates local caching and default sharing even when the remote client exists but no remote TTL is configured." - }, - { - "case": "C11.one-registered-flight", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest", - "kind": "regression", - "scope": "The newly enabled local layer makes two pending same-key calls share one source, and retains its Absent result for a later local hit without any Redis read/write." - }, - { - "case": "C05.local-hit-stops-traversal", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", - "kind": "regression", - "scope": "An earlier local value suppresses remote read/decode and source execution after a runtime TTL overlay adds local serving." - }, - { - "case": "C13.remote-last-writer", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteHitPromotesIntoNewlyEnabledLocalLayerTest", - "kind": "regression", - "scope": "A remote hit warms the newly enabled local layer; another already-running remote-only source then replaces Redis while the captured local value remains unchanged, distinguished by later local-enabled and remote-only reads." - }, - { - "case": "C01.no-cache-plumbing", - "reference": "formal/dialcache-conformance.qnt:disabledAndRequestCallsKeepTheirOwnLifetimesTest", - "kind": "regression", - "scope": "The introductory profile alternates disabled calls and separate request-local pairs across a source change; results and source/read/write counts establish those lifetimes. This does not separately observe key construction or runtime policy." - }, - { - "case": "C05.local-hit-stops-traversal", - "reference": "formal/dialcache-conformance.qnt:localValueSurvivesSourceChangeTest", - "kind": "regression", - "scope": "Two enabled local calls around an external source update return the original value with one local source execution in the introductory profile. No request-memo warming claim." - }, - { - "case": "C05.local-hit-stops-traversal", - "reference": "formal/dialcache-conformance.qnt:servedLayerValueMatchesCache", - "kind": "invariant", - "scope": "After each public local, coalesced or remote call in the introductory profile, the served layer holds exactly the returned value and a semantic miss leaves that layer readable. The receipt reads the input record, not the transition helpers; it makes no claim about request-memo warming or remote read counts." - }, - { - "case": "C11.one-registered-flight", - "reference": "formal/dialcache-scope-conformance.qnt:pendingRequestFlightIsJoinedBeforeMemoReadTest", - "kind": "regression", - "scope": "A coalescing caller joins the request flight registered under its row before the memo is read, although an independent source has since memoized a value into that row; the joined caller completes with the flight's value." - }, - { - "case": "C11.one-registered-flight", - "reference": "formal/dialcache-conformance.qnt:coalescedPairPublishesOneReusableValueTest", - "kind": "regression", - "scope": "Two controlled same-key call pairs, separated by an external source change, share one initial source and reuse its published local value." - }, - { - "case": "C32.grouped-invalidation", - "reference": "formal/dialcache-conformance.qnt:invalidationRefillsFromCurrentSourceTest", - "kind": "regression", - "scope": "For one tracked entity/operation, a public invalidation separates a prior cache hit from a refill with the updated source. Multi-operation grouping remains covered by the other case evidence." - }, - { - "case": "C28.no-refill-after-read-failure", - "reference": "formal/dialcache-conformance.qnt:failedReadPreservesPreviouslyStoredBytesTest", - "kind": "regression", - "scope": "After a tracked value is stored, an injected read failure returns the changed source without another write; a later healthy read returns the original stored value. This is a read-error example, not a timeout/late-read schedule." - }, - { - "case": "C09.fixed-local-ttl", - "reference": "formal/dialcache-policy-conformance.qnt:localHitsRespectInsertionExpiry", - "kind": "invariant", - "scope": "Independent local-hit receipts retain observation time and insertion expiry; each recorded hit occurred strictly before that fixed expiry." - }, - { - "case": "C45.maximum-age-exclusive", - "reference": "formal/dialcache-recovery-conformance.qnt:recoveredValueWasWithinAcceptedAge", - "kind": "invariant", - "scope": "Independent recovery receipts check nonnegative returned age strictly below the captured maximum after recovery decode in the recovery profile." - }, - { - "case": "C09.fixed-local-ttl", - "reference": "formal/dialcache-rule-checks.qnt:localBoundaryIsExclusive", - "kind": "invariant", - "scope": "Finite symbolic cases compare the canonical local-expiry judgment with the independently stated strict observation-before-expiry inequality." - }, - { - "case": "C09.fixed-local-ttl", - "reference": "formal/dialcache-rule-checks.qnt:localGridUsesWholeMilliseconds", - "kind": "invariant", - "scope": "Finite submillisecond examples independently check flooring insertion and observation times before local age comparison; this is the grid decision, not an entire native clock implementation." - }, - { - "case": "C22.freshness-boundary", - "reference": "formal/dialcache-rule-checks.qnt:freshBoundaryIsExclusive", - "kind": "invariant", - "scope": "Finite symbolic timestamp and TTL domains independently characterize nonnegative fresh age strictly below the fresh ceiling." - }, - { - "case": "C40.first-stale", - "reference": "formal/dialcache-rule-checks.qnt:retentionStartsAtFreshBoundary", - "kind": "invariant", - "scope": "Finite symbolic domains independently characterize initial stale retention as fresh ceiling <= age < maximum; frame/fence validity remains a profile responsibility." - }, - { - "case": "C45.maximum-age-exclusive", - "reference": "formal/dialcache-rule-checks.qnt:recoveryBoundaryIsExclusive", - "kind": "invariant", - "scope": "Finite symbolic domains independently characterize recovery age as nonnegative and strictly below the acquired maximum, including equality rejection." - }, - { - "case": "C45.rollback-below-fresh", - "reference": "formal/dialcache-rule-checks.qnt:rollbackCanRecoverRetainedBytesTest", - "kind": "regression", - "scope": "Direct canonical-rule example accepts nonnegative recovery age below the fresh ceiling. Actual retention followed by rollback is exercised by the profile evidence." - }, - { - "case": "C25.late-source-rejected", - "reference": "formal/dialcache-rule-checks.qnt:sourceBoundaryIsExclusive", - "kind": "invariant", - "scope": "Finite symbolic elapsed-time/budget domains independently characterize finite acceptance strictly before the deadline and the negative unbounded sentinel; monotonic source ordering is checked by connection records." - }, - { - "case": "W04.strict-fence", - "reference": "formal/dialcache-rule-checks.qnt:fenceBoundaryIsExclusive", - "kind": "invariant", - "scope": "Finite symbolic timestamp/watermark domains independently characterize strict timestamp-greater-than-fence acceptance; wire numeric validation is separate." - }, - { - "case": "C44.retained-invalidation", - "reference": "formal/dialcache-recovery-connection.qnt:retainedSnapshotMatchesAcquisition", - "kind": "invariant", - "scope": "The recovery-read profile captures maximum age from pre-admission policy, then projects read settlement into a retained owner, modeled payload identity and timestamp. Accepted policy and later retained candidates must match those independent records. Raw/compressed encoding identity is abstracted." - }, - { - "case": "C45.captured-policy", - "reference": "formal/dialcache-recovery-connection.qnt:recoveryReturnMatchesAcquiredContract", - "kind": "invariant", - "scope": "A served recovery result after releaseLoad must match the acquired snapshot owner and modeled payload and satisfy its captured maximum at the pre-settlement wall clock. Single-active-call profile." - }, - { - "case": "C44.retained-invalidation", - "reference": "formal/dialcache-legacy-recovery-connection.qnt:flightKeepsAcquiredSnapshot", - "kind": "invariant", - "scope": "The recovery profile captures pre-read storage and policy into a flight snapshot; nonempty retained candidates preserve its payload, timestamp and maximum through later transitions." - }, - { - "case": "C36.independent-invalidation-snapshots", - "reference": "formal/dialcache-independent-connection.qnt:independentSnapshotsMatchAcquisition", - "kind": "invariant", - "scope": "Each independent caller retains its admitted maximum and separately projected read-time payload, timestamp and acquisition wall clock whenever a candidate is retained; callers do not borrow another acquisition." - }, - { - "case": "C45.captured-policy", - "reference": "formal/dialcache-independent-connection.qnt:independentRecoveryMatchesContract", - "kind": "invariant", - "scope": "A served independent recovery decode returns the selected caller snapshot payload under its captured maximum and current wall clock, including reversed completion schedules." - }, - { - "case": "C23.source-start", - "reference": "formal/dialcache-effects-connection.qnt:effectsDeadlineMatchesSourceStart", - "kind": "invariant", - "scope": "The effects profile projects each observable source start from the preceding environment clock (or end-of-tick read timeout); a running source deadline must equal that start plus its budget." - }, - { - "case": "C59.source-excludes-publication", - "reference": "formal/dialcache-effects-connection.qnt:effectsPublicationMatchesAcceptedSource", - "kind": "invariant", - "scope": "Pending serialization/write phases and new dump/write effects require one matching successful source receipt projected from the external settlement input and preceding clock. The modeled accepted timestamp must match that receipt and precede its source-relative deadline; payload provenance and refill fences remain separate." - }, - { - "case": "C23.policy-does-not-spend-source-budget", - "reference": "formal/dialcache-source-connection.qnt:sourceOriginsMatchContract", - "kind": "invariant", - "scope": "Each source-budgets source start projects the preceding external clock and captured mode into a separate start/budget record; the executing profile fields must agree." - }, - { - "case": "C24.follower-source", - "reference": "formal/dialcache-source-connection.qnt:sourceOwnersMatchContract", - "kind": "invariant", - "scope": "Each source-budgets source is owned by the call selected at beginCall or policy release, as reconstructed from the preceding public event rather than source ownership fields." - }, - { - "case": "C24.follower-source", - "reference": "formal/dialcache-source-connection.qnt:followerKeepsAcquiredOwner", - "kind": "invariant", - "scope": "A policy release while a registered source exists maps the released caller to that previously registered owner, preserving the leader execution." - }, - { - "case": "C25.late-source-rejected", - "reference": "formal/dialcache-source-connection.qnt:acceptedSourcesMatchContract", - "kind": "invariant", - "scope": "Successful values in the source-budgets profile satisfy the separately captured source owner, start and budget, including the outside-call unbounded sentinel." - }, - { - "case": "C24.independent-source-budgets", - "reference": "formal/dialcache-independent-connection.qnt:independentSourceOriginsMatchContract", - "kind": "invariant", - "scope": "The independent profile reconstructs source starts and caller ownership from preceding read/decode events or owned read deadlines during time advance, then compares actual modeled source origins and call-to-source links. Read-deadline correctness remains a profile obligation." - }, - { - "case": "C24.independent-source-budgets", - "reference": "formal/dialcache-independent-connection.qnt:independentSourceMatchesTimerContract", - "kind": "invariant", - "scope": "Each modeled source timer equals its separately reconstructed source origin plus budget, and nonpending nontimeout source settlements satisfy that acquired owner/start/budget contract." - }, - { - "case": "C43.request-memo", - "reference": "formal/dialcache-legacy-recovery-connection.qnt:flightRecoveryMatchesContract", - "kind": "invariant", - "scope": "After a served recovery decode, every previously pending caller in the acquired flight returns its captured modeled payload within the accepted age bound. This establishes shared caller results; request-memo publication remains covered by the case's other evidence." - }, - { - "case": "C55.ignore-untracked-fence", - "reference": "formal/dialcache-effects-conformance.qnt:untrackedFencedReplyRefillsAndIsReadableTest", - "kind": "regression", - "scope": "An untracked watermark-fenced reply is normalized to an unclassified miss with zero fence; one source refill is subsequently readable without a second source." - }, - { - "case": "C45.captured-policy", - "reference": "formal/dialcache-independent-conformance.qnt:independentRecoveryAtCapturedAgeBoundaryTest", - "kind": "regression", - "scope": "The shorter captured policy rejects at its exact maximum age while a longer-policy decode remains pending; subsequent decode serves only the longer-policy caller and neither recovery writes shared state." - }, - { - "case": "C43.request-memo", - "reference": "formal/dialcache-recovery-conformance.qnt:recoveredFlightMemoIsReusedByBothRequestsTest", - "kind": "regression", - "scope": "Two request scopes sharing recovery each reuse the recovered result in a subsequent public call, with one read/source/decode and no shared writes." - }, - { - "case": "C22.freshness-boundary", - "reference": "formal/dialcache-policy-conformance.qnt:remoteHitsRespectAcquiredFreshness", - "kind": "invariant", - "scope": "For each policy-profile read receipt, a remote hit requires eligible physically retained storage and nonnegative acquired wall-clock age strictly below the captured fresh TTL. The assertion states the age inequalities independently of the transition helper; it does not cover tracked frame decoding or shadow admission." - }, - { - "case": "C22.freshness-boundary", - "reference": "formal/dialcache-policy-conformance.qnt:remoteHitBeforeBoundaryDoesNotRenewFreshnessTest", - "kind": "regression", - "scope": "A public untracked remote read hits at age 500 ms, then the same retained frame misses at exact age 1000 ms without renewal from the first hit. One source refills with a distinct value and a later read reuses it; local caching is disabled." - }, - { - "case": "C52.expired-miss-may-fill", - "reference": "formal/dialcache-shadow-conformance.qnt:c0AcquisitionsRespectFreshness", - "kind": "invariant", - "scope": "Each successful non-abandoned shadow C0 acquisition records its readable snapshot, acquisition wall time, fresh ceiling and acceptance. Acceptance requires nonnegative age strictly below that ceiling; later comparison and C1 confirmation do not reclassify the recorded decision." - }, - { - "case": "C52.expired-miss-may-fill", - "reference": "formal/dialcache-shadow-conformance.qnt:c0AtExactFreshnessBoundaryRefillsTest", - "kind": "regression", - "scope": "A public C1 confirmation completes using retained bytes at age 60000 ms. A subsequent job reacquires the same stored bytes as C0 at exact freshness age 60000 ms, does not decode them, and fills once from the accepted caller source. This checks C0 reacquisition rather than changing the prior job's retained decision." - }, - { - "case": "C40.future-rejected", - "reference": "formal/dialcache-stale-recovery.qnt:futureFrameIsNeverFreshOrRetained", - "kind": "invariant", - "scope": "Receipt of the initial read: the frame stamp and the observing clock are recorded at the read, and a frame stamped after that clock is classified neither fresh nor retained, with the inequality restated on the recorded pair. The model keeps no future check of its own on this path, so the receipt is what catches a shared age rule that stops rejecting future stamps." - }, - { - "case": "W06.envelope-markers", - "reference": "formal/dialcache-envelope-vectors.qnt:unknownZeroPrefixPassesThroughUnchanged", - "kind": "invariant", - "scope": "A binary payload whose leading zero is followed by nothing or by a byte above 2 is legacy raw data: the read outcome is passthrough with every byte returned. Complements the one-prefix unescape invariant; together they cover every zero-prefixed vector input." - }, - { - "case": "C55.valid-fence-independent-of-cause", - "reference": "formal/dialcache-effects-conformance.qnt:expiredZeroFenceReplyRefillsAndIsReadableTest", - "kind": "regression", - "scope": "A tracked expired-reason reply with a zero fence is normalized to an expired miss with no retained fence; one source refill is serialized and written, and the next public read hits it without a second source." - }, - { - "case": "C55.valid-fence-independent-of-cause", - "reference": "formal/dialcache-effects-conformance.qnt:absentReplyWithFutureFenceBlocksRefillTest", - "kind": "regression", - "scope": "A tracked absent-reason reply with a valid future fence retains that fence through normalization; the accepted source is served without serialization, and the next public read misses and starts a second source." - }, - { - "case": "C34.first-fence", - "reference": "formal/dialcache-effects-conformance.qnt:absentReplyWithFutureFenceBlocksRefillTest", - "kind": "regression", - "scope": "An observed future fence carried by a normalized adapter reply suppresses serialization and refill of the accepted source; the following read finds no stored value. Fence equality and invalidation-issued fences keep their tracked-invalidation regressions." - }, - { - "case": "C06.false-remote", - "reference": "formal/dialcache-policy-conformance.qnt:falsyRemoteValuesAreServedFromRemoteTest", - "kind": "regression", - "scope": "With the local layer disabled, a false source result is written to Redis and the next same-key call is a remote hit returning false. The zero and empty-string results share this schedule; host encodings remain fixed-scenario evidence." - }, - { - "case": "C06.zero-remote", - "reference": "formal/dialcache-policy-conformance.qnt:falsyRemoteValuesAreServedFromRemoteTest", - "kind": "regression", - "scope": "With the local layer disabled, a zero source result is written to Redis and the next same-key call is a remote hit returning zero. The false and empty-string results share this schedule; host encodings remain fixed-scenario evidence." - }, - { - "case": "C06.empty-string-remote", - "reference": "formal/dialcache-policy-conformance.qnt:falsyRemoteValuesAreServedFromRemoteTest", - "kind": "regression", - "scope": "After the earlier key reaches its fresh boundary, an empty-string source result refills Redis and the next same-key call is a remote hit returning the empty string. The false and zero results share this schedule; host encodings remain fixed-scenario evidence." - }, - { - "case": "C05.participating-publication", - "reference": "formal/dialcache-layers-conformance.qnt:untrackedSourcePublicationIsProbedInAllThreeLayersTest", - "kind": "regression", - "scope": "One untracked source fills the request memo, the local layer and Redis; a same-scope memo hit, a fresh-context local hit and an other-instance remote hit each return the published value with no second source. Tracked validation and detached scopes retain separate evidence." - }, - { - "case": "C43.independent-values", - "reference": "formal/dialcache-independent-conformance.qnt:independentRecoveriesServeDistinctAcquiredSnapshotsTest", - "kind": "regression", - "scope": "Two uncoalesced callers acquire different stale frames before their sources fail; after invalidation each recovery serves the bytes its own read retained, with two reads, two sources, two decodes and no writes." - }, - { - "case": "C11.one-registered-flight", - "reference": "formal/dialcache-layers-conformance.qnt:coalescingCallerJoinsPendingFlightBeforeSeededFrameTest", - "kind": "regression", - "scope": "A coalescing caller joins the flight registered for its identity before reading the remote layer; a frame seeded while the flight is pending does not serve it. This check covers the bounded model clause: coalescingCallerJoinsPendingFlightBeforeSeededFrameTest." - }, - { - "case": "C13.uncoalesced-caching", - "reference": "formal/dialcache-runtime-boundaries-conformance.qnt:defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest", - "kind": "regression", - "scope": "A reply that disables sharing starts its own source beside the registered leader; once its value has warmed local storage, a reply that shares again joins the leader rather than hitting the entry. This check covers the bounded model clause: defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest." - } - ], - "definitions": [ - { - "case": "C06.null-request", - "reference": "formal/dialcache-scope-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "Positive value codes preserve this falsy native value across source settlement, memo publication, and a later memo hit; the value code/native mapping is specified by the profile." - }, - { - "case": "C06.null-request", - "reference": "formal/kernel/serving.qnt:finish", - "kind": "helper", - "scope": "Settlement completes every owning caller and memoizes a success into each owner's still-open row; positive value codes, including the falsy natives and absence, are memoized and served alike." - }, - { - "case": "C06.null-request", - "reference": "formal/kernel/serving.qnt:releaseRequest", - "kind": "helper", - "scope": "The request-only release joins the pending request flight of the caller's own row when the call coalesces, else serves the memo row, else starts a source; the row is the caller's memo slot, decided with the state current at release." - }, - { - "case": "C06.null-local", - "reference": "formal/dialcache-policy-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code." - }, - { - "case": "C06.null-local", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code." - }, - { - "case": "C06.null-local", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code." - }, - { - "case": "C06.null-remote", - "reference": "formal/dialcache-policy-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass." - }, - { - "case": "C06.null-remote", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass." - }, - { - "case": "C06.null-remote", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass." - }, - { - "case": "C06.false-request", - "reference": "formal/dialcache-scope-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "Positive value codes preserve this falsy native value across source settlement, memo publication, and a later memo hit; the value code/native mapping is specified by the profile." - }, - { - "case": "C06.false-request", - "reference": "formal/kernel/serving.qnt:finish", - "kind": "helper", - "scope": "Settlement completes every owning caller and memoizes a success into each owner's still-open row; positive value codes, including the falsy natives and absence, are memoized and served alike." - }, - { - "case": "C06.false-request", - "reference": "formal/kernel/serving.qnt:releaseRequest", - "kind": "helper", - "scope": "The request-only release joins the pending request flight of the caller's own row when the call coalesces, else serves the memo row, else starts a source; the row is the caller's memo slot, decided with the state current at release." - }, - { - "case": "C06.false-local", - "reference": "formal/dialcache-policy-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code." - }, - { - "case": "C06.false-local", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code." - }, - { - "case": "C06.false-local", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code." - }, - { - "case": "C06.false-remote", - "reference": "formal/dialcache-policy-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass." - }, - { - "case": "C06.false-remote", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass." - }, - { - "case": "C06.false-remote", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass." - }, - { - "case": "C06.zero-request", - "reference": "formal/dialcache-scope-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "Positive value codes preserve this falsy native value across source settlement, memo publication, and a later memo hit; the value code/native mapping is specified by the profile." - }, - { - "case": "C06.zero-request", - "reference": "formal/kernel/serving.qnt:finish", - "kind": "helper", - "scope": "Settlement completes every owning caller and memoizes a success into each owner's still-open row; positive value codes, including the falsy natives and absence, are memoized and served alike." - }, - { - "case": "C06.zero-request", - "reference": "formal/kernel/serving.qnt:releaseRequest", - "kind": "helper", - "scope": "The request-only release joins the pending request flight of the caller's own row when the call coalesces, else serves the memo row, else starts a source; the row is the caller's memo slot, decided with the state current at release." - }, - { - "case": "C06.zero-local", - "reference": "formal/dialcache-policy-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code." - }, - { - "case": "C06.zero-local", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code." - }, - { - "case": "C06.zero-local", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code." - }, - { - "case": "C06.zero-remote", - "reference": "formal/dialcache-policy-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass." - }, - { - "case": "C06.zero-remote", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass." - }, - { - "case": "C06.zero-remote", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass." - }, - { - "case": "C06.empty-string-request", - "reference": "formal/dialcache-scope-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "Positive value codes preserve this falsy native value across source settlement, memo publication, and a later memo hit; the value code/native mapping is specified by the profile." - }, - { - "case": "C06.empty-string-request", - "reference": "formal/kernel/serving.qnt:finish", - "kind": "helper", - "scope": "Settlement completes every owning caller and memoizes a success into each owner's still-open row; positive value codes, including the falsy natives and absence, are memoized and served alike." - }, - { - "case": "C06.empty-string-request", - "reference": "formal/kernel/serving.qnt:releaseRequest", - "kind": "helper", - "scope": "The request-only release joins the pending request flight of the caller's own row when the call coalesces, else serves the memo row, else starts a source; the row is the caller's memo slot, decided with the state current at release." - }, - { - "case": "C06.empty-string-local", - "reference": "formal/dialcache-policy-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code." - }, - { - "case": "C06.empty-string-local", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code." - }, - { - "case": "C06.empty-string-local", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code." - }, - { - "case": "C06.empty-string-remote", - "reference": "formal/dialcache-policy-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass." - }, - { - "case": "C06.empty-string-remote", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass." - }, - { - "case": "C06.empty-string-remote", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass." - }, - { - "case": "C06.absent-remote", - "reference": "formal/dialcache-policy-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "Explicit absent code remains present in remote storage and reusable; the existing absent regression only probes local reuse." - }, - { - "case": "C06.absent-remote", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "Explicit absent code remains present in remote storage and reusable; the existing absent regression only probes local reuse." - }, - { - "case": "C06.absent-remote", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "Explicit absent code remains present in remote storage and reusable; the existing absent regression only probes local reuse." - }, - { - "case": "C07.scope-isolation", - "reference": "formal/dialcache-scope-conformance.qnt:holder", - "kind": "helper", - "scope": "Per-root slots index memo and flight ownership; source settlement updates only its own slot. This bounded profile has two independent root slots." - }, - { - "case": "C07.scope-isolation", - "reference": "formal/kernel/serving.qnt:startRequestSource", - "kind": "helper", - "scope": "A request-only source records only its outcome and process sharing; the row it fills is the memo slot attached to the caller that started it, so settlement updates one row." - }, - { - "case": "C07.scope-isolation", - "reference": "formal/kernel/serving.qnt:releaseRequest", - "kind": "helper", - "scope": "The request-only release joins the pending request flight of the caller's own row when the call coalesces, else serves the memo row, else starts a source; the row is the caller's memo slot, decided with the state current at release." - }, - { - "case": "C07.scope-isolation", - "reference": "formal/kernel/serving.qnt:finish", - "kind": "helper", - "scope": "Settlement completes every owning caller and memoizes a success into each owner's still-open row; positive value codes, including the falsy natives and absence, are memoized and served alike." - }, - { - "case": "C08.instance-capacity", - "reference": "formal/kernel/local-storage.qnt:putLocal", - "kind": "helper", - "scope": "Instance indexes partition local entries, LRU order, and process flights. Remote storage is intentionally shared, not partitioned by process instance." - }, - { - "case": "C08.instance-capacity", - "reference": "formal/kernel/flights.qnt:registerSource", - "kind": "helper", - "scope": "Instance indexes partition local entries, LRU order, and process flights. Remote storage is intentionally shared, not partitioned by process instance." - }, - { - "case": "C08.instance-capacity", - "reference": "formal/kernel/serving.qnt:identity", - "kind": "helper", - "scope": "The process identity a call serves is its instance's row of keys: local entries, LRU order and process flights are partitioned by instance; remote storage is intentionally shared, not partitioned by process instance." - }, - { - "case": "C08.instance-capacity", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "Instance indexes partition local entries, LRU order, and process flights. Remote storage is intentionally shared, not partitioned by process instance." - }, - { - "case": "C11.distinct-keys", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "Registration is indexed by key; settlement removes only the matching source ownership and publishes to that source key." - }, - { - "case": "C11.distinct-keys", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "Registration is indexed by key; settlement removes only the matching source ownership and publishes to that source key." - }, - { - "case": "C19.memo-bypass", - "reference": "formal/kernel/serving.qnt:releaseRequest", - "kind": "helper", - "scope": "POLICY_NO_REQUEST resolves to no request layer, so the release decides with no memo slot: it neither reads nor writes the row, joins no request flight and registers none, and the stored memo stays intact for a later call whose reply re-enables request caching." - }, - { - "case": "C19.memo-bypass", - "reference": "formal/dialcache-scope-conformance.qnt:policy", - "kind": "transition", - "scope": "POLICY_NO_REQUEST uses no memo slot; the policy transition leaves stored memo intact for later reenable." - }, - { - "case": "C21.invalid-recovery", - "reference": "formal/kernel/policy-overlay.qnt:retention", - "kind": "helper", - "scope": "Invalid optional recovery selects ordinary retention but leaves normal remote TTL/hit traversal active. The existing retention regression does not itself probe a later fresh hit." - }, - { - "case": "C21.invalid-recovery", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "Invalid optional recovery selects ordinary retention but leaves normal remote TTL/hit traversal active. The existing retention regression does not itself probe a later fresh hit." - }, - { - "case": "C23.instance-read-budget", - "reference": "formal/dialcache-effects-conformance.qnt:initial", - "kind": "helper", - "scope": "Finite fixture modes provide distinct instance/operation/runtime accepted budgets; beginCall captures the read budget. The binding supplies the corresponding precedence inputs; this is not a general policy resolver proof." - }, - { - "case": "C23.instance-read-budget", - "reference": "formal/dialcache-effects-conformance.qnt:beginCall", - "kind": "transition", - "scope": "Finite fixture modes provide distinct instance/operation/runtime accepted budgets; beginCall captures the read budget. The binding supplies the corresponding precedence inputs; this is not a general policy resolver proof." - }, - { - "case": "C23.operation-read-budget", - "reference": "formal/dialcache-effects-conformance.qnt:initial", - "kind": "helper", - "scope": "Finite fixture modes provide distinct instance/operation/runtime accepted budgets; beginCall captures the read budget. The binding supplies the corresponding precedence inputs; this is not a general policy resolver proof." - }, - { - "case": "C23.operation-read-budget", - "reference": "formal/dialcache-effects-conformance.qnt:beginCall", - "kind": "transition", - "scope": "Finite fixture modes provide distinct instance/operation/runtime accepted budgets; beginCall captures the read budget. The binding supplies the corresponding precedence inputs; this is not a general policy resolver proof." - }, - { - "case": "C23.runtime-read-budget", - "reference": "formal/dialcache-effects-conformance.qnt:initial", - "kind": "helper", - "scope": "Finite fixture modes provide distinct instance/operation/runtime accepted budgets; beginCall captures the read budget. The binding supplies the corresponding precedence inputs; this is not a general policy resolver proof." - }, - { - "case": "C23.runtime-read-budget", - "reference": "formal/dialcache-effects-conformance.qnt:beginCall", - "kind": "transition", - "scope": "Finite fixture modes provide distinct instance/operation/runtime accepted budgets; beginCall captures the read budget. The binding supplies the corresponding precedence inputs; this is not a general policy resolver proof." - }, - { - "case": "C30.observer-isolation", - "reference": "formal/dialcache-effects-conformance.qnt:observerFault", - "kind": "transition", - "scope": "Observer-failure fixture changes exporter behavior but no cache/source transition branch. The generated actual-API replay checks consequences; the model does not execute exporter code." - }, - { - "case": "C30.observer-isolation", - "reference": "formal/dialcache-effects-conformance.qnt:emit", - "kind": "helper", - "scope": "Observer-failure fixture changes exporter behavior but no cache/source transition branch. The generated actual-API replay checks consequences; the model does not execute exporter code." - }, - { - "case": "C30.observer-isolation", - "reference": "formal/dialcache-effects-conformance.qnt:settledRead", - "kind": "helper", - "scope": "Observer-failure fixture changes exporter behavior but no cache/source transition branch. The generated actual-API replay checks consequences; the model does not execute exporter code." - }, - { - "case": "C30.observer-isolation", - "reference": "formal/dialcache-effects-conformance.qnt:settledSource", - "kind": "helper", - "scope": "Observer-failure fixture changes exporter behavior but no cache/source transition branch. The generated actual-API replay checks consequences; the model does not execute exporter code." - }, - { - "case": "C32.grouped-invalidation", - "reference": "formal/dialcache-layers-conformance.qnt:invalidate", - "kind": "transition", - "scope": "Invalidation chooses an entity watermark; tracked reads index it by key/operations-per-entity, covering two operation variants without fencing the other entity." - }, - { - "case": "C32.grouped-invalidation", - "reference": "formal/kernel/remote-frames.qnt:readableFrame", - "kind": "helper", - "scope": "Invalidation chooses an entity watermark; tracked reads index it by key/operations-per-entity, covering two operation variants without fencing the other entity." - }, - { - "case": "C32.untracked-unaffected", - "reference": "formal/kernel/remote-frames.qnt:readableFrame", - "kind": "helper", - "scope": "Untracked reads omit the watermark comparison while retaining ordinary cache presence checks." - }, - { - "case": "C34.first-fence", - "reference": "formal/dialcache-effects-conformance.qnt:settledSource", - "kind": "helper", - "scope": "A successful source at wall <= observed fence returns its value without starting serialization." - }, - { - "case": "C42.allow-override", - "reference": "formal/dialcache-recovery-conformance.qnt:admitted", - "kind": "helper", - "scope": "Operation classifier replaces inherited instance classifier; an explicit allow admits a valid retained candidate after source error." - }, - { - "case": "C42.allow-override", - "reference": "formal/dialcache-recovery-conformance.qnt:rejected", - "kind": "helper", - "scope": "Operation classifier replaces inherited instance classifier; an explicit allow admits a valid retained candidate after source error." - }, - { - "case": "C43.coalesced-once", - "reference": "formal/dialcache-recovery-conformance.qnt:joined", - "kind": "helper", - "scope": "Followers attach to the current execution; one source rejection classifies once and starts one candidate decode, whose result completes all pending callers." - }, - { - "case": "C43.coalesced-once", - "reference": "formal/dialcache-recovery-conformance.qnt:rejected", - "kind": "helper", - "scope": "Followers attach to the current execution; one source rejection classifies once and starts one candidate decode, whose result completes all pending callers." - }, - { - "case": "C43.coalesced-once", - "reference": "formal/dialcache-recovery-conformance.qnt:releaseLoad", - "kind": "transition", - "scope": "Followers attach to the current execution; one source rejection classifies once and starts one candidate decode, whose result completes all pending callers." - }, - { - "case": "C49.dark-no-delay", - "reference": "formal/dialcache-shadow-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "Source settlement completes caller outcomes immediately even when C0 read remains pending; job progression is separate." - }, - { - "case": "C49.dark-no-delay", - "reference": "formal/dialcache-shadow-conformance.qnt:continueJob", - "kind": "helper", - "scope": "Source settlement completes caller outcomes immediately even when C0 read remains pending; job progression is separate." - }, - { - "case": "C57.future-offset", - "reference": "formal/dialcache-effects-conformance.qnt:settledRead", - "kind": "helper", - "scope": "Only an otherwise readable future frame produces a positive offset, attributed to the remote layer in this profile. Other observing layers and unit conversion require their binding evidence." - }, - { - "case": "C57.future-offset", - "reference": "formal/dialcache-effects-conformance.qnt:metric", - "kind": "helper", - "scope": "Only an otherwise readable future frame produces a positive offset, attributed to the remote layer in this profile. Other observing layers and unit conversion require their binding evidence." - }, - { - "case": "C58.recovered-failure", - "reference": "formal/dialcache-recovery-conformance.qnt:rejected", - "kind": "helper", - "scope": "A source rejection records its fallback error before deciding whether stale recovery may succeed." - }, - { - "case": "C60.logging-default-off", - "reference": "formal/dialcache-shadow-conformance.qnt:init", - "kind": "transition", - "scope": "Omitted-logging fixture starts false, admission captures it, and mismatch warning emission consults the captured flag." - }, - { - "case": "C60.logging-default-off", - "reference": "formal/dialcache-shadow-conformance.qnt:beginCall", - "kind": "transition", - "scope": "Omitted-logging fixture starts false, admission captures it, and mismatch warning emission consults the captured flag." - }, - { - "case": "C60.logging-default-off", - "reference": "formal/dialcache-shadow-conformance.qnt:done", - "kind": "helper", - "scope": "Omitted-logging fixture starts false, admission captures it, and mismatch warning emission consults the captured flag." - }, - { - "case": "C05.participating-publication", - "reference": "formal/dialcache-core.qnt:loaderSuccessAfterSemanticMiss", - "kind": "transition", - "scope": "An untracked semantic miss followed by accepted source and remote publication can fill all participating remote/local/live-request layers; health flags and scope lifetime gate publication." - }, - { - "case": "C05.participating-publication", - "reference": "formal/dialcache-core.qnt:finishRemotePublication", - "kind": "transition", - "scope": "An untracked semantic miss followed by accepted source and remote publication can fill all participating remote/local/live-request layers; health flags and scope lifetime gate publication." - }, - { - "case": "C05.first-hit", - "reference": "formal/dialcache-shadow-validation.qnt:callerEarlierLayerHit", - "kind": "transition", - "scope": "An earlier-layer hit is excluded from shadow admission; abstract callerPath represents request/local hit, not actual layer traversal." - }, - { - "case": "C05.first-hit", - "reference": "formal/dialcache-shadow-validation.qnt:admitJob", - "kind": "transition", - "scope": "An earlier-layer hit is excluded from shadow admission; abstract callerPath represents request/local hit, not actual layer traversal." - }, - { - "case": "C09.insertion-age", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "A remote hit stores localExpires=now+current localTTL, independent of remaining remote freshness. Current fixed case remains the explicit narrow boundary evidence." - }, - { - "case": "C13.uncoalesced-caching", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "Independent-policy fixture disables registration but still captures publication TTLs and replaces local/remote values on accepted source completion. No independent property asserts general last-writer behavior." - }, - { - "case": "C13.uncoalesced-caching", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "Independent-policy fixture disables registration but still captures publication TTLs and replaces local/remote values on accepted source completion. No independent property asserts general last-writer behavior." - }, - { - "case": "C13.local-last-writer", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "Independent-policy fixture disables registration but still captures publication TTLs and replaces local/remote values on accepted source completion. No independent property asserts general last-writer behavior." - }, - { - "case": "C13.local-last-writer", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "Independent-policy fixture disables registration but still captures publication TTLs and replaces local/remote values on accepted source completion. No independent property asserts general last-writer behavior." - }, - { - "case": "C13.remote-last-writer", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "Independent-policy fixture disables registration but still captures publication TTLs and replaces local/remote values on accepted source completion. No independent property asserts general last-writer behavior." - }, - { - "case": "C13.remote-last-writer", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "Settlement publishes independently to the remote layer (when the flight read it and its fence still allows) and to local storage (when the flight may warm it), with the permissions fixed when the source started." - }, - { - "case": "C17.disable-keeps-entry", - "reference": "formal/dialcache-policy-conformance.qnt:policy", - "kind": "transition", - "scope": "Changing the overlay does not remove storage; a disabled layer skips serving and can serve its remaining-valid entry after reenable." - }, - { - "case": "C17.disable-keeps-entry", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "Changing the overlay does not remove storage; a disabled layer skips serving and can serve its remaining-valid entry after reenable." - }, - { - "case": "C20.provider-failure", - "reference": "formal/dialcache-policy-conformance.qnt:providerFault", - "kind": "transition", - "scope": "Provider failure makes both serving TTLs zero and prevents shared registration/publication. It does not model every provider failure representation." - }, - { - "case": "C20.provider-failure", - "reference": "formal/kernel/policy-overlay.qnt:localTtl", - "kind": "helper", - "scope": "Provider failure makes both serving TTLs zero and prevents shared registration/publication. It does not model every provider failure representation." - }, - { - "case": "C20.provider-failure", - "reference": "formal/kernel/policy-overlay.qnt:remoteTtl", - "kind": "helper", - "scope": "Provider failure makes both serving TTLs zero and prevents shared registration/publication. It does not model every provider failure representation." - }, - { - "case": "C20.provider-failure", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "Provider failure makes both serving TTLs zero and prevents shared registration/publication. It does not model every provider failure representation." - }, - { - "case": "C21.invalid-layer", - "reference": "formal/kernel/policy-overlay.qnt:localTtl", - "kind": "helper", - "scope": "An invalid local TTL selects zero only for the local layer, preserving valid remote traversal." - }, - { - "case": "C21.invalid-layer", - "reference": "formal/kernel/policy-overlay.qnt:remoteTtl", - "kind": "helper", - "scope": "An invalid local TTL selects zero only for the local layer, preserving valid remote traversal." - }, - { - "case": "C21.invalid-layer", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "An invalid local TTL selects zero only for the local layer, preserving valid remote traversal." - }, - { - "case": "C22.freshness-boundary", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "Remote hit requires logical age strictly below captured remote TTL and physical expiry strictly after elapsed now." - }, - { - "case": "C22.physical-vs-logical", - "reference": "formal/dialcache-policy-conformance.qnt:releasePolicy", - "kind": "transition", - "scope": "Invocation captures publication TTL/retention; later calls evaluate current logical freshness without rewriting existing physical expiry." - }, - { - "case": "C22.physical-vs-logical", - "reference": "formal/kernel/serving.qnt:settle", - "kind": "helper", - "scope": "Invocation captures publication TTL/retention; later calls evaluate current logical freshness without rewriting existing physical expiry." - }, - { - "case": "C24.follower-source", - "reference": "formal/dialcache-flight-deadlines.qnt:joinFollower", - "kind": "transition", - "scope": "Joining a running flight increments followers without resetting its source deadline; this model has no independent follower-deadline invariant." - }, - { - "case": "C28.untracked-local-publication", - "reference": "formal/dialcache-core.qnt:loaderSuccessAfterRemoteFailure", - "kind": "transition", - "scope": "Untracked source after remote read failure can publish to healthy active local storage without refilling remote." - }, - { - "case": "C31.local-only-publication", - "reference": "formal/dialcache-core.qnt:loaderSuccessWithoutRemote", - "kind": "transition", - "scope": "Tracked status alone does not prevent local publication when remote serving did not participate." - }, - { - "case": "C31.ramped-down-publication", - "reference": "formal/dialcache-core.qnt:skipRemote", - "kind": "transition", - "scope": "Remote policy exclusion traverses the no-remote source path, preserving eligible local publication for tracked calls." - }, - { - "case": "C31.ramped-down-publication", - "reference": "formal/dialcache-core.qnt:loaderSuccessWithoutRemote", - "kind": "transition", - "scope": "Remote policy exclusion traverses the no-remote source path, preserving eligible local publication for tracked calls." - }, - { - "case": "C34.write-timestamp", - "reference": "formal/dialcache-effects-conformance.qnt:releaseDump", - "kind": "transition", - "scope": "Native dispatch captures current writer wall clock after serialization; later completion commits that captured timestamp." - }, - { - "case": "C34.write-timestamp", - "reference": "formal/dialcache-effects-conformance.qnt:releaseWrite", - "kind": "transition", - "scope": "Native dispatch captures current writer wall clock after serialization; later completion commits that captured timestamp." - }, - { - "case": "C40.last-stale", - "reference": "formal/dialcache-stale-recovery.qnt:performInitialRead", - "kind": "transition", - "scope": "Eligibility and both decode checks accept age < M; the model uses integer F=2/M=5 units, not every native millisecond value." - }, - { - "case": "C40.last-stale", - "reference": "formal/dialcache-stale-recovery.qnt:checkCandidate", - "kind": "transition", - "scope": "Eligibility and both decode checks accept age < M; the model uses integer F=2/M=5 units, not every native millisecond value." - }, - { - "case": "C40.last-stale", - "reference": "formal/dialcache-stale-recovery.qnt:candidateLoadSucceeds", - "kind": "transition", - "scope": "Eligibility and both decode checks accept age < M; the model uses integer F=2/M=5 units, not every native millisecond value." - }, - { - "case": "C44.retained-expiry", - "reference": "formal/dialcache-stale-recovery.qnt:mutateRedisAfterRetention", - "kind": "transition", - "scope": "Later storage mutation cannot replace retained candidate bytes; the model does not model Redis expiry timers themselves." - }, - { - "case": "C44.retained-expiry", - "reference": "formal/dialcache-stale-recovery.qnt:candidateLoadSucceeds", - "kind": "transition", - "scope": "Later storage mutation cannot replace retained candidate bytes; the model does not model Redis expiry timers themselves." - }, - { - "case": "C45.failed-fresh-not-stale", - "reference": "formal/dialcache-recovery-conformance.qnt:releaseLoad", - "kind": "transition", - "scope": "Failed fresh decode starts source with canRecover=false; later source error cannot decode that failed fresh snapshot again." - }, - { - "case": "C45.failed-fresh-not-stale", - "reference": "formal/dialcache-recovery-conformance.qnt:rejected", - "kind": "helper", - "scope": "Failed fresh decode starts source with canRecover=false; later source error cannot decode that failed fresh snapshot again." - }, - { - "case": "C51.confirmation-age", - "reference": "formal/dialcache-shadow-conformance.qnt:releaseRead", - "kind": "transition", - "scope": "C1 confirmation compares valid unfenced payload bytes without applying C0 freshness or current wall-clock age; no wall-age filter runs on the confirmation branch." - }, - { - "case": "C51.confirmation-rollback", - "reference": "formal/dialcache-shadow-conformance.qnt:releaseRead", - "kind": "transition", - "scope": "C1 confirmation compares valid unfenced payload bytes without applying C0 freshness or current wall-clock age; no wall-age filter runs on the confirmation branch." - }, - { - "case": "C57.recovery-age", - "reference": "formal/dialcache-recovery-conformance.qnt:releaseLoad", - "kind": "transition", - "scope": "Successful recovery samples retained-frame age after decode; miss/error/fresh decode do not append recovery age." - }, - { - "case": "C58.shared-trail", - "reference": "formal/dialcache-effects-conformance.qnt:beginCall", - "kind": "transition", - "scope": "Each follower adds a coalesced event while the single read/source owner records the failure trail; exact native label attribution is checked by replay." - }, - { - "case": "C58.shared-trail", - "reference": "formal/dialcache-effects-conformance.qnt:settledRead", - "kind": "helper", - "scope": "Each follower adds a coalesced event while the single read/source owner records the failure trail; exact native label attribution is checked by replay." - }, - { - "case": "C58.shared-trail", - "reference": "formal/dialcache-effects-conformance.qnt:sourceDone", - "kind": "helper", - "scope": "Each follower adds a coalesced event while the single read/source owner records the failure trail; exact native label attribution is checked by replay." - }, - { - "case": "W04.untracked-decoder", - "reference": "formal/dialcache-redis-protocol.qnt:classify", - "kind": "helper", - "scope": "Untracked classification ignores watermark validity/fence; exact bytes and numeric input boundaries remain protocol vectors." - }, - { - "case": "W04.untracked-decoder", - "reference": "formal/dialcache-redis-protocol.qnt:decode", - "kind": "transition", - "scope": "Untracked classification ignores watermark validity/fence; exact bytes and numeric input boundaries remain protocol vectors." - }, - { - "case": "C55.legacy-reply-normalization", - "reference": "formal/dialcache-effects-conformance.qnt:settledRead", - "kind": "helper", - "scope": "Queued legacy/primitive/kindless reply classes fall through normalized misses and may refill; exact host shapes are the driver binding." - }, - { - "case": "C55.invalid-fence-discarded", - "reference": "formal/dialcache-effects-conformance.qnt:settledRead", - "kind": "helper", - "scope": "The reply-class transition retains only the enumerated valid tracked fence classes; fixed inputs bind numeric invalidity and missing metadata." - }, - { - "case": "C22.freshness-after-read", - "reference": "formal/dialcache-recovery-read-conformance.qnt:releaseRead", - "kind": "transition", - "scope": "Read acquisition samples the settlement wall clock; a frame initially fresh becomes stale during the held read and subsequently recovers after source rejection." - }, - { - "case": "C28.encoding-error-suppresses-refill", - "reference": "formal/dialcache-recovery-read-conformance.qnt:releaseRead", - "kind": "transition", - "scope": "Unsupported encoding is classified after presence/fence checks and denies remote refill; source success remains visible, and untracked local publication remains eligible." - }, - { - "case": "C37.physical-cap", - "reference": "formal/dialcache-recovery-read-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "Native write TTL is capped at 3600000ms, and a public read at that physical deadline starts another source even with longer logical freshness." - }, - { - "case": "C37.logical-age-unclamped", - "reference": "formal/dialcache-recovery-read-conformance.qnt:validCandidate", - "kind": "helper", - "scope": "An externally retained candidate older than the physical cap but younger than the captured logical maximum is served after source failure; no new write is credited." - }, - { - "case": "C38.value-work-does-not-extend-marker", - "reference": "formal/dialcache-recovery-read-conformance.qnt:observeMarker", - "kind": "transition", - "scope": "External marker cutoff and TTL probes before/after ordinary tracked reads and value writes distinguish missing-marker creation, cutoff movement and lifetime extension. Controlled adapter observation, not a proof of native Redis internals." - }, - { - "case": "C45.compressed-candidate", - "reference": "formal/dialcache-recovery-read-conformance.qnt:releaseLoad", - "kind": "transition", - "scope": "The modeled input domain includes valid/corrupt compressed bytes; retained recovery either serves the decoded value with request-only publication or preserves the indexed original source error. Compression algorithm correctness remains vector/native evidence." - }, - { - "case": "C43.request-memo", - "reference": "formal/dialcache-recovery-read-conformance.qnt:complete", - "kind": "helper", - "scope": "A same-scope public probe reuses recovered value; another scope performs remote work, distinguishing request memo from local publication." - }, - { - "case": "C44.retained-invalidation", - "reference": "formal/dialcache-recovery-read-conformance.qnt:validCandidate", - "kind": "helper", - "scope": "A candidate acquired before invalidation recovers and memoizes in its request, while a new request must observe the fence and preserve its different source error." - }, - { - "case": "C03.late-recovery-publication", - "reference": "formal/dialcache-recovery-read-conformance.qnt:complete", - "kind": "helper", - "scope": "Closing the attached request during held recovery decode permits the caller result but prevents request/local publication, distinguished by a new-scope read." - }, - { - "case": "C31.tracked-no-local-fill", - "reference": "formal/dialcache-recovery-read-conformance.qnt:resolveLoader", - "kind": "transition", - "scope": "Tracked source success memoizes in its request but requires remote read/decode before another scope can warm local; the subsequent transient caller reuses local." - }, - { - "case": "C29.maintenance-failure", - "reference": "formal/dialcache-recovery-read-conformance.qnt:invalidate", - "kind": "transition", - "scope": "An explicit invalidation failure returns mutation_error while external marker probes preserve absence or prior cutoff and remaining lifetime." - }, - { - "case": "C59.compression-read-telemetry", - "reference": "formal/dialcache-recovery-read-conformance.qnt:startedCompression", - "kind": "helper", - "scope": "Previously compressed inputs emit exact decompressed or fallback_raw diagnostics at decode start; later public completion distinguishes successful hit from source fallback while new compression writes remain disabled." - }, - { - "case": "C27.local-read-failure", - "reference": "formal/dialcache-local-failure-conformance.qnt:acquired", - "kind": "helper", - "scope": "Publication requires captured local miss eligibility and successful local storage; completion preserves accepted caller result and eligible request memo." - }, - { - "case": "C27.local-write-failure", - "reference": "formal/dialcache-local-failure-conformance.qnt:acquired", - "kind": "helper", - "scope": "Publication requires captured local miss eligibility and successful local storage; completion preserves accepted caller result and eligible request memo." - }, - { - "case": "C27.source-error-no-publication", - "reference": "formal/dialcache-local-failure-conformance.qnt:acquired", - "kind": "helper", - "scope": "Publication requires captured local miss eligibility and successful local storage; completion preserves accepted caller result and eligible request memo." - }, - { - "case": "C44.retained-expiry", - "reference": "formal/dialcache-recovery-read-conformance.qnt:validCandidate", - "kind": "helper", - "scope": "A call retains otherwise eligible bytes before their physical expiration; its recovery succeeds afterward, while a new request observes absence and preserves its own source error." - }, - { - "case": "C33.reject-unsafe-before-decode", - "reference": "formal/dialcache-recovery-read-conformance.qnt:releaseRead", - "kind": "transition", - "scope": "A real frame with timestamp 2^53+1 and supported payload encoding never reaches the serializer; source refill remains allowed and is verified by a later public hit. Payload envelope decoding precedes core timestamp validation; this case does not assert timestamp validation before payload encoding checks." - }, - { - "case": "C33.reject-version-before-decode", - "reference": "formal/dialcache-recovery-read-conformance.qnt:releaseRead", - "kind": "transition", - "scope": "Unsupported version-2 bytes never reach the serializer; source refill remains allowed and a subsequent independent request reads the new value." - }, - { - "case": "C45.recheck-before-decode", - "reference": "formal/dialcache-recovery-read-conformance.qnt:rejectLoader", - "kind": "transition", - "scope": "A compressed retained candidate acquired at M-1 reaches M before source rejection; the original source error survives without decompression/serializer work or shared publication." - }, - { - "case": "C34.observed-fence-snapshot", - "reference": "formal/dialcache-recovery-read-conformance.qnt:releaseRead", - "kind": "transition", - "scope": "A miss captures the absent watermark baseline before invalidation. Source publication still dispatches at the later watermark timestamp; a new request rejects that now-fenced write, proving both captured-refill authority and subsequent fence visibility." - }, - { - "case": "C24.independent-source-budgets", - "reference": "formal/dialcache-independent-conformance.qnt:startSource", - "kind": "helper", - "scope": "Two uncoalesced same-key callers start sources five milliseconds apart. First timeout does not cancel the second, which can succeed at elapsed11 or time out at its own elapsed15 deadline. Both reads acquire fenced storage, so recovery cannot mask shortened deadlines. Clock advance delivers modeled due timers; no timer-undelivered acceptance claim." - }, - { - "case": "C24.independent-source-budgets", - "reference": "formal/dialcache-independent-conformance.qnt:tick", - "kind": "helper", - "scope": "Two uncoalesced same-key callers start sources five milliseconds apart. First timeout does not cancel the second, which can succeed at elapsed11 or time out at its own elapsed15 deadline. Both reads acquire fenced storage, so recovery cannot mask shortened deadlines. Clock advance delivers modeled due timers; no timer-undelivered acceptance claim." - }, - { - "case": "C49.local-publication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:publishSource", - "kind": "helper", - "scope": "With request memo disabled, a present C0=1 cannot satisfy a later dark caller before source settlement; source=2 alone becomes the subsequent local hit. A separate absent-C0 history proves source publication precedes the held shadow fill write and a local hit stops new shadow admission." - }, - { - "case": "C49.local-publication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:begin", - "kind": "helper", - "scope": "With request memo disabled, a present C0=1 cannot satisfy a later dark caller before source settlement; source=2 alone becomes the subsequent local hit. A separate absent-C0 history proves source publication precedes the held shadow fill write and a local hit stops new shadow admission." - }, - { - "case": "C49.local-publication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settleJob", - "kind": "helper", - "scope": "With request memo disabled, a present C0=1 cannot satisfy a later dark caller before source settlement; source=2 alone becomes the subsequent local hit. A separate absent-C0 history proves source publication precedes the held shadow fill write and a local hit stops new shadow admission." - }, - { - "case": "C49.request-publication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:finishCaller", - "kind": "helper", - "scope": "With local disabled, present C0=1 cannot satisfy a same-scope caller before source settlement; source=2 alone becomes that scope's memo hit. A sibling scope starts an independent source. The absent-C0 history proves request publication precedes held shadow fill." - }, - { - "case": "C49.request-publication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:begin", - "kind": "helper", - "scope": "With local disabled, present C0=1 cannot satisfy a same-scope caller before source settlement; source=2 alone becomes that scope's memo hit. A sibling scope starts an independent source. The absent-C0 history proves request publication precedes held shadow fill." - }, - { - "case": "C49.request-publication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settleJob", - "kind": "helper", - "scope": "With local disabled, present C0=1 cannot satisfy a same-scope caller before source settlement; source=2 alone becomes that scope's memo hit. A sibling scope starts an independent source. The absent-C0 history proves request publication precedes held shadow fill." - }, - { - "case": "C49.job-dedup-keeps-independent-sources", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:startCaller", - "kind": "helper", - "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result." - }, - { - "case": "C49.job-dedup-keeps-independent-sources", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:admit", - "kind": "helper", - "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result." - }, - { - "case": "C49.job-dedup-keeps-independent-sources", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settle", - "kind": "helper", - "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result." - }, - { - "case": "C54.deduplication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:startCaller", - "kind": "helper", - "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result." - }, - { - "case": "C54.deduplication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:admit", - "kind": "helper", - "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result." - }, - { - "case": "C54.deduplication", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settle", - "kind": "helper", - "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result." - }, - { - "case": "C49.no-stale-recovery", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:startCaller", - "kind": "helper", - "scope": "Dark acquisition sees physical C0 exactly F=60000ms old and younger than M=120000ms, with an always-allow recovery classifier. Source rejection preserves that one original error, emits source_error, and performs no classification, deserialization, recovery, or write." - }, - { - "case": "C49.no-stale-recovery", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settle", - "kind": "helper", - "scope": "Dark acquisition sees physical C0 exactly F=60000ms old and younger than M=120000ms, with an always-allow recovery classifier. Source rejection preserves that one original error, emits source_error, and performs no classification, deserialization, recovery, or write." - }, - { - "case": "C21.invalid-dark-shadow", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:policyFor", - "kind": "helper", - "scope": "Shadow ramp101 disables optional dark work while valid local policy remains active; source success is reusable locally by a later serving-enabled invocation, with zero Redis reads/writes or diagnostic jobs." - }, - { - "case": "C21.invalid-dark-shadow", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:admit", - "kind": "helper", - "scope": "Shadow ramp101 disables optional dark work while valid local policy remains active; source success is reusable locally by a later serving-enabled invocation, with zero Redis reads/writes or diagnostic jobs." - }, - { - "case": "C21.invalid-dark-shadow", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:publishSource", - "kind": "helper", - "scope": "Shadow ramp101 disables optional dark work while valid local policy remains active; source success is reusable locally by a later serving-enabled invocation, with zero Redis reads/writes or diagnostic jobs." - }, - { - "case": "C54.unbounded-source-bounded-shadow", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:tick", - "kind": "helper", - "scope": "At the finite60000ms dark-job deadline an explicitly unbounded caller remains pending. A same-key second dark read is admitted, proving release of the old diagnostic slot; the first source later returns its value without late fill, while the second can start its own fill." - }, - { - "case": "C54.unbounded-source-bounded-shadow", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settle", - "kind": "helper", - "scope": "At the finite60000ms dark-job deadline an explicitly unbounded caller remains pending. A same-key second dark read is admitted, proving release of the old diagnostic slot; the first source later returns its value without late fill, while the second can start its own fill." - }, - { - "case": "C54.unowned-caller-releases-slot", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:tick", - "kind": "helper", - "scope": "At the finite60000ms dark-job deadline an explicitly unbounded caller remains pending. A same-key second dark read is admitted, proving release of the old diagnostic slot; the first source later returns its value without late fill, while the second can start its own fill." - }, - { - "case": "C54.unowned-caller-releases-slot", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settle", - "kind": "helper", - "scope": "At the finite60000ms dark-job deadline an explicitly unbounded caller remains pending. A same-key second dark read is admitted, proving release of the old diagnostic slot; the first source later returns its value without late fill, while the second can start its own fill." - }, - { - "case": "C47.requires-capacity", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:admit", - "kind": "helper", - "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs." - }, - { - "case": "C47.requires-capacity", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:tick", - "kind": "helper", - "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs." - }, - { - "case": "C47.requires-capacity", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settle", - "kind": "helper", - "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs." - }, - { - "case": "C54.source-ownership", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:admit", - "kind": "helper", - "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs." - }, - { - "case": "C54.source-ownership", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:tick", - "kind": "helper", - "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs." - }, - { - "case": "C54.source-ownership", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settle", - "kind": "helper", - "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs." - }, - { - "case": "C54.instance-isolation", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:admit", - "kind": "helper", - "scope": "A served and a dark job fill instance0; its third key is dropped, while the same key on instance1 admits a C0 read. Recorded source contexts distinguish the disabled served source from enabled independent caller sources." - }, - { - "case": "C05.first-hit", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:begin", - "kind": "helper", - "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold." - }, - { - "case": "C05.first-hit", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:publishFreshHit", - "kind": "helper", - "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold." - }, - { - "case": "C05.first-hit", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:publishSource", - "kind": "helper", - "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold." - }, - { - "case": "C47.requires-cohort", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:policyFor", - "kind": "helper", - "scope": "For the tracked key{urn:id:0}#ShadowLayers and independent shadow FNV numerator3203834406, thresholds exactly one uint32unit below/equal/above the sample produce no-read/no-job below/equal and an actual C0 read/fill serialization above. Caller success remains independent of diagnostic admission." - }, - { - "case": "C47.requires-cohort", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:admit", - "kind": "helper", - "scope": "For the tracked key{urn:id:0}#ShadowLayers and independent shadow FNV numerator3203834406, thresholds exactly one uint32unit below/equal/above the sample produce no-read/no-job below/equal and an actual C0 read/fill serialization above. Caller success remains independent of diagnostic admission." - }, - { - "case": "C18.captured-shadow-fill", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:admit", - "kind": "helper", - "scope": "The job captures fresh60s/retention120s. Runtime policy changes to fresh120s/retention180s while its caller source and then serialization are held; dispatched write TTL remains120000ms. At that physical expiry a serving probe under the newer logical policy rejects its source and reports recovery miss, proving the old value was not retained for180s." - }, - { - "case": "C18.captured-shadow-fill", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:beginWrite", - "kind": "helper", - "scope": "The job captures fresh60s/retention120s. Runtime policy changes to fresh120s/retention180s while its caller source and then serialization are held; dispatched write TTL remains120000ms. At that physical expiry a serving probe under the newer logical policy rejects its source and reports recovery miss, proving the old value was not retained for180s." - }, - { - "case": "C18.captured-shadow-fill", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:dumpReply", - "kind": "helper", - "scope": "The job captures fresh60s/retention120s. Runtime policy changes to fresh120s/retention180s while its caller source and then serialization are held; dispatched write TTL remains120000ms. At that physical expiry a serving probe under the newer logical policy rejects its source and reports recovery miss, proving the old value was not retained for180s." - }, - { - "case": "C18.captured-shadow-fill", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:writeReply", - "kind": "helper", - "scope": "The job captures fresh60s/retention120s. Runtime policy changes to fresh120s/retention180s while its caller source and then serialization are held; dispatched write TTL remains120000ms. At that physical expiry a serving probe under the newer logical policy rejects its source and reports recovery miss, proving the old value was not retained for180s." - }, - { - "case": "C51.retained-candidate-not-reclassified", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:admit", - "kind": "helper", - "scope": "C0 is acquired at age59999ms, then source=2 settles exactly at F=60000ms before the60000ms job deadline. Retained C0=1 is decoded once, one C1 payload read confirms mismatch, caller gets2, and no fill occurs." - }, - { - "case": "C51.retained-candidate-not-reclassified", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settleJob", - "kind": "helper", - "scope": "C0 is acquired at age59999ms, then source=2 settles exactly at F=60000ms before the60000ms job deadline. Retained C0=1 is decoded once, one C1 payload read confirms mismatch, caller gets2, and no fill occurs." - }, - { - "case": "C52.expired-miss-may-fill", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:fresh", - "kind": "helper", - "scope": "C0=1 acquired exactly at freshness age60000ms is a semantic miss despite physical presence. Source=2 fills once without decoding old bytes; a later serving probe reads2 and starts no new source." - }, - { - "case": "C52.expired-miss-may-fill", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:admit", - "kind": "helper", - "scope": "C0=1 acquired exactly at freshness age60000ms is a semantic miss despite physical presence. Source=2 fills once without decoding old bytes; a later serving probe reads2 and starts no new source." - }, - { - "case": "C52.expired-miss-may-fill", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settleJob", - "kind": "helper", - "scope": "C0=1 acquired exactly at freshness age60000ms is a semantic miss despite physical presence. Source=2 fills once without decoding old bytes; a later serving probe reads2 and starts no new source." - }, - { - "case": "C53.acquired-miss-no-reread", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:admit", - "kind": "helper", - "scope": "An absent C0 is acquired, external storage is then seeded to1, and source=2 fills without rereading/reclassifying C0. Read count stays1 through write completion; a later serving probe observes2." - }, - { - "case": "C53.acquired-miss-no-reread", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settleJob", - "kind": "helper", - "scope": "An absent C0 is acquired, external storage is then seeded to1, and source=2 fills without rereading/reclassifying C0. Read count stays1 through write completion; a later serving probe observes2." - }, - { - "case": "C53.dark-propagated-timeout", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settle", - "kind": "helper", - "scope": "The single dark caller source rejects its exact controlled nested timeout object at time0. Caller classification remains original source error and the diagnostic verdict is source_error, with no classification/recovery/serialization/write or own deadline event." - }, - { - "case": "C53.dark-propagated-timeout", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settleJob", - "kind": "helper", - "scope": "The single dark caller source rejects its exact controlled nested timeout object at time0. Caller classification remains original source error and the diagnostic verdict is source_error, with no classification/recovery/serialization/write or own deadline event." - }, - { - "case": "C53.served-propagated-timeout", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settle", - "kind": "helper", - "scope": "The detached served-hit source runs with caching disabled and rejects its controlled nested timeout at time0. The caller keeps its already served C0=1 and the job reports source_error, with no write or own job deadline event." - }, - { - "case": "C53.served-propagated-timeout", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settleJob", - "kind": "helper", - "scope": "The detached served-hit source runs with caching disabled and rejects its controlled nested timeout at time0. The caller keeps its already served C0=1 and the job reports source_error, with no write or own job deadline event." - }, - { - "case": "C48.ordinary-miss", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:begin", - "kind": "helper", - "scope": "A serving-enabled remote miss with shadow100 starts exactly one enabled caller source; source success fills normally and a later no-shadow serving probe returns that value. No disabled diagnostic source or shadow verdict occurs." - }, - { - "case": "C48.ordinary-miss", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:startCaller", - "kind": "helper", - "scope": "A serving-enabled remote miss with shadow100 starts exactly one enabled caller source; source success fills normally and a later no-shadow serving probe returns that value. No disabled diagnostic source or shadow verdict occurs." - }, - { - "case": "C52.present-not-repaired", - "reference": "formal/dialcache-shadow-layers-conformance.qnt:settleJob", - "kind": "helper", - "scope": "Fresh present C0=1 and caller source=2 produce a confirmed mismatch with one C1 read and zero Redis writes. Local publication of2 belongs only to the caller source; diagnostic work never repairs the present C0." - }, - { - "case": "C23.library-read-budget", - "reference": "formal/dialcache-effects-conformance.qnt:initial", - "kind": "helper", - "scope": "Omitted read budgets preserve library50: no source at40, timeout starts source at50." - }, - { - "case": "C60.logging-default-off", - "reference": "formal/dialcache-shadow-conformance.qnt:initialize", - "kind": "transition", - "scope": "The comparator fixture omits logging entirely. Confirmed mismatch still emits one age sample and verdict, with zero warning and zero configuration failure; public action history never includes a false logging reply." - }, - { - "case": "C60.logging-explicit-off", - "reference": "formal/dialcache-shadow-conformance.qnt:initialize", - "kind": "transition", - "scope": "A logging-enabled fixture receives an explicit false runtime reply before admission. Confirmed mismatch and age metric remain, while warning and configuration-error counts remain zero." - }, - { - "case": "C60.logging-explicit-off", - "reference": "formal/dialcache-shadow-conformance.qnt:setLogging", - "kind": "transition", - "scope": "A logging-enabled fixture receives an explicit false runtime reply before admission. Confirmed mismatch and age metric remain, while warning and configuration-error counts remain zero." - }, - { - "case": "C60.logging-explicit-off", - "reference": "formal/dialcache-shadow-conformance.qnt:beginCall", - "kind": "transition", - "scope": "A logging-enabled fixture receives an explicit false runtime reply before admission. Confirmed mismatch and age metric remain, while warning and configuration-error counts remain zero." - }, - { - "case": "C60.logging-explicit-off", - "reference": "formal/dialcache-shadow-conformance.qnt:done", - "kind": "helper", - "scope": "A logging-enabled fixture receives an explicit false runtime reply before admission. Confirmed mismatch and age metric remain, while warning and configuration-error counts remain zero." - }, - { - "case": "C51.confirmation-age", - "reference": "formal/dialcache-shadow-conformance.qnt:releaseLoad", - "kind": "transition", - "scope": "C0=1 is acquired fresh and retained; source2 compares unequal and C1 is held. Advancing application time exactly60000ms crosses F while elapsed job time and physical retention stay unchanged. C1 matching bytes confirm mismatch with read count2, no repair, source caller2 preserved and age60000ms." - }, - { - "case": "C51.confirmation-age", - "reference": "formal/dialcache-shadow-conformance.qnt:advanceWallBy", - "kind": "transition", - "scope": "C0=1 is acquired fresh and retained; source2 compares unequal and C1 is held. Advancing application time exactly60000ms crosses F while elapsed job time and physical retention stay unchanged. C1 matching bytes confirm mismatch with read count2, no repair, source caller2 preserved and age60000ms." - }, - { - "case": "C51.confirmation-rollback", - "reference": "formal/dialcache-shadow-conformance.qnt:rollbackWall", - "kind": "transition", - "scope": "After fresh C0/source inequality starts C1, application time rolls backward1000ms. The now-future C1 still confirms identical payload bytes, preserves source caller2, writes nothing and emits mismatch with age clamped0 and remote_shadow future offset1000ms." - }, - { - "case": "C51.confirmation-rollback", - "reference": "formal/dialcache-shadow-conformance.qnt:done", - "kind": "helper", - "scope": "After fresh C0/source inequality starts C1, application time rolls backward1000ms. The now-future C1 still confirms identical payload bytes, preserves source caller2, writes nothing and emits mismatch with age clamped0 and remote_shadow future offset1000ms." - }, - { - "case": "C57.clamp-age", - "reference": "formal/dialcache-shadow-conformance.qnt:rollbackWall", - "kind": "transition", - "scope": "A held C1 confirmation after1000ms wall rollback still confirms mismatch, and reported retained-C0 age is exactly0 rather than a negative or absolute duration." - }, - { - "case": "C57.clamp-age", - "reference": "formal/dialcache-shadow-conformance.qnt:done", - "kind": "helper", - "scope": "A held C1 confirmation after1000ms wall rollback still confirms mismatch, and reported retained-C0 age is exactly0 rather than a negative or absolute duration." - }, - { - "case": "C57.future-offset", - "reference": "formal/dialcache-shadow-conformance.qnt:releaseRead", - "kind": "transition", - "scope": "A successful C1 read of now-future bytes reports exactly one futureTimestampOffset event with namespace urn, useCase Behavior, keyType id, layer remote_shadow and offset1000ms. The frame remains a valid C1 payload-identity participant and confirms mismatch without repair." - }, - { - "case": "C38.marker-transition", - "reference": "formal/dialcache-invalidation-transition.qnt:invalidated", - "kind": "helper", - "scope": "Successful invalidation keeps the larger prior valid cutoff or newly proposed buffered cutoff; selected prior future markers are verified on real servers." - }, - { - "case": "C39.reject-before-mutation", - "reference": "formal/dialcache-invalidation-transition.qnt:parseSafeDecimal", - "kind": "helper", - "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input." - }, - { - "case": "C39.reject-before-mutation", - "reference": "formal/dialcache-invalidation-transition.qnt:invalidated", - "kind": "helper", - "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input." - }, - { - "case": "C38.retention", - "reference": "formal/dialcache-invalidation-transition.qnt:invalidated", - "kind": "helper", - "scope": "Finite results meet the two-hour floor and cutoff-relative value-retention horizon exactly, preserve longer string TTL and preserve string persistence." - }, - { - "case": "C38.marker-repair", - "reference": "formal/dialcache-invalidation-transition.qnt:invalidated", - "kind": "helper", - "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention." - }, - { - "case": "C39.numeric-limits", - "reference": "formal/dialcache-invalidation-transition.qnt:parseSafeDecimal", - "kind": "helper", - "scope": "Maximum365day buffer and maximum safe timestamp/sum accepted with exact canonical decimal output; surrounding invalid boundary forms have separate preservation evidence." - }, - { - "case": "C39.numeric-limits", - "reference": "formal/dialcache-invalidation-transition.qnt:invalidated", - "kind": "helper", - "scope": "Maximum365day buffer and maximum safe timestamp/sum accepted with exact canonical decimal output; surrounding invalid boundary forms have separate preservation evidence." - }, - { - "case": "C38.buffer-cutoff", - "reference": "formal/dialcache-invalidation-transition.qnt:invalidated", - "kind": "helper", - "scope": "Without a greater prior cutoff, timestamp plus requested future buffer becomes the exact marker value; long buffers also change retention." - }, - { - "case": "C39.decimal-normalization", - "reference": "formal/dialcache-invalidation-transition.qnt:decimalText", - "kind": "helper", - "scope": "Leading-zero decimal arguments are accepted and output zero/positive watermark text is canonical; valid prior values can still dominate the buffered proposal." - }, - { - "case": "C39.decimal-normalization", - "reference": "formal/dialcache-invalidation-transition.qnt:parseSafeDecimal", - "kind": "helper", - "scope": "Leading-zero decimal arguments are accepted and output zero/positive watermark text is canonical; valid prior values can still dominate the buffered proposal." - }, - { - "case": "C47.recovery-skips-shadow", - "reference": "formal/dialcache-recovery-read-conformance.qnt:initialized", - "kind": "transition", - "scope": "With tracked stale bytes, a selected 100% shadow policy, installed outcome hook and available capacity, source failure recovers the retained value, including absence. Recovery and its same-request memo probe start no diagnostic source/read/job and publish no remote/local value; an independent request repeats source failure and recovery for the absence case." - }, - { - "case": "C47.recovery-skips-shadow", - "reference": "formal/dialcache-recovery-read-conformance.qnt:releaseLoad", - "kind": "transition", - "scope": "With tracked stale bytes, a selected 100% shadow policy, installed outcome hook and available capacity, source failure recovers the retained value, including absence. Recovery and its same-request memo probe start no diagnostic source/read/job and publish no remote/local value; an independent request repeats source failure and recovery for the absence case." - }, - { - "case": "C47.recovery-skips-shadow", - "reference": "formal/dialcache-recovery-read-conformance.qnt:complete", - "kind": "helper", - "scope": "With tracked stale bytes, a selected 100% shadow policy, installed outcome hook and available capacity, source failure recovers the retained value, including absence. Recovery and its same-request memo probe start no diagnostic source/read/job and publish no remote/local value; an independent request repeats source failure and recovery for the absence case." - }, - { - "case": "W01.key-identity", - "reference": "formal/dialcache-key-protocol.qnt:encodeComponent", - "kind": "helper", - "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests." - }, - { - "case": "W01.key-identity", - "reference": "formal/dialcache-key-protocol.qnt:encodedEntity", - "kind": "helper", - "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests." - }, - { - "case": "W01.key-identity", - "reference": "formal/dialcache-key-protocol.qnt:encodedArguments", - "kind": "helper", - "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests." - }, - { - "case": "W01.key-identity", - "reference": "formal/dialcache-key-protocol.qnt:constructKey", - "kind": "helper", - "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests." - }, - { - "case": "W01.invalid-identity", - "reference": "formal/dialcache-key-protocol.qnt:validKey", - "kind": "helper", - "scope": "Reject unpaired UTF-16 units in each encoded component, namespace braces in either mode, and keyType/id braces only when tracked. Raw unit overrides construct actual malformed native inputs; removed properties and host type errors remain fixed/native API boundaries." - }, - { - "case": "W01.invalid-identity", - "reference": "formal/dialcache-key-protocol.qnt:containsBrace", - "kind": "helper", - "scope": "Reject unpaired UTF-16 units in each encoded component, namespace braces in either mode, and keyType/id braces only when tracked. Raw unit overrides construct actual malformed native inputs; removed properties and host type errors remain fixed/native API boundaries." - }, - { - "case": "W02.sorted-arguments", - "reference": "formal/dialcache-key-protocol.qnt:textBefore", - "kind": "helper", - "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries." - }, - { - "case": "W02.sorted-arguments", - "reference": "formal/dialcache-key-protocol.qnt:decimalUnits", - "kind": "helper", - "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries." - }, - { - "case": "W02.sorted-arguments", - "reference": "formal/dialcache-key-protocol.qnt:argumentText", - "kind": "helper", - "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries." - }, - { - "case": "W02.sorted-arguments", - "reference": "formal/dialcache-key-protocol.qnt:normalizeArguments", - "kind": "helper", - "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries." - }, - { - "case": "W03.cohort-assignment", - "reference": "formal/dialcache-key-protocol.qnt:xorUnit", - "kind": "helper", - "scope": "Compute FNV-1a over UTF-16 units of logical key plus local/remote/shadow discriminator with XOR and modulo-2^32 multiplication. Generated exact numerators are converted only to the public percent representation. Strict admission is checked in Quint; runtime-boundaries and shadow-layers replay actual equal/below/above policy consequences." - }, - { - "case": "W03.cohort-assignment", - "reference": "formal/dialcache-key-protocol.qnt:fnv1a", - "kind": "helper", - "scope": "Compute FNV-1a over UTF-16 units of logical key plus local/remote/shadow discriminator with XOR and modulo-2^32 multiplication. Generated exact numerators are converted only to the public percent representation. Strict admission is checked in Quint; runtime-boundaries and shadow-layers replay actual equal/below/above policy consequences." - }, - { - "case": "W03.cohort-assignment", - "reference": "formal/dialcache-key-protocol.qnt:cohortHash", - "kind": "helper", - "scope": "Compute FNV-1a over UTF-16 units of logical key plus local/remote/shadow discriminator with XOR and modulo-2^32 multiplication. Generated exact numerators are converted only to the public percent representation. Strict admission is checked in Quint; runtime-boundaries and shadow-layers replay actual equal/below/above policy consequences." - }, - { - "case": "W06.envelope-markers", - "reference": "formal/dialcache-envelope-vectors.qnt:escapedRaw", - "kind": "helper", - "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result." - }, - { - "case": "W06.envelope-markers", - "reference": "formal/dialcache-envelope-vectors.qnt:readEnvelope", - "kind": "helper", - "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result." - }, - { - "case": "W06.compressed-decode", - "reference": "formal/dialcache-envelope-vectors.qnt:readEnvelope", - "kind": "helper", - "scope": "Both markers decode ten independently verified raw-block codec fixtures, including malformed UTF-8 and BOM/scalar boundaries; three rejected codec headers and injected output limits retain exact original marked bytes. Arbitrary zstd streams, dictionaries and windows are native boundaries." - }, - { - "case": "W07.compression-selection", - "reference": "formal/dialcache-envelope-vectors.qnt:payloadBytes", - "kind": "helper", - "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload." - }, - { - "case": "W07.compression-selection", - "reference": "formal/dialcache-envelope-vectors.qnt:escapedRaw", - "kind": "helper", - "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload." - }, - { - "case": "W07.compression-selection", - "reference": "formal/dialcache-envelope-vectors.qnt:selectWrite", - "kind": "helper", - "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload." - }, - { - "case": "W08.legacy-reading", - "reference": "formal/dialcache-envelope-vectors.qnt:readEnvelope", - "kind": "helper", - "scope": "The envelope reader ignores the model new-write policy input. Its native helper has no policy argument; combine primitive vectors with the actual compression:false recovery-read cached compressed history for the cache binding." - }, - { - "case": "C16.ttl-implies-ramp", - "reference": "formal/kernel/runtime-policy.qnt:resolve", - "kind": "helper", - "scope": "A runtime local TTL (code 18, or the ramp-up code 20 over a disabled baseline) configures the local layer at the default full ramp for any baseline, and a runtime remote TTL (code 19) configures the remote layer only where a Redis client exists; a disabled baseline stays disabled until code 20." - }, - { - "case": "C16.ttl-implies-ramp", - "reference": "formal/kernel/serving.qnt:release", - "kind": "helper", - "scope": "Sharing (a request or process flight) precedes the local and remote reads; a remote hit warms only a local layer the resolution enables for this release." - } - ], - "limitations": [ - "Generated witness reachability and implementation replay are recorded separately. A property reference alone does not establish the witness was reached or that both implementations passed.", - "C16.sparse-leaves uses runtimeOverlayIsLeafWise, which calls the same resolve helper as capture; retain its snapshot-consistency claim without presenting it as an independent leaf-merge derivation.", - "C54.read-ownership is not linked to timeoutRetainsConfirmationCapacityTest: that model regression exhausts the job deadline, not the separate read deadline specified by this case.", - "Weak accounting checks such as policy hitsSkipSource (loaders <= callers), recovery singleReadPerFlight (reads <= callers), and age-sample counts are not treated as proofs of hit traversal, single execution, or sample time.", - "No general generated model claim is added for native key/byte/compression/numeric limits, 60000ms default source timeout, unbounded source mode, one-hour tracked cap, or arbitrary backend collector behavior. Fixed/vector/native evidence and explicit model bounds remain relevant." - ] -} diff --git a/formal/quint-envelope-vectors.json b/formal/quint-envelope-vectors.json index a43f25c3..b7ba4dab 100644 --- a/formal/quint-envelope-vectors.json +++ b/formal/quint-envelope-vectors.json @@ -5,5422 +5,310 @@ "sourceSha256": { "formal/dialcache-envelope-vectors.qnt": "aa0c584f679ccfb5b472e443018f5f6991a390daeb4cc911f15e06d98affd88b", "formal/wire-text.qnt": "c78f8c674f4e1470b0d2b605b209d82e3aab0e35fb4e0efae813247bf093eb27", - "formal/generate-envelope-vectors.mjs": "e7e2b908242ba7da03e5a18807eb57371d471510f4605c2f2866a409da51c0e9" + "formal/generate-envelope-vectors.mjs": "0df0a70737886cc5bc3c135d156e49db5f3513ed0a8b0e8c4c04d5785d309b5a" } }, "envelopeVectors": [ - { - "name": "Quint envelope 000 envelope", - "inputHex": "", - "escapedHex": "", - "decodedHex": "", - "outcome": "passthrough" - }, - { - "name": "Quint envelope 001 envelope", - "inputHex": "00", - "escapedHex": "0000", - "decodedHex": "00", - "outcome": "passthrough" - }, - { - "name": "Quint envelope 002 envelope", - "inputHex": "01", - "escapedHex": "0001", - "decodedHex": "01", - "outcome": "fallback_raw" - }, - { - "name": "Quint envelope 003 envelope", - "inputHex": "02", - "escapedHex": "0002", - "decodedHex": "02", - "outcome": "fallback_raw" - }, - { - "name": "Quint envelope 004 envelope", - "inputHex": "03", - "escapedHex": "03", - "decodedHex": "03", - "outcome": "passthrough" - }, - { - "name": "Quint envelope 005 envelope", - "inputHex": "ff", - "escapedHex": "ff", - "decodedHex": "ff", - "outcome": "passthrough" - }, - { - "name": "Quint envelope 006 envelope", - "inputHex": "0000", - "escapedHex": "000000", - "decodedHex": "00", - "outcome": "passthrough" - }, - { - "name": "Quint envelope 007 envelope", - "inputHex": "0001", - "escapedHex": "000001", - "decodedHex": "01", - "outcome": "passthrough" - }, - { - "name": "Quint envelope 008 envelope", - "inputHex": "0002", - "escapedHex": "000002", - "decodedHex": "02", - "outcome": "passthrough" - }, - { - "name": "Quint envelope 009 envelope", - "inputHex": "0003", - "escapedHex": "000003", - "decodedHex": "0003", - "outcome": "passthrough" - }, - { - "name": "Quint envelope 010 envelope", - "inputHex": "00ff", - "escapedHex": "0000ff", - "decodedHex": "00ff", - "outcome": "passthrough" - }, - { - "name": "Quint envelope 011 envelope", - "inputHex": "000001", - "escapedHex": "00000001", - "decodedHex": "0001", - "outcome": "passthrough" - }, - { - "name": "Quint envelope 012 envelope", - "inputHex": "01ff", - "escapedHex": "0001ff", - "decodedHex": "01ff", - "outcome": "fallback_raw" - }, - { - "name": "Quint envelope 013 envelope", - "inputHex": "02ff", - "escapedHex": "0002ff", - "decodedHex": "02ff", - "outcome": "fallback_raw" - }, - { - "name": "Quint envelope 014 envelope", - "inputHex": "0300", - "escapedHex": "0300", - "decodedHex": "0300", - "outcome": "passthrough" - } + {"name":"Quint envelope 000 envelope","inputHex":"","escapedHex":"","decodedHex":"","outcome":"passthrough"}, + {"name":"Quint envelope 001 envelope","inputHex":"00","escapedHex":"0000","decodedHex":"00","outcome":"passthrough"}, + {"name":"Quint envelope 002 envelope","inputHex":"01","escapedHex":"0001","decodedHex":"01","outcome":"fallback_raw"}, + {"name":"Quint envelope 003 envelope","inputHex":"02","escapedHex":"0002","decodedHex":"02","outcome":"fallback_raw"}, + {"name":"Quint envelope 004 envelope","inputHex":"03","escapedHex":"03","decodedHex":"03","outcome":"passthrough"}, + {"name":"Quint envelope 005 envelope","inputHex":"ff","escapedHex":"ff","decodedHex":"ff","outcome":"passthrough"}, + {"name":"Quint envelope 006 envelope","inputHex":"0000","escapedHex":"000000","decodedHex":"00","outcome":"passthrough"}, + {"name":"Quint envelope 007 envelope","inputHex":"0001","escapedHex":"000001","decodedHex":"01","outcome":"passthrough"}, + {"name":"Quint envelope 008 envelope","inputHex":"0002","escapedHex":"000002","decodedHex":"02","outcome":"passthrough"}, + {"name":"Quint envelope 009 envelope","inputHex":"0003","escapedHex":"000003","decodedHex":"0003","outcome":"passthrough"}, + {"name":"Quint envelope 010 envelope","inputHex":"00ff","escapedHex":"0000ff","decodedHex":"00ff","outcome":"passthrough"}, + {"name":"Quint envelope 011 envelope","inputHex":"000001","escapedHex":"00000001","decodedHex":"0001","outcome":"passthrough"}, + {"name":"Quint envelope 012 envelope","inputHex":"01ff","escapedHex":"0001ff","decodedHex":"01ff","outcome":"fallback_raw"}, + {"name":"Quint envelope 013 envelope","inputHex":"02ff","escapedHex":"0002ff","decodedHex":"02ff","outcome":"fallback_raw"}, + {"name":"Quint envelope 014 envelope","inputHex":"0300","escapedHex":"0300","decodedHex":"0300","outcome":"passthrough"} ], "compressedDecodeVectors": [ - { - "name": "Quint envelope 015 decode", - "inputHex": "0128b52ffd2000010000", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "" - }, - { - "name": "Quint envelope 016 decode", - "inputHex": "0228b52ffd2000010000", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "" - }, - { - "name": "Quint envelope 017 decode", - "inputHex": "0128b52ffd2000010000", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "" - }, - { - "name": "Quint envelope 018 decode", - "inputHex": "0228b52ffd2000010000", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "" - }, - { - "name": "Quint envelope 019 decode", - "inputHex": "0128b52ffd2000010000", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "" - }, - { - "name": "Quint envelope 020 decode", - "inputHex": "0228b52ffd2000010000", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "" - }, - { - "name": "Quint envelope 021 decode", - "inputHex": "0128b52ffd2000010000", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "" - }, - { - "name": "Quint envelope 022 decode", - "inputHex": "0228b52ffd2000010000", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "" - }, - { - "name": "Quint envelope 023 decode", - "inputHex": "0128b52ffd2000010000", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "" - }, - { - "name": "Quint envelope 024 decode", - "inputHex": "0228b52ffd2000010000", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "" - }, - { - "name": "Quint envelope 025 decode", - "inputHex": "0128b52ffd2000010000", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "" - }, - { - "name": "Quint envelope 026 decode", - "inputHex": "0228b52ffd2000010000", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "" - }, - { - "name": "Quint envelope 027 decode", - "inputHex": "0128b52ffd2003190000616263", - "maxDecompressedBytes": 2, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "616263" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2003190000616263" - }, - { - "name": "Quint envelope 028 decode", - "inputHex": "0228b52ffd2003190000616263", - "maxDecompressedBytes": 2, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "616263" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2003190000616263" - }, - { - "name": "Quint envelope 029 decode", - "inputHex": "0128b52ffd2003190000616263", - "maxDecompressedBytes": 2, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "616263" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2003190000616263" - }, - { - "name": "Quint envelope 030 decode", - "inputHex": "0228b52ffd2003190000616263", - "maxDecompressedBytes": 2, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "616263" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2003190000616263" - }, - { - "name": "Quint envelope 031 decode", - "inputHex": "0128b52ffd2003190000616263", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "616263" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "abc" - }, - { - "name": "Quint envelope 032 decode", - "inputHex": "0228b52ffd2003190000616263", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "616263" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "616263" - }, - { - "name": "Quint envelope 033 decode", - "inputHex": "0128b52ffd2003190000616263", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "616263" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "abc" - }, - { - "name": "Quint envelope 034 decode", - "inputHex": "0228b52ffd2003190000616263", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "616263" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "616263" - }, - { - "name": "Quint envelope 035 decode", - "inputHex": "0128b52ffd2003190000616263", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "616263" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "abc" - }, - { - "name": "Quint envelope 036 decode", - "inputHex": "0228b52ffd2003190000616263", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "616263" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "616263" - }, - { - "name": "Quint envelope 037 decode", - "inputHex": "0128b52ffd2003190000616263", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "616263" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "abc" - }, - { - "name": "Quint envelope 038 decode", - "inputHex": "0228b52ffd2003190000616263", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "616263" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "616263" - }, - { - "name": "Quint envelope 039 decode", - "inputHex": "0128b52ffd2003190000000102", - "maxDecompressedBytes": 2, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "000102" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2003190000000102" - }, - { - "name": "Quint envelope 040 decode", - "inputHex": "0228b52ffd2003190000000102", - "maxDecompressedBytes": 2, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "000102" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2003190000000102" - }, - { - "name": "Quint envelope 041 decode", - "inputHex": "0128b52ffd2003190000000102", - "maxDecompressedBytes": 2, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "000102" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2003190000000102" - }, - { - "name": "Quint envelope 042 decode", - "inputHex": "0228b52ffd2003190000000102", - "maxDecompressedBytes": 2, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "000102" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2003190000000102" - }, - { - "name": "Quint envelope 043 decode", - "inputHex": "0128b52ffd2003190000000102", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "000102" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "\u0000\u0001\u0002" - }, - { - "name": "Quint envelope 044 decode", - "inputHex": "0228b52ffd2003190000000102", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "000102" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "000102" - }, - { - "name": "Quint envelope 045 decode", - "inputHex": "0128b52ffd2003190000000102", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "000102" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "\u0000\u0001\u0002" - }, - { - "name": "Quint envelope 046 decode", - "inputHex": "0228b52ffd2003190000000102", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "000102" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "000102" - }, - { - "name": "Quint envelope 047 decode", - "inputHex": "0128b52ffd2003190000000102", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "000102" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "\u0000\u0001\u0002" - }, - { - "name": "Quint envelope 048 decode", - "inputHex": "0228b52ffd2003190000000102", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "000102" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "000102" - }, - { - "name": "Quint envelope 049 decode", - "inputHex": "0128b52ffd2003190000000102", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "000102" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "\u0000\u0001\u0002" - }, - { - "name": "Quint envelope 050 decode", - "inputHex": "0228b52ffd2003190000000102", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "000102" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "000102" - }, - { - "name": "Quint envelope 051 decode", - "inputHex": "0128b52ffd2001090000ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "ff" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�" - }, - { - "name": "Quint envelope 052 decode", - "inputHex": "0228b52ffd2001090000ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "ff" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "ff" - }, - { - "name": "Quint envelope 053 decode", - "inputHex": "0128b52ffd2001090000ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "ff" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�" - }, - { - "name": "Quint envelope 054 decode", - "inputHex": "0228b52ffd2001090000ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "ff" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "ff" - }, - { - "name": "Quint envelope 055 decode", - "inputHex": "0128b52ffd2001090000ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "ff" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�" - }, - { - "name": "Quint envelope 056 decode", - "inputHex": "0228b52ffd2001090000ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "ff" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "ff" - }, - { - "name": "Quint envelope 057 decode", - "inputHex": "0128b52ffd2001090000ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "ff" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�" - }, - { - "name": "Quint envelope 058 decode", - "inputHex": "0228b52ffd2001090000ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "ff" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "ff" - }, - { - "name": "Quint envelope 059 decode", - "inputHex": "0128b52ffd2001090000ff", - "maxDecompressedBytes": 2, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "ff" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�" - }, - { - "name": "Quint envelope 060 decode", - "inputHex": "0228b52ffd2001090000ff", - "maxDecompressedBytes": 2, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "ff" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "ff" - }, - { - "name": "Quint envelope 061 decode", - "inputHex": "0128b52ffd2001090000ff", - "maxDecompressedBytes": 2, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "ff" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�" - }, - { - "name": "Quint envelope 062 decode", - "inputHex": "0228b52ffd2001090000ff", - "maxDecompressedBytes": 2, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "ff" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "ff" - }, - { - "name": "Quint envelope 063 decode", - "inputHex": "0128b52ffd2002110000e282", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "e282" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2002110000e282" - }, - { - "name": "Quint envelope 064 decode", - "inputHex": "0228b52ffd2002110000e282", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "e282" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2002110000e282" - }, - { - "name": "Quint envelope 065 decode", - "inputHex": "0128b52ffd2002110000e282", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "e282" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2002110000e282" - }, - { - "name": "Quint envelope 066 decode", - "inputHex": "0228b52ffd2002110000e282", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "e282" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2002110000e282" - }, - { - "name": "Quint envelope 067 decode", - "inputHex": "0128b52ffd2002110000e282", - "maxDecompressedBytes": 2, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "e282" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�" - }, - { - "name": "Quint envelope 068 decode", - "inputHex": "0228b52ffd2002110000e282", - "maxDecompressedBytes": 2, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "e282" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "e282" - }, - { - "name": "Quint envelope 069 decode", - "inputHex": "0128b52ffd2002110000e282", - "maxDecompressedBytes": 2, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "e282" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�" - }, - { - "name": "Quint envelope 070 decode", - "inputHex": "0228b52ffd2002110000e282", - "maxDecompressedBytes": 2, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "e282" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "e282" - }, - { - "name": "Quint envelope 071 decode", - "inputHex": "0128b52ffd2002110000e282", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "e282" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�" - }, - { - "name": "Quint envelope 072 decode", - "inputHex": "0228b52ffd2002110000e282", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "e282" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "e282" - }, - { - "name": "Quint envelope 073 decode", - "inputHex": "0128b52ffd2002110000e282", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "e282" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�" - }, - { - "name": "Quint envelope 074 decode", - "inputHex": "0228b52ffd2002110000e282", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "e282" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "e282" - }, - { - "name": "Quint envelope 075 decode", - "inputHex": "0128b52ffd2003190000e28241", - "maxDecompressedBytes": 2, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "e28241" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2003190000e28241" - }, - { - "name": "Quint envelope 076 decode", - "inputHex": "0228b52ffd2003190000e28241", - "maxDecompressedBytes": 2, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "e28241" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2003190000e28241" - }, - { - "name": "Quint envelope 077 decode", - "inputHex": "0128b52ffd2003190000e28241", - "maxDecompressedBytes": 2, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "e28241" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2003190000e28241" - }, - { - "name": "Quint envelope 078 decode", - "inputHex": "0228b52ffd2003190000e28241", - "maxDecompressedBytes": 2, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "e28241" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2003190000e28241" - }, - { - "name": "Quint envelope 079 decode", - "inputHex": "0128b52ffd2003190000e28241", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "e28241" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�A" - }, - { - "name": "Quint envelope 080 decode", - "inputHex": "0228b52ffd2003190000e28241", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "e28241" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "e28241" - }, - { - "name": "Quint envelope 081 decode", - "inputHex": "0128b52ffd2003190000e28241", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "e28241" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�A" - }, - { - "name": "Quint envelope 082 decode", - "inputHex": "0228b52ffd2003190000e28241", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "e28241" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "e28241" - }, - { - "name": "Quint envelope 083 decode", - "inputHex": "0128b52ffd2003190000e28241", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "e28241" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�A" - }, - { - "name": "Quint envelope 084 decode", - "inputHex": "0228b52ffd2003190000e28241", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "e28241" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "e28241" - }, - { - "name": "Quint envelope 085 decode", - "inputHex": "0128b52ffd2003190000e28241", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "e28241" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "�A" - }, - { - "name": "Quint envelope 086 decode", - "inputHex": "0228b52ffd2003190000e28241", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "e28241" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "e28241" - }, - { - "name": "Quint envelope 087 decode", - "inputHex": "0128b52ffd2003190000eda080", - "maxDecompressedBytes": 2, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "eda080" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2003190000eda080" - }, - { - "name": "Quint envelope 088 decode", - "inputHex": "0228b52ffd2003190000eda080", - "maxDecompressedBytes": 2, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "eda080" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2003190000eda080" - }, - { - "name": "Quint envelope 089 decode", - "inputHex": "0128b52ffd2003190000eda080", - "maxDecompressedBytes": 2, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "eda080" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2003190000eda080" - }, - { - "name": "Quint envelope 090 decode", - "inputHex": "0228b52ffd2003190000eda080", - "maxDecompressedBytes": 2, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "eda080" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2003190000eda080" - }, - { - "name": "Quint envelope 091 decode", - "inputHex": "0128b52ffd2003190000eda080", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "eda080" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "���" - }, - { - "name": "Quint envelope 092 decode", - "inputHex": "0228b52ffd2003190000eda080", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "eda080" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "eda080" - }, - { - "name": "Quint envelope 093 decode", - "inputHex": "0128b52ffd2003190000eda080", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "eda080" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "���" - }, - { - "name": "Quint envelope 094 decode", - "inputHex": "0228b52ffd2003190000eda080", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "eda080" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "eda080" - }, - { - "name": "Quint envelope 095 decode", - "inputHex": "0128b52ffd2003190000eda080", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "eda080" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "���" - }, - { - "name": "Quint envelope 096 decode", - "inputHex": "0228b52ffd2003190000eda080", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "eda080" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "eda080" - }, - { - "name": "Quint envelope 097 decode", - "inputHex": "0128b52ffd2003190000eda080", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "eda080" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "���" - }, - { - "name": "Quint envelope 098 decode", - "inputHex": "0228b52ffd2003190000eda080", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "eda080" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "eda080" - }, - { - "name": "Quint envelope 099 decode", - "inputHex": "0128b52ffd2004210000efbbbf41", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "efbbbf41" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2004210000efbbbf41" - }, - { - "name": "Quint envelope 100 decode", - "inputHex": "0228b52ffd2004210000efbbbf41", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "efbbbf41" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2004210000efbbbf41" - }, - { - "name": "Quint envelope 101 decode", - "inputHex": "0128b52ffd2004210000efbbbf41", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "efbbbf41" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2004210000efbbbf41" - }, - { - "name": "Quint envelope 102 decode", - "inputHex": "0228b52ffd2004210000efbbbf41", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "efbbbf41" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2004210000efbbbf41" - }, - { - "name": "Quint envelope 103 decode", - "inputHex": "0128b52ffd2004210000efbbbf41", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "efbbbf41" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "A" - }, - { - "name": "Quint envelope 104 decode", - "inputHex": "0228b52ffd2004210000efbbbf41", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "efbbbf41" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "efbbbf41" - }, - { - "name": "Quint envelope 105 decode", - "inputHex": "0128b52ffd2004210000efbbbf41", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "efbbbf41" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "A" - }, - { - "name": "Quint envelope 106 decode", - "inputHex": "0228b52ffd2004210000efbbbf41", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "efbbbf41" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "efbbbf41" - }, - { - "name": "Quint envelope 107 decode", - "inputHex": "0128b52ffd2004210000efbbbf41", - "maxDecompressedBytes": 5, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "efbbbf41" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "A" - }, - { - "name": "Quint envelope 108 decode", - "inputHex": "0228b52ffd2004210000efbbbf41", - "maxDecompressedBytes": 5, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "efbbbf41" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "efbbbf41" - }, - { - "name": "Quint envelope 109 decode", - "inputHex": "0128b52ffd2004210000efbbbf41", - "maxDecompressedBytes": 5, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "efbbbf41" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "A" - }, - { - "name": "Quint envelope 110 decode", - "inputHex": "0228b52ffd2004210000efbbbf41", - "maxDecompressedBytes": 5, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "efbbbf41" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "efbbbf41" - }, - { - "name": "Quint envelope 111 decode", - "inputHex": "0128b52ffd2004210000f09f9880", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "f09f9880" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2004210000f09f9880" - }, - { - "name": "Quint envelope 112 decode", - "inputHex": "0228b52ffd2004210000f09f9880", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "f09f9880" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2004210000f09f9880" - }, - { - "name": "Quint envelope 113 decode", - "inputHex": "0128b52ffd2004210000f09f9880", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "f09f9880" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2004210000f09f9880" - }, - { - "name": "Quint envelope 114 decode", - "inputHex": "0228b52ffd2004210000f09f9880", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "f09f9880" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2004210000f09f9880" - }, - { - "name": "Quint envelope 115 decode", - "inputHex": "0128b52ffd2004210000f09f9880", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "f09f9880" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "😀" - }, - { - "name": "Quint envelope 116 decode", - "inputHex": "0228b52ffd2004210000f09f9880", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "f09f9880" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "f09f9880" - }, - { - "name": "Quint envelope 117 decode", - "inputHex": "0128b52ffd2004210000f09f9880", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "f09f9880" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "😀" - }, - { - "name": "Quint envelope 118 decode", - "inputHex": "0228b52ffd2004210000f09f9880", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "f09f9880" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "f09f9880" - }, - { - "name": "Quint envelope 119 decode", - "inputHex": "0128b52ffd2004210000f09f9880", - "maxDecompressedBytes": 5, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "f09f9880" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "😀" - }, - { - "name": "Quint envelope 120 decode", - "inputHex": "0228b52ffd2004210000f09f9880", - "maxDecompressedBytes": 5, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "f09f9880" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "f09f9880" - }, - { - "name": "Quint envelope 121 decode", - "inputHex": "0128b52ffd2004210000f09f9880", - "maxDecompressedBytes": 5, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "f09f9880" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "😀" - }, - { - "name": "Quint envelope 122 decode", - "inputHex": "0228b52ffd2004210000f09f9880", - "maxDecompressedBytes": 5, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "f09f9880" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "f09f9880" - }, - { - "name": "Quint envelope 123 decode", - "inputHex": "0128b52ffd2004210000f4908080", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "f4908080" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2004210000f4908080" - }, - { - "name": "Quint envelope 124 decode", - "inputHex": "0228b52ffd2004210000f4908080", - "maxDecompressedBytes": 3, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "f4908080" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2004210000f4908080" - }, - { - "name": "Quint envelope 125 decode", - "inputHex": "0128b52ffd2004210000f4908080", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "f4908080" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0128b52ffd2004210000f4908080" - }, - { - "name": "Quint envelope 126 decode", - "inputHex": "0228b52ffd2004210000f4908080", - "maxDecompressedBytes": 3, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "f4908080" - }, - "outcome": "read_over_limit", - "payloadType": "binary", - "payloadHex": "0228b52ffd2004210000f4908080" - }, - { - "name": "Quint envelope 127 decode", - "inputHex": "0128b52ffd2004210000f4908080", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "f4908080" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "����" - }, - { - "name": "Quint envelope 128 decode", - "inputHex": "0228b52ffd2004210000f4908080", - "maxDecompressedBytes": 4, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "f4908080" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "f4908080" - }, - { - "name": "Quint envelope 129 decode", - "inputHex": "0128b52ffd2004210000f4908080", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "f4908080" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "����" - }, - { - "name": "Quint envelope 130 decode", - "inputHex": "0228b52ffd2004210000f4908080", - "maxDecompressedBytes": 4, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "f4908080" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "f4908080" - }, - { - "name": "Quint envelope 131 decode", - "inputHex": "0128b52ffd2004210000f4908080", - "maxDecompressedBytes": 5, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "f4908080" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "����" - }, - { - "name": "Quint envelope 132 decode", - "inputHex": "0228b52ffd2004210000f4908080", - "maxDecompressedBytes": 5, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": true, - "decodedHex": "f4908080" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "f4908080" - }, - { - "name": "Quint envelope 133 decode", - "inputHex": "0128b52ffd2004210000f4908080", - "maxDecompressedBytes": 5, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "f4908080" - }, - "outcome": "decompressed", - "payloadType": "string", - "payloadUtf8": "����" - }, - { - "name": "Quint envelope 134 decode", - "inputHex": "0228b52ffd2004210000f4908080", - "maxDecompressedBytes": 5, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": true, - "decodedHex": "f4908080" - }, - "outcome": "decompressed", - "payloadType": "binary", - "payloadHex": "f4908080" - }, - { - "name": "Quint envelope 135 decode", - "inputHex": "01ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "01ff" - }, - { - "name": "Quint envelope 136 decode", - "inputHex": "02ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "02ff" - }, - { - "name": "Quint envelope 137 decode", - "inputHex": "01ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "01ff" - }, - { - "name": "Quint envelope 138 decode", - "inputHex": "02ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "02ff" - }, - { - "name": "Quint envelope 139 decode", - "inputHex": "01ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "01ff" - }, - { - "name": "Quint envelope 140 decode", - "inputHex": "02ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "02ff" - }, - { - "name": "Quint envelope 141 decode", - "inputHex": "01ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "01ff" - }, - { - "name": "Quint envelope 142 decode", - "inputHex": "02ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "02ff" - }, - { - "name": "Quint envelope 143 decode", - "inputHex": "01ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "01ff" - }, - { - "name": "Quint envelope 144 decode", - "inputHex": "02ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "02ff" - }, - { - "name": "Quint envelope 145 decode", - "inputHex": "01ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "01ff" - }, - { - "name": "Quint envelope 146 decode", - "inputHex": "02ff", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "02ff" - }, - { - "name": "Quint envelope 147 decode", - "inputHex": "0128b5", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0128b5" - }, - { - "name": "Quint envelope 148 decode", - "inputHex": "0228b5", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0228b5" - }, - { - "name": "Quint envelope 149 decode", - "inputHex": "0128b5", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0128b5" - }, - { - "name": "Quint envelope 150 decode", - "inputHex": "0228b5", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0228b5" - }, - { - "name": "Quint envelope 151 decode", - "inputHex": "0128b5", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0128b5" - }, - { - "name": "Quint envelope 152 decode", - "inputHex": "0228b5", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0228b5" - }, - { - "name": "Quint envelope 153 decode", - "inputHex": "0128b5", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0128b5" - }, - { - "name": "Quint envelope 154 decode", - "inputHex": "0228b5", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0228b5" - }, - { - "name": "Quint envelope 155 decode", - "inputHex": "0128b5", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0128b5" - }, - { - "name": "Quint envelope 156 decode", - "inputHex": "0228b5", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0228b5" - }, - { - "name": "Quint envelope 157 decode", - "inputHex": "0128b5", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0128b5" - }, - { - "name": "Quint envelope 158 decode", - "inputHex": "0228b5", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0228b5" - }, - { - "name": "Quint envelope 159 decode", - "inputHex": "0128b52ffd", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0128b52ffd" - }, - { - "name": "Quint envelope 160 decode", - "inputHex": "0228b52ffd", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0228b52ffd" - }, - { - "name": "Quint envelope 161 decode", - "inputHex": "0128b52ffd", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0128b52ffd" - }, - { - "name": "Quint envelope 162 decode", - "inputHex": "0228b52ffd", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0228b52ffd" - }, - { - "name": "Quint envelope 163 decode", - "inputHex": "0128b52ffd", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0128b52ffd" - }, - { - "name": "Quint envelope 164 decode", - "inputHex": "0228b52ffd", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0228b52ffd" - }, - { - "name": "Quint envelope 165 decode", - "inputHex": "0128b52ffd", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0128b52ffd" - }, - { - "name": "Quint envelope 166 decode", - "inputHex": "0228b52ffd", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0228b52ffd" - }, - { - "name": "Quint envelope 167 decode", - "inputHex": "0128b52ffd", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0128b52ffd" - }, - { - "name": "Quint envelope 168 decode", - "inputHex": "0228b52ffd", - "maxDecompressedBytes": 1, - "newWritesEnabled": false, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0228b52ffd" - }, - { - "name": "Quint envelope 169 decode", - "inputHex": "0128b52ffd", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0128b52ffd" - }, - { - "name": "Quint envelope 170 decode", - "inputHex": "0228b52ffd", - "maxDecompressedBytes": 1, - "newWritesEnabled": true, - "codecFixture": { - "succeeds": false, - "decodedHex": "" - }, - "outcome": "fallback_raw", - "payloadType": "binary", - "payloadHex": "0228b52ffd" - } + {"name":"Quint envelope 015 decode","inputHex":"0128b52ffd2000010000","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":""},"outcome":"decompressed","payloadType":"string","payloadUtf8":""}, + {"name":"Quint envelope 016 decode","inputHex":"0228b52ffd2000010000","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":""},"outcome":"decompressed","payloadType":"binary","payloadHex":""}, + {"name":"Quint envelope 017 decode","inputHex":"0128b52ffd2000010000","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":""},"outcome":"decompressed","payloadType":"string","payloadUtf8":""}, + {"name":"Quint envelope 018 decode","inputHex":"0228b52ffd2000010000","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":""},"outcome":"decompressed","payloadType":"binary","payloadHex":""}, + {"name":"Quint envelope 019 decode","inputHex":"0128b52ffd2000010000","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":""},"outcome":"decompressed","payloadType":"string","payloadUtf8":""}, + {"name":"Quint envelope 020 decode","inputHex":"0228b52ffd2000010000","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":""},"outcome":"decompressed","payloadType":"binary","payloadHex":""}, + {"name":"Quint envelope 021 decode","inputHex":"0128b52ffd2000010000","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":""},"outcome":"decompressed","payloadType":"string","payloadUtf8":""}, + {"name":"Quint envelope 022 decode","inputHex":"0228b52ffd2000010000","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":""},"outcome":"decompressed","payloadType":"binary","payloadHex":""}, + {"name":"Quint envelope 023 decode","inputHex":"0128b52ffd2000010000","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":""},"outcome":"decompressed","payloadType":"string","payloadUtf8":""}, + {"name":"Quint envelope 024 decode","inputHex":"0228b52ffd2000010000","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":""},"outcome":"decompressed","payloadType":"binary","payloadHex":""}, + {"name":"Quint envelope 025 decode","inputHex":"0128b52ffd2000010000","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":""},"outcome":"decompressed","payloadType":"string","payloadUtf8":""}, + {"name":"Quint envelope 026 decode","inputHex":"0228b52ffd2000010000","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":""},"outcome":"decompressed","payloadType":"binary","payloadHex":""}, + {"name":"Quint envelope 027 decode","inputHex":"0128b52ffd2003190000616263","maxDecompressedBytes":2,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"616263"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2003190000616263"}, + {"name":"Quint envelope 028 decode","inputHex":"0228b52ffd2003190000616263","maxDecompressedBytes":2,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"616263"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2003190000616263"}, + {"name":"Quint envelope 029 decode","inputHex":"0128b52ffd2003190000616263","maxDecompressedBytes":2,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"616263"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2003190000616263"}, + {"name":"Quint envelope 030 decode","inputHex":"0228b52ffd2003190000616263","maxDecompressedBytes":2,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"616263"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2003190000616263"}, + {"name":"Quint envelope 031 decode","inputHex":"0128b52ffd2003190000616263","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"616263"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"abc"}, + {"name":"Quint envelope 032 decode","inputHex":"0228b52ffd2003190000616263","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"616263"},"outcome":"decompressed","payloadType":"binary","payloadHex":"616263"}, + {"name":"Quint envelope 033 decode","inputHex":"0128b52ffd2003190000616263","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"616263"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"abc"}, + {"name":"Quint envelope 034 decode","inputHex":"0228b52ffd2003190000616263","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"616263"},"outcome":"decompressed","payloadType":"binary","payloadHex":"616263"}, + {"name":"Quint envelope 035 decode","inputHex":"0128b52ffd2003190000616263","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"616263"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"abc"}, + {"name":"Quint envelope 036 decode","inputHex":"0228b52ffd2003190000616263","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"616263"},"outcome":"decompressed","payloadType":"binary","payloadHex":"616263"}, + {"name":"Quint envelope 037 decode","inputHex":"0128b52ffd2003190000616263","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"616263"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"abc"}, + {"name":"Quint envelope 038 decode","inputHex":"0228b52ffd2003190000616263","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"616263"},"outcome":"decompressed","payloadType":"binary","payloadHex":"616263"}, + {"name":"Quint envelope 039 decode","inputHex":"0128b52ffd2003190000000102","maxDecompressedBytes":2,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"000102"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2003190000000102"}, + {"name":"Quint envelope 040 decode","inputHex":"0228b52ffd2003190000000102","maxDecompressedBytes":2,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"000102"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2003190000000102"}, + {"name":"Quint envelope 041 decode","inputHex":"0128b52ffd2003190000000102","maxDecompressedBytes":2,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"000102"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2003190000000102"}, + {"name":"Quint envelope 042 decode","inputHex":"0228b52ffd2003190000000102","maxDecompressedBytes":2,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"000102"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2003190000000102"}, + {"name":"Quint envelope 043 decode","inputHex":"0128b52ffd2003190000000102","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"000102"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"\u0000\u0001\u0002"}, + {"name":"Quint envelope 044 decode","inputHex":"0228b52ffd2003190000000102","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"000102"},"outcome":"decompressed","payloadType":"binary","payloadHex":"000102"}, + {"name":"Quint envelope 045 decode","inputHex":"0128b52ffd2003190000000102","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"000102"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"\u0000\u0001\u0002"}, + {"name":"Quint envelope 046 decode","inputHex":"0228b52ffd2003190000000102","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"000102"},"outcome":"decompressed","payloadType":"binary","payloadHex":"000102"}, + {"name":"Quint envelope 047 decode","inputHex":"0128b52ffd2003190000000102","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"000102"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"\u0000\u0001\u0002"}, + {"name":"Quint envelope 048 decode","inputHex":"0228b52ffd2003190000000102","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"000102"},"outcome":"decompressed","payloadType":"binary","payloadHex":"000102"}, + {"name":"Quint envelope 049 decode","inputHex":"0128b52ffd2003190000000102","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"000102"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"\u0000\u0001\u0002"}, + {"name":"Quint envelope 050 decode","inputHex":"0228b52ffd2003190000000102","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"000102"},"outcome":"decompressed","payloadType":"binary","payloadHex":"000102"}, + {"name":"Quint envelope 051 decode","inputHex":"0128b52ffd2001090000ff","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"ff"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�"}, + {"name":"Quint envelope 052 decode","inputHex":"0228b52ffd2001090000ff","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"ff"},"outcome":"decompressed","payloadType":"binary","payloadHex":"ff"}, + {"name":"Quint envelope 053 decode","inputHex":"0128b52ffd2001090000ff","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"ff"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�"}, + {"name":"Quint envelope 054 decode","inputHex":"0228b52ffd2001090000ff","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"ff"},"outcome":"decompressed","payloadType":"binary","payloadHex":"ff"}, + {"name":"Quint envelope 055 decode","inputHex":"0128b52ffd2001090000ff","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"ff"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�"}, + {"name":"Quint envelope 056 decode","inputHex":"0228b52ffd2001090000ff","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"ff"},"outcome":"decompressed","payloadType":"binary","payloadHex":"ff"}, + {"name":"Quint envelope 057 decode","inputHex":"0128b52ffd2001090000ff","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"ff"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�"}, + {"name":"Quint envelope 058 decode","inputHex":"0228b52ffd2001090000ff","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"ff"},"outcome":"decompressed","payloadType":"binary","payloadHex":"ff"}, + {"name":"Quint envelope 059 decode","inputHex":"0128b52ffd2001090000ff","maxDecompressedBytes":2,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"ff"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�"}, + {"name":"Quint envelope 060 decode","inputHex":"0228b52ffd2001090000ff","maxDecompressedBytes":2,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"ff"},"outcome":"decompressed","payloadType":"binary","payloadHex":"ff"}, + {"name":"Quint envelope 061 decode","inputHex":"0128b52ffd2001090000ff","maxDecompressedBytes":2,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"ff"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�"}, + {"name":"Quint envelope 062 decode","inputHex":"0228b52ffd2001090000ff","maxDecompressedBytes":2,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"ff"},"outcome":"decompressed","payloadType":"binary","payloadHex":"ff"}, + {"name":"Quint envelope 063 decode","inputHex":"0128b52ffd2002110000e282","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"e282"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2002110000e282"}, + {"name":"Quint envelope 064 decode","inputHex":"0228b52ffd2002110000e282","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"e282"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2002110000e282"}, + {"name":"Quint envelope 065 decode","inputHex":"0128b52ffd2002110000e282","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"e282"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2002110000e282"}, + {"name":"Quint envelope 066 decode","inputHex":"0228b52ffd2002110000e282","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"e282"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2002110000e282"}, + {"name":"Quint envelope 067 decode","inputHex":"0128b52ffd2002110000e282","maxDecompressedBytes":2,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"e282"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�"}, + {"name":"Quint envelope 068 decode","inputHex":"0228b52ffd2002110000e282","maxDecompressedBytes":2,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"e282"},"outcome":"decompressed","payloadType":"binary","payloadHex":"e282"}, + {"name":"Quint envelope 069 decode","inputHex":"0128b52ffd2002110000e282","maxDecompressedBytes":2,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"e282"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�"}, + {"name":"Quint envelope 070 decode","inputHex":"0228b52ffd2002110000e282","maxDecompressedBytes":2,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"e282"},"outcome":"decompressed","payloadType":"binary","payloadHex":"e282"}, + {"name":"Quint envelope 071 decode","inputHex":"0128b52ffd2002110000e282","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"e282"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�"}, + {"name":"Quint envelope 072 decode","inputHex":"0228b52ffd2002110000e282","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"e282"},"outcome":"decompressed","payloadType":"binary","payloadHex":"e282"}, + {"name":"Quint envelope 073 decode","inputHex":"0128b52ffd2002110000e282","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"e282"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�"}, + {"name":"Quint envelope 074 decode","inputHex":"0228b52ffd2002110000e282","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"e282"},"outcome":"decompressed","payloadType":"binary","payloadHex":"e282"}, + {"name":"Quint envelope 075 decode","inputHex":"0128b52ffd2003190000e28241","maxDecompressedBytes":2,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"e28241"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2003190000e28241"}, + {"name":"Quint envelope 076 decode","inputHex":"0228b52ffd2003190000e28241","maxDecompressedBytes":2,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"e28241"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2003190000e28241"}, + {"name":"Quint envelope 077 decode","inputHex":"0128b52ffd2003190000e28241","maxDecompressedBytes":2,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"e28241"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2003190000e28241"}, + {"name":"Quint envelope 078 decode","inputHex":"0228b52ffd2003190000e28241","maxDecompressedBytes":2,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"e28241"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2003190000e28241"}, + {"name":"Quint envelope 079 decode","inputHex":"0128b52ffd2003190000e28241","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"e28241"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�A"}, + {"name":"Quint envelope 080 decode","inputHex":"0228b52ffd2003190000e28241","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"e28241"},"outcome":"decompressed","payloadType":"binary","payloadHex":"e28241"}, + {"name":"Quint envelope 081 decode","inputHex":"0128b52ffd2003190000e28241","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"e28241"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�A"}, + {"name":"Quint envelope 082 decode","inputHex":"0228b52ffd2003190000e28241","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"e28241"},"outcome":"decompressed","payloadType":"binary","payloadHex":"e28241"}, + {"name":"Quint envelope 083 decode","inputHex":"0128b52ffd2003190000e28241","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"e28241"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�A"}, + {"name":"Quint envelope 084 decode","inputHex":"0228b52ffd2003190000e28241","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"e28241"},"outcome":"decompressed","payloadType":"binary","payloadHex":"e28241"}, + {"name":"Quint envelope 085 decode","inputHex":"0128b52ffd2003190000e28241","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"e28241"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"�A"}, + {"name":"Quint envelope 086 decode","inputHex":"0228b52ffd2003190000e28241","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"e28241"},"outcome":"decompressed","payloadType":"binary","payloadHex":"e28241"}, + {"name":"Quint envelope 087 decode","inputHex":"0128b52ffd2003190000eda080","maxDecompressedBytes":2,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"eda080"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2003190000eda080"}, + {"name":"Quint envelope 088 decode","inputHex":"0228b52ffd2003190000eda080","maxDecompressedBytes":2,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"eda080"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2003190000eda080"}, + {"name":"Quint envelope 089 decode","inputHex":"0128b52ffd2003190000eda080","maxDecompressedBytes":2,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"eda080"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2003190000eda080"}, + {"name":"Quint envelope 090 decode","inputHex":"0228b52ffd2003190000eda080","maxDecompressedBytes":2,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"eda080"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2003190000eda080"}, + {"name":"Quint envelope 091 decode","inputHex":"0128b52ffd2003190000eda080","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"eda080"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"���"}, + {"name":"Quint envelope 092 decode","inputHex":"0228b52ffd2003190000eda080","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"eda080"},"outcome":"decompressed","payloadType":"binary","payloadHex":"eda080"}, + {"name":"Quint envelope 093 decode","inputHex":"0128b52ffd2003190000eda080","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"eda080"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"���"}, + {"name":"Quint envelope 094 decode","inputHex":"0228b52ffd2003190000eda080","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"eda080"},"outcome":"decompressed","payloadType":"binary","payloadHex":"eda080"}, + {"name":"Quint envelope 095 decode","inputHex":"0128b52ffd2003190000eda080","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"eda080"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"���"}, + {"name":"Quint envelope 096 decode","inputHex":"0228b52ffd2003190000eda080","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"eda080"},"outcome":"decompressed","payloadType":"binary","payloadHex":"eda080"}, + {"name":"Quint envelope 097 decode","inputHex":"0128b52ffd2003190000eda080","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"eda080"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"���"}, + {"name":"Quint envelope 098 decode","inputHex":"0228b52ffd2003190000eda080","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"eda080"},"outcome":"decompressed","payloadType":"binary","payloadHex":"eda080"}, + {"name":"Quint envelope 099 decode","inputHex":"0128b52ffd2004210000efbbbf41","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"efbbbf41"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2004210000efbbbf41"}, + {"name":"Quint envelope 100 decode","inputHex":"0228b52ffd2004210000efbbbf41","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"efbbbf41"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2004210000efbbbf41"}, + {"name":"Quint envelope 101 decode","inputHex":"0128b52ffd2004210000efbbbf41","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"efbbbf41"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2004210000efbbbf41"}, + {"name":"Quint envelope 102 decode","inputHex":"0228b52ffd2004210000efbbbf41","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"efbbbf41"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2004210000efbbbf41"}, + {"name":"Quint envelope 103 decode","inputHex":"0128b52ffd2004210000efbbbf41","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"efbbbf41"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"A"}, + {"name":"Quint envelope 104 decode","inputHex":"0228b52ffd2004210000efbbbf41","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"efbbbf41"},"outcome":"decompressed","payloadType":"binary","payloadHex":"efbbbf41"}, + {"name":"Quint envelope 105 decode","inputHex":"0128b52ffd2004210000efbbbf41","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"efbbbf41"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"A"}, + {"name":"Quint envelope 106 decode","inputHex":"0228b52ffd2004210000efbbbf41","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"efbbbf41"},"outcome":"decompressed","payloadType":"binary","payloadHex":"efbbbf41"}, + {"name":"Quint envelope 107 decode","inputHex":"0128b52ffd2004210000efbbbf41","maxDecompressedBytes":5,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"efbbbf41"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"A"}, + {"name":"Quint envelope 108 decode","inputHex":"0228b52ffd2004210000efbbbf41","maxDecompressedBytes":5,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"efbbbf41"},"outcome":"decompressed","payloadType":"binary","payloadHex":"efbbbf41"}, + {"name":"Quint envelope 109 decode","inputHex":"0128b52ffd2004210000efbbbf41","maxDecompressedBytes":5,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"efbbbf41"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"A"}, + {"name":"Quint envelope 110 decode","inputHex":"0228b52ffd2004210000efbbbf41","maxDecompressedBytes":5,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"efbbbf41"},"outcome":"decompressed","payloadType":"binary","payloadHex":"efbbbf41"}, + {"name":"Quint envelope 111 decode","inputHex":"0128b52ffd2004210000f09f9880","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"f09f9880"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2004210000f09f9880"}, + {"name":"Quint envelope 112 decode","inputHex":"0228b52ffd2004210000f09f9880","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"f09f9880"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2004210000f09f9880"}, + {"name":"Quint envelope 113 decode","inputHex":"0128b52ffd2004210000f09f9880","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"f09f9880"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2004210000f09f9880"}, + {"name":"Quint envelope 114 decode","inputHex":"0228b52ffd2004210000f09f9880","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"f09f9880"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2004210000f09f9880"}, + {"name":"Quint envelope 115 decode","inputHex":"0128b52ffd2004210000f09f9880","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"f09f9880"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"😀"}, + {"name":"Quint envelope 116 decode","inputHex":"0228b52ffd2004210000f09f9880","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"f09f9880"},"outcome":"decompressed","payloadType":"binary","payloadHex":"f09f9880"}, + {"name":"Quint envelope 117 decode","inputHex":"0128b52ffd2004210000f09f9880","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"f09f9880"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"😀"}, + {"name":"Quint envelope 118 decode","inputHex":"0228b52ffd2004210000f09f9880","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"f09f9880"},"outcome":"decompressed","payloadType":"binary","payloadHex":"f09f9880"}, + {"name":"Quint envelope 119 decode","inputHex":"0128b52ffd2004210000f09f9880","maxDecompressedBytes":5,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"f09f9880"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"😀"}, + {"name":"Quint envelope 120 decode","inputHex":"0228b52ffd2004210000f09f9880","maxDecompressedBytes":5,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"f09f9880"},"outcome":"decompressed","payloadType":"binary","payloadHex":"f09f9880"}, + {"name":"Quint envelope 121 decode","inputHex":"0128b52ffd2004210000f09f9880","maxDecompressedBytes":5,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"f09f9880"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"😀"}, + {"name":"Quint envelope 122 decode","inputHex":"0228b52ffd2004210000f09f9880","maxDecompressedBytes":5,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"f09f9880"},"outcome":"decompressed","payloadType":"binary","payloadHex":"f09f9880"}, + {"name":"Quint envelope 123 decode","inputHex":"0128b52ffd2004210000f4908080","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"f4908080"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2004210000f4908080"}, + {"name":"Quint envelope 124 decode","inputHex":"0228b52ffd2004210000f4908080","maxDecompressedBytes":3,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"f4908080"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2004210000f4908080"}, + {"name":"Quint envelope 125 decode","inputHex":"0128b52ffd2004210000f4908080","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"f4908080"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0128b52ffd2004210000f4908080"}, + {"name":"Quint envelope 126 decode","inputHex":"0228b52ffd2004210000f4908080","maxDecompressedBytes":3,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"f4908080"},"outcome":"read_over_limit","payloadType":"binary","payloadHex":"0228b52ffd2004210000f4908080"}, + {"name":"Quint envelope 127 decode","inputHex":"0128b52ffd2004210000f4908080","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"f4908080"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"����"}, + {"name":"Quint envelope 128 decode","inputHex":"0228b52ffd2004210000f4908080","maxDecompressedBytes":4,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"f4908080"},"outcome":"decompressed","payloadType":"binary","payloadHex":"f4908080"}, + {"name":"Quint envelope 129 decode","inputHex":"0128b52ffd2004210000f4908080","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"f4908080"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"����"}, + {"name":"Quint envelope 130 decode","inputHex":"0228b52ffd2004210000f4908080","maxDecompressedBytes":4,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"f4908080"},"outcome":"decompressed","payloadType":"binary","payloadHex":"f4908080"}, + {"name":"Quint envelope 131 decode","inputHex":"0128b52ffd2004210000f4908080","maxDecompressedBytes":5,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"f4908080"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"����"}, + {"name":"Quint envelope 132 decode","inputHex":"0228b52ffd2004210000f4908080","maxDecompressedBytes":5,"newWritesEnabled":false,"codecFixture":{"succeeds":true,"decodedHex":"f4908080"},"outcome":"decompressed","payloadType":"binary","payloadHex":"f4908080"}, + {"name":"Quint envelope 133 decode","inputHex":"0128b52ffd2004210000f4908080","maxDecompressedBytes":5,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"f4908080"},"outcome":"decompressed","payloadType":"string","payloadUtf8":"����"}, + {"name":"Quint envelope 134 decode","inputHex":"0228b52ffd2004210000f4908080","maxDecompressedBytes":5,"newWritesEnabled":true,"codecFixture":{"succeeds":true,"decodedHex":"f4908080"},"outcome":"decompressed","payloadType":"binary","payloadHex":"f4908080"}, + {"name":"Quint envelope 135 decode","inputHex":"01ff","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"01ff"}, + {"name":"Quint envelope 136 decode","inputHex":"02ff","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"02ff"}, + {"name":"Quint envelope 137 decode","inputHex":"01ff","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"01ff"}, + {"name":"Quint envelope 138 decode","inputHex":"02ff","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"02ff"}, + {"name":"Quint envelope 139 decode","inputHex":"01ff","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"01ff"}, + {"name":"Quint envelope 140 decode","inputHex":"02ff","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"02ff"}, + {"name":"Quint envelope 141 decode","inputHex":"01ff","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"01ff"}, + {"name":"Quint envelope 142 decode","inputHex":"02ff","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"02ff"}, + {"name":"Quint envelope 143 decode","inputHex":"01ff","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"01ff"}, + {"name":"Quint envelope 144 decode","inputHex":"02ff","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"02ff"}, + {"name":"Quint envelope 145 decode","inputHex":"01ff","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"01ff"}, + {"name":"Quint envelope 146 decode","inputHex":"02ff","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"02ff"}, + {"name":"Quint envelope 147 decode","inputHex":"0128b5","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0128b5"}, + {"name":"Quint envelope 148 decode","inputHex":"0228b5","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0228b5"}, + {"name":"Quint envelope 149 decode","inputHex":"0128b5","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0128b5"}, + {"name":"Quint envelope 150 decode","inputHex":"0228b5","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0228b5"}, + {"name":"Quint envelope 151 decode","inputHex":"0128b5","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0128b5"}, + {"name":"Quint envelope 152 decode","inputHex":"0228b5","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0228b5"}, + {"name":"Quint envelope 153 decode","inputHex":"0128b5","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0128b5"}, + {"name":"Quint envelope 154 decode","inputHex":"0228b5","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0228b5"}, + {"name":"Quint envelope 155 decode","inputHex":"0128b5","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0128b5"}, + {"name":"Quint envelope 156 decode","inputHex":"0228b5","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0228b5"}, + {"name":"Quint envelope 157 decode","inputHex":"0128b5","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0128b5"}, + {"name":"Quint envelope 158 decode","inputHex":"0228b5","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0228b5"}, + {"name":"Quint envelope 159 decode","inputHex":"0128b52ffd","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0128b52ffd"}, + {"name":"Quint envelope 160 decode","inputHex":"0228b52ffd","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0228b52ffd"}, + {"name":"Quint envelope 161 decode","inputHex":"0128b52ffd","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0128b52ffd"}, + {"name":"Quint envelope 162 decode","inputHex":"0228b52ffd","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0228b52ffd"}, + {"name":"Quint envelope 163 decode","inputHex":"0128b52ffd","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0128b52ffd"}, + {"name":"Quint envelope 164 decode","inputHex":"0228b52ffd","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0228b52ffd"}, + {"name":"Quint envelope 165 decode","inputHex":"0128b52ffd","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0128b52ffd"}, + {"name":"Quint envelope 166 decode","inputHex":"0228b52ffd","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0228b52ffd"}, + {"name":"Quint envelope 167 decode","inputHex":"0128b52ffd","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0128b52ffd"}, + {"name":"Quint envelope 168 decode","inputHex":"0228b52ffd","maxDecompressedBytes":1,"newWritesEnabled":false,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0228b52ffd"}, + {"name":"Quint envelope 169 decode","inputHex":"0128b52ffd","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0128b52ffd"}, + {"name":"Quint envelope 170 decode","inputHex":"0228b52ffd","maxDecompressedBytes":1,"newWritesEnabled":true,"codecFixture":{"succeeds":false,"decodedHex":""},"outcome":"fallback_raw","payloadType":"binary","payloadHex":"0228b52ffd"} ], "compressionWriteVectors": [ - { - "name": "Quint envelope 171 write short", - "payloadType": "string", - "payloadUtf8": "x", - "thresholdBytes": 1, - "maxDecompressedBytes": 0, - "originalBytes": 1, - "rawStoredBytes": 1, - "escapedHex": "78", - "codecBytes": { - "typescript": 10, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 1, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 1, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 172 write short", - "payloadType": "string", - "payloadUtf8": "x", - "thresholdBytes": 1, - "maxDecompressedBytes": 0, - "originalBytes": 1, - "rawStoredBytes": 1, - "escapedHex": "78", - "codecBytes": { - "typescript": 10, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 1, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 1, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 173 write short", - "payloadType": "string", - "payloadUtf8": "x", - "thresholdBytes": 2, - "maxDecompressedBytes": 0, - "originalBytes": 1, - "rawStoredBytes": 1, - "escapedHex": "78", - "codecBytes": { - "typescript": 10, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 1, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 1, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 174 write short", - "payloadType": "string", - "payloadUtf8": "x", - "thresholdBytes": 1, - "maxDecompressedBytes": 1, - "originalBytes": 1, - "rawStoredBytes": 1, - "escapedHex": "78", - "codecBytes": { - "typescript": 10, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 1, - "marker": -1 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 1, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 175 write short", - "payloadType": "string", - "payloadUtf8": "x", - "thresholdBytes": 1, - "maxDecompressedBytes": 1, - "originalBytes": 1, - "rawStoredBytes": 1, - "escapedHex": "78", - "codecBytes": { - "typescript": 10, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 1, - "marker": -1 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 1, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 176 write short", - "payloadType": "string", - "payloadUtf8": "x", - "thresholdBytes": 2, - "maxDecompressedBytes": 1, - "originalBytes": 1, - "rawStoredBytes": 1, - "escapedHex": "78", - "codecBytes": { - "typescript": 10, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 1, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 1, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 177 write short", - "payloadType": "string", - "payloadUtf8": "x", - "thresholdBytes": 1, - "maxDecompressedBytes": 2, - "originalBytes": 1, - "rawStoredBytes": 1, - "escapedHex": "78", - "codecBytes": { - "typescript": 10, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 1, - "marker": -1 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 1, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 178 write short", - "payloadType": "string", - "payloadUtf8": "x", - "thresholdBytes": 1, - "maxDecompressedBytes": 2, - "originalBytes": 1, - "rawStoredBytes": 1, - "escapedHex": "78", - "codecBytes": { - "typescript": 10, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 1, - "marker": -1 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 1, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 179 write short", - "payloadType": "string", - "payloadUtf8": "x", - "thresholdBytes": 2, - "maxDecompressedBytes": 2, - "originalBytes": 1, - "rawStoredBytes": 1, - "escapedHex": "78", - "codecBytes": { - "typescript": 10, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 1, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 1, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 180 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaa", - "thresholdBytes": 16, - "maxDecompressedBytes": 16, - "originalBytes": 17, - "rawStoredBytes": 17, - "escapedHex": "6161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 17, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 17, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 181 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaa", - "thresholdBytes": 17, - "maxDecompressedBytes": 16, - "originalBytes": 17, - "rawStoredBytes": 17, - "escapedHex": "6161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 17, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 17, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 182 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaa", - "thresholdBytes": 18, - "maxDecompressedBytes": 16, - "originalBytes": 17, - "rawStoredBytes": 17, - "escapedHex": "6161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 17, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 17, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 183 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaa", - "thresholdBytes": 16, - "maxDecompressedBytes": 17, - "originalBytes": 17, - "rawStoredBytes": 17, - "escapedHex": "6161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 17, - "marker": -1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 11, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 184 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaa", - "thresholdBytes": 17, - "maxDecompressedBytes": 17, - "originalBytes": 17, - "rawStoredBytes": 17, - "escapedHex": "6161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 17, - "marker": -1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 11, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 185 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaa", - "thresholdBytes": 18, - "maxDecompressedBytes": 17, - "originalBytes": 17, - "rawStoredBytes": 17, - "escapedHex": "6161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 17, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 17, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 186 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaa", - "thresholdBytes": 16, - "maxDecompressedBytes": 18, - "originalBytes": 17, - "rawStoredBytes": 17, - "escapedHex": "6161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 17, - "marker": -1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 11, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 187 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaa", - "thresholdBytes": 17, - "maxDecompressedBytes": 18, - "originalBytes": 17, - "rawStoredBytes": 17, - "escapedHex": "6161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 17, - "marker": -1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 11, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 188 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaa", - "thresholdBytes": 18, - "maxDecompressedBytes": 18, - "originalBytes": 17, - "rawStoredBytes": 17, - "escapedHex": "6161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 17, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 17, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 189 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaa", - "thresholdBytes": 17, - "maxDecompressedBytes": 17, - "originalBytes": 18, - "rawStoredBytes": 18, - "escapedHex": "616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 190 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaa", - "thresholdBytes": 18, - "maxDecompressedBytes": 17, - "originalBytes": 18, - "rawStoredBytes": 18, - "escapedHex": "616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 191 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaa", - "thresholdBytes": 19, - "maxDecompressedBytes": 17, - "originalBytes": 18, - "rawStoredBytes": 18, - "escapedHex": "616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 192 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaa", - "thresholdBytes": 17, - "maxDecompressedBytes": 18, - "originalBytes": 18, - "rawStoredBytes": 18, - "escapedHex": "616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 11, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 193 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaa", - "thresholdBytes": 18, - "maxDecompressedBytes": 18, - "originalBytes": 18, - "rawStoredBytes": 18, - "escapedHex": "616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 11, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 194 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaa", - "thresholdBytes": 19, - "maxDecompressedBytes": 18, - "originalBytes": 18, - "rawStoredBytes": 18, - "escapedHex": "616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 195 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaa", - "thresholdBytes": 17, - "maxDecompressedBytes": 19, - "originalBytes": 18, - "rawStoredBytes": 18, - "escapedHex": "616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 11, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 196 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaa", - "thresholdBytes": 18, - "maxDecompressedBytes": 19, - "originalBytes": 18, - "rawStoredBytes": 18, - "escapedHex": "616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 11, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 197 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaa", - "thresholdBytes": 19, - "maxDecompressedBytes": 19, - "originalBytes": 18, - "rawStoredBytes": 18, - "escapedHex": "616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 198 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaaa", - "thresholdBytes": 18, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "61616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 199 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaaa", - "thresholdBytes": 19, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "61616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 200 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaaa", - "thresholdBytes": 20, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "61616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 201 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaaa", - "thresholdBytes": 18, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "61616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 11, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 202 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaaa", - "thresholdBytes": 19, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "61616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 11, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 203 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaaa", - "thresholdBytes": 20, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "61616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 204 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaaa", - "thresholdBytes": 18, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "61616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 11, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 205 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaaa", - "thresholdBytes": 19, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "61616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 11, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 206 write text-size-boundary", - "payloadType": "string", - "payloadUtf8": "aaaaaaaaaaaaaaaaaaa", - "thresholdBytes": 20, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "61616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 10 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 207 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161", - "thresholdBytes": 16, - "maxDecompressedBytes": 16, - "originalBytes": 17, - "rawStoredBytes": 18, - "escapedHex": "000161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 26 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 208 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161", - "thresholdBytes": 17, - "maxDecompressedBytes": 16, - "originalBytes": 17, - "rawStoredBytes": 18, - "escapedHex": "000161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 26 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 209 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 16, - "originalBytes": 17, - "rawStoredBytes": 18, - "escapedHex": "000161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 26 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 210 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161", - "thresholdBytes": 16, - "maxDecompressedBytes": 17, - "originalBytes": 17, - "rawStoredBytes": 18, - "escapedHex": "000161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 26 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 211 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161", - "thresholdBytes": 17, - "maxDecompressedBytes": 17, - "originalBytes": 17, - "rawStoredBytes": 18, - "escapedHex": "000161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 26 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 212 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 17, - "originalBytes": 17, - "rawStoredBytes": 18, - "escapedHex": "000161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 26 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 213 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161", - "thresholdBytes": 16, - "maxDecompressedBytes": 18, - "originalBytes": 17, - "rawStoredBytes": 18, - "escapedHex": "000161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 26 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 214 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161", - "thresholdBytes": 17, - "maxDecompressedBytes": 18, - "originalBytes": 17, - "rawStoredBytes": 18, - "escapedHex": "000161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 26 - }, - "expectedByBinding": { - "typescript": { - "outcome": "not_smaller", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 215 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 18, - "originalBytes": 17, - "rawStoredBytes": 18, - "escapedHex": "000161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 26 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 18, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 18, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 216 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "016161616161616161616161616161616161", - "thresholdBytes": 17, - "maxDecompressedBytes": 17, - "originalBytes": 18, - "rawStoredBytes": 19, - "escapedHex": "00016161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 217 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "016161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 17, - "originalBytes": 18, - "rawStoredBytes": 19, - "escapedHex": "00016161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 218 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "016161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 17, - "originalBytes": 18, - "rawStoredBytes": 19, - "escapedHex": "00016161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 219 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "016161616161616161616161616161616161", - "thresholdBytes": 17, - "maxDecompressedBytes": 18, - "originalBytes": 18, - "rawStoredBytes": 19, - "escapedHex": "00016161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 220 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "016161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 18, - "originalBytes": 18, - "rawStoredBytes": 19, - "escapedHex": "00016161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 221 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "016161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 18, - "originalBytes": 18, - "rawStoredBytes": 19, - "escapedHex": "00016161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 222 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "016161616161616161616161616161616161", - "thresholdBytes": 17, - "maxDecompressedBytes": 19, - "originalBytes": 18, - "rawStoredBytes": 19, - "escapedHex": "00016161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 223 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "016161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 19, - "originalBytes": 18, - "rawStoredBytes": 19, - "escapedHex": "00016161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 224 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "016161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 19, - "originalBytes": 18, - "rawStoredBytes": 19, - "escapedHex": "00016161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 225 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "01616161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0001616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 226 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "01616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0001616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 227 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "01616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0001616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 228 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "01616161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0001616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 229 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "01616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0001616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 230 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "01616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0001616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 231 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "01616161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0001616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 232 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "01616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0001616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 233 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "01616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0001616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 234 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 19, - "originalBytes": 20, - "rawStoredBytes": 21, - "escapedHex": "000161616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 21, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 21, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 235 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 19, - "originalBytes": 20, - "rawStoredBytes": 21, - "escapedHex": "000161616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 21, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 21, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 236 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161616161", - "thresholdBytes": 21, - "maxDecompressedBytes": 19, - "originalBytes": 20, - "rawStoredBytes": 21, - "escapedHex": "000161616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 21, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 21, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 237 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 20, - "originalBytes": 20, - "rawStoredBytes": 21, - "escapedHex": "000161616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 238 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 20, - "originalBytes": 20, - "rawStoredBytes": 21, - "escapedHex": "000161616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 239 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161616161", - "thresholdBytes": 21, - "maxDecompressedBytes": 20, - "originalBytes": 20, - "rawStoredBytes": 21, - "escapedHex": "000161616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 21, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 21, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 240 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 21, - "originalBytes": 20, - "rawStoredBytes": 21, - "escapedHex": "000161616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 241 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 21, - "originalBytes": 20, - "rawStoredBytes": 21, - "escapedHex": "000161616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 242 write escaped-size-boundary", - "payloadType": "binary", - "payloadHex": "0161616161616161616161616161616161616161", - "thresholdBytes": 21, - "maxDecompressedBytes": 21, - "originalBytes": 20, - "rawStoredBytes": 21, - "escapedHex": "000161616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 21, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 21, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 243 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "00616161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0000616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 244 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "00616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0000616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 245 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "00616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0000616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 246 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "00616161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0000616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 247 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "00616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0000616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 248 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "00616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0000616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 249 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "00616161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0000616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 250 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "00616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0000616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 251 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "00616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0000616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 252 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "02616161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0002616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 253 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "02616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0002616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 254 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "02616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0002616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 255 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "02616161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0002616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 256 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "02616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0002616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 257 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "02616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0002616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 258 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "02616161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0002616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 259 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "02616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0002616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 2 - } - } - }, - { - "name": "Quint envelope 260 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "02616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 20, - "escapedHex": "0002616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 20, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 261 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "03616161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "03616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 262 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "03616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "03616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 263 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "03616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 18, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "03616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 264 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "03616161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "03616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 265 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "03616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "03616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 266 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "03616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 19, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "03616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 267 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "03616161616161616161616161616161616161", - "thresholdBytes": 18, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "03616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 268 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "03616161616161616161616161616161616161", - "thresholdBytes": 19, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "03616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 2 - }, - "go": { - "outcome": "not_smaller", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 269 write binary-marker-class", - "payloadType": "binary", - "payloadHex": "03616161616161616161616161616161616161", - "thresholdBytes": 20, - "maxDecompressedBytes": 20, - "originalBytes": 19, - "rawStoredBytes": 19, - "escapedHex": "03616161616161616161616161616161616161", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 19, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 270 write utf8-byte-threshold", - "payloadType": "string", - "payloadUtf8": "éééééééééééééééééééééééééééééééé", - "thresholdBytes": 63, - "maxDecompressedBytes": 63, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 64, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 64, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 271 write utf8-byte-threshold", - "payloadType": "string", - "payloadUtf8": "éééééééééééééééééééééééééééééééé", - "thresholdBytes": 64, - "maxDecompressedBytes": 63, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 64, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 64, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 272 write utf8-byte-threshold", - "payloadType": "string", - "payloadUtf8": "éééééééééééééééééééééééééééééééé", - "thresholdBytes": 65, - "maxDecompressedBytes": 63, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 64, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 64, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 273 write utf8-byte-threshold", - "payloadType": "string", - "payloadUtf8": "éééééééééééééééééééééééééééééééé", - "thresholdBytes": 63, - "maxDecompressedBytes": 64, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 274 write utf8-byte-threshold", - "payloadType": "string", - "payloadUtf8": "éééééééééééééééééééééééééééééééé", - "thresholdBytes": 64, - "maxDecompressedBytes": 64, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 275 write utf8-byte-threshold", - "payloadType": "string", - "payloadUtf8": "éééééééééééééééééééééééééééééééé", - "thresholdBytes": 65, - "maxDecompressedBytes": 64, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 64, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 64, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 276 write utf8-byte-threshold", - "payloadType": "string", - "payloadUtf8": "éééééééééééééééééééééééééééééééé", - "thresholdBytes": 63, - "maxDecompressedBytes": 65, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 277 write utf8-byte-threshold", - "payloadType": "string", - "payloadUtf8": "éééééééééééééééééééééééééééééééé", - "thresholdBytes": 64, - "maxDecompressedBytes": 65, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 18, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 19, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 278 write utf8-byte-threshold", - "payloadType": "string", - "payloadUtf8": "éééééééééééééééééééééééééééééééé", - "thresholdBytes": 65, - "maxDecompressedBytes": 65, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9", - "codecBytes": { - "typescript": 17, - "go": 18 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 64, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 64, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 279 write supplementary-byte-threshold", - "payloadType": "string", - "payloadUtf8": "😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀", - "thresholdBytes": 63, - "maxDecompressedBytes": 63, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880", - "codecBytes": { - "typescript": 19, - "go": 20 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 64, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 64, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 280 write supplementary-byte-threshold", - "payloadType": "string", - "payloadUtf8": "😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀", - "thresholdBytes": 64, - "maxDecompressedBytes": 63, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880", - "codecBytes": { - "typescript": 19, - "go": 20 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 64, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 64, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 281 write supplementary-byte-threshold", - "payloadType": "string", - "payloadUtf8": "😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀", - "thresholdBytes": 65, - "maxDecompressedBytes": 63, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880", - "codecBytes": { - "typescript": 19, - "go": 20 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 64, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 64, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 282 write supplementary-byte-threshold", - "payloadType": "string", - "payloadUtf8": "😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀", - "thresholdBytes": 63, - "maxDecompressedBytes": 64, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880", - "codecBytes": { - "typescript": 19, - "go": 20 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 20, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 21, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 283 write supplementary-byte-threshold", - "payloadType": "string", - "payloadUtf8": "😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀", - "thresholdBytes": 64, - "maxDecompressedBytes": 64, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880", - "codecBytes": { - "typescript": 19, - "go": 20 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 20, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 21, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 284 write supplementary-byte-threshold", - "payloadType": "string", - "payloadUtf8": "😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀", - "thresholdBytes": 65, - "maxDecompressedBytes": 64, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880", - "codecBytes": { - "typescript": 19, - "go": 20 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 64, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 64, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 285 write supplementary-byte-threshold", - "payloadType": "string", - "payloadUtf8": "😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀", - "thresholdBytes": 63, - "maxDecompressedBytes": 65, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880", - "codecBytes": { - "typescript": 19, - "go": 20 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 20, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 21, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 286 write supplementary-byte-threshold", - "payloadType": "string", - "payloadUtf8": "😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀", - "thresholdBytes": 64, - "maxDecompressedBytes": 65, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880", - "codecBytes": { - "typescript": 19, - "go": 20 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 20, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 21, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 287 write supplementary-byte-threshold", - "payloadType": "string", - "payloadUtf8": "😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀", - "thresholdBytes": 65, - "maxDecompressedBytes": 65, - "originalBytes": 64, - "rawStoredBytes": 64, - "escapedHex": "f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880", - "codecBytes": { - "typescript": 19, - "go": 20 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 64, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 64, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 288 write compressible", - "payloadType": "string", - "payloadUtf8": "dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ", - "thresholdBytes": 159, - "maxDecompressedBytes": 159, - "originalBytes": 160, - "rawStoredBytes": 160, - "escapedHex": "6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520", - "codecBytes": { - "typescript": 26, - "go": 27 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 160, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 160, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 289 write compressible", - "payloadType": "string", - "payloadUtf8": "dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ", - "thresholdBytes": 160, - "maxDecompressedBytes": 159, - "originalBytes": 160, - "rawStoredBytes": 160, - "escapedHex": "6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520", - "codecBytes": { - "typescript": 26, - "go": 27 - }, - "expectedByBinding": { - "typescript": { - "outcome": "write_over_limit", - "storedBytes": 160, - "marker": -1 - }, - "go": { - "outcome": "write_over_limit", - "storedBytes": 160, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 290 write compressible", - "payloadType": "string", - "payloadUtf8": "dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ", - "thresholdBytes": 161, - "maxDecompressedBytes": 159, - "originalBytes": 160, - "rawStoredBytes": 160, - "escapedHex": "6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520", - "codecBytes": { - "typescript": 26, - "go": 27 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 160, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 160, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 291 write compressible", - "payloadType": "string", - "payloadUtf8": "dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ", - "thresholdBytes": 159, - "maxDecompressedBytes": 160, - "originalBytes": 160, - "rawStoredBytes": 160, - "escapedHex": "6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520", - "codecBytes": { - "typescript": 26, - "go": 27 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 27, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 28, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 292 write compressible", - "payloadType": "string", - "payloadUtf8": "dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ", - "thresholdBytes": 160, - "maxDecompressedBytes": 160, - "originalBytes": 160, - "rawStoredBytes": 160, - "escapedHex": "6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520", - "codecBytes": { - "typescript": 26, - "go": 27 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 27, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 28, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 293 write compressible", - "payloadType": "string", - "payloadUtf8": "dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ", - "thresholdBytes": 161, - "maxDecompressedBytes": 160, - "originalBytes": 160, - "rawStoredBytes": 160, - "escapedHex": "6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520", - "codecBytes": { - "typescript": 26, - "go": 27 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 160, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 160, - "marker": -1 - } - } - }, - { - "name": "Quint envelope 294 write compressible", - "payloadType": "string", - "payloadUtf8": "dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ", - "thresholdBytes": 159, - "maxDecompressedBytes": 161, - "originalBytes": 160, - "rawStoredBytes": 160, - "escapedHex": "6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520", - "codecBytes": { - "typescript": 26, - "go": 27 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 27, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 28, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 295 write compressible", - "payloadType": "string", - "payloadUtf8": "dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ", - "thresholdBytes": 160, - "maxDecompressedBytes": 161, - "originalBytes": 160, - "rawStoredBytes": 160, - "escapedHex": "6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520", - "codecBytes": { - "typescript": 26, - "go": 27 - }, - "expectedByBinding": { - "typescript": { - "outcome": "compressed", - "storedBytes": 27, - "marker": 1 - }, - "go": { - "outcome": "compressed", - "storedBytes": 28, - "marker": 1 - } - } - }, - { - "name": "Quint envelope 296 write compressible", - "payloadType": "string", - "payloadUtf8": "dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ", - "thresholdBytes": 161, - "maxDecompressedBytes": 161, - "originalBytes": 160, - "rawStoredBytes": 160, - "escapedHex": "6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520", - "codecBytes": { - "typescript": 26, - "go": 27 - }, - "expectedByBinding": { - "typescript": { - "outcome": "below_threshold", - "storedBytes": 160, - "marker": -1 - }, - "go": { - "outcome": "below_threshold", - "storedBytes": 160, - "marker": -1 - } - } - } + {"name":"Quint envelope 171 write short","payloadType":"string","payloadUtf8":"x","thresholdBytes":1,"maxDecompressedBytes":0,"originalBytes":1,"rawStoredBytes":1,"escapedHex":"78","codecBytes":{"typescript":10,"go":10},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":1,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":1,"marker":-1}}}, + {"name":"Quint envelope 172 write short","payloadType":"string","payloadUtf8":"x","thresholdBytes":1,"maxDecompressedBytes":0,"originalBytes":1,"rawStoredBytes":1,"escapedHex":"78","codecBytes":{"typescript":10,"go":10},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":1,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":1,"marker":-1}}}, + {"name":"Quint envelope 173 write short","payloadType":"string","payloadUtf8":"x","thresholdBytes":2,"maxDecompressedBytes":0,"originalBytes":1,"rawStoredBytes":1,"escapedHex":"78","codecBytes":{"typescript":10,"go":10},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":1,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":1,"marker":-1}}}, + {"name":"Quint envelope 174 write short","payloadType":"string","payloadUtf8":"x","thresholdBytes":1,"maxDecompressedBytes":1,"originalBytes":1,"rawStoredBytes":1,"escapedHex":"78","codecBytes":{"typescript":10,"go":10},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":1,"marker":-1},"go":{"outcome":"not_smaller","storedBytes":1,"marker":-1}}}, + {"name":"Quint envelope 175 write short","payloadType":"string","payloadUtf8":"x","thresholdBytes":1,"maxDecompressedBytes":1,"originalBytes":1,"rawStoredBytes":1,"escapedHex":"78","codecBytes":{"typescript":10,"go":10},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":1,"marker":-1},"go":{"outcome":"not_smaller","storedBytes":1,"marker":-1}}}, + {"name":"Quint envelope 176 write short","payloadType":"string","payloadUtf8":"x","thresholdBytes":2,"maxDecompressedBytes":1,"originalBytes":1,"rawStoredBytes":1,"escapedHex":"78","codecBytes":{"typescript":10,"go":10},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":1,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":1,"marker":-1}}}, + {"name":"Quint envelope 177 write short","payloadType":"string","payloadUtf8":"x","thresholdBytes":1,"maxDecompressedBytes":2,"originalBytes":1,"rawStoredBytes":1,"escapedHex":"78","codecBytes":{"typescript":10,"go":10},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":1,"marker":-1},"go":{"outcome":"not_smaller","storedBytes":1,"marker":-1}}}, + {"name":"Quint envelope 178 write short","payloadType":"string","payloadUtf8":"x","thresholdBytes":1,"maxDecompressedBytes":2,"originalBytes":1,"rawStoredBytes":1,"escapedHex":"78","codecBytes":{"typescript":10,"go":10},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":1,"marker":-1},"go":{"outcome":"not_smaller","storedBytes":1,"marker":-1}}}, + {"name":"Quint envelope 179 write short","payloadType":"string","payloadUtf8":"x","thresholdBytes":2,"maxDecompressedBytes":2,"originalBytes":1,"rawStoredBytes":1,"escapedHex":"78","codecBytes":{"typescript":10,"go":10},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":1,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":1,"marker":-1}}}, + {"name":"Quint envelope 180 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaa","thresholdBytes":16,"maxDecompressedBytes":16,"originalBytes":17,"rawStoredBytes":17,"escapedHex":"6161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":17,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":17,"marker":-1}}}, + {"name":"Quint envelope 181 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaa","thresholdBytes":17,"maxDecompressedBytes":16,"originalBytes":17,"rawStoredBytes":17,"escapedHex":"6161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":17,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":17,"marker":-1}}}, + {"name":"Quint envelope 182 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaa","thresholdBytes":18,"maxDecompressedBytes":16,"originalBytes":17,"rawStoredBytes":17,"escapedHex":"6161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":17,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":17,"marker":-1}}}, + {"name":"Quint envelope 183 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaa","thresholdBytes":16,"maxDecompressedBytes":17,"originalBytes":17,"rawStoredBytes":17,"escapedHex":"6161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":17,"marker":-1},"go":{"outcome":"compressed","storedBytes":11,"marker":1}}}, + {"name":"Quint envelope 184 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaa","thresholdBytes":17,"maxDecompressedBytes":17,"originalBytes":17,"rawStoredBytes":17,"escapedHex":"6161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":17,"marker":-1},"go":{"outcome":"compressed","storedBytes":11,"marker":1}}}, + {"name":"Quint envelope 185 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaa","thresholdBytes":18,"maxDecompressedBytes":17,"originalBytes":17,"rawStoredBytes":17,"escapedHex":"6161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":17,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":17,"marker":-1}}}, + {"name":"Quint envelope 186 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaa","thresholdBytes":16,"maxDecompressedBytes":18,"originalBytes":17,"rawStoredBytes":17,"escapedHex":"6161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":17,"marker":-1},"go":{"outcome":"compressed","storedBytes":11,"marker":1}}}, + {"name":"Quint envelope 187 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaa","thresholdBytes":17,"maxDecompressedBytes":18,"originalBytes":17,"rawStoredBytes":17,"escapedHex":"6161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":17,"marker":-1},"go":{"outcome":"compressed","storedBytes":11,"marker":1}}}, + {"name":"Quint envelope 188 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaa","thresholdBytes":18,"maxDecompressedBytes":18,"originalBytes":17,"rawStoredBytes":17,"escapedHex":"6161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":17,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":17,"marker":-1}}}, + {"name":"Quint envelope 189 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaa","thresholdBytes":17,"maxDecompressedBytes":17,"originalBytes":18,"rawStoredBytes":18,"escapedHex":"616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":18,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 190 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaa","thresholdBytes":18,"maxDecompressedBytes":17,"originalBytes":18,"rawStoredBytes":18,"escapedHex":"616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":18,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 191 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaa","thresholdBytes":19,"maxDecompressedBytes":17,"originalBytes":18,"rawStoredBytes":18,"escapedHex":"616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":18,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 192 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaa","thresholdBytes":17,"maxDecompressedBytes":18,"originalBytes":18,"rawStoredBytes":18,"escapedHex":"616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":18,"marker":-1},"go":{"outcome":"compressed","storedBytes":11,"marker":1}}}, + {"name":"Quint envelope 193 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaa","thresholdBytes":18,"maxDecompressedBytes":18,"originalBytes":18,"rawStoredBytes":18,"escapedHex":"616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":18,"marker":-1},"go":{"outcome":"compressed","storedBytes":11,"marker":1}}}, + {"name":"Quint envelope 194 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaa","thresholdBytes":19,"maxDecompressedBytes":18,"originalBytes":18,"rawStoredBytes":18,"escapedHex":"616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":18,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 195 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaa","thresholdBytes":17,"maxDecompressedBytes":19,"originalBytes":18,"rawStoredBytes":18,"escapedHex":"616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":18,"marker":-1},"go":{"outcome":"compressed","storedBytes":11,"marker":1}}}, + {"name":"Quint envelope 196 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaa","thresholdBytes":18,"maxDecompressedBytes":19,"originalBytes":18,"rawStoredBytes":18,"escapedHex":"616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":18,"marker":-1},"go":{"outcome":"compressed","storedBytes":11,"marker":1}}}, + {"name":"Quint envelope 197 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaa","thresholdBytes":19,"maxDecompressedBytes":19,"originalBytes":18,"rawStoredBytes":18,"escapedHex":"616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":18,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 198 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaaa","thresholdBytes":18,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"61616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":19,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 199 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaaa","thresholdBytes":19,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"61616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":19,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 200 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaaa","thresholdBytes":20,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"61616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":19,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 201 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaaa","thresholdBytes":18,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"61616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":1},"go":{"outcome":"compressed","storedBytes":11,"marker":1}}}, + {"name":"Quint envelope 202 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaaa","thresholdBytes":19,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"61616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":1},"go":{"outcome":"compressed","storedBytes":11,"marker":1}}}, + {"name":"Quint envelope 203 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaaa","thresholdBytes":20,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"61616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":19,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 204 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaaa","thresholdBytes":18,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"61616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":1},"go":{"outcome":"compressed","storedBytes":11,"marker":1}}}, + {"name":"Quint envelope 205 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaaa","thresholdBytes":19,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"61616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":1},"go":{"outcome":"compressed","storedBytes":11,"marker":1}}}, + {"name":"Quint envelope 206 write text-size-boundary","payloadType":"string","payloadUtf8":"aaaaaaaaaaaaaaaaaaa","thresholdBytes":20,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"61616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":10},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":19,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 207 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161","thresholdBytes":16,"maxDecompressedBytes":16,"originalBytes":17,"rawStoredBytes":18,"escapedHex":"000161616161616161616161616161616161","codecBytes":{"typescript":17,"go":26},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":18,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 208 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161","thresholdBytes":17,"maxDecompressedBytes":16,"originalBytes":17,"rawStoredBytes":18,"escapedHex":"000161616161616161616161616161616161","codecBytes":{"typescript":17,"go":26},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":18,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 209 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":16,"originalBytes":17,"rawStoredBytes":18,"escapedHex":"000161616161616161616161616161616161","codecBytes":{"typescript":17,"go":26},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":18,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 210 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161","thresholdBytes":16,"maxDecompressedBytes":17,"originalBytes":17,"rawStoredBytes":18,"escapedHex":"000161616161616161616161616161616161","codecBytes":{"typescript":17,"go":26},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":18,"marker":-1},"go":{"outcome":"not_smaller","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 211 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161","thresholdBytes":17,"maxDecompressedBytes":17,"originalBytes":17,"rawStoredBytes":18,"escapedHex":"000161616161616161616161616161616161","codecBytes":{"typescript":17,"go":26},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":18,"marker":-1},"go":{"outcome":"not_smaller","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 212 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":17,"originalBytes":17,"rawStoredBytes":18,"escapedHex":"000161616161616161616161616161616161","codecBytes":{"typescript":17,"go":26},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":18,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 213 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161","thresholdBytes":16,"maxDecompressedBytes":18,"originalBytes":17,"rawStoredBytes":18,"escapedHex":"000161616161616161616161616161616161","codecBytes":{"typescript":17,"go":26},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":18,"marker":-1},"go":{"outcome":"not_smaller","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 214 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161","thresholdBytes":17,"maxDecompressedBytes":18,"originalBytes":17,"rawStoredBytes":18,"escapedHex":"000161616161616161616161616161616161","codecBytes":{"typescript":17,"go":26},"expectedByBinding":{"typescript":{"outcome":"not_smaller","storedBytes":18,"marker":-1},"go":{"outcome":"not_smaller","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 215 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":18,"originalBytes":17,"rawStoredBytes":18,"escapedHex":"000161616161616161616161616161616161","codecBytes":{"typescript":17,"go":26},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":18,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":18,"marker":-1}}}, + {"name":"Quint envelope 216 write escaped-size-boundary","payloadType":"binary","payloadHex":"016161616161616161616161616161616161","thresholdBytes":17,"maxDecompressedBytes":17,"originalBytes":18,"rawStoredBytes":19,"escapedHex":"00016161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":19,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 217 write escaped-size-boundary","payloadType":"binary","payloadHex":"016161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":17,"originalBytes":18,"rawStoredBytes":19,"escapedHex":"00016161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":19,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 218 write escaped-size-boundary","payloadType":"binary","payloadHex":"016161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":17,"originalBytes":18,"rawStoredBytes":19,"escapedHex":"00016161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":19,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 219 write escaped-size-boundary","payloadType":"binary","payloadHex":"016161616161616161616161616161616161","thresholdBytes":17,"maxDecompressedBytes":18,"originalBytes":18,"rawStoredBytes":19,"escapedHex":"00016161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"not_smaller","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 220 write escaped-size-boundary","payloadType":"binary","payloadHex":"016161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":18,"originalBytes":18,"rawStoredBytes":19,"escapedHex":"00016161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"not_smaller","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 221 write escaped-size-boundary","payloadType":"binary","payloadHex":"016161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":18,"originalBytes":18,"rawStoredBytes":19,"escapedHex":"00016161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":19,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 222 write escaped-size-boundary","payloadType":"binary","payloadHex":"016161616161616161616161616161616161","thresholdBytes":17,"maxDecompressedBytes":19,"originalBytes":18,"rawStoredBytes":19,"escapedHex":"00016161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"not_smaller","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 223 write escaped-size-boundary","payloadType":"binary","payloadHex":"016161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":19,"originalBytes":18,"rawStoredBytes":19,"escapedHex":"00016161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"not_smaller","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 224 write escaped-size-boundary","payloadType":"binary","payloadHex":"016161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":19,"originalBytes":18,"rawStoredBytes":19,"escapedHex":"00016161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":19,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 225 write escaped-size-boundary","payloadType":"binary","payloadHex":"01616161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0001616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":20,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 226 write escaped-size-boundary","payloadType":"binary","payloadHex":"01616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0001616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":20,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 227 write escaped-size-boundary","payloadType":"binary","payloadHex":"01616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0001616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":20,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 228 write escaped-size-boundary","payloadType":"binary","payloadHex":"01616161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0001616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 229 write escaped-size-boundary","payloadType":"binary","payloadHex":"01616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0001616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 230 write escaped-size-boundary","payloadType":"binary","payloadHex":"01616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0001616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":20,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 231 write escaped-size-boundary","payloadType":"binary","payloadHex":"01616161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0001616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 232 write escaped-size-boundary","payloadType":"binary","payloadHex":"01616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0001616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 233 write escaped-size-boundary","payloadType":"binary","payloadHex":"01616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0001616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":20,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 234 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":19,"originalBytes":20,"rawStoredBytes":21,"escapedHex":"000161616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":21,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":21,"marker":-1}}}, + {"name":"Quint envelope 235 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":19,"originalBytes":20,"rawStoredBytes":21,"escapedHex":"000161616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":21,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":21,"marker":-1}}}, + {"name":"Quint envelope 236 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161616161","thresholdBytes":21,"maxDecompressedBytes":19,"originalBytes":20,"rawStoredBytes":21,"escapedHex":"000161616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":21,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":21,"marker":-1}}}, + {"name":"Quint envelope 237 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":20,"originalBytes":20,"rawStoredBytes":21,"escapedHex":"000161616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 238 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":20,"originalBytes":20,"rawStoredBytes":21,"escapedHex":"000161616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 239 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161616161","thresholdBytes":21,"maxDecompressedBytes":20,"originalBytes":20,"rawStoredBytes":21,"escapedHex":"000161616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":21,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":21,"marker":-1}}}, + {"name":"Quint envelope 240 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":21,"originalBytes":20,"rawStoredBytes":21,"escapedHex":"000161616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 241 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":21,"originalBytes":20,"rawStoredBytes":21,"escapedHex":"000161616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 242 write escaped-size-boundary","payloadType":"binary","payloadHex":"0161616161616161616161616161616161616161","thresholdBytes":21,"maxDecompressedBytes":21,"originalBytes":20,"rawStoredBytes":21,"escapedHex":"000161616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":21,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":21,"marker":-1}}}, + {"name":"Quint envelope 243 write binary-marker-class","payloadType":"binary","payloadHex":"00616161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0000616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":20,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 244 write binary-marker-class","payloadType":"binary","payloadHex":"00616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0000616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":20,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 245 write binary-marker-class","payloadType":"binary","payloadHex":"00616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0000616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":20,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 246 write binary-marker-class","payloadType":"binary","payloadHex":"00616161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0000616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 247 write binary-marker-class","payloadType":"binary","payloadHex":"00616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0000616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 248 write binary-marker-class","payloadType":"binary","payloadHex":"00616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0000616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":20,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 249 write binary-marker-class","payloadType":"binary","payloadHex":"00616161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0000616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 250 write binary-marker-class","payloadType":"binary","payloadHex":"00616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0000616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 251 write binary-marker-class","payloadType":"binary","payloadHex":"00616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0000616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":20,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 252 write binary-marker-class","payloadType":"binary","payloadHex":"02616161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0002616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":20,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 253 write binary-marker-class","payloadType":"binary","payloadHex":"02616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0002616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":20,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 254 write binary-marker-class","payloadType":"binary","payloadHex":"02616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0002616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":20,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 255 write binary-marker-class","payloadType":"binary","payloadHex":"02616161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0002616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 256 write binary-marker-class","payloadType":"binary","payloadHex":"02616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0002616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 257 write binary-marker-class","payloadType":"binary","payloadHex":"02616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0002616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":20,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 258 write binary-marker-class","payloadType":"binary","payloadHex":"02616161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0002616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 259 write binary-marker-class","payloadType":"binary","payloadHex":"02616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0002616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"compressed","storedBytes":19,"marker":2}}}, + {"name":"Quint envelope 260 write binary-marker-class","payloadType":"binary","payloadHex":"02616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":20,"escapedHex":"0002616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":20,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":20,"marker":-1}}}, + {"name":"Quint envelope 261 write binary-marker-class","payloadType":"binary","payloadHex":"03616161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"03616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":19,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 262 write binary-marker-class","payloadType":"binary","payloadHex":"03616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"03616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":19,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 263 write binary-marker-class","payloadType":"binary","payloadHex":"03616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":18,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"03616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":19,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 264 write binary-marker-class","payloadType":"binary","payloadHex":"03616161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"03616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"not_smaller","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 265 write binary-marker-class","payloadType":"binary","payloadHex":"03616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"03616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"not_smaller","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 266 write binary-marker-class","payloadType":"binary","payloadHex":"03616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":19,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"03616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":19,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 267 write binary-marker-class","payloadType":"binary","payloadHex":"03616161616161616161616161616161616161","thresholdBytes":18,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"03616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"not_smaller","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 268 write binary-marker-class","payloadType":"binary","payloadHex":"03616161616161616161616161616161616161","thresholdBytes":19,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"03616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":2},"go":{"outcome":"not_smaller","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 269 write binary-marker-class","payloadType":"binary","payloadHex":"03616161616161616161616161616161616161","thresholdBytes":20,"maxDecompressedBytes":20,"originalBytes":19,"rawStoredBytes":19,"escapedHex":"03616161616161616161616161616161616161","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":19,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":19,"marker":-1}}}, + {"name":"Quint envelope 270 write utf8-byte-threshold","payloadType":"string","payloadUtf8":"éééééééééééééééééééééééééééééééé","thresholdBytes":63,"maxDecompressedBytes":63,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":64,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":64,"marker":-1}}}, + {"name":"Quint envelope 271 write utf8-byte-threshold","payloadType":"string","payloadUtf8":"éééééééééééééééééééééééééééééééé","thresholdBytes":64,"maxDecompressedBytes":63,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":64,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":64,"marker":-1}}}, + {"name":"Quint envelope 272 write utf8-byte-threshold","payloadType":"string","payloadUtf8":"éééééééééééééééééééééééééééééééé","thresholdBytes":65,"maxDecompressedBytes":63,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":64,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":64,"marker":-1}}}, + {"name":"Quint envelope 273 write utf8-byte-threshold","payloadType":"string","payloadUtf8":"éééééééééééééééééééééééééééééééé","thresholdBytes":63,"maxDecompressedBytes":64,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":1},"go":{"outcome":"compressed","storedBytes":19,"marker":1}}}, + {"name":"Quint envelope 274 write utf8-byte-threshold","payloadType":"string","payloadUtf8":"éééééééééééééééééééééééééééééééé","thresholdBytes":64,"maxDecompressedBytes":64,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":1},"go":{"outcome":"compressed","storedBytes":19,"marker":1}}}, + {"name":"Quint envelope 275 write utf8-byte-threshold","payloadType":"string","payloadUtf8":"éééééééééééééééééééééééééééééééé","thresholdBytes":65,"maxDecompressedBytes":64,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":64,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":64,"marker":-1}}}, + {"name":"Quint envelope 276 write utf8-byte-threshold","payloadType":"string","payloadUtf8":"éééééééééééééééééééééééééééééééé","thresholdBytes":63,"maxDecompressedBytes":65,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":1},"go":{"outcome":"compressed","storedBytes":19,"marker":1}}}, + {"name":"Quint envelope 277 write utf8-byte-threshold","payloadType":"string","payloadUtf8":"éééééééééééééééééééééééééééééééé","thresholdBytes":64,"maxDecompressedBytes":65,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":18,"marker":1},"go":{"outcome":"compressed","storedBytes":19,"marker":1}}}, + {"name":"Quint envelope 278 write utf8-byte-threshold","payloadType":"string","payloadUtf8":"éééééééééééééééééééééééééééééééé","thresholdBytes":65,"maxDecompressedBytes":65,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9c3a9","codecBytes":{"typescript":17,"go":18},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":64,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":64,"marker":-1}}}, + {"name":"Quint envelope 279 write supplementary-byte-threshold","payloadType":"string","payloadUtf8":"😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀","thresholdBytes":63,"maxDecompressedBytes":63,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880","codecBytes":{"typescript":19,"go":20},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":64,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":64,"marker":-1}}}, + {"name":"Quint envelope 280 write supplementary-byte-threshold","payloadType":"string","payloadUtf8":"😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀","thresholdBytes":64,"maxDecompressedBytes":63,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880","codecBytes":{"typescript":19,"go":20},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":64,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":64,"marker":-1}}}, + {"name":"Quint envelope 281 write supplementary-byte-threshold","payloadType":"string","payloadUtf8":"😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀","thresholdBytes":65,"maxDecompressedBytes":63,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880","codecBytes":{"typescript":19,"go":20},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":64,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":64,"marker":-1}}}, + {"name":"Quint envelope 282 write supplementary-byte-threshold","payloadType":"string","payloadUtf8":"😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀","thresholdBytes":63,"maxDecompressedBytes":64,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880","codecBytes":{"typescript":19,"go":20},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":20,"marker":1},"go":{"outcome":"compressed","storedBytes":21,"marker":1}}}, + {"name":"Quint envelope 283 write supplementary-byte-threshold","payloadType":"string","payloadUtf8":"😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀","thresholdBytes":64,"maxDecompressedBytes":64,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880","codecBytes":{"typescript":19,"go":20},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":20,"marker":1},"go":{"outcome":"compressed","storedBytes":21,"marker":1}}}, + {"name":"Quint envelope 284 write supplementary-byte-threshold","payloadType":"string","payloadUtf8":"😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀","thresholdBytes":65,"maxDecompressedBytes":64,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880","codecBytes":{"typescript":19,"go":20},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":64,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":64,"marker":-1}}}, + {"name":"Quint envelope 285 write supplementary-byte-threshold","payloadType":"string","payloadUtf8":"😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀","thresholdBytes":63,"maxDecompressedBytes":65,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880","codecBytes":{"typescript":19,"go":20},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":20,"marker":1},"go":{"outcome":"compressed","storedBytes":21,"marker":1}}}, + {"name":"Quint envelope 286 write supplementary-byte-threshold","payloadType":"string","payloadUtf8":"😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀","thresholdBytes":64,"maxDecompressedBytes":65,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880","codecBytes":{"typescript":19,"go":20},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":20,"marker":1},"go":{"outcome":"compressed","storedBytes":21,"marker":1}}}, + {"name":"Quint envelope 287 write supplementary-byte-threshold","payloadType":"string","payloadUtf8":"😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀","thresholdBytes":65,"maxDecompressedBytes":65,"originalBytes":64,"rawStoredBytes":64,"escapedHex":"f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880f09f9880","codecBytes":{"typescript":19,"go":20},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":64,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":64,"marker":-1}}}, + {"name":"Quint envelope 288 write compressible","payloadType":"string","payloadUtf8":"dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ","thresholdBytes":159,"maxDecompressedBytes":159,"originalBytes":160,"rawStoredBytes":160,"escapedHex":"6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520","codecBytes":{"typescript":26,"go":27},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":160,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":160,"marker":-1}}}, + {"name":"Quint envelope 289 write compressible","payloadType":"string","payloadUtf8":"dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ","thresholdBytes":160,"maxDecompressedBytes":159,"originalBytes":160,"rawStoredBytes":160,"escapedHex":"6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520","codecBytes":{"typescript":26,"go":27},"expectedByBinding":{"typescript":{"outcome":"write_over_limit","storedBytes":160,"marker":-1},"go":{"outcome":"write_over_limit","storedBytes":160,"marker":-1}}}, + {"name":"Quint envelope 290 write compressible","payloadType":"string","payloadUtf8":"dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ","thresholdBytes":161,"maxDecompressedBytes":159,"originalBytes":160,"rawStoredBytes":160,"escapedHex":"6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520","codecBytes":{"typescript":26,"go":27},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":160,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":160,"marker":-1}}}, + {"name":"Quint envelope 291 write compressible","payloadType":"string","payloadUtf8":"dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ","thresholdBytes":159,"maxDecompressedBytes":160,"originalBytes":160,"rawStoredBytes":160,"escapedHex":"6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520","codecBytes":{"typescript":26,"go":27},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":27,"marker":1},"go":{"outcome":"compressed","storedBytes":28,"marker":1}}}, + {"name":"Quint envelope 292 write compressible","payloadType":"string","payloadUtf8":"dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ","thresholdBytes":160,"maxDecompressedBytes":160,"originalBytes":160,"rawStoredBytes":160,"escapedHex":"6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520","codecBytes":{"typescript":26,"go":27},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":27,"marker":1},"go":{"outcome":"compressed","storedBytes":28,"marker":1}}}, + {"name":"Quint envelope 293 write compressible","payloadType":"string","payloadUtf8":"dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ","thresholdBytes":161,"maxDecompressedBytes":160,"originalBytes":160,"rawStoredBytes":160,"escapedHex":"6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520","codecBytes":{"typescript":26,"go":27},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":160,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":160,"marker":-1}}}, + {"name":"Quint envelope 294 write compressible","payloadType":"string","payloadUtf8":"dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ","thresholdBytes":159,"maxDecompressedBytes":161,"originalBytes":160,"rawStoredBytes":160,"escapedHex":"6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520","codecBytes":{"typescript":26,"go":27},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":27,"marker":1},"go":{"outcome":"compressed","storedBytes":28,"marker":1}}}, + {"name":"Quint envelope 295 write compressible","payloadType":"string","payloadUtf8":"dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ","thresholdBytes":160,"maxDecompressedBytes":161,"originalBytes":160,"rawStoredBytes":160,"escapedHex":"6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520","codecBytes":{"typescript":26,"go":27},"expectedByBinding":{"typescript":{"outcome":"compressed","storedBytes":27,"marker":1},"go":{"outcome":"compressed","storedBytes":28,"marker":1}}}, + {"name":"Quint envelope 296 write compressible","payloadType":"string","payloadUtf8":"dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache dialcache ","thresholdBytes":161,"maxDecompressedBytes":161,"originalBytes":160,"rawStoredBytes":160,"escapedHex":"6469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c6361636865206469616c636163686520","codecBytes":{"typescript":26,"go":27},"expectedByBinding":{"typescript":{"outcome":"below_threshold","storedBytes":160,"marker":-1},"go":{"outcome":"below_threshold","storedBytes":160,"marker":-1}}} ] } diff --git a/formal/quint-frame-vectors.json b/formal/quint-frame-vectors.json index 83c31b7e..d8fbb885 100644 --- a/formal/quint-frame-vectors.json +++ b/formal/quint-frame-vectors.json @@ -5,5356 +5,607 @@ "sourceSha256": { "formal/dialcache-frame-vectors.qnt": "d7cfaff472fce8888563ce81f62ca3b4bed1a76d51b97b46543a99362548cff8", "formal/wire-text.qnt": "c78f8c674f4e1470b0d2b605b209d82e3aab0e35fb4e0efae813247bf093eb27", - "formal/generate-frame-vectors.mjs": "8375998780cd8985062bb3f8a9d3db5fb3d917f0897880979c6b8cedda6bc1ba", - "formal/cache-rules.qnt": "c439080cebd85942a9b7516076d295f18a53bf06be0e66287a35e37ded72ef17" + "formal/generate-frame-vectors.mjs": "f27411412fc3a2593270d4747983305543ec5e8991027648558ef7d3ace0b3da", + "formal/cache-rules.qnt": "cc37125b108b6e51011cfa4ff5c0561bb9498cbedd3ffefb0cabd79f3975216c" } }, "frameVectors": [ - { - "name": "Quint frame 000 encode", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "", - "frameHex": "01000000000000000000" - }, - { - "name": "Quint frame 001 encode", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "", - "frameHex": "01000000000000000100" - }, - { - "name": "Quint frame 002 encode", - "createdAtMs": 255, - "payloadType": "string", - "payloadUtf8": "", - "frameHex": "0100000000000000ff00" - }, - { - "name": "Quint frame 003 encode", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "", - "frameHex": "01000000000000010000" - }, - { - "name": "Quint frame 004 encode", - "createdAtMs": 4294967296, - "payloadType": "string", - "payloadUtf8": "", - "frameHex": "01000000010000000000" - }, - { - "name": "Quint frame 005 encode", - "createdAtMs": 9007199254740991, - "payloadType": "string", - "payloadUtf8": "", - "frameHex": "01001fffffffffffff00" - }, - { - "name": "Quint frame 006 encode", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "A\u0000B", - "frameHex": "01000000000000000000410042" - }, - { - "name": "Quint frame 007 encode", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A\u0000B", - "frameHex": "01000000000000000100410042" - }, - { - "name": "Quint frame 008 encode", - "createdAtMs": 255, - "payloadType": "string", - "payloadUtf8": "A\u0000B", - "frameHex": "0100000000000000ff00410042" - }, - { - "name": "Quint frame 009 encode", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "A\u0000B", - "frameHex": "01000000000000010000410042" - }, - { - "name": "Quint frame 010 encode", - "createdAtMs": 4294967296, - "payloadType": "string", - "payloadUtf8": "A\u0000B", - "frameHex": "01000000010000000000410042" - }, - { - "name": "Quint frame 011 encode", - "createdAtMs": 9007199254740991, - "payloadType": "string", - "payloadUtf8": "A\u0000B", - "frameHex": "01001fffffffffffff00410042" - }, - { - "name": "Quint frame 012 encode", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "€߿ࠀ", - "frameHex": "010000000000000000007fc280dfbfe0a080" - }, - { - "name": "Quint frame 013 encode", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "€߿ࠀ", - "frameHex": "010000000000000001007fc280dfbfe0a080" - }, - { - "name": "Quint frame 014 encode", - "createdAtMs": 255, - "payloadType": "string", - "payloadUtf8": "€߿ࠀ", - "frameHex": "0100000000000000ff007fc280dfbfe0a080" - }, - { - "name": "Quint frame 015 encode", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "€߿ࠀ", - "frameHex": "010000000000000100007fc280dfbfe0a080" - }, - { - "name": "Quint frame 016 encode", - "createdAtMs": 4294967296, - "payloadType": "string", - "payloadUtf8": "€߿ࠀ", - "frameHex": "010000000100000000007fc280dfbfe0a080" - }, - { - "name": "Quint frame 017 encode", - "createdAtMs": 9007199254740991, - "payloadType": "string", - "payloadUtf8": "€߿ࠀ", - "frameHex": "01001fffffffffffff007fc280dfbfe0a080" - }, - { - "name": "Quint frame 018 encode", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "A", - "frameHex": "01000000000000000000efbbbf41" - }, - { - "name": "Quint frame 019 encode", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A", - "frameHex": "01000000000000000100efbbbf41" - }, - { - "name": "Quint frame 020 encode", - "createdAtMs": 255, - "payloadType": "string", - "payloadUtf8": "A", - "frameHex": "0100000000000000ff00efbbbf41" - }, - { - "name": "Quint frame 021 encode", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "A", - "frameHex": "01000000000000010000efbbbf41" - }, - { - "name": "Quint frame 022 encode", - "createdAtMs": 4294967296, - "payloadType": "string", - "payloadUtf8": "A", - "frameHex": "01000000010000000000efbbbf41" - }, - { - "name": "Quint frame 023 encode", - "createdAtMs": 9007199254740991, - "payloadType": "string", - "payloadUtf8": "A", - "frameHex": "01001fffffffffffff00efbbbf41" - }, - { - "name": "Quint frame 024 encode", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "\ud800", - "frameHex": "01000000000000000000efbfbd" - }, - { - "name": "Quint frame 025 encode", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "\ud800", - "frameHex": "01000000000000000100efbfbd" - }, - { - "name": "Quint frame 026 encode", - "createdAtMs": 255, - "payloadType": "string", - "payloadUtf8": "\ud800", - "frameHex": "0100000000000000ff00efbfbd" - }, - { - "name": "Quint frame 027 encode", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "\ud800", - "frameHex": "01000000000000010000efbfbd" - }, - { - "name": "Quint frame 028 encode", - "createdAtMs": 4294967296, - "payloadType": "string", - "payloadUtf8": "\ud800", - "frameHex": "01000000010000000000efbfbd" - }, - { - "name": "Quint frame 029 encode", - "createdAtMs": 9007199254740991, - "payloadType": "string", - "payloadUtf8": "\ud800", - "frameHex": "01001fffffffffffff00efbfbd" - }, - { - "name": "Quint frame 030 encode", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "\udc00", - "frameHex": "01000000000000000000efbfbd" - }, - { - "name": "Quint frame 031 encode", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "\udc00", - "frameHex": "01000000000000000100efbfbd" - }, - { - "name": "Quint frame 032 encode", - "createdAtMs": 255, - "payloadType": "string", - "payloadUtf8": "\udc00", - "frameHex": "0100000000000000ff00efbfbd" - }, - { - "name": "Quint frame 033 encode", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "\udc00", - "frameHex": "01000000000000010000efbfbd" - }, - { - "name": "Quint frame 034 encode", - "createdAtMs": 4294967296, - "payloadType": "string", - "payloadUtf8": "\udc00", - "frameHex": "01000000010000000000efbfbd" - }, - { - "name": "Quint frame 035 encode", - "createdAtMs": 9007199254740991, - "payloadType": "string", - "payloadUtf8": "\udc00", - "frameHex": "01001fffffffffffff00efbfbd" - }, - { - "name": "Quint frame 036 encode", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "\ud800A", - "frameHex": "01000000000000000000efbfbd41" - }, - { - "name": "Quint frame 037 encode", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "\ud800A", - "frameHex": "01000000000000000100efbfbd41" - }, - { - "name": "Quint frame 038 encode", - "createdAtMs": 255, - "payloadType": "string", - "payloadUtf8": "\ud800A", - "frameHex": "0100000000000000ff00efbfbd41" - }, - { - "name": "Quint frame 039 encode", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "\ud800A", - "frameHex": "01000000000000010000efbfbd41" - }, - { - "name": "Quint frame 040 encode", - "createdAtMs": 4294967296, - "payloadType": "string", - "payloadUtf8": "\ud800A", - "frameHex": "01000000010000000000efbfbd41" - }, - { - "name": "Quint frame 041 encode", - "createdAtMs": 9007199254740991, - "payloadType": "string", - "payloadUtf8": "\ud800A", - "frameHex": "01001fffffffffffff00efbfbd41" - }, - { - "name": "Quint frame 042 encode", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "\ud800𐀀", - "frameHex": "01000000000000000000efbfbdf0908080" - }, - { - "name": "Quint frame 043 encode", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "\ud800𐀀", - "frameHex": "01000000000000000100efbfbdf0908080" - }, - { - "name": "Quint frame 044 encode", - "createdAtMs": 255, - "payloadType": "string", - "payloadUtf8": "\ud800𐀀", - "frameHex": "0100000000000000ff00efbfbdf0908080" - }, - { - "name": "Quint frame 045 encode", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "\ud800𐀀", - "frameHex": "01000000000000010000efbfbdf0908080" - }, - { - "name": "Quint frame 046 encode", - "createdAtMs": 4294967296, - "payloadType": "string", - "payloadUtf8": "\ud800𐀀", - "frameHex": "01000000010000000000efbfbdf0908080" - }, - { - "name": "Quint frame 047 encode", - "createdAtMs": 9007199254740991, - "payloadType": "string", - "payloadUtf8": "\ud800𐀀", - "frameHex": "01001fffffffffffff00efbfbdf0908080" - }, - { - "name": "Quint frame 048 encode", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "😀", - "frameHex": "01000000000000000000f09f9880" - }, - { - "name": "Quint frame 049 encode", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "😀", - "frameHex": "01000000000000000100f09f9880" - }, - { - "name": "Quint frame 050 encode", - "createdAtMs": 255, - "payloadType": "string", - "payloadUtf8": "😀", - "frameHex": "0100000000000000ff00f09f9880" - }, - { - "name": "Quint frame 051 encode", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "😀", - "frameHex": "01000000000000010000f09f9880" - }, - { - "name": "Quint frame 052 encode", - "createdAtMs": 4294967296, - "payloadType": "string", - "payloadUtf8": "😀", - "frameHex": "01000000010000000000f09f9880" - }, - { - "name": "Quint frame 053 encode", - "createdAtMs": 9007199254740991, - "payloadType": "string", - "payloadUtf8": "😀", - "frameHex": "01001fffffffffffff00f09f9880" - }, - { - "name": "Quint frame 054 encode", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "􏿿", - "frameHex": "01000000000000000000f48fbfbf" - }, - { - "name": "Quint frame 055 encode", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "􏿿", - "frameHex": "01000000000000000100f48fbfbf" - }, - { - "name": "Quint frame 056 encode", - "createdAtMs": 255, - "payloadType": "string", - "payloadUtf8": "􏿿", - "frameHex": "0100000000000000ff00f48fbfbf" - }, - { - "name": "Quint frame 057 encode", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "􏿿", - "frameHex": "01000000000000010000f48fbfbf" - }, - { - "name": "Quint frame 058 encode", - "createdAtMs": 4294967296, - "payloadType": "string", - "payloadUtf8": "􏿿", - "frameHex": "01000000010000000000f48fbfbf" - }, - { - "name": "Quint frame 059 encode", - "createdAtMs": 9007199254740991, - "payloadType": "string", - "payloadUtf8": "􏿿", - "frameHex": "01001fffffffffffff00f48fbfbf" - }, - { - "name": "Quint frame 060 encode", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "￿", - "frameHex": "01000000000000000000efbfbf" - }, - { - "name": "Quint frame 061 encode", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "￿", - "frameHex": "01000000000000000100efbfbf" - }, - { - "name": "Quint frame 062 encode", - "createdAtMs": 255, - "payloadType": "string", - "payloadUtf8": "￿", - "frameHex": "0100000000000000ff00efbfbf" - }, - { - "name": "Quint frame 063 encode", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "￿", - "frameHex": "01000000000000010000efbfbf" - }, - { - "name": "Quint frame 064 encode", - "createdAtMs": 4294967296, - "payloadType": "string", - "payloadUtf8": "￿", - "frameHex": "01000000010000000000efbfbf" - }, - { - "name": "Quint frame 065 encode", - "createdAtMs": 9007199254740991, - "payloadType": "string", - "payloadUtf8": "￿", - "frameHex": "01001fffffffffffff00efbfbf" - }, - { - "name": "Quint frame 066 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "", - "frameHex": "01000000000000000001" - }, - { - "name": "Quint frame 067 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "", - "frameHex": "01001fffffffffffff01" - }, - { - "name": "Quint frame 068 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "00", - "frameHex": "0100000000000000000100" - }, - { - "name": "Quint frame 069 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "00", - "frameHex": "01001fffffffffffff0100" - }, - { - "name": "Quint frame 070 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "41", - "frameHex": "0100000000000000000141" - }, - { - "name": "Quint frame 071 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "41", - "frameHex": "01001fffffffffffff0141" - }, - { - "name": "Quint frame 072 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "7f", - "frameHex": "010000000000000000017f" - }, - { - "name": "Quint frame 073 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "7f", - "frameHex": "01001fffffffffffff017f" - }, - { - "name": "Quint frame 074 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "80", - "frameHex": "0100000000000000000180" - }, - { - "name": "Quint frame 075 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "80", - "frameHex": "01001fffffffffffff0180" - }, - { - "name": "Quint frame 076 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "ff", - "frameHex": "01000000000000000001ff" - }, - { - "name": "Quint frame 077 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "ff", - "frameHex": "01001fffffffffffff01ff" - }, - { - "name": "Quint frame 078 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "c080", - "frameHex": "01000000000000000001c080" - }, - { - "name": "Quint frame 079 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "c080", - "frameHex": "01001fffffffffffff01c080" - }, - { - "name": "Quint frame 080 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "c280", - "frameHex": "01000000000000000001c280" - }, - { - "name": "Quint frame 081 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "c280", - "frameHex": "01001fffffffffffff01c280" - }, - { - "name": "Quint frame 082 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "dfbf", - "frameHex": "01000000000000000001dfbf" - }, - { - "name": "Quint frame 083 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "dfbf", - "frameHex": "01001fffffffffffff01dfbf" - }, - { - "name": "Quint frame 084 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "c2", - "frameHex": "01000000000000000001c2" - }, - { - "name": "Quint frame 085 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "c2", - "frameHex": "01001fffffffffffff01c2" - }, - { - "name": "Quint frame 086 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "c241", - "frameHex": "01000000000000000001c241" - }, - { - "name": "Quint frame 087 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "c241", - "frameHex": "01001fffffffffffff01c241" - }, - { - "name": "Quint frame 088 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "e282", - "frameHex": "01000000000000000001e282" - }, - { - "name": "Quint frame 089 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "e282", - "frameHex": "01001fffffffffffff01e282" - }, - { - "name": "Quint frame 090 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "e28241", - "frameHex": "01000000000000000001e28241" - }, - { - "name": "Quint frame 091 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "e28241", - "frameHex": "01001fffffffffffff01e28241" - }, - { - "name": "Quint frame 092 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "e09fbf", - "frameHex": "01000000000000000001e09fbf" - }, - { - "name": "Quint frame 093 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "e09fbf", - "frameHex": "01001fffffffffffff01e09fbf" - }, - { - "name": "Quint frame 094 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "e0a080", - "frameHex": "01000000000000000001e0a080" - }, - { - "name": "Quint frame 095 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "e0a080", - "frameHex": "01001fffffffffffff01e0a080" - }, - { - "name": "Quint frame 096 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "ed9fbf", - "frameHex": "01000000000000000001ed9fbf" - }, - { - "name": "Quint frame 097 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "ed9fbf", - "frameHex": "01001fffffffffffff01ed9fbf" - }, - { - "name": "Quint frame 098 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "eda080", - "frameHex": "01000000000000000001eda080" - }, - { - "name": "Quint frame 099 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "eda080", - "frameHex": "01001fffffffffffff01eda080" - }, - { - "name": "Quint frame 100 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "efbbbf41", - "frameHex": "01000000000000000001efbbbf41" - }, - { - "name": "Quint frame 101 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "efbbbf41", - "frameHex": "01001fffffffffffff01efbbbf41" - }, - { - "name": "Quint frame 102 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "efbfbf", - "frameHex": "01000000000000000001efbfbf" - }, - { - "name": "Quint frame 103 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "efbfbf", - "frameHex": "01001fffffffffffff01efbfbf" - }, - { - "name": "Quint frame 104 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "f08fbfbf", - "frameHex": "01000000000000000001f08fbfbf" - }, - { - "name": "Quint frame 105 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "f08fbfbf", - "frameHex": "01001fffffffffffff01f08fbfbf" - }, - { - "name": "Quint frame 106 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "f0908080", - "frameHex": "01000000000000000001f0908080" - }, - { - "name": "Quint frame 107 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "f0908080", - "frameHex": "01001fffffffffffff01f0908080" - }, - { - "name": "Quint frame 108 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "f48fbfbf", - "frameHex": "01000000000000000001f48fbfbf" - }, - { - "name": "Quint frame 109 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "f48fbfbf", - "frameHex": "01001fffffffffffff01f48fbfbf" - }, - { - "name": "Quint frame 110 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "f4908080", - "frameHex": "01000000000000000001f4908080" - }, - { - "name": "Quint frame 111 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "f4908080", - "frameHex": "01001fffffffffffff01f4908080" - }, - { - "name": "Quint frame 112 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "f5808080", - "frameHex": "01000000000000000001f5808080" - }, - { - "name": "Quint frame 113 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "f5808080", - "frameHex": "01001fffffffffffff01f5808080" - }, - { - "name": "Quint frame 114 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "f09080", - "frameHex": "01000000000000000001f09080" - }, - { - "name": "Quint frame 115 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "f09080", - "frameHex": "01001fffffffffffff01f09080" - }, - { - "name": "Quint frame 116 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "e2c2a2", - "frameHex": "01000000000000000001e2c2a2" - }, - { - "name": "Quint frame 117 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "e2c2a2", - "frameHex": "01001fffffffffffff01e2c2a2" - }, - { - "name": "Quint frame 118 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "8080", - "frameHex": "010000000000000000018080" - }, - { - "name": "Quint frame 119 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "8080", - "frameHex": "01001fffffffffffff018080" - }, - { - "name": "Quint frame 120 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "410042", - "frameHex": "01000000000000000001410042" - }, - { - "name": "Quint frame 121 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "410042", - "frameHex": "01001fffffffffffff01410042" - }, - { - "name": "Quint frame 122 encode", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "f09f9880", - "frameHex": "01000000000000000001f09f9880" - }, - { - "name": "Quint frame 123 encode", - "createdAtMs": 9007199254740991, - "payloadType": "binary", - "payloadHex": "f09f9880", - "frameHex": "01001fffffffffffff01f09f9880" - } + {"name":"Quint frame 000 encode","createdAtMs":0,"payloadType":"string","payloadUtf8":"","frameHex":"01000000000000000000"}, + {"name":"Quint frame 001 encode","createdAtMs":1,"payloadType":"string","payloadUtf8":"","frameHex":"01000000000000000100"}, + {"name":"Quint frame 002 encode","createdAtMs":255,"payloadType":"string","payloadUtf8":"","frameHex":"0100000000000000ff00"}, + {"name":"Quint frame 003 encode","createdAtMs":256,"payloadType":"string","payloadUtf8":"","frameHex":"01000000000000010000"}, + {"name":"Quint frame 004 encode","createdAtMs":4294967296,"payloadType":"string","payloadUtf8":"","frameHex":"01000000010000000000"}, + {"name":"Quint frame 005 encode","createdAtMs":9007199254740991,"payloadType":"string","payloadUtf8":"","frameHex":"01001fffffffffffff00"}, + {"name":"Quint frame 006 encode","createdAtMs":0,"payloadType":"string","payloadUtf8":"A\u0000B","frameHex":"01000000000000000000410042"}, + {"name":"Quint frame 007 encode","createdAtMs":1,"payloadType":"string","payloadUtf8":"A\u0000B","frameHex":"01000000000000000100410042"}, + {"name":"Quint frame 008 encode","createdAtMs":255,"payloadType":"string","payloadUtf8":"A\u0000B","frameHex":"0100000000000000ff00410042"}, + {"name":"Quint frame 009 encode","createdAtMs":256,"payloadType":"string","payloadUtf8":"A\u0000B","frameHex":"01000000000000010000410042"}, + {"name":"Quint frame 010 encode","createdAtMs":4294967296,"payloadType":"string","payloadUtf8":"A\u0000B","frameHex":"01000000010000000000410042"}, + {"name":"Quint frame 011 encode","createdAtMs":9007199254740991,"payloadType":"string","payloadUtf8":"A\u0000B","frameHex":"01001fffffffffffff00410042"}, + {"name":"Quint frame 012 encode","createdAtMs":0,"payloadType":"string","payloadUtf8":"€߿ࠀ","frameHex":"010000000000000000007fc280dfbfe0a080"}, + {"name":"Quint frame 013 encode","createdAtMs":1,"payloadType":"string","payloadUtf8":"€߿ࠀ","frameHex":"010000000000000001007fc280dfbfe0a080"}, + {"name":"Quint frame 014 encode","createdAtMs":255,"payloadType":"string","payloadUtf8":"€߿ࠀ","frameHex":"0100000000000000ff007fc280dfbfe0a080"}, + {"name":"Quint frame 015 encode","createdAtMs":256,"payloadType":"string","payloadUtf8":"€߿ࠀ","frameHex":"010000000000000100007fc280dfbfe0a080"}, + {"name":"Quint frame 016 encode","createdAtMs":4294967296,"payloadType":"string","payloadUtf8":"€߿ࠀ","frameHex":"010000000100000000007fc280dfbfe0a080"}, + {"name":"Quint frame 017 encode","createdAtMs":9007199254740991,"payloadType":"string","payloadUtf8":"€߿ࠀ","frameHex":"01001fffffffffffff007fc280dfbfe0a080"}, + {"name":"Quint frame 018 encode","createdAtMs":0,"payloadType":"string","payloadUtf8":"A","frameHex":"01000000000000000000efbbbf41"}, + {"name":"Quint frame 019 encode","createdAtMs":1,"payloadType":"string","payloadUtf8":"A","frameHex":"01000000000000000100efbbbf41"}, + {"name":"Quint frame 020 encode","createdAtMs":255,"payloadType":"string","payloadUtf8":"A","frameHex":"0100000000000000ff00efbbbf41"}, + {"name":"Quint frame 021 encode","createdAtMs":256,"payloadType":"string","payloadUtf8":"A","frameHex":"01000000000000010000efbbbf41"}, + {"name":"Quint frame 022 encode","createdAtMs":4294967296,"payloadType":"string","payloadUtf8":"A","frameHex":"01000000010000000000efbbbf41"}, + {"name":"Quint frame 023 encode","createdAtMs":9007199254740991,"payloadType":"string","payloadUtf8":"A","frameHex":"01001fffffffffffff00efbbbf41"}, + {"name":"Quint frame 024 encode","createdAtMs":0,"payloadType":"string","payloadUtf8":"\ud800","frameHex":"01000000000000000000efbfbd"}, + {"name":"Quint frame 025 encode","createdAtMs":1,"payloadType":"string","payloadUtf8":"\ud800","frameHex":"01000000000000000100efbfbd"}, + {"name":"Quint frame 026 encode","createdAtMs":255,"payloadType":"string","payloadUtf8":"\ud800","frameHex":"0100000000000000ff00efbfbd"}, + {"name":"Quint frame 027 encode","createdAtMs":256,"payloadType":"string","payloadUtf8":"\ud800","frameHex":"01000000000000010000efbfbd"}, + {"name":"Quint frame 028 encode","createdAtMs":4294967296,"payloadType":"string","payloadUtf8":"\ud800","frameHex":"01000000010000000000efbfbd"}, + {"name":"Quint frame 029 encode","createdAtMs":9007199254740991,"payloadType":"string","payloadUtf8":"\ud800","frameHex":"01001fffffffffffff00efbfbd"}, + {"name":"Quint frame 030 encode","createdAtMs":0,"payloadType":"string","payloadUtf8":"\udc00","frameHex":"01000000000000000000efbfbd"}, + {"name":"Quint frame 031 encode","createdAtMs":1,"payloadType":"string","payloadUtf8":"\udc00","frameHex":"01000000000000000100efbfbd"}, + {"name":"Quint frame 032 encode","createdAtMs":255,"payloadType":"string","payloadUtf8":"\udc00","frameHex":"0100000000000000ff00efbfbd"}, + {"name":"Quint frame 033 encode","createdAtMs":256,"payloadType":"string","payloadUtf8":"\udc00","frameHex":"01000000000000010000efbfbd"}, + {"name":"Quint frame 034 encode","createdAtMs":4294967296,"payloadType":"string","payloadUtf8":"\udc00","frameHex":"01000000010000000000efbfbd"}, + {"name":"Quint frame 035 encode","createdAtMs":9007199254740991,"payloadType":"string","payloadUtf8":"\udc00","frameHex":"01001fffffffffffff00efbfbd"}, + {"name":"Quint frame 036 encode","createdAtMs":0,"payloadType":"string","payloadUtf8":"\ud800A","frameHex":"01000000000000000000efbfbd41"}, + {"name":"Quint frame 037 encode","createdAtMs":1,"payloadType":"string","payloadUtf8":"\ud800A","frameHex":"01000000000000000100efbfbd41"}, + {"name":"Quint frame 038 encode","createdAtMs":255,"payloadType":"string","payloadUtf8":"\ud800A","frameHex":"0100000000000000ff00efbfbd41"}, + {"name":"Quint frame 039 encode","createdAtMs":256,"payloadType":"string","payloadUtf8":"\ud800A","frameHex":"01000000000000010000efbfbd41"}, + {"name":"Quint frame 040 encode","createdAtMs":4294967296,"payloadType":"string","payloadUtf8":"\ud800A","frameHex":"01000000010000000000efbfbd41"}, + {"name":"Quint frame 041 encode","createdAtMs":9007199254740991,"payloadType":"string","payloadUtf8":"\ud800A","frameHex":"01001fffffffffffff00efbfbd41"}, + {"name":"Quint frame 042 encode","createdAtMs":0,"payloadType":"string","payloadUtf8":"\ud800𐀀","frameHex":"01000000000000000000efbfbdf0908080"}, + {"name":"Quint frame 043 encode","createdAtMs":1,"payloadType":"string","payloadUtf8":"\ud800𐀀","frameHex":"01000000000000000100efbfbdf0908080"}, + {"name":"Quint frame 044 encode","createdAtMs":255,"payloadType":"string","payloadUtf8":"\ud800𐀀","frameHex":"0100000000000000ff00efbfbdf0908080"}, + {"name":"Quint frame 045 encode","createdAtMs":256,"payloadType":"string","payloadUtf8":"\ud800𐀀","frameHex":"01000000000000010000efbfbdf0908080"}, + {"name":"Quint frame 046 encode","createdAtMs":4294967296,"payloadType":"string","payloadUtf8":"\ud800𐀀","frameHex":"01000000010000000000efbfbdf0908080"}, + {"name":"Quint frame 047 encode","createdAtMs":9007199254740991,"payloadType":"string","payloadUtf8":"\ud800𐀀","frameHex":"01001fffffffffffff00efbfbdf0908080"}, + {"name":"Quint frame 048 encode","createdAtMs":0,"payloadType":"string","payloadUtf8":"😀","frameHex":"01000000000000000000f09f9880"}, + {"name":"Quint frame 049 encode","createdAtMs":1,"payloadType":"string","payloadUtf8":"😀","frameHex":"01000000000000000100f09f9880"}, + {"name":"Quint frame 050 encode","createdAtMs":255,"payloadType":"string","payloadUtf8":"😀","frameHex":"0100000000000000ff00f09f9880"}, + {"name":"Quint frame 051 encode","createdAtMs":256,"payloadType":"string","payloadUtf8":"😀","frameHex":"01000000000000010000f09f9880"}, + {"name":"Quint frame 052 encode","createdAtMs":4294967296,"payloadType":"string","payloadUtf8":"😀","frameHex":"01000000010000000000f09f9880"}, + {"name":"Quint frame 053 encode","createdAtMs":9007199254740991,"payloadType":"string","payloadUtf8":"😀","frameHex":"01001fffffffffffff00f09f9880"}, + {"name":"Quint frame 054 encode","createdAtMs":0,"payloadType":"string","payloadUtf8":"􏿿","frameHex":"01000000000000000000f48fbfbf"}, + {"name":"Quint frame 055 encode","createdAtMs":1,"payloadType":"string","payloadUtf8":"􏿿","frameHex":"01000000000000000100f48fbfbf"}, + {"name":"Quint frame 056 encode","createdAtMs":255,"payloadType":"string","payloadUtf8":"􏿿","frameHex":"0100000000000000ff00f48fbfbf"}, + {"name":"Quint frame 057 encode","createdAtMs":256,"payloadType":"string","payloadUtf8":"􏿿","frameHex":"01000000000000010000f48fbfbf"}, + {"name":"Quint frame 058 encode","createdAtMs":4294967296,"payloadType":"string","payloadUtf8":"􏿿","frameHex":"01000000010000000000f48fbfbf"}, + {"name":"Quint frame 059 encode","createdAtMs":9007199254740991,"payloadType":"string","payloadUtf8":"􏿿","frameHex":"01001fffffffffffff00f48fbfbf"}, + {"name":"Quint frame 060 encode","createdAtMs":0,"payloadType":"string","payloadUtf8":"￿","frameHex":"01000000000000000000efbfbf"}, + {"name":"Quint frame 061 encode","createdAtMs":1,"payloadType":"string","payloadUtf8":"￿","frameHex":"01000000000000000100efbfbf"}, + {"name":"Quint frame 062 encode","createdAtMs":255,"payloadType":"string","payloadUtf8":"￿","frameHex":"0100000000000000ff00efbfbf"}, + {"name":"Quint frame 063 encode","createdAtMs":256,"payloadType":"string","payloadUtf8":"￿","frameHex":"01000000000000010000efbfbf"}, + {"name":"Quint frame 064 encode","createdAtMs":4294967296,"payloadType":"string","payloadUtf8":"￿","frameHex":"01000000010000000000efbfbf"}, + {"name":"Quint frame 065 encode","createdAtMs":9007199254740991,"payloadType":"string","payloadUtf8":"￿","frameHex":"01001fffffffffffff00efbfbf"}, + {"name":"Quint frame 066 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"","frameHex":"01000000000000000001"}, + {"name":"Quint frame 067 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"","frameHex":"01001fffffffffffff01"}, + {"name":"Quint frame 068 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"00","frameHex":"0100000000000000000100"}, + {"name":"Quint frame 069 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"00","frameHex":"01001fffffffffffff0100"}, + {"name":"Quint frame 070 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"41","frameHex":"0100000000000000000141"}, + {"name":"Quint frame 071 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"41","frameHex":"01001fffffffffffff0141"}, + {"name":"Quint frame 072 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"7f","frameHex":"010000000000000000017f"}, + {"name":"Quint frame 073 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"7f","frameHex":"01001fffffffffffff017f"}, + {"name":"Quint frame 074 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"80","frameHex":"0100000000000000000180"}, + {"name":"Quint frame 075 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"80","frameHex":"01001fffffffffffff0180"}, + {"name":"Quint frame 076 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"ff","frameHex":"01000000000000000001ff"}, + {"name":"Quint frame 077 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"ff","frameHex":"01001fffffffffffff01ff"}, + {"name":"Quint frame 078 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"c080","frameHex":"01000000000000000001c080"}, + {"name":"Quint frame 079 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"c080","frameHex":"01001fffffffffffff01c080"}, + {"name":"Quint frame 080 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"c280","frameHex":"01000000000000000001c280"}, + {"name":"Quint frame 081 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"c280","frameHex":"01001fffffffffffff01c280"}, + {"name":"Quint frame 082 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"dfbf","frameHex":"01000000000000000001dfbf"}, + {"name":"Quint frame 083 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"dfbf","frameHex":"01001fffffffffffff01dfbf"}, + {"name":"Quint frame 084 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"c2","frameHex":"01000000000000000001c2"}, + {"name":"Quint frame 085 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"c2","frameHex":"01001fffffffffffff01c2"}, + {"name":"Quint frame 086 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"c241","frameHex":"01000000000000000001c241"}, + {"name":"Quint frame 087 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"c241","frameHex":"01001fffffffffffff01c241"}, + {"name":"Quint frame 088 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"e282","frameHex":"01000000000000000001e282"}, + {"name":"Quint frame 089 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"e282","frameHex":"01001fffffffffffff01e282"}, + {"name":"Quint frame 090 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"e28241","frameHex":"01000000000000000001e28241"}, + {"name":"Quint frame 091 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"e28241","frameHex":"01001fffffffffffff01e28241"}, + {"name":"Quint frame 092 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"e09fbf","frameHex":"01000000000000000001e09fbf"}, + {"name":"Quint frame 093 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"e09fbf","frameHex":"01001fffffffffffff01e09fbf"}, + {"name":"Quint frame 094 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"e0a080","frameHex":"01000000000000000001e0a080"}, + {"name":"Quint frame 095 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"e0a080","frameHex":"01001fffffffffffff01e0a080"}, + {"name":"Quint frame 096 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"ed9fbf","frameHex":"01000000000000000001ed9fbf"}, + {"name":"Quint frame 097 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"ed9fbf","frameHex":"01001fffffffffffff01ed9fbf"}, + {"name":"Quint frame 098 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"eda080","frameHex":"01000000000000000001eda080"}, + {"name":"Quint frame 099 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"eda080","frameHex":"01001fffffffffffff01eda080"}, + {"name":"Quint frame 100 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"efbbbf41","frameHex":"01000000000000000001efbbbf41"}, + {"name":"Quint frame 101 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"efbbbf41","frameHex":"01001fffffffffffff01efbbbf41"}, + {"name":"Quint frame 102 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"efbfbf","frameHex":"01000000000000000001efbfbf"}, + {"name":"Quint frame 103 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"efbfbf","frameHex":"01001fffffffffffff01efbfbf"}, + {"name":"Quint frame 104 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"f08fbfbf","frameHex":"01000000000000000001f08fbfbf"}, + {"name":"Quint frame 105 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"f08fbfbf","frameHex":"01001fffffffffffff01f08fbfbf"}, + {"name":"Quint frame 106 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"f0908080","frameHex":"01000000000000000001f0908080"}, + {"name":"Quint frame 107 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"f0908080","frameHex":"01001fffffffffffff01f0908080"}, + {"name":"Quint frame 108 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"f48fbfbf","frameHex":"01000000000000000001f48fbfbf"}, + {"name":"Quint frame 109 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"f48fbfbf","frameHex":"01001fffffffffffff01f48fbfbf"}, + {"name":"Quint frame 110 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"f4908080","frameHex":"01000000000000000001f4908080"}, + {"name":"Quint frame 111 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"f4908080","frameHex":"01001fffffffffffff01f4908080"}, + {"name":"Quint frame 112 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"f5808080","frameHex":"01000000000000000001f5808080"}, + {"name":"Quint frame 113 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"f5808080","frameHex":"01001fffffffffffff01f5808080"}, + {"name":"Quint frame 114 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"f09080","frameHex":"01000000000000000001f09080"}, + {"name":"Quint frame 115 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"f09080","frameHex":"01001fffffffffffff01f09080"}, + {"name":"Quint frame 116 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"e2c2a2","frameHex":"01000000000000000001e2c2a2"}, + {"name":"Quint frame 117 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"e2c2a2","frameHex":"01001fffffffffffff01e2c2a2"}, + {"name":"Quint frame 118 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"8080","frameHex":"010000000000000000018080"}, + {"name":"Quint frame 119 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"8080","frameHex":"01001fffffffffffff018080"}, + {"name":"Quint frame 120 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"410042","frameHex":"01000000000000000001410042"}, + {"name":"Quint frame 121 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"410042","frameHex":"01001fffffffffffff01410042"}, + {"name":"Quint frame 122 encode","createdAtMs":0,"payloadType":"binary","payloadHex":"f09f9880","frameHex":"01000000000000000001f09f9880"}, + {"name":"Quint frame 123 encode","createdAtMs":9007199254740991,"payloadType":"binary","payloadHex":"f09f9880","frameHex":"01001fffffffffffff01f09f9880"} ], "trackedDecodeVectors": [ - { - "name": "Quint frame 126 decode", - "frameHex": "01000000000000010000", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "" - } - }, - { - "name": "Quint frame 127 decode", - "frameHex": "01000000000000010001", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "" - } - }, - { - "name": "Quint frame 130 decode", - "frameHex": "0100000000000001000000", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "\u0000" - } - }, - { - "name": "Quint frame 131 decode", - "frameHex": "0100000000000001000100", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "00" - } - }, - { - "name": "Quint frame 134 decode", - "frameHex": "0100000000000001000041", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 135 decode", - "frameHex": "0100000000000001000141", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 138 decode", - "frameHex": "010000000000000100007f", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "" - } - }, - { - "name": "Quint frame 139 decode", - "frameHex": "010000000000000100017f", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "7f" - } - }, - { - "name": "Quint frame 142 decode", - "frameHex": "0100000000000001000080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�" - } - }, - { - "name": "Quint frame 143 decode", - "frameHex": "0100000000000001000180", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "80" - } - }, - { - "name": "Quint frame 146 decode", - "frameHex": "01000000000000010000ff", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�" - } - }, - { - "name": "Quint frame 147 decode", - "frameHex": "01000000000000010001ff", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "ff" - } - }, - { - "name": "Quint frame 150 decode", - "frameHex": "01000000000000010000c080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "��" - } - }, - { - "name": "Quint frame 151 decode", - "frameHex": "01000000000000010001c080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "c080" - } - }, - { - "name": "Quint frame 154 decode", - "frameHex": "01000000000000010000c280", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "€" - } - }, - { - "name": "Quint frame 155 decode", - "frameHex": "01000000000000010001c280", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "c280" - } - }, - { - "name": "Quint frame 158 decode", - "frameHex": "01000000000000010000dfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "߿" - } - }, - { - "name": "Quint frame 159 decode", - "frameHex": "01000000000000010001dfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "dfbf" - } - }, - { - "name": "Quint frame 162 decode", - "frameHex": "01000000000000010000c2", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�" - } - }, - { - "name": "Quint frame 163 decode", - "frameHex": "01000000000000010001c2", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "c2" - } - }, - { - "name": "Quint frame 166 decode", - "frameHex": "01000000000000010000c241", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�A" - } - }, - { - "name": "Quint frame 167 decode", - "frameHex": "01000000000000010001c241", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "c241" - } - }, - { - "name": "Quint frame 170 decode", - "frameHex": "01000000000000010000e282", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�" - } - }, - { - "name": "Quint frame 171 decode", - "frameHex": "01000000000000010001e282", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "e282" - } - }, - { - "name": "Quint frame 174 decode", - "frameHex": "01000000000000010000e28241", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�A" - } - }, - { - "name": "Quint frame 175 decode", - "frameHex": "01000000000000010001e28241", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "e28241" - } - }, - { - "name": "Quint frame 178 decode", - "frameHex": "01000000000000010000e09fbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "���" - } - }, - { - "name": "Quint frame 179 decode", - "frameHex": "01000000000000010001e09fbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "e09fbf" - } - }, - { - "name": "Quint frame 182 decode", - "frameHex": "01000000000000010000e0a080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "ࠀ" - } - }, - { - "name": "Quint frame 183 decode", - "frameHex": "01000000000000010001e0a080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "e0a080" - } - }, - { - "name": "Quint frame 186 decode", - "frameHex": "01000000000000010000ed9fbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "퟿" - } - }, - { - "name": "Quint frame 187 decode", - "frameHex": "01000000000000010001ed9fbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "ed9fbf" - } - }, - { - "name": "Quint frame 190 decode", - "frameHex": "01000000000000010000eda080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "���" - } - }, - { - "name": "Quint frame 191 decode", - "frameHex": "01000000000000010001eda080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "eda080" - } - }, - { - "name": "Quint frame 194 decode", - "frameHex": "01000000000000010000efbbbf41", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 195 decode", - "frameHex": "01000000000000010001efbbbf41", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "efbbbf41" - } - }, - { - "name": "Quint frame 198 decode", - "frameHex": "01000000000000010000efbfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "￿" - } - }, - { - "name": "Quint frame 199 decode", - "frameHex": "01000000000000010001efbfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "efbfbf" - } - }, - { - "name": "Quint frame 202 decode", - "frameHex": "01000000000000010000f08fbfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "����" - } - }, - { - "name": "Quint frame 203 decode", - "frameHex": "01000000000000010001f08fbfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f08fbfbf" - } - }, - { - "name": "Quint frame 206 decode", - "frameHex": "01000000000000010000f0908080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "𐀀" - } - }, - { - "name": "Quint frame 207 decode", - "frameHex": "01000000000000010001f0908080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f0908080" - } - }, - { - "name": "Quint frame 210 decode", - "frameHex": "01000000000000010000f48fbfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "􏿿" - } - }, - { - "name": "Quint frame 211 decode", - "frameHex": "01000000000000010001f48fbfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f48fbfbf" - } - }, - { - "name": "Quint frame 214 decode", - "frameHex": "01000000000000010000f4908080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "����" - } - }, - { - "name": "Quint frame 215 decode", - "frameHex": "01000000000000010001f4908080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f4908080" - } - }, - { - "name": "Quint frame 218 decode", - "frameHex": "01000000000000010000f5808080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "����" - } - }, - { - "name": "Quint frame 219 decode", - "frameHex": "01000000000000010001f5808080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f5808080" - } - }, - { - "name": "Quint frame 222 decode", - "frameHex": "01000000000000010000f09080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�" - } - }, - { - "name": "Quint frame 223 decode", - "frameHex": "01000000000000010001f09080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f09080" - } - }, - { - "name": "Quint frame 226 decode", - "frameHex": "01000000000000010000e2c2a2", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�¢" - } - }, - { - "name": "Quint frame 227 decode", - "frameHex": "01000000000000010001e2c2a2", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "e2c2a2" - } - }, - { - "name": "Quint frame 230 decode", - "frameHex": "010000000000000100008080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "��" - } - }, - { - "name": "Quint frame 231 decode", - "frameHex": "010000000000000100018080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "8080" - } - }, - { - "name": "Quint frame 234 decode", - "frameHex": "01000000000000010000410042", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "A\u0000B" - } - }, - { - "name": "Quint frame 235 decode", - "frameHex": "01000000000000010001410042", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "410042" - } - }, - { - "name": "Quint frame 238 decode", - "frameHex": "01000000000000010000f09f9880", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "😀" - } - }, - { - "name": "Quint frame 239 decode", - "frameHex": "01000000000000010001f09f9880", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f09f9880" - } - }, - { - "name": "Quint frame 405 decode", - "frameHex": null, - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 406 decode", - "frameHex": null, - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 407 decode", - "frameHex": null, - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 408 decode", - "frameHex": null, - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 409 decode", - "frameHex": null, - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 410 decode", - "frameHex": null, - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 411 decode", - "frameHex": null, - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "value_absent", - "observedWatermarkMs": 0 - } - }, - { - "name": "Quint frame 412 decode", - "frameHex": null, - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "value_absent", - "observedWatermarkMs": 0 - } - }, - { - "name": "Quint frame 413 decode", - "frameHex": null, - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "value_absent", - "observedWatermarkMs": 0 - } - }, - { - "name": "Quint frame 414 decode", - "frameHex": null, - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "value_absent", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 415 decode", - "frameHex": null, - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "value_absent", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 416 decode", - "frameHex": null, - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "value_absent", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 417 decode", - "frameHex": null, - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "value_absent", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 418 decode", - "frameHex": null, - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "value_absent", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 419 decode", - "frameHex": null, - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "value_absent", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 420 decode", - "frameHex": null, - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "value_absent", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 421 decode", - "frameHex": null, - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "value_absent", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 422 decode", - "frameHex": null, - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "value_absent", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 423 decode", - "frameHex": null, - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 424 decode", - "frameHex": null, - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 425 decode", - "frameHex": null, - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 426 decode", - "frameHex": null, - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 427 decode", - "frameHex": null, - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 428 decode", - "frameHex": null, - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 429 decode", - "frameHex": null, - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 430 decode", - "frameHex": null, - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 431 decode", - "frameHex": null, - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 432 decode", - "frameHex": null, - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 433 decode", - "frameHex": null, - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 434 decode", - "frameHex": null, - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 435 decode", - "frameHex": null, - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 436 decode", - "frameHex": null, - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 437 decode", - "frameHex": null, - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 438 decode", - "frameHex": "0100", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 439 decode", - "frameHex": "0100", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 440 decode", - "frameHex": "0100", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 441 decode", - "frameHex": "0100", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 442 decode", - "frameHex": "0100", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 443 decode", - "frameHex": "0100", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 444 decode", - "frameHex": "0100", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 0 - } - }, - { - "name": "Quint frame 445 decode", - "frameHex": "0100", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 0 - } - }, - { - "name": "Quint frame 446 decode", - "frameHex": "0100", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 0 - } - }, - { - "name": "Quint frame 447 decode", - "frameHex": "0100", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 448 decode", - "frameHex": "0100", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 449 decode", - "frameHex": "0100", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 450 decode", - "frameHex": "0100", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 451 decode", - "frameHex": "0100", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 452 decode", - "frameHex": "0100", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 453 decode", - "frameHex": "0100", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 454 decode", - "frameHex": "0100", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 455 decode", - "frameHex": "0100", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 456 decode", - "frameHex": "0100", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 457 decode", - "frameHex": "0100", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 458 decode", - "frameHex": "0100", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 459 decode", - "frameHex": "0100", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 460 decode", - "frameHex": "0100", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 461 decode", - "frameHex": "0100", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 462 decode", - "frameHex": "0100", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 463 decode", - "frameHex": "0100", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 464 decode", - "frameHex": "0100", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 465 decode", - "frameHex": "0100", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 466 decode", - "frameHex": "0100", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 467 decode", - "frameHex": "0100", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 468 decode", - "frameHex": "0100", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 469 decode", - "frameHex": "0100", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 470 decode", - "frameHex": "0100", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 471 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 472 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 473 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 474 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 475 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 476 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 477 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 0 - } - }, - { - "name": "Quint frame 478 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 0 - } - }, - { - "name": "Quint frame 479 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 0 - } - }, - { - "name": "Quint frame 480 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 481 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 482 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 483 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 484 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 485 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 486 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 487 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 488 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 489 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 490 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 491 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 492 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 493 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 494 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 495 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 496 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 497 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 498 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 499 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 500 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 501 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 502 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 503 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 504 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 505 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 506 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 507 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 508 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 509 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 510 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 0 - } - }, - { - "name": "Quint frame 511 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 0 - } - }, - { - "name": "Quint frame 512 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 0 - } - }, - { - "name": "Quint frame 513 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 514 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 515 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 516 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 517 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 518 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 519 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 520 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 521 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 522 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 523 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 524 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 525 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 526 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 527 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 528 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 529 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 530 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 531 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 532 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 533 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 534 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 535 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 536 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 537 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 538 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 539 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": null, - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 540 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 541 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 542 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 543 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "0", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 544 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "0", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 545 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "0", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 546 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "watermark_fenced", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 547 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "watermark_fenced", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 548 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "watermark_fenced", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 549 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "watermark_fenced", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 550 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "watermark_fenced", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 551 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "watermark_fenced", - "observedWatermarkMs": 1 - } - }, - { - "name": "Quint frame 552 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "watermark_fenced", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 553 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "watermark_fenced", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 554 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "watermark_fenced", - "observedWatermarkMs": 2 - } - }, - { - "name": "Quint frame 555 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 556 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 557 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 558 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 559 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 560 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 561 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 562 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 563 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 564 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 565 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 566 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 567 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 568 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 569 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - } + {"name":"Quint frame 126 decode","frameHex":"01000000000000010000","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":""}}, + {"name":"Quint frame 127 decode","frameHex":"01000000000000010001","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":""}}, + {"name":"Quint frame 130 decode","frameHex":"0100000000000001000000","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"\u0000"}}, + {"name":"Quint frame 131 decode","frameHex":"0100000000000001000100","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"00"}}, + {"name":"Quint frame 134 decode","frameHex":"0100000000000001000041","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 135 decode","frameHex":"0100000000000001000141","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 138 decode","frameHex":"010000000000000100007f","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":""}}, + {"name":"Quint frame 139 decode","frameHex":"010000000000000100017f","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"7f"}}, + {"name":"Quint frame 142 decode","frameHex":"0100000000000001000080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�"}}, + {"name":"Quint frame 143 decode","frameHex":"0100000000000001000180","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"80"}}, + {"name":"Quint frame 146 decode","frameHex":"01000000000000010000ff","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�"}}, + {"name":"Quint frame 147 decode","frameHex":"01000000000000010001ff","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"ff"}}, + {"name":"Quint frame 150 decode","frameHex":"01000000000000010000c080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"��"}}, + {"name":"Quint frame 151 decode","frameHex":"01000000000000010001c080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"c080"}}, + {"name":"Quint frame 154 decode","frameHex":"01000000000000010000c280","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"€"}}, + {"name":"Quint frame 155 decode","frameHex":"01000000000000010001c280","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"c280"}}, + {"name":"Quint frame 158 decode","frameHex":"01000000000000010000dfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"߿"}}, + {"name":"Quint frame 159 decode","frameHex":"01000000000000010001dfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"dfbf"}}, + {"name":"Quint frame 162 decode","frameHex":"01000000000000010000c2","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�"}}, + {"name":"Quint frame 163 decode","frameHex":"01000000000000010001c2","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"c2"}}, + {"name":"Quint frame 166 decode","frameHex":"01000000000000010000c241","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�A"}}, + {"name":"Quint frame 167 decode","frameHex":"01000000000000010001c241","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"c241"}}, + {"name":"Quint frame 170 decode","frameHex":"01000000000000010000e282","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�"}}, + {"name":"Quint frame 171 decode","frameHex":"01000000000000010001e282","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"e282"}}, + {"name":"Quint frame 174 decode","frameHex":"01000000000000010000e28241","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�A"}}, + {"name":"Quint frame 175 decode","frameHex":"01000000000000010001e28241","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"e28241"}}, + {"name":"Quint frame 178 decode","frameHex":"01000000000000010000e09fbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"���"}}, + {"name":"Quint frame 179 decode","frameHex":"01000000000000010001e09fbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"e09fbf"}}, + {"name":"Quint frame 182 decode","frameHex":"01000000000000010000e0a080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"ࠀ"}}, + {"name":"Quint frame 183 decode","frameHex":"01000000000000010001e0a080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"e0a080"}}, + {"name":"Quint frame 186 decode","frameHex":"01000000000000010000ed9fbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"퟿"}}, + {"name":"Quint frame 187 decode","frameHex":"01000000000000010001ed9fbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"ed9fbf"}}, + {"name":"Quint frame 190 decode","frameHex":"01000000000000010000eda080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"���"}}, + {"name":"Quint frame 191 decode","frameHex":"01000000000000010001eda080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"eda080"}}, + {"name":"Quint frame 194 decode","frameHex":"01000000000000010000efbbbf41","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 195 decode","frameHex":"01000000000000010001efbbbf41","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"efbbbf41"}}, + {"name":"Quint frame 198 decode","frameHex":"01000000000000010000efbfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"￿"}}, + {"name":"Quint frame 199 decode","frameHex":"01000000000000010001efbfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"efbfbf"}}, + {"name":"Quint frame 202 decode","frameHex":"01000000000000010000f08fbfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"����"}}, + {"name":"Quint frame 203 decode","frameHex":"01000000000000010001f08fbfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f08fbfbf"}}, + {"name":"Quint frame 206 decode","frameHex":"01000000000000010000f0908080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"𐀀"}}, + {"name":"Quint frame 207 decode","frameHex":"01000000000000010001f0908080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f0908080"}}, + {"name":"Quint frame 210 decode","frameHex":"01000000000000010000f48fbfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"􏿿"}}, + {"name":"Quint frame 211 decode","frameHex":"01000000000000010001f48fbfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f48fbfbf"}}, + {"name":"Quint frame 214 decode","frameHex":"01000000000000010000f4908080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"����"}}, + {"name":"Quint frame 215 decode","frameHex":"01000000000000010001f4908080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f4908080"}}, + {"name":"Quint frame 218 decode","frameHex":"01000000000000010000f5808080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"����"}}, + {"name":"Quint frame 219 decode","frameHex":"01000000000000010001f5808080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f5808080"}}, + {"name":"Quint frame 222 decode","frameHex":"01000000000000010000f09080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�"}}, + {"name":"Quint frame 223 decode","frameHex":"01000000000000010001f09080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f09080"}}, + {"name":"Quint frame 226 decode","frameHex":"01000000000000010000e2c2a2","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�¢"}}, + {"name":"Quint frame 227 decode","frameHex":"01000000000000010001e2c2a2","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"e2c2a2"}}, + {"name":"Quint frame 230 decode","frameHex":"010000000000000100008080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"��"}}, + {"name":"Quint frame 231 decode","frameHex":"010000000000000100018080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"8080"}}, + {"name":"Quint frame 234 decode","frameHex":"01000000000000010000410042","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"A\u0000B"}}, + {"name":"Quint frame 235 decode","frameHex":"01000000000000010001410042","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"410042"}}, + {"name":"Quint frame 238 decode","frameHex":"01000000000000010000f09f9880","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"😀"}}, + {"name":"Quint frame 239 decode","frameHex":"01000000000000010001f09f9880","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f09f9880"}}, + {"name":"Quint frame 405 decode","frameHex":null,"watermarkUtf8":null,"expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 406 decode","frameHex":null,"watermarkUtf8":null,"expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 407 decode","frameHex":null,"watermarkUtf8":null,"expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 408 decode","frameHex":null,"watermarkUtf8":"","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 409 decode","frameHex":null,"watermarkUtf8":"","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 410 decode","frameHex":null,"watermarkUtf8":"","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 411 decode","frameHex":null,"watermarkUtf8":"0","expected":{"kind":"miss","reason":"value_absent","observedWatermarkMs":0}}, + {"name":"Quint frame 412 decode","frameHex":null,"watermarkUtf8":"0","expected":{"kind":"miss","reason":"value_absent","observedWatermarkMs":0}}, + {"name":"Quint frame 413 decode","frameHex":null,"watermarkUtf8":"0","expected":{"kind":"miss","reason":"value_absent","observedWatermarkMs":0}}, + {"name":"Quint frame 414 decode","frameHex":null,"watermarkUtf8":"1","expected":{"kind":"miss","reason":"value_absent","observedWatermarkMs":1}}, + {"name":"Quint frame 415 decode","frameHex":null,"watermarkUtf8":"1","expected":{"kind":"miss","reason":"value_absent","observedWatermarkMs":1}}, + {"name":"Quint frame 416 decode","frameHex":null,"watermarkUtf8":"1","expected":{"kind":"miss","reason":"value_absent","observedWatermarkMs":1}}, + {"name":"Quint frame 417 decode","frameHex":null,"watermarkUtf8":"001","expected":{"kind":"miss","reason":"value_absent","observedWatermarkMs":1}}, + {"name":"Quint frame 418 decode","frameHex":null,"watermarkUtf8":"001","expected":{"kind":"miss","reason":"value_absent","observedWatermarkMs":1}}, + {"name":"Quint frame 419 decode","frameHex":null,"watermarkUtf8":"001","expected":{"kind":"miss","reason":"value_absent","observedWatermarkMs":1}}, + {"name":"Quint frame 420 decode","frameHex":null,"watermarkUtf8":"2","expected":{"kind":"miss","reason":"value_absent","observedWatermarkMs":2}}, + {"name":"Quint frame 421 decode","frameHex":null,"watermarkUtf8":"2","expected":{"kind":"miss","reason":"value_absent","observedWatermarkMs":2}}, + {"name":"Quint frame 422 decode","frameHex":null,"watermarkUtf8":"2","expected":{"kind":"miss","reason":"value_absent","observedWatermarkMs":2}}, + {"name":"Quint frame 423 decode","frameHex":null,"watermarkUtf8":"-1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 424 decode","frameHex":null,"watermarkUtf8":"-1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 425 decode","frameHex":null,"watermarkUtf8":"-1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 426 decode","frameHex":null,"watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 427 decode","frameHex":null,"watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 428 decode","frameHex":null,"watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 429 decode","frameHex":null,"watermarkUtf8":" 1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 430 decode","frameHex":null,"watermarkUtf8":" 1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 431 decode","frameHex":null,"watermarkUtf8":" 1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 432 decode","frameHex":null,"watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 433 decode","frameHex":null,"watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 434 decode","frameHex":null,"watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 435 decode","frameHex":null,"watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 436 decode","frameHex":null,"watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 437 decode","frameHex":null,"watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 438 decode","frameHex":"0100","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 439 decode","frameHex":"0100","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 440 decode","frameHex":"0100","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 441 decode","frameHex":"0100","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 442 decode","frameHex":"0100","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 443 decode","frameHex":"0100","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 444 decode","frameHex":"0100","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":0}}, + {"name":"Quint frame 445 decode","frameHex":"0100","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":0}}, + {"name":"Quint frame 446 decode","frameHex":"0100","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":0}}, + {"name":"Quint frame 447 decode","frameHex":"0100","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 448 decode","frameHex":"0100","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 449 decode","frameHex":"0100","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 450 decode","frameHex":"0100","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 451 decode","frameHex":"0100","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 452 decode","frameHex":"0100","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 453 decode","frameHex":"0100","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":2}}, + {"name":"Quint frame 454 decode","frameHex":"0100","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":2}}, + {"name":"Quint frame 455 decode","frameHex":"0100","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":2}}, + {"name":"Quint frame 456 decode","frameHex":"0100","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 457 decode","frameHex":"0100","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 458 decode","frameHex":"0100","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 459 decode","frameHex":"0100","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 460 decode","frameHex":"0100","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 461 decode","frameHex":"0100","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 462 decode","frameHex":"0100","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 463 decode","frameHex":"0100","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 464 decode","frameHex":"0100","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 465 decode","frameHex":"0100","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 466 decode","frameHex":"0100","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 467 decode","frameHex":"0100","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 468 decode","frameHex":"0100","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 469 decode","frameHex":"0100","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 470 decode","frameHex":"0100","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 471 decode","frameHex":"02000000000000000100","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 472 decode","frameHex":"02000000000000000101","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 473 decode","frameHex":"02000000000000000102","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 474 decode","frameHex":"02000000000000000100","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 475 decode","frameHex":"02000000000000000101","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 476 decode","frameHex":"02000000000000000102","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 477 decode","frameHex":"02000000000000000100","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":0}}, + {"name":"Quint frame 478 decode","frameHex":"02000000000000000101","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":0}}, + {"name":"Quint frame 479 decode","frameHex":"02000000000000000102","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":0}}, + {"name":"Quint frame 480 decode","frameHex":"02000000000000000100","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 481 decode","frameHex":"02000000000000000101","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 482 decode","frameHex":"02000000000000000102","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 483 decode","frameHex":"02000000000000000100","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 484 decode","frameHex":"02000000000000000101","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 485 decode","frameHex":"02000000000000000102","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 486 decode","frameHex":"02000000000000000100","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":2}}, + {"name":"Quint frame 487 decode","frameHex":"02000000000000000101","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":2}}, + {"name":"Quint frame 488 decode","frameHex":"02000000000000000102","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":2}}, + {"name":"Quint frame 489 decode","frameHex":"02000000000000000100","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 490 decode","frameHex":"02000000000000000101","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 491 decode","frameHex":"02000000000000000102","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 492 decode","frameHex":"02000000000000000100","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 493 decode","frameHex":"02000000000000000101","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 494 decode","frameHex":"02000000000000000102","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 495 decode","frameHex":"02000000000000000100","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 496 decode","frameHex":"02000000000000000101","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 497 decode","frameHex":"02000000000000000102","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 498 decode","frameHex":"02000000000000000100","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 499 decode","frameHex":"02000000000000000101","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 500 decode","frameHex":"02000000000000000102","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 501 decode","frameHex":"02000000000000000100","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 502 decode","frameHex":"02000000000000000101","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 503 decode","frameHex":"02000000000000000102","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 504 decode","frameHex":"0100000000000000000041","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 505 decode","frameHex":"0100000000000000000141","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 506 decode","frameHex":"0100000000000000000241","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 507 decode","frameHex":"0100000000000000000041","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 508 decode","frameHex":"0100000000000000000141","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 509 decode","frameHex":"0100000000000000000241","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 510 decode","frameHex":"0100000000000000000041","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":0}}, + {"name":"Quint frame 511 decode","frameHex":"0100000000000000000141","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":0}}, + {"name":"Quint frame 512 decode","frameHex":"0100000000000000000241","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":0}}, + {"name":"Quint frame 513 decode","frameHex":"0100000000000000000041","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 514 decode","frameHex":"0100000000000000000141","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 515 decode","frameHex":"0100000000000000000241","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 516 decode","frameHex":"0100000000000000000041","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 517 decode","frameHex":"0100000000000000000141","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 518 decode","frameHex":"0100000000000000000241","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":1}}, + {"name":"Quint frame 519 decode","frameHex":"0100000000000000000041","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":2}}, + {"name":"Quint frame 520 decode","frameHex":"0100000000000000000141","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":2}}, + {"name":"Quint frame 521 decode","frameHex":"0100000000000000000241","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified","observedWatermarkMs":2}}, + {"name":"Quint frame 522 decode","frameHex":"0100000000000000000041","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 523 decode","frameHex":"0100000000000000000141","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 524 decode","frameHex":"0100000000000000000241","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 525 decode","frameHex":"0100000000000000000041","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 526 decode","frameHex":"0100000000000000000141","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 527 decode","frameHex":"0100000000000000000241","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 528 decode","frameHex":"0100000000000000000041","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 529 decode","frameHex":"0100000000000000000141","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 530 decode","frameHex":"0100000000000000000241","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 531 decode","frameHex":"0100000000000000000041","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 532 decode","frameHex":"0100000000000000000141","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 533 decode","frameHex":"0100000000000000000241","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 534 decode","frameHex":"0100000000000000000041","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 535 decode","frameHex":"0100000000000000000141","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 536 decode","frameHex":"0100000000000000000241","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 537 decode","frameHex":"0100000000000000010041","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":1,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 538 decode","frameHex":"0100000000000000010141","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":1,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 539 decode","frameHex":"0100000000000000010241","watermarkUtf8":null,"expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 540 decode","frameHex":"0100000000000000010041","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 541 decode","frameHex":"0100000000000000010141","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 542 decode","frameHex":"0100000000000000010241","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 543 decode","frameHex":"0100000000000000010041","watermarkUtf8":"0","expected":{"kind":"hit","createdAtMs":1,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 544 decode","frameHex":"0100000000000000010141","watermarkUtf8":"0","expected":{"kind":"hit","createdAtMs":1,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 545 decode","frameHex":"0100000000000000010241","watermarkUtf8":"0","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 546 decode","frameHex":"0100000000000000010041","watermarkUtf8":"1","expected":{"kind":"miss","reason":"watermark_fenced","observedWatermarkMs":1}}, + {"name":"Quint frame 547 decode","frameHex":"0100000000000000010141","watermarkUtf8":"1","expected":{"kind":"miss","reason":"watermark_fenced","observedWatermarkMs":1}}, + {"name":"Quint frame 548 decode","frameHex":"0100000000000000010241","watermarkUtf8":"1","expected":{"kind":"miss","reason":"watermark_fenced","observedWatermarkMs":1}}, + {"name":"Quint frame 549 decode","frameHex":"0100000000000000010041","watermarkUtf8":"001","expected":{"kind":"miss","reason":"watermark_fenced","observedWatermarkMs":1}}, + {"name":"Quint frame 550 decode","frameHex":"0100000000000000010141","watermarkUtf8":"001","expected":{"kind":"miss","reason":"watermark_fenced","observedWatermarkMs":1}}, + {"name":"Quint frame 551 decode","frameHex":"0100000000000000010241","watermarkUtf8":"001","expected":{"kind":"miss","reason":"watermark_fenced","observedWatermarkMs":1}}, + {"name":"Quint frame 552 decode","frameHex":"0100000000000000010041","watermarkUtf8":"2","expected":{"kind":"miss","reason":"watermark_fenced","observedWatermarkMs":2}}, + {"name":"Quint frame 553 decode","frameHex":"0100000000000000010141","watermarkUtf8":"2","expected":{"kind":"miss","reason":"watermark_fenced","observedWatermarkMs":2}}, + {"name":"Quint frame 554 decode","frameHex":"0100000000000000010241","watermarkUtf8":"2","expected":{"kind":"miss","reason":"watermark_fenced","observedWatermarkMs":2}}, + {"name":"Quint frame 555 decode","frameHex":"0100000000000000010041","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 556 decode","frameHex":"0100000000000000010141","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 557 decode","frameHex":"0100000000000000010241","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 558 decode","frameHex":"0100000000000000010041","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 559 decode","frameHex":"0100000000000000010141","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 560 decode","frameHex":"0100000000000000010241","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 561 decode","frameHex":"0100000000000000010041","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 562 decode","frameHex":"0100000000000000010141","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 563 decode","frameHex":"0100000000000000010241","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 564 decode","frameHex":"0100000000000000010041","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 565 decode","frameHex":"0100000000000000010141","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 566 decode","frameHex":"0100000000000000010241","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 567 decode","frameHex":"0100000000000000010041","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 568 decode","frameHex":"0100000000000000010141","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 569 decode","frameHex":"0100000000000000010241","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}} ], "untrackedDecodeVectors": [ - { - "name": "Quint frame 124 decode", - "frameHex": "01000000000000010000", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "" - } - }, - { - "name": "Quint frame 125 decode", - "frameHex": "01000000000000010001", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "" - } - }, - { - "name": "Quint frame 128 decode", - "frameHex": "0100000000000001000000", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "\u0000" - } - }, - { - "name": "Quint frame 129 decode", - "frameHex": "0100000000000001000100", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "00" - } - }, - { - "name": "Quint frame 132 decode", - "frameHex": "0100000000000001000041", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 133 decode", - "frameHex": "0100000000000001000141", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 136 decode", - "frameHex": "010000000000000100007f", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "" - } - }, - { - "name": "Quint frame 137 decode", - "frameHex": "010000000000000100017f", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "7f" - } - }, - { - "name": "Quint frame 140 decode", - "frameHex": "0100000000000001000080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�" - } - }, - { - "name": "Quint frame 141 decode", - "frameHex": "0100000000000001000180", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "80" - } - }, - { - "name": "Quint frame 144 decode", - "frameHex": "01000000000000010000ff", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�" - } - }, - { - "name": "Quint frame 145 decode", - "frameHex": "01000000000000010001ff", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "ff" - } - }, - { - "name": "Quint frame 148 decode", - "frameHex": "01000000000000010000c080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "��" - } - }, - { - "name": "Quint frame 149 decode", - "frameHex": "01000000000000010001c080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "c080" - } - }, - { - "name": "Quint frame 152 decode", - "frameHex": "01000000000000010000c280", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "€" - } - }, - { - "name": "Quint frame 153 decode", - "frameHex": "01000000000000010001c280", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "c280" - } - }, - { - "name": "Quint frame 156 decode", - "frameHex": "01000000000000010000dfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "߿" - } - }, - { - "name": "Quint frame 157 decode", - "frameHex": "01000000000000010001dfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "dfbf" - } - }, - { - "name": "Quint frame 160 decode", - "frameHex": "01000000000000010000c2", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�" - } - }, - { - "name": "Quint frame 161 decode", - "frameHex": "01000000000000010001c2", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "c2" - } - }, - { - "name": "Quint frame 164 decode", - "frameHex": "01000000000000010000c241", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�A" - } - }, - { - "name": "Quint frame 165 decode", - "frameHex": "01000000000000010001c241", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "c241" - } - }, - { - "name": "Quint frame 168 decode", - "frameHex": "01000000000000010000e282", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�" - } - }, - { - "name": "Quint frame 169 decode", - "frameHex": "01000000000000010001e282", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "e282" - } - }, - { - "name": "Quint frame 172 decode", - "frameHex": "01000000000000010000e28241", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�A" - } - }, - { - "name": "Quint frame 173 decode", - "frameHex": "01000000000000010001e28241", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "e28241" - } - }, - { - "name": "Quint frame 176 decode", - "frameHex": "01000000000000010000e09fbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "���" - } - }, - { - "name": "Quint frame 177 decode", - "frameHex": "01000000000000010001e09fbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "e09fbf" - } - }, - { - "name": "Quint frame 180 decode", - "frameHex": "01000000000000010000e0a080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "ࠀ" - } - }, - { - "name": "Quint frame 181 decode", - "frameHex": "01000000000000010001e0a080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "e0a080" - } - }, - { - "name": "Quint frame 184 decode", - "frameHex": "01000000000000010000ed9fbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "퟿" - } - }, - { - "name": "Quint frame 185 decode", - "frameHex": "01000000000000010001ed9fbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "ed9fbf" - } - }, - { - "name": "Quint frame 188 decode", - "frameHex": "01000000000000010000eda080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "���" - } - }, - { - "name": "Quint frame 189 decode", - "frameHex": "01000000000000010001eda080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "eda080" - } - }, - { - "name": "Quint frame 192 decode", - "frameHex": "01000000000000010000efbbbf41", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 193 decode", - "frameHex": "01000000000000010001efbbbf41", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "efbbbf41" - } - }, - { - "name": "Quint frame 196 decode", - "frameHex": "01000000000000010000efbfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "￿" - } - }, - { - "name": "Quint frame 197 decode", - "frameHex": "01000000000000010001efbfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "efbfbf" - } - }, - { - "name": "Quint frame 200 decode", - "frameHex": "01000000000000010000f08fbfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "����" - } - }, - { - "name": "Quint frame 201 decode", - "frameHex": "01000000000000010001f08fbfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f08fbfbf" - } - }, - { - "name": "Quint frame 204 decode", - "frameHex": "01000000000000010000f0908080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "𐀀" - } - }, - { - "name": "Quint frame 205 decode", - "frameHex": "01000000000000010001f0908080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f0908080" - } - }, - { - "name": "Quint frame 208 decode", - "frameHex": "01000000000000010000f48fbfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "􏿿" - } - }, - { - "name": "Quint frame 209 decode", - "frameHex": "01000000000000010001f48fbfbf", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f48fbfbf" - } - }, - { - "name": "Quint frame 212 decode", - "frameHex": "01000000000000010000f4908080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "����" - } - }, - { - "name": "Quint frame 213 decode", - "frameHex": "01000000000000010001f4908080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f4908080" - } - }, - { - "name": "Quint frame 216 decode", - "frameHex": "01000000000000010000f5808080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "����" - } - }, - { - "name": "Quint frame 217 decode", - "frameHex": "01000000000000010001f5808080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f5808080" - } - }, - { - "name": "Quint frame 220 decode", - "frameHex": "01000000000000010000f09080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�" - } - }, - { - "name": "Quint frame 221 decode", - "frameHex": "01000000000000010001f09080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f09080" - } - }, - { - "name": "Quint frame 224 decode", - "frameHex": "01000000000000010000e2c2a2", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "�¢" - } - }, - { - "name": "Quint frame 225 decode", - "frameHex": "01000000000000010001e2c2a2", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "e2c2a2" - } - }, - { - "name": "Quint frame 228 decode", - "frameHex": "010000000000000100008080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "��" - } - }, - { - "name": "Quint frame 229 decode", - "frameHex": "010000000000000100018080", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "8080" - } - }, - { - "name": "Quint frame 232 decode", - "frameHex": "01000000000000010000410042", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "A\u0000B" - } - }, - { - "name": "Quint frame 233 decode", - "frameHex": "01000000000000010001410042", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "410042" - } - }, - { - "name": "Quint frame 236 decode", - "frameHex": "01000000000000010000f09f9880", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "string", - "payloadUtf8": "😀" - } - }, - { - "name": "Quint frame 237 decode", - "frameHex": "01000000000000010001f09f9880", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 256, - "payloadType": "binary", - "payloadHex": "f09f9880" - } - }, - { - "name": "Quint frame 240 decode", - "frameHex": null, - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 241 decode", - "frameHex": null, - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 242 decode", - "frameHex": null, - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 243 decode", - "frameHex": null, - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 244 decode", - "frameHex": null, - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 245 decode", - "frameHex": null, - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 246 decode", - "frameHex": null, - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 247 decode", - "frameHex": null, - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 248 decode", - "frameHex": null, - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 249 decode", - "frameHex": null, - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 250 decode", - "frameHex": null, - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 251 decode", - "frameHex": null, - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 252 decode", - "frameHex": null, - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 253 decode", - "frameHex": null, - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 254 decode", - "frameHex": null, - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 255 decode", - "frameHex": null, - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 256 decode", - "frameHex": null, - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 257 decode", - "frameHex": null, - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 258 decode", - "frameHex": null, - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 259 decode", - "frameHex": null, - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 260 decode", - "frameHex": null, - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 261 decode", - "frameHex": null, - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 262 decode", - "frameHex": null, - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 263 decode", - "frameHex": null, - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 264 decode", - "frameHex": null, - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 265 decode", - "frameHex": null, - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 266 decode", - "frameHex": null, - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 267 decode", - "frameHex": null, - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 268 decode", - "frameHex": null, - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 269 decode", - "frameHex": null, - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 270 decode", - "frameHex": null, - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 271 decode", - "frameHex": null, - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 272 decode", - "frameHex": null, - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "value_absent" - } - }, - { - "name": "Quint frame 273 decode", - "frameHex": "0100", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 274 decode", - "frameHex": "0100", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 275 decode", - "frameHex": "0100", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 276 decode", - "frameHex": "0100", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 277 decode", - "frameHex": "0100", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 278 decode", - "frameHex": "0100", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 279 decode", - "frameHex": "0100", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 280 decode", - "frameHex": "0100", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 281 decode", - "frameHex": "0100", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 282 decode", - "frameHex": "0100", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 283 decode", - "frameHex": "0100", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 284 decode", - "frameHex": "0100", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 285 decode", - "frameHex": "0100", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 286 decode", - "frameHex": "0100", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 287 decode", - "frameHex": "0100", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 288 decode", - "frameHex": "0100", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 289 decode", - "frameHex": "0100", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 290 decode", - "frameHex": "0100", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 291 decode", - "frameHex": "0100", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 292 decode", - "frameHex": "0100", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 293 decode", - "frameHex": "0100", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 294 decode", - "frameHex": "0100", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 295 decode", - "frameHex": "0100", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 296 decode", - "frameHex": "0100", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 297 decode", - "frameHex": "0100", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 298 decode", - "frameHex": "0100", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 299 decode", - "frameHex": "0100", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 300 decode", - "frameHex": "0100", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 301 decode", - "frameHex": "0100", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 302 decode", - "frameHex": "0100", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 303 decode", - "frameHex": "0100", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 304 decode", - "frameHex": "0100", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 305 decode", - "frameHex": "0100", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 306 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 307 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 308 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": null, - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 309 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 310 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 311 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 312 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 313 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 314 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 315 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 316 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 317 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 318 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 319 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 320 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "001", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 321 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 322 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 323 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "2", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 324 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 325 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 326 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "-1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 327 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 328 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 329 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "1.0", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 330 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 331 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 332 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": " 1", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 333 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 334 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 335 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "1e3", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 336 decode", - "frameHex": "02000000000000000100", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 337 decode", - "frameHex": "02000000000000000101", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 338 decode", - "frameHex": "02000000000000000102", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "miss", - "reason": "unclassified" - } - }, - { - "name": "Quint frame 339 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 340 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 341 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": null, - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 342 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 343 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 344 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 345 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "0", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 346 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "0", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 347 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "0", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 348 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "1", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 349 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "1", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 350 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "1", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 351 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "001", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 352 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "001", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 353 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "001", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 354 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "2", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 355 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "2", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 356 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "2", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 357 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "-1", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 358 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "-1", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 359 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "-1", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 360 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "1.0", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 361 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "1.0", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 362 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "1.0", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 363 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": " 1", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 364 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": " 1", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 365 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": " 1", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 366 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "1e3", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 367 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "1e3", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 368 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "1e3", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 369 decode", - "frameHex": "0100000000000000000041", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 370 decode", - "frameHex": "0100000000000000000141", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "hit", - "createdAtMs": 0, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 371 decode", - "frameHex": "0100000000000000000241", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 372 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 373 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": null, - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 374 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": null, - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 375 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 376 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 377 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 378 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "0", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 379 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "0", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 380 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "0", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 381 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "1", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 382 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "1", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 383 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "1", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 384 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "001", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 385 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "001", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 386 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "001", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 387 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "2", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 388 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "2", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 389 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "2", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 390 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "-1", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 391 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "-1", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 392 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "-1", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 393 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "1.0", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 394 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "1.0", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 395 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "1.0", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 396 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": " 1", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 397 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": " 1", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 398 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": " 1", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 399 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "1e3", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 400 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "1e3", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 401 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "1e3", - "expected": { - "kind": "payload_encoding_error" - } - }, - { - "name": "Quint frame 402 decode", - "frameHex": "0100000000000000010041", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "string", - "payloadUtf8": "A" - } - }, - { - "name": "Quint frame 403 decode", - "frameHex": "0100000000000000010141", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "hit", - "createdAtMs": 1, - "payloadType": "binary", - "payloadHex": "41" - } - }, - { - "name": "Quint frame 404 decode", - "frameHex": "0100000000000000010241", - "watermarkUtf8": "9007199254740992", - "expected": { - "kind": "payload_encoding_error" - } - } + {"name":"Quint frame 124 decode","frameHex":"01000000000000010000","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":""}}, + {"name":"Quint frame 125 decode","frameHex":"01000000000000010001","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":""}}, + {"name":"Quint frame 128 decode","frameHex":"0100000000000001000000","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"\u0000"}}, + {"name":"Quint frame 129 decode","frameHex":"0100000000000001000100","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"00"}}, + {"name":"Quint frame 132 decode","frameHex":"0100000000000001000041","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 133 decode","frameHex":"0100000000000001000141","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 136 decode","frameHex":"010000000000000100007f","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":""}}, + {"name":"Quint frame 137 decode","frameHex":"010000000000000100017f","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"7f"}}, + {"name":"Quint frame 140 decode","frameHex":"0100000000000001000080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�"}}, + {"name":"Quint frame 141 decode","frameHex":"0100000000000001000180","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"80"}}, + {"name":"Quint frame 144 decode","frameHex":"01000000000000010000ff","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�"}}, + {"name":"Quint frame 145 decode","frameHex":"01000000000000010001ff","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"ff"}}, + {"name":"Quint frame 148 decode","frameHex":"01000000000000010000c080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"��"}}, + {"name":"Quint frame 149 decode","frameHex":"01000000000000010001c080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"c080"}}, + {"name":"Quint frame 152 decode","frameHex":"01000000000000010000c280","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"€"}}, + {"name":"Quint frame 153 decode","frameHex":"01000000000000010001c280","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"c280"}}, + {"name":"Quint frame 156 decode","frameHex":"01000000000000010000dfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"߿"}}, + {"name":"Quint frame 157 decode","frameHex":"01000000000000010001dfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"dfbf"}}, + {"name":"Quint frame 160 decode","frameHex":"01000000000000010000c2","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�"}}, + {"name":"Quint frame 161 decode","frameHex":"01000000000000010001c2","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"c2"}}, + {"name":"Quint frame 164 decode","frameHex":"01000000000000010000c241","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�A"}}, + {"name":"Quint frame 165 decode","frameHex":"01000000000000010001c241","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"c241"}}, + {"name":"Quint frame 168 decode","frameHex":"01000000000000010000e282","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�"}}, + {"name":"Quint frame 169 decode","frameHex":"01000000000000010001e282","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"e282"}}, + {"name":"Quint frame 172 decode","frameHex":"01000000000000010000e28241","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�A"}}, + {"name":"Quint frame 173 decode","frameHex":"01000000000000010001e28241","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"e28241"}}, + {"name":"Quint frame 176 decode","frameHex":"01000000000000010000e09fbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"���"}}, + {"name":"Quint frame 177 decode","frameHex":"01000000000000010001e09fbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"e09fbf"}}, + {"name":"Quint frame 180 decode","frameHex":"01000000000000010000e0a080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"ࠀ"}}, + {"name":"Quint frame 181 decode","frameHex":"01000000000000010001e0a080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"e0a080"}}, + {"name":"Quint frame 184 decode","frameHex":"01000000000000010000ed9fbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"퟿"}}, + {"name":"Quint frame 185 decode","frameHex":"01000000000000010001ed9fbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"ed9fbf"}}, + {"name":"Quint frame 188 decode","frameHex":"01000000000000010000eda080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"���"}}, + {"name":"Quint frame 189 decode","frameHex":"01000000000000010001eda080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"eda080"}}, + {"name":"Quint frame 192 decode","frameHex":"01000000000000010000efbbbf41","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 193 decode","frameHex":"01000000000000010001efbbbf41","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"efbbbf41"}}, + {"name":"Quint frame 196 decode","frameHex":"01000000000000010000efbfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"￿"}}, + {"name":"Quint frame 197 decode","frameHex":"01000000000000010001efbfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"efbfbf"}}, + {"name":"Quint frame 200 decode","frameHex":"01000000000000010000f08fbfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"����"}}, + {"name":"Quint frame 201 decode","frameHex":"01000000000000010001f08fbfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f08fbfbf"}}, + {"name":"Quint frame 204 decode","frameHex":"01000000000000010000f0908080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"𐀀"}}, + {"name":"Quint frame 205 decode","frameHex":"01000000000000010001f0908080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f0908080"}}, + {"name":"Quint frame 208 decode","frameHex":"01000000000000010000f48fbfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"􏿿"}}, + {"name":"Quint frame 209 decode","frameHex":"01000000000000010001f48fbfbf","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f48fbfbf"}}, + {"name":"Quint frame 212 decode","frameHex":"01000000000000010000f4908080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"����"}}, + {"name":"Quint frame 213 decode","frameHex":"01000000000000010001f4908080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f4908080"}}, + {"name":"Quint frame 216 decode","frameHex":"01000000000000010000f5808080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"����"}}, + {"name":"Quint frame 217 decode","frameHex":"01000000000000010001f5808080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f5808080"}}, + {"name":"Quint frame 220 decode","frameHex":"01000000000000010000f09080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�"}}, + {"name":"Quint frame 221 decode","frameHex":"01000000000000010001f09080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f09080"}}, + {"name":"Quint frame 224 decode","frameHex":"01000000000000010000e2c2a2","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"�¢"}}, + {"name":"Quint frame 225 decode","frameHex":"01000000000000010001e2c2a2","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"e2c2a2"}}, + {"name":"Quint frame 228 decode","frameHex":"010000000000000100008080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"��"}}, + {"name":"Quint frame 229 decode","frameHex":"010000000000000100018080","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"8080"}}, + {"name":"Quint frame 232 decode","frameHex":"01000000000000010000410042","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"A\u0000B"}}, + {"name":"Quint frame 233 decode","frameHex":"01000000000000010001410042","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"410042"}}, + {"name":"Quint frame 236 decode","frameHex":"01000000000000010000f09f9880","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"string","payloadUtf8":"😀"}}, + {"name":"Quint frame 237 decode","frameHex":"01000000000000010001f09f9880","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":256,"payloadType":"binary","payloadHex":"f09f9880"}}, + {"name":"Quint frame 240 decode","frameHex":null,"watermarkUtf8":null,"expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 241 decode","frameHex":null,"watermarkUtf8":null,"expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 242 decode","frameHex":null,"watermarkUtf8":null,"expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 243 decode","frameHex":null,"watermarkUtf8":"","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 244 decode","frameHex":null,"watermarkUtf8":"","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 245 decode","frameHex":null,"watermarkUtf8":"","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 246 decode","frameHex":null,"watermarkUtf8":"0","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 247 decode","frameHex":null,"watermarkUtf8":"0","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 248 decode","frameHex":null,"watermarkUtf8":"0","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 249 decode","frameHex":null,"watermarkUtf8":"1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 250 decode","frameHex":null,"watermarkUtf8":"1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 251 decode","frameHex":null,"watermarkUtf8":"1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 252 decode","frameHex":null,"watermarkUtf8":"001","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 253 decode","frameHex":null,"watermarkUtf8":"001","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 254 decode","frameHex":null,"watermarkUtf8":"001","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 255 decode","frameHex":null,"watermarkUtf8":"2","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 256 decode","frameHex":null,"watermarkUtf8":"2","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 257 decode","frameHex":null,"watermarkUtf8":"2","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 258 decode","frameHex":null,"watermarkUtf8":"-1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 259 decode","frameHex":null,"watermarkUtf8":"-1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 260 decode","frameHex":null,"watermarkUtf8":"-1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 261 decode","frameHex":null,"watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 262 decode","frameHex":null,"watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 263 decode","frameHex":null,"watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 264 decode","frameHex":null,"watermarkUtf8":" 1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 265 decode","frameHex":null,"watermarkUtf8":" 1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 266 decode","frameHex":null,"watermarkUtf8":" 1","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 267 decode","frameHex":null,"watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 268 decode","frameHex":null,"watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 269 decode","frameHex":null,"watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 270 decode","frameHex":null,"watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 271 decode","frameHex":null,"watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 272 decode","frameHex":null,"watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"value_absent"}}, + {"name":"Quint frame 273 decode","frameHex":"0100","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 274 decode","frameHex":"0100","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 275 decode","frameHex":"0100","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 276 decode","frameHex":"0100","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 277 decode","frameHex":"0100","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 278 decode","frameHex":"0100","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 279 decode","frameHex":"0100","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 280 decode","frameHex":"0100","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 281 decode","frameHex":"0100","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 282 decode","frameHex":"0100","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 283 decode","frameHex":"0100","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 284 decode","frameHex":"0100","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 285 decode","frameHex":"0100","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 286 decode","frameHex":"0100","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 287 decode","frameHex":"0100","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 288 decode","frameHex":"0100","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 289 decode","frameHex":"0100","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 290 decode","frameHex":"0100","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 291 decode","frameHex":"0100","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 292 decode","frameHex":"0100","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 293 decode","frameHex":"0100","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 294 decode","frameHex":"0100","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 295 decode","frameHex":"0100","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 296 decode","frameHex":"0100","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 297 decode","frameHex":"0100","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 298 decode","frameHex":"0100","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 299 decode","frameHex":"0100","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 300 decode","frameHex":"0100","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 301 decode","frameHex":"0100","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 302 decode","frameHex":"0100","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 303 decode","frameHex":"0100","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 304 decode","frameHex":"0100","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 305 decode","frameHex":"0100","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 306 decode","frameHex":"02000000000000000100","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 307 decode","frameHex":"02000000000000000101","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 308 decode","frameHex":"02000000000000000102","watermarkUtf8":null,"expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 309 decode","frameHex":"02000000000000000100","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 310 decode","frameHex":"02000000000000000101","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 311 decode","frameHex":"02000000000000000102","watermarkUtf8":"","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 312 decode","frameHex":"02000000000000000100","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 313 decode","frameHex":"02000000000000000101","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 314 decode","frameHex":"02000000000000000102","watermarkUtf8":"0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 315 decode","frameHex":"02000000000000000100","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 316 decode","frameHex":"02000000000000000101","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 317 decode","frameHex":"02000000000000000102","watermarkUtf8":"1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 318 decode","frameHex":"02000000000000000100","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 319 decode","frameHex":"02000000000000000101","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 320 decode","frameHex":"02000000000000000102","watermarkUtf8":"001","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 321 decode","frameHex":"02000000000000000100","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 322 decode","frameHex":"02000000000000000101","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 323 decode","frameHex":"02000000000000000102","watermarkUtf8":"2","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 324 decode","frameHex":"02000000000000000100","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 325 decode","frameHex":"02000000000000000101","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 326 decode","frameHex":"02000000000000000102","watermarkUtf8":"-1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 327 decode","frameHex":"02000000000000000100","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 328 decode","frameHex":"02000000000000000101","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 329 decode","frameHex":"02000000000000000102","watermarkUtf8":"1.0","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 330 decode","frameHex":"02000000000000000100","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 331 decode","frameHex":"02000000000000000101","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 332 decode","frameHex":"02000000000000000102","watermarkUtf8":" 1","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 333 decode","frameHex":"02000000000000000100","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 334 decode","frameHex":"02000000000000000101","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 335 decode","frameHex":"02000000000000000102","watermarkUtf8":"1e3","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 336 decode","frameHex":"02000000000000000100","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 337 decode","frameHex":"02000000000000000101","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 338 decode","frameHex":"02000000000000000102","watermarkUtf8":"9007199254740992","expected":{"kind":"miss","reason":"unclassified"}}, + {"name":"Quint frame 339 decode","frameHex":"0100000000000000000041","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":0,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 340 decode","frameHex":"0100000000000000000141","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":0,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 341 decode","frameHex":"0100000000000000000241","watermarkUtf8":null,"expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 342 decode","frameHex":"0100000000000000000041","watermarkUtf8":"","expected":{"kind":"hit","createdAtMs":0,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 343 decode","frameHex":"0100000000000000000141","watermarkUtf8":"","expected":{"kind":"hit","createdAtMs":0,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 344 decode","frameHex":"0100000000000000000241","watermarkUtf8":"","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 345 decode","frameHex":"0100000000000000000041","watermarkUtf8":"0","expected":{"kind":"hit","createdAtMs":0,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 346 decode","frameHex":"0100000000000000000141","watermarkUtf8":"0","expected":{"kind":"hit","createdAtMs":0,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 347 decode","frameHex":"0100000000000000000241","watermarkUtf8":"0","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 348 decode","frameHex":"0100000000000000000041","watermarkUtf8":"1","expected":{"kind":"hit","createdAtMs":0,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 349 decode","frameHex":"0100000000000000000141","watermarkUtf8":"1","expected":{"kind":"hit","createdAtMs":0,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 350 decode","frameHex":"0100000000000000000241","watermarkUtf8":"1","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 351 decode","frameHex":"0100000000000000000041","watermarkUtf8":"001","expected":{"kind":"hit","createdAtMs":0,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 352 decode","frameHex":"0100000000000000000141","watermarkUtf8":"001","expected":{"kind":"hit","createdAtMs":0,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 353 decode","frameHex":"0100000000000000000241","watermarkUtf8":"001","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 354 decode","frameHex":"0100000000000000000041","watermarkUtf8":"2","expected":{"kind":"hit","createdAtMs":0,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 355 decode","frameHex":"0100000000000000000141","watermarkUtf8":"2","expected":{"kind":"hit","createdAtMs":0,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 356 decode","frameHex":"0100000000000000000241","watermarkUtf8":"2","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 357 decode","frameHex":"0100000000000000000041","watermarkUtf8":"-1","expected":{"kind":"hit","createdAtMs":0,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 358 decode","frameHex":"0100000000000000000141","watermarkUtf8":"-1","expected":{"kind":"hit","createdAtMs":0,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 359 decode","frameHex":"0100000000000000000241","watermarkUtf8":"-1","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 360 decode","frameHex":"0100000000000000000041","watermarkUtf8":"1.0","expected":{"kind":"hit","createdAtMs":0,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 361 decode","frameHex":"0100000000000000000141","watermarkUtf8":"1.0","expected":{"kind":"hit","createdAtMs":0,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 362 decode","frameHex":"0100000000000000000241","watermarkUtf8":"1.0","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 363 decode","frameHex":"0100000000000000000041","watermarkUtf8":" 1","expected":{"kind":"hit","createdAtMs":0,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 364 decode","frameHex":"0100000000000000000141","watermarkUtf8":" 1","expected":{"kind":"hit","createdAtMs":0,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 365 decode","frameHex":"0100000000000000000241","watermarkUtf8":" 1","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 366 decode","frameHex":"0100000000000000000041","watermarkUtf8":"1e3","expected":{"kind":"hit","createdAtMs":0,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 367 decode","frameHex":"0100000000000000000141","watermarkUtf8":"1e3","expected":{"kind":"hit","createdAtMs":0,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 368 decode","frameHex":"0100000000000000000241","watermarkUtf8":"1e3","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 369 decode","frameHex":"0100000000000000000041","watermarkUtf8":"9007199254740992","expected":{"kind":"hit","createdAtMs":0,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 370 decode","frameHex":"0100000000000000000141","watermarkUtf8":"9007199254740992","expected":{"kind":"hit","createdAtMs":0,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 371 decode","frameHex":"0100000000000000000241","watermarkUtf8":"9007199254740992","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 372 decode","frameHex":"0100000000000000010041","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":1,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 373 decode","frameHex":"0100000000000000010141","watermarkUtf8":null,"expected":{"kind":"hit","createdAtMs":1,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 374 decode","frameHex":"0100000000000000010241","watermarkUtf8":null,"expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 375 decode","frameHex":"0100000000000000010041","watermarkUtf8":"","expected":{"kind":"hit","createdAtMs":1,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 376 decode","frameHex":"0100000000000000010141","watermarkUtf8":"","expected":{"kind":"hit","createdAtMs":1,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 377 decode","frameHex":"0100000000000000010241","watermarkUtf8":"","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 378 decode","frameHex":"0100000000000000010041","watermarkUtf8":"0","expected":{"kind":"hit","createdAtMs":1,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 379 decode","frameHex":"0100000000000000010141","watermarkUtf8":"0","expected":{"kind":"hit","createdAtMs":1,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 380 decode","frameHex":"0100000000000000010241","watermarkUtf8":"0","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 381 decode","frameHex":"0100000000000000010041","watermarkUtf8":"1","expected":{"kind":"hit","createdAtMs":1,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 382 decode","frameHex":"0100000000000000010141","watermarkUtf8":"1","expected":{"kind":"hit","createdAtMs":1,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 383 decode","frameHex":"0100000000000000010241","watermarkUtf8":"1","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 384 decode","frameHex":"0100000000000000010041","watermarkUtf8":"001","expected":{"kind":"hit","createdAtMs":1,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 385 decode","frameHex":"0100000000000000010141","watermarkUtf8":"001","expected":{"kind":"hit","createdAtMs":1,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 386 decode","frameHex":"0100000000000000010241","watermarkUtf8":"001","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 387 decode","frameHex":"0100000000000000010041","watermarkUtf8":"2","expected":{"kind":"hit","createdAtMs":1,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 388 decode","frameHex":"0100000000000000010141","watermarkUtf8":"2","expected":{"kind":"hit","createdAtMs":1,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 389 decode","frameHex":"0100000000000000010241","watermarkUtf8":"2","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 390 decode","frameHex":"0100000000000000010041","watermarkUtf8":"-1","expected":{"kind":"hit","createdAtMs":1,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 391 decode","frameHex":"0100000000000000010141","watermarkUtf8":"-1","expected":{"kind":"hit","createdAtMs":1,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 392 decode","frameHex":"0100000000000000010241","watermarkUtf8":"-1","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 393 decode","frameHex":"0100000000000000010041","watermarkUtf8":"1.0","expected":{"kind":"hit","createdAtMs":1,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 394 decode","frameHex":"0100000000000000010141","watermarkUtf8":"1.0","expected":{"kind":"hit","createdAtMs":1,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 395 decode","frameHex":"0100000000000000010241","watermarkUtf8":"1.0","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 396 decode","frameHex":"0100000000000000010041","watermarkUtf8":" 1","expected":{"kind":"hit","createdAtMs":1,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 397 decode","frameHex":"0100000000000000010141","watermarkUtf8":" 1","expected":{"kind":"hit","createdAtMs":1,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 398 decode","frameHex":"0100000000000000010241","watermarkUtf8":" 1","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 399 decode","frameHex":"0100000000000000010041","watermarkUtf8":"1e3","expected":{"kind":"hit","createdAtMs":1,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 400 decode","frameHex":"0100000000000000010141","watermarkUtf8":"1e3","expected":{"kind":"hit","createdAtMs":1,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 401 decode","frameHex":"0100000000000000010241","watermarkUtf8":"1e3","expected":{"kind":"payload_encoding_error"}}, + {"name":"Quint frame 402 decode","frameHex":"0100000000000000010041","watermarkUtf8":"9007199254740992","expected":{"kind":"hit","createdAtMs":1,"payloadType":"string","payloadUtf8":"A"}}, + {"name":"Quint frame 403 decode","frameHex":"0100000000000000010141","watermarkUtf8":"9007199254740992","expected":{"kind":"hit","createdAtMs":1,"payloadType":"binary","payloadHex":"41"}}, + {"name":"Quint frame 404 decode","frameHex":"0100000000000000010241","watermarkUtf8":"9007199254740992","expected":{"kind":"payload_encoding_error"}} ], "invalidTimestampVectors": [ - { - "name": "Quint frame 570 encode", - "input": -1 - }, - { - "name": "Quint frame 571 encode", - "input": 0.5 - }, - { - "name": "Quint frame 572 encode", - "input": 9007199254740992 - }, - { - "name": "Quint frame 573 encode", - "input": 0, - "specialInput": "NaN" - }, - { - "name": "Quint frame 574 encode", - "input": 0, - "specialInput": "Infinity" - }, - { - "name": "Quint frame 575 encode", - "input": 0, - "specialInput": "-Infinity" - } + {"name":"Quint frame 570 encode","input":-1}, + {"name":"Quint frame 571 encode","input":0.5}, + {"name":"Quint frame 572 encode","input":9007199254740992}, + {"name":"Quint frame 573 encode","input":0,"specialInput":"NaN"}, + {"name":"Quint frame 574 encode","input":0,"specialInput":"Infinity"}, + {"name":"Quint frame 575 encode","input":0,"specialInput":"-Infinity"} ], "durationVectors": [ - { - "name": "Quint frame 576 duration", - "input": -1, - "expected": null - }, - { - "name": "Quint frame 577 duration", - "input": 0, - "expected": null - }, - { - "name": "Quint frame 578 duration", - "input": 0.5, - "expected": 1 - }, - { - "name": "Quint frame 579 duration", - "input": 1, - "expected": 1 - }, - { - "name": "Quint frame 580 duration", - "input": 1.999, - "expected": 2 - }, - { - "name": "Quint frame 581 duration", - "input": 31536000000, - "expected": 31536000000 - }, - { - "name": "Quint frame 582 duration", - "input": 31535999999.999, - "expected": 31536000000 - }, - { - "name": "Quint frame 583 duration", - "input": 31536000000.001, - "expected": null - }, - { - "name": "Quint frame 584 duration", - "input": 31536000001, - "expected": null - }, - { - "name": "Quint frame 585 duration", - "input": 9007199254740992, - "expected": null - }, - { - "name": "Quint frame 586 duration", - "input": 0, - "specialInput": "NaN", - "expected": null - }, - { - "name": "Quint frame 587 duration", - "input": 0, - "specialInput": "Infinity", - "expected": null - }, - { - "name": "Quint frame 588 duration", - "input": 0, - "specialInput": "-Infinity", - "expected": null - } + {"name":"Quint frame 576 duration","input":-1,"expected":null}, + {"name":"Quint frame 577 duration","input":0,"expected":null}, + {"name":"Quint frame 578 duration","input":0.5,"expected":1}, + {"name":"Quint frame 579 duration","input":1,"expected":1}, + {"name":"Quint frame 580 duration","input":1.999,"expected":2}, + {"name":"Quint frame 581 duration","input":31536000000,"expected":31536000000}, + {"name":"Quint frame 582 duration","input":31535999999.999,"expected":31536000000}, + {"name":"Quint frame 583 duration","input":31536000000.001,"expected":null}, + {"name":"Quint frame 584 duration","input":31536000001,"expected":null}, + {"name":"Quint frame 585 duration","input":9007199254740992,"expected":null}, + {"name":"Quint frame 586 duration","input":0,"specialInput":"NaN","expected":null}, + {"name":"Quint frame 587 duration","input":0,"specialInput":"Infinity","expected":null}, + {"name":"Quint frame 588 duration","input":0,"specialInput":"-Infinity","expected":null} ] } diff --git a/formal/quint-invalidation-vectors.json b/formal/quint-invalidation-vectors.json index f0d4b79a..1d321981 100644 --- a/formal/quint-invalidation-vectors.json +++ b/formal/quint-invalidation-vectors.json @@ -4,5280 +4,297 @@ "model": "formal/dialcache-invalidation-transition.qnt", "sourceSha256": { "formal/dialcache-invalidation-transition.qnt": "f1d3a70e5a8acb79b3ffd3558714a74fc456c7e2641c661c3fb4b61220236e69", - "formal/generate-invalidation-vectors.mjs": "08f3069325d731dd6a35232e99c2889ef42589d77fab1439c3d655f1bf6503d6" + "formal/generate-invalidation-vectors.mjs": "a5751b5b8cc1bce49d0daa7babc47a958a3d230c11b724d80858d228b61424ec" } }, "vectors": [ - { - "name": "Quint 000: zero buffer / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1000", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 001: zero buffer / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1000", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 002: zero buffer / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 13659000 - } - } - }, - { - "name": "Quint 003: zero buffer / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1000", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 004: zero buffer / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 005: zero buffer / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1000", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 006: zero buffer / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 007: zero buffer / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1000", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 008: zero buffer / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1000", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 009: zero buffer / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1000", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 010: zero buffer / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1000", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 011: zero buffer / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1000", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 012: buffered cutoff / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "200", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 013: buffered cutoff / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "200", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 014: buffered cutoff / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "200", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 13659000 - } - } - }, - { - "name": "Quint 015: buffered cutoff / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "200", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 016: buffered cutoff / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "200", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 017: buffered cutoff / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "200", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 018: buffered cutoff / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "200", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 019: buffered cutoff / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "200", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 020: buffered cutoff / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "200", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 021: buffered cutoff / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "200", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 022: buffered cutoff / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "200", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 023: buffered cutoff / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "200", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 024: retention above floor / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "4000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "4001000", - "ttlMs": 7660000 - } - } - }, - { - "name": "Quint 025: retention above floor / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "4000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "4001000", - "ttlMs": 7660000 - } - } - }, - { - "name": "Quint 026: retention above floor / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "4000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 13659000 - } - } - }, - { - "name": "Quint 027: retention above floor / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "4000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "4001000", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 028: retention above floor / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "4000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "4001000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 029: retention above floor / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "4000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "4001000", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 030: retention above floor / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "4000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "4001000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 031: retention above floor / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "4000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "4001000", - "ttlMs": 7660000 - } - } - }, - { - "name": "Quint 032: retention above floor / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "4000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "4001000", - "ttlMs": 7660000 - } - } - }, - { - "name": "Quint 033: retention above floor / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "4000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "4001000", - "ttlMs": 7660000 - } - } - }, - { - "name": "Quint 034: retention above floor / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "4000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "4001000", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 035: retention above floor / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "4000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "4001000", - "ttlMs": 7660000 - } - } - }, - { - "name": "Quint 036: maximum buffer / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "31536000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "31536001000", - "ttlMs": 31539660000 - } - } - }, - { - "name": "Quint 037: maximum buffer / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "31536000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "31536001000", - "ttlMs": 31539660000 - } - } - }, - { - "name": "Quint 038: maximum buffer / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "31536000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "31536001000", - "ttlMs": 31539660000 - } - } - }, - { - "name": "Quint 039: maximum buffer / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "31536000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "31536001000", - "ttlMs": 31539660000 - } - } - }, - { - "name": "Quint 040: maximum buffer / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "31536000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "31536001000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 041: maximum buffer / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "31536000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "31536001000", - "ttlMs": 31539660000 - } - } - }, - { - "name": "Quint 042: maximum buffer / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "31536000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "31536001000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 043: maximum buffer / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "31536000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "31536001000", - "ttlMs": 31539660000 - } - } - }, - { - "name": "Quint 044: maximum buffer / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "31536000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "31536001000", - "ttlMs": 31539660000 - } - } - }, - { - "name": "Quint 045: maximum buffer / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "31536000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "31536001000", - "ttlMs": 31539660000 - } - } - }, - { - "name": "Quint 046: maximum buffer / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "31536000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "31536001000", - "ttlMs": 31539660000 - } - } - }, - { - "name": "Quint 047: maximum buffer / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "31536000000", - "invalidatedAtMs": "1000", - "expected": { - "state": { - "kind": "string", - "value": "31536001000", - "ttlMs": 31539660000 - } - } - }, - { - "name": "Quint 048: maximum safe sum / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740990", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 049: maximum safe sum / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740990", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 050: maximum safe sum / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740990", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 051: maximum safe sum / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740990", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 052: maximum safe sum / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740990", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 053: maximum safe sum / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740990", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 054: maximum safe sum / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740990", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 055: maximum safe sum / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740990", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 056: maximum safe sum / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740990", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 057: maximum safe sum / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740990", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 058: maximum safe sum / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740990", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 059: maximum safe sum / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740990", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 060: leading decimal zeros / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "000200", - "invalidatedAtMs": "0001000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 061: leading decimal zeros / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "000200", - "invalidatedAtMs": "0001000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 062: leading decimal zeros / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "000200", - "invalidatedAtMs": "0001000", - "expected": { - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 13659000 - } - } - }, - { - "name": "Quint 063: leading decimal zeros / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "000200", - "invalidatedAtMs": "0001000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 064: leading decimal zeros / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "000200", - "invalidatedAtMs": "0001000", - "expected": { - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 065: leading decimal zeros / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "000200", - "invalidatedAtMs": "0001000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 066: leading decimal zeros / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "000200", - "invalidatedAtMs": "0001000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 067: leading decimal zeros / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "000200", - "invalidatedAtMs": "0001000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 068: leading decimal zeros / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "000200", - "invalidatedAtMs": "0001000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 069: leading decimal zeros / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "000200", - "invalidatedAtMs": "0001000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 070: leading decimal zeros / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "000200", - "invalidatedAtMs": "0001000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 071: leading decimal zeros / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "000200", - "invalidatedAtMs": "0001000", - "expected": { - "state": { - "kind": "string", - "value": "1200", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 072: negative buffer / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "-1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 073: negative buffer / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "-1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 074: negative buffer / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "-1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 075: negative buffer / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "-1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 076: negative buffer / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "-1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 077: negative buffer / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "-1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 078: negative buffer / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "-1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 079: negative buffer / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "-1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 080: negative buffer / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "-1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 081: negative buffer / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "-1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 082: negative buffer / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "-1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 083: negative buffer / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "-1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 084: fractional buffer / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "1.5", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 085: fractional buffer / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "1.5", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 086: fractional buffer / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "1.5", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 087: fractional buffer / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "1.5", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 088: fractional buffer / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "1.5", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 089: fractional buffer / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "1.5", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 090: fractional buffer / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "1.5", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 091: fractional buffer / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "1.5", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 092: fractional buffer / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "1.5", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 093: fractional buffer / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "1.5", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 094: fractional buffer / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "1.5", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 095: fractional buffer / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "1.5", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 096: over-limit buffer / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "31536000001", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 097: over-limit buffer / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "31536000001", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 098: over-limit buffer / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "31536000001", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 099: over-limit buffer / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "31536000001", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 100: over-limit buffer / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "31536000001", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 101: over-limit buffer / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "31536000001", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 102: over-limit buffer / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "31536000001", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 103: over-limit buffer / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "31536000001", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 104: over-limit buffer / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "31536000001", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 105: over-limit buffer / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "31536000001", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 106: over-limit buffer / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "31536000001", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 107: over-limit buffer / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "31536000001", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 108: unsafe buffer / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "9007199254740992", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 109: unsafe buffer / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "9007199254740992", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 110: unsafe buffer / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "9007199254740992", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 111: unsafe buffer / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "9007199254740992", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 112: unsafe buffer / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "9007199254740992", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 113: unsafe buffer / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "9007199254740992", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 114: unsafe buffer / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "9007199254740992", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 115: unsafe buffer / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "9007199254740992", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 116: unsafe buffer / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "9007199254740992", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 117: unsafe buffer / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "9007199254740992", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 118: unsafe buffer / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "9007199254740992", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 119: unsafe buffer / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "9007199254740992", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 120: exponent timestamp / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1e3", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 121: exponent timestamp / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1e3", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 122: exponent timestamp / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1e3", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 123: exponent timestamp / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1e3", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 124: exponent timestamp / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1e3", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 125: exponent timestamp / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1e3", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 126: exponent timestamp / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1e3", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 127: exponent timestamp / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1e3", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 128: exponent timestamp / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1e3", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 129: exponent timestamp / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1e3", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 130: exponent timestamp / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1e3", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 131: exponent timestamp / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1e3", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 132: negative timestamp / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "-1", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 133: negative timestamp / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "-1", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 134: negative timestamp / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "-1", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 135: negative timestamp / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "-1", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 136: negative timestamp / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "-1", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 137: negative timestamp / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "-1", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 138: negative timestamp / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "-1", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 139: negative timestamp / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "-1", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 140: negative timestamp / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "-1", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 141: negative timestamp / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "-1", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 142: negative timestamp / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "-1", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 143: negative timestamp / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "-1", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 144: unsafe sum / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740991", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 145: unsafe sum / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740991", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 146: unsafe sum / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740991", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 147: unsafe sum / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740991", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 148: unsafe sum / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740991", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 149: unsafe sum / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740991", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 150: unsafe sum / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740991", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 151: unsafe sum / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740991", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 152: unsafe sum / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740991", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 153: unsafe sum / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740991", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 154: unsafe sum / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740991", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 155: unsafe sum / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "1", - "invalidatedAtMs": "9007199254740991", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 156: empty buffer / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 157: empty buffer / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 158: empty buffer / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 159: empty buffer / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 160: empty buffer / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 161: empty buffer / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 162: empty buffer / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 163: empty buffer / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 164: empty buffer / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 165: empty buffer / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 166: empty buffer / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 167: empty buffer / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 168: explicit plus buffer / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "+1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 169: explicit plus buffer / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "+1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 170: explicit plus buffer / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "+1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 171: explicit plus buffer / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "+1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 172: explicit plus buffer / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "+1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 173: explicit plus buffer / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "+1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 174: explicit plus buffer / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "+1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 175: explicit plus buffer / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "+1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 176: explicit plus buffer / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "+1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 177: explicit plus buffer / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "+1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 178: explicit plus buffer / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "+1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 179: explicit plus buffer / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "+1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 180: space-prefixed buffer / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": " 1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 181: space-prefixed buffer / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": " 1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 182: space-prefixed buffer / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": " 1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 183: space-prefixed buffer / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": " 1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 184: space-prefixed buffer / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": " 1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 185: space-prefixed buffer / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": " 1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 186: space-prefixed buffer / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": " 1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 187: space-prefixed buffer / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": " 1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 188: space-prefixed buffer / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": " 1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 189: space-prefixed buffer / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": " 1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 190: space-prefixed buffer / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": " 1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 191: space-prefixed buffer / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": " 1", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 192: hexadecimal buffer / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "0x10", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 193: hexadecimal buffer / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "0x10", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 194: hexadecimal buffer / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "0x10", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 195: hexadecimal buffer / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "0x10", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 196: hexadecimal buffer / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "0x10", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 197: hexadecimal buffer / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "0x10", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 198: hexadecimal buffer / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "0x10", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 199: hexadecimal buffer / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "0x10", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 200: hexadecimal buffer / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "0x10", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 201: hexadecimal buffer / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "0x10", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 202: hexadecimal buffer / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "0x10", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 203: hexadecimal buffer / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "0x10", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 204: newline-suffixed buffer / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "1\n", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 205: newline-suffixed buffer / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "1\n", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 206: newline-suffixed buffer / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "1\n", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 207: newline-suffixed buffer / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "1\n", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 208: newline-suffixed buffer / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "1\n", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 209: newline-suffixed buffer / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "1\n", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 210: newline-suffixed buffer / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "1\n", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 211: newline-suffixed buffer / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "1\n", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 212: newline-suffixed buffer / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "1\n", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 213: newline-suffixed buffer / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "1\n", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 214: newline-suffixed buffer / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "1\n", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 215: newline-suffixed buffer / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "1\n", - "invalidatedAtMs": "1000", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 216: fractional timestamp / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1.5", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 217: fractional timestamp / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1.5", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 218: fractional timestamp / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1.5", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 219: fractional timestamp / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1.5", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 220: fractional timestamp / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1.5", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 221: fractional timestamp / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1.5", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 222: fractional timestamp / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1.5", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 223: fractional timestamp / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1.5", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 224: fractional timestamp / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1.5", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 225: fractional timestamp / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1.5", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 226: fractional timestamp / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1.5", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 227: fractional timestamp / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "1.5", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 228: unsafe timestamp / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740992", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 229: unsafe timestamp / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740992", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 230: unsafe timestamp / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740992", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 231: unsafe timestamp / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740992", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 232: unsafe timestamp / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740992", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 233: unsafe timestamp / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740992", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 234: unsafe timestamp / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740992", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 235: unsafe timestamp / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740992", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 236: unsafe timestamp / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740992", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 237: unsafe timestamp / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740992", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 238: unsafe timestamp / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740992", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 239: unsafe timestamp / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740992", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 240: maximum timestamp / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740991", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 241: maximum timestamp / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740991", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 242: maximum timestamp / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740991", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 243: maximum timestamp / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740991", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 244: maximum timestamp / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740991", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 245: maximum timestamp / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740991", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 246: maximum timestamp / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740991", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 247: maximum timestamp / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740991", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 248: maximum timestamp / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740991", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 249: maximum timestamp / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740991", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 250: maximum timestamp / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740991", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 251: maximum timestamp / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "9007199254740991", - "expected": { - "state": { - "kind": "string", - "value": "9007199254740991", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 252: zero timestamp / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "0", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 253: zero timestamp / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "0", - "expected": { - "state": { - "kind": "string", - "value": "900", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 254: zero timestamp / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "0", - "expected": { - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 13660000 - } - } - }, - { - "name": "Quint 255: zero timestamp / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "0", - "expected": { - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 256: zero timestamp / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "0", - "expected": { - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 257: zero timestamp / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "0", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 258: zero timestamp / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "0", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 259: zero timestamp / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "0", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 260: zero timestamp / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "0", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 261: zero timestamp / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "0", - "expected": { - "state": { - "kind": "string", - "value": "900", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 262: zero timestamp / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "0", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 263: zero timestamp / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "0", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 264: empty timestamp / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "", - "expected": { - "error": true, - "state": { - "kind": "absent", - "ttlMs": -2 - } - } - }, - { - "name": "Quint 265: empty timestamp / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 266: empty timestamp / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 267: empty timestamp / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 268: empty timestamp / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 269: empty timestamp / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 270: empty timestamp / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 271: empty timestamp / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 272: empty timestamp / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "", - "expected": { - "error": true, - "state": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - } - } - }, - { - "name": "Quint 273: empty timestamp / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 274: empty timestamp / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 275: empty timestamp / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "0", - "invalidatedAtMs": "", - "expected": { - "error": true, - "state": { - "kind": "string", - "value": "", - "ttlMs": 100 - } - } - }, - { - "name": "Quint 276: all-zero decimal text / absent", - "existing": { - "kind": "absent", - "ttlMs": -2 - }, - "futureBufferMs": "000", - "invalidatedAtMs": "000", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 277: all-zero decimal text / valid finite", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 100 - }, - "futureBufferMs": "000", - "invalidatedAtMs": "000", - "expected": { - "state": { - "kind": "string", - "value": "900", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 278: all-zero decimal text / future finite", - "existing": { - "kind": "string", - "value": "10000000", - "ttlMs": 100 - }, - "futureBufferMs": "000", - "invalidatedAtMs": "000", - "expected": { - "state": { - "kind": "string", - "value": "10000000", - "ttlMs": 13660000 - } - } - }, - { - "name": "Quint 279: all-zero decimal text / valid longer TTL", - "existing": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - }, - "futureBufferMs": "000", - "invalidatedAtMs": "000", - "expected": { - "state": { - "kind": "string", - "value": "900", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 280: all-zero decimal text / valid persistent", - "existing": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - }, - "futureBufferMs": "000", - "invalidatedAtMs": "000", - "expected": { - "state": { - "kind": "string", - "value": "2000", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 281: all-zero decimal text / malformed finite", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": 20000000 - }, - "futureBufferMs": "000", - "invalidatedAtMs": "000", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 282: all-zero decimal text / malformed persistent", - "existing": { - "kind": "string", - "value": "bad", - "ttlMs": -1 - }, - "futureBufferMs": "000", - "invalidatedAtMs": "000", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": -1 - } - } - }, - { - "name": "Quint 283: all-zero decimal text / ordered finite list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": 20000000 - }, - "futureBufferMs": "000", - "invalidatedAtMs": "000", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 284: all-zero decimal text / ordered persistent list", - "existing": { - "kind": "list", - "values": [ - "first", - "second" - ], - "ttlMs": -1 - }, - "futureBufferMs": "000", - "invalidatedAtMs": "000", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 285: all-zero decimal text / leading-zero stored decimal", - "existing": { - "kind": "string", - "value": "0000900", - "ttlMs": 100 - }, - "futureBufferMs": "000", - "invalidatedAtMs": "000", - "expected": { - "state": { - "kind": "string", - "value": "900", - "ttlMs": 7200000 - } - } - }, - { - "name": "Quint 286: all-zero decimal text / unsafe stored decimal", - "existing": { - "kind": "string", - "value": "9007199254740992", - "ttlMs": 20000000 - }, - "futureBufferMs": "000", - "invalidatedAtMs": "000", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": 20000000 - } - } - }, - { - "name": "Quint 287: all-zero decimal text / empty stored string", - "existing": { - "kind": "string", - "value": "", - "ttlMs": 100 - }, - "futureBufferMs": "000", - "invalidatedAtMs": "000", - "expected": { - "state": { - "kind": "string", - "value": "0", - "ttlMs": 7200000 - } - } - } + {"name":"Quint 000: zero buffer / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"0","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1000","ttlMs":7200000}}}, + {"name":"Quint 001: zero buffer / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1000","ttlMs":7200000}}}, + {"name":"Quint 002: zero buffer / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"10000000","ttlMs":13659000}}}, + {"name":"Quint 003: zero buffer / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1000","ttlMs":20000000}}}, + {"name":"Quint 004: zero buffer / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 005: zero buffer / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1000","ttlMs":20000000}}}, + {"name":"Quint 006: zero buffer / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1000","ttlMs":-1}}}, + {"name":"Quint 007: zero buffer / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1000","ttlMs":7200000}}}, + {"name":"Quint 008: zero buffer / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1000","ttlMs":7200000}}}, + {"name":"Quint 009: zero buffer / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1000","ttlMs":7200000}}}, + {"name":"Quint 010: zero buffer / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1000","ttlMs":20000000}}}, + {"name":"Quint 011: zero buffer / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1000","ttlMs":7200000}}}, + {"name":"Quint 012: buffered cutoff / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"200","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1200","ttlMs":7200000}}}, + {"name":"Quint 013: buffered cutoff / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"200","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1200","ttlMs":7200000}}}, + {"name":"Quint 014: buffered cutoff / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"200","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"10000000","ttlMs":13659000}}}, + {"name":"Quint 015: buffered cutoff / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"200","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1200","ttlMs":20000000}}}, + {"name":"Quint 016: buffered cutoff / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"200","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 017: buffered cutoff / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"200","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1200","ttlMs":20000000}}}, + {"name":"Quint 018: buffered cutoff / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"200","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1200","ttlMs":-1}}}, + {"name":"Quint 019: buffered cutoff / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"200","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1200","ttlMs":7200000}}}, + {"name":"Quint 020: buffered cutoff / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"200","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1200","ttlMs":7200000}}}, + {"name":"Quint 021: buffered cutoff / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"200","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1200","ttlMs":7200000}}}, + {"name":"Quint 022: buffered cutoff / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"200","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1200","ttlMs":20000000}}}, + {"name":"Quint 023: buffered cutoff / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"200","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"1200","ttlMs":7200000}}}, + {"name":"Quint 024: retention above floor / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"4000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"4001000","ttlMs":7660000}}}, + {"name":"Quint 025: retention above floor / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"4000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"4001000","ttlMs":7660000}}}, + {"name":"Quint 026: retention above floor / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"4000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"10000000","ttlMs":13659000}}}, + {"name":"Quint 027: retention above floor / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"4000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"4001000","ttlMs":20000000}}}, + {"name":"Quint 028: retention above floor / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"4000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"4001000","ttlMs":-1}}}, + {"name":"Quint 029: retention above floor / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"4000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"4001000","ttlMs":20000000}}}, + {"name":"Quint 030: retention above floor / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"4000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"4001000","ttlMs":-1}}}, + {"name":"Quint 031: retention above floor / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"4000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"4001000","ttlMs":7660000}}}, + {"name":"Quint 032: retention above floor / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"4000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"4001000","ttlMs":7660000}}}, + {"name":"Quint 033: retention above floor / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"4000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"4001000","ttlMs":7660000}}}, + {"name":"Quint 034: retention above floor / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"4000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"4001000","ttlMs":20000000}}}, + {"name":"Quint 035: retention above floor / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"4000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"4001000","ttlMs":7660000}}}, + {"name":"Quint 036: maximum buffer / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"31536000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"31536001000","ttlMs":31539660000}}}, + {"name":"Quint 037: maximum buffer / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"31536000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"31536001000","ttlMs":31539660000}}}, + {"name":"Quint 038: maximum buffer / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"31536000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"31536001000","ttlMs":31539660000}}}, + {"name":"Quint 039: maximum buffer / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"31536000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"31536001000","ttlMs":31539660000}}}, + {"name":"Quint 040: maximum buffer / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"31536000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"31536001000","ttlMs":-1}}}, + {"name":"Quint 041: maximum buffer / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"31536000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"31536001000","ttlMs":31539660000}}}, + {"name":"Quint 042: maximum buffer / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"31536000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"31536001000","ttlMs":-1}}}, + {"name":"Quint 043: maximum buffer / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"31536000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"31536001000","ttlMs":31539660000}}}, + {"name":"Quint 044: maximum buffer / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"31536000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"31536001000","ttlMs":31539660000}}}, + {"name":"Quint 045: maximum buffer / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"31536000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"31536001000","ttlMs":31539660000}}}, + {"name":"Quint 046: maximum buffer / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"31536000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"31536001000","ttlMs":31539660000}}}, + {"name":"Quint 047: maximum buffer / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"31536000000","invalidatedAtMs":"1000","expected":{"state":{"kind":"string","value":"31536001000","ttlMs":31539660000}}}, + {"name":"Quint 048: maximum safe sum / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"1","invalidatedAtMs":"9007199254740990","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 049: maximum safe sum / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"1","invalidatedAtMs":"9007199254740990","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 050: maximum safe sum / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"1","invalidatedAtMs":"9007199254740990","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 051: maximum safe sum / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"1","invalidatedAtMs":"9007199254740990","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":20000000}}}, + {"name":"Quint 052: maximum safe sum / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"1","invalidatedAtMs":"9007199254740990","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":-1}}}, + {"name":"Quint 053: maximum safe sum / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"1","invalidatedAtMs":"9007199254740990","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":20000000}}}, + {"name":"Quint 054: maximum safe sum / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"1","invalidatedAtMs":"9007199254740990","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":-1}}}, + {"name":"Quint 055: maximum safe sum / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"1","invalidatedAtMs":"9007199254740990","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 056: maximum safe sum / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"1","invalidatedAtMs":"9007199254740990","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 057: maximum safe sum / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"1","invalidatedAtMs":"9007199254740990","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 058: maximum safe sum / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"1","invalidatedAtMs":"9007199254740990","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":20000000}}}, + {"name":"Quint 059: maximum safe sum / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"1","invalidatedAtMs":"9007199254740990","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 060: leading decimal zeros / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"000200","invalidatedAtMs":"0001000","expected":{"state":{"kind":"string","value":"1200","ttlMs":7200000}}}, + {"name":"Quint 061: leading decimal zeros / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"000200","invalidatedAtMs":"0001000","expected":{"state":{"kind":"string","value":"1200","ttlMs":7200000}}}, + {"name":"Quint 062: leading decimal zeros / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"000200","invalidatedAtMs":"0001000","expected":{"state":{"kind":"string","value":"10000000","ttlMs":13659000}}}, + {"name":"Quint 063: leading decimal zeros / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"000200","invalidatedAtMs":"0001000","expected":{"state":{"kind":"string","value":"1200","ttlMs":20000000}}}, + {"name":"Quint 064: leading decimal zeros / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"000200","invalidatedAtMs":"0001000","expected":{"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 065: leading decimal zeros / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"000200","invalidatedAtMs":"0001000","expected":{"state":{"kind":"string","value":"1200","ttlMs":20000000}}}, + {"name":"Quint 066: leading decimal zeros / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"000200","invalidatedAtMs":"0001000","expected":{"state":{"kind":"string","value":"1200","ttlMs":-1}}}, + {"name":"Quint 067: leading decimal zeros / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"000200","invalidatedAtMs":"0001000","expected":{"state":{"kind":"string","value":"1200","ttlMs":7200000}}}, + {"name":"Quint 068: leading decimal zeros / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"000200","invalidatedAtMs":"0001000","expected":{"state":{"kind":"string","value":"1200","ttlMs":7200000}}}, + {"name":"Quint 069: leading decimal zeros / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"000200","invalidatedAtMs":"0001000","expected":{"state":{"kind":"string","value":"1200","ttlMs":7200000}}}, + {"name":"Quint 070: leading decimal zeros / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"000200","invalidatedAtMs":"0001000","expected":{"state":{"kind":"string","value":"1200","ttlMs":20000000}}}, + {"name":"Quint 071: leading decimal zeros / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"000200","invalidatedAtMs":"0001000","expected":{"state":{"kind":"string","value":"1200","ttlMs":7200000}}}, + {"name":"Quint 072: negative buffer / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"-1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 073: negative buffer / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"-1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 074: negative buffer / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"-1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 075: negative buffer / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"-1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 076: negative buffer / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"-1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 077: negative buffer / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"-1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 078: negative buffer / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"-1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 079: negative buffer / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"-1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 080: negative buffer / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"-1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 081: negative buffer / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"-1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 082: negative buffer / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"-1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 083: negative buffer / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"-1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 084: fractional buffer / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"1.5","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 085: fractional buffer / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"1.5","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 086: fractional buffer / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"1.5","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 087: fractional buffer / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"1.5","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 088: fractional buffer / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"1.5","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 089: fractional buffer / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"1.5","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 090: fractional buffer / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"1.5","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 091: fractional buffer / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"1.5","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 092: fractional buffer / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"1.5","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 093: fractional buffer / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"1.5","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 094: fractional buffer / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"1.5","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 095: fractional buffer / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"1.5","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 096: over-limit buffer / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"31536000001","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 097: over-limit buffer / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"31536000001","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 098: over-limit buffer / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"31536000001","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 099: over-limit buffer / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"31536000001","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 100: over-limit buffer / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"31536000001","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 101: over-limit buffer / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"31536000001","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 102: over-limit buffer / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"31536000001","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 103: over-limit buffer / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"31536000001","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 104: over-limit buffer / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"31536000001","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 105: over-limit buffer / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"31536000001","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 106: over-limit buffer / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"31536000001","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 107: over-limit buffer / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"31536000001","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 108: unsafe buffer / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"9007199254740992","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 109: unsafe buffer / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"9007199254740992","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 110: unsafe buffer / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"9007199254740992","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 111: unsafe buffer / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"9007199254740992","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 112: unsafe buffer / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"9007199254740992","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 113: unsafe buffer / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"9007199254740992","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 114: unsafe buffer / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"9007199254740992","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 115: unsafe buffer / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"9007199254740992","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 116: unsafe buffer / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"9007199254740992","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 117: unsafe buffer / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"9007199254740992","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 118: unsafe buffer / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"9007199254740992","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 119: unsafe buffer / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"9007199254740992","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 120: exponent timestamp / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"0","invalidatedAtMs":"1e3","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 121: exponent timestamp / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"1e3","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 122: exponent timestamp / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"1e3","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 123: exponent timestamp / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"1e3","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 124: exponent timestamp / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"1e3","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 125: exponent timestamp / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"1e3","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 126: exponent timestamp / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"1e3","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 127: exponent timestamp / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"1e3","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 128: exponent timestamp / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"1e3","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 129: exponent timestamp / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"1e3","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 130: exponent timestamp / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"1e3","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 131: exponent timestamp / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"1e3","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 132: negative timestamp / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"0","invalidatedAtMs":"-1","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 133: negative timestamp / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"-1","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 134: negative timestamp / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"-1","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 135: negative timestamp / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"-1","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 136: negative timestamp / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"-1","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 137: negative timestamp / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"-1","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 138: negative timestamp / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"-1","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 139: negative timestamp / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"-1","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 140: negative timestamp / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"-1","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 141: negative timestamp / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"-1","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 142: negative timestamp / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"-1","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 143: negative timestamp / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"-1","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 144: unsafe sum / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"1","invalidatedAtMs":"9007199254740991","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 145: unsafe sum / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"1","invalidatedAtMs":"9007199254740991","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 146: unsafe sum / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"1","invalidatedAtMs":"9007199254740991","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 147: unsafe sum / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"1","invalidatedAtMs":"9007199254740991","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 148: unsafe sum / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"1","invalidatedAtMs":"9007199254740991","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 149: unsafe sum / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"1","invalidatedAtMs":"9007199254740991","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 150: unsafe sum / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"1","invalidatedAtMs":"9007199254740991","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 151: unsafe sum / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"1","invalidatedAtMs":"9007199254740991","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 152: unsafe sum / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"1","invalidatedAtMs":"9007199254740991","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 153: unsafe sum / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"1","invalidatedAtMs":"9007199254740991","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 154: unsafe sum / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"1","invalidatedAtMs":"9007199254740991","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 155: unsafe sum / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"1","invalidatedAtMs":"9007199254740991","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 156: empty buffer / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 157: empty buffer / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 158: empty buffer / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 159: empty buffer / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 160: empty buffer / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 161: empty buffer / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 162: empty buffer / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 163: empty buffer / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 164: empty buffer / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 165: empty buffer / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 166: empty buffer / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 167: empty buffer / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 168: explicit plus buffer / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"+1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 169: explicit plus buffer / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"+1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 170: explicit plus buffer / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"+1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 171: explicit plus buffer / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"+1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 172: explicit plus buffer / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"+1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 173: explicit plus buffer / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"+1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 174: explicit plus buffer / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"+1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 175: explicit plus buffer / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"+1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 176: explicit plus buffer / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"+1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 177: explicit plus buffer / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"+1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 178: explicit plus buffer / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"+1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 179: explicit plus buffer / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"+1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 180: space-prefixed buffer / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":" 1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 181: space-prefixed buffer / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":" 1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 182: space-prefixed buffer / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":" 1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 183: space-prefixed buffer / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":" 1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 184: space-prefixed buffer / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":" 1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 185: space-prefixed buffer / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":" 1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 186: space-prefixed buffer / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":" 1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 187: space-prefixed buffer / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":" 1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 188: space-prefixed buffer / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":" 1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 189: space-prefixed buffer / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":" 1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 190: space-prefixed buffer / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":" 1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 191: space-prefixed buffer / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":" 1","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 192: hexadecimal buffer / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"0x10","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 193: hexadecimal buffer / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"0x10","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 194: hexadecimal buffer / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"0x10","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 195: hexadecimal buffer / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"0x10","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 196: hexadecimal buffer / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"0x10","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 197: hexadecimal buffer / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"0x10","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 198: hexadecimal buffer / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"0x10","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 199: hexadecimal buffer / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"0x10","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 200: hexadecimal buffer / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"0x10","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 201: hexadecimal buffer / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"0x10","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 202: hexadecimal buffer / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"0x10","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 203: hexadecimal buffer / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"0x10","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 204: newline-suffixed buffer / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"1\n","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 205: newline-suffixed buffer / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"1\n","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 206: newline-suffixed buffer / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"1\n","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 207: newline-suffixed buffer / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"1\n","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 208: newline-suffixed buffer / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"1\n","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 209: newline-suffixed buffer / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"1\n","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 210: newline-suffixed buffer / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"1\n","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 211: newline-suffixed buffer / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"1\n","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 212: newline-suffixed buffer / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"1\n","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 213: newline-suffixed buffer / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"1\n","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 214: newline-suffixed buffer / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"1\n","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 215: newline-suffixed buffer / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"1\n","invalidatedAtMs":"1000","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 216: fractional timestamp / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"0","invalidatedAtMs":"1.5","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 217: fractional timestamp / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"1.5","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 218: fractional timestamp / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"1.5","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 219: fractional timestamp / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"1.5","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 220: fractional timestamp / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"1.5","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 221: fractional timestamp / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"1.5","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 222: fractional timestamp / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"1.5","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 223: fractional timestamp / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"1.5","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 224: fractional timestamp / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"1.5","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 225: fractional timestamp / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"1.5","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 226: fractional timestamp / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"1.5","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 227: fractional timestamp / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"1.5","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 228: unsafe timestamp / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"0","invalidatedAtMs":"9007199254740992","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 229: unsafe timestamp / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"9007199254740992","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 230: unsafe timestamp / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"9007199254740992","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 231: unsafe timestamp / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"9007199254740992","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 232: unsafe timestamp / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"9007199254740992","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 233: unsafe timestamp / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"9007199254740992","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 234: unsafe timestamp / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"9007199254740992","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 235: unsafe timestamp / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"9007199254740992","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 236: unsafe timestamp / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"9007199254740992","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 237: unsafe timestamp / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"9007199254740992","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 238: unsafe timestamp / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"9007199254740992","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 239: unsafe timestamp / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"9007199254740992","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 240: maximum timestamp / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"0","invalidatedAtMs":"9007199254740991","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 241: maximum timestamp / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"9007199254740991","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 242: maximum timestamp / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"9007199254740991","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 243: maximum timestamp / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"9007199254740991","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":20000000}}}, + {"name":"Quint 244: maximum timestamp / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"9007199254740991","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":-1}}}, + {"name":"Quint 245: maximum timestamp / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"9007199254740991","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":20000000}}}, + {"name":"Quint 246: maximum timestamp / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"9007199254740991","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":-1}}}, + {"name":"Quint 247: maximum timestamp / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"9007199254740991","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 248: maximum timestamp / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"9007199254740991","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 249: maximum timestamp / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"9007199254740991","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 250: maximum timestamp / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"9007199254740991","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":20000000}}}, + {"name":"Quint 251: maximum timestamp / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"9007199254740991","expected":{"state":{"kind":"string","value":"9007199254740991","ttlMs":7200000}}}, + {"name":"Quint 252: zero timestamp / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"0","invalidatedAtMs":"0","expected":{"state":{"kind":"string","value":"0","ttlMs":7200000}}}, + {"name":"Quint 253: zero timestamp / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"0","expected":{"state":{"kind":"string","value":"900","ttlMs":7200000}}}, + {"name":"Quint 254: zero timestamp / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"0","expected":{"state":{"kind":"string","value":"10000000","ttlMs":13660000}}}, + {"name":"Quint 255: zero timestamp / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"0","expected":{"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 256: zero timestamp / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"0","expected":{"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 257: zero timestamp / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"0","expected":{"state":{"kind":"string","value":"0","ttlMs":20000000}}}, + {"name":"Quint 258: zero timestamp / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"0","expected":{"state":{"kind":"string","value":"0","ttlMs":-1}}}, + {"name":"Quint 259: zero timestamp / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"0","expected":{"state":{"kind":"string","value":"0","ttlMs":7200000}}}, + {"name":"Quint 260: zero timestamp / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"0","expected":{"state":{"kind":"string","value":"0","ttlMs":7200000}}}, + {"name":"Quint 261: zero timestamp / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"0","expected":{"state":{"kind":"string","value":"900","ttlMs":7200000}}}, + {"name":"Quint 262: zero timestamp / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"0","expected":{"state":{"kind":"string","value":"0","ttlMs":20000000}}}, + {"name":"Quint 263: zero timestamp / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"0","expected":{"state":{"kind":"string","value":"0","ttlMs":7200000}}}, + {"name":"Quint 264: empty timestamp / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"0","invalidatedAtMs":"","expected":{"error":true,"state":{"kind":"absent","ttlMs":-2}}}, + {"name":"Quint 265: empty timestamp / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":100}}}, + {"name":"Quint 266: empty timestamp / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"","expected":{"error":true,"state":{"kind":"string","value":"10000000","ttlMs":100}}}, + {"name":"Quint 267: empty timestamp / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"","expected":{"error":true,"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 268: empty timestamp / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"","expected":{"error":true,"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 269: empty timestamp / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":20000000}}}, + {"name":"Quint 270: empty timestamp / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"","expected":{"error":true,"state":{"kind":"string","value":"bad","ttlMs":-1}}}, + {"name":"Quint 271: empty timestamp / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":20000000}}}, + {"name":"Quint 272: empty timestamp / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"0","invalidatedAtMs":"","expected":{"error":true,"state":{"kind":"list","values":["first","second"],"ttlMs":-1}}}, + {"name":"Quint 273: empty timestamp / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"","expected":{"error":true,"state":{"kind":"string","value":"0000900","ttlMs":100}}}, + {"name":"Quint 274: empty timestamp / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"0","invalidatedAtMs":"","expected":{"error":true,"state":{"kind":"string","value":"9007199254740992","ttlMs":20000000}}}, + {"name":"Quint 275: empty timestamp / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"0","invalidatedAtMs":"","expected":{"error":true,"state":{"kind":"string","value":"","ttlMs":100}}}, + {"name":"Quint 276: all-zero decimal text / absent","existing":{"kind":"absent","ttlMs":-2},"futureBufferMs":"000","invalidatedAtMs":"000","expected":{"state":{"kind":"string","value":"0","ttlMs":7200000}}}, + {"name":"Quint 277: all-zero decimal text / valid finite","existing":{"kind":"string","value":"900","ttlMs":100},"futureBufferMs":"000","invalidatedAtMs":"000","expected":{"state":{"kind":"string","value":"900","ttlMs":7200000}}}, + {"name":"Quint 278: all-zero decimal text / future finite","existing":{"kind":"string","value":"10000000","ttlMs":100},"futureBufferMs":"000","invalidatedAtMs":"000","expected":{"state":{"kind":"string","value":"10000000","ttlMs":13660000}}}, + {"name":"Quint 279: all-zero decimal text / valid longer TTL","existing":{"kind":"string","value":"900","ttlMs":20000000},"futureBufferMs":"000","invalidatedAtMs":"000","expected":{"state":{"kind":"string","value":"900","ttlMs":20000000}}}, + {"name":"Quint 280: all-zero decimal text / valid persistent","existing":{"kind":"string","value":"2000","ttlMs":-1},"futureBufferMs":"000","invalidatedAtMs":"000","expected":{"state":{"kind":"string","value":"2000","ttlMs":-1}}}, + {"name":"Quint 281: all-zero decimal text / malformed finite","existing":{"kind":"string","value":"bad","ttlMs":20000000},"futureBufferMs":"000","invalidatedAtMs":"000","expected":{"state":{"kind":"string","value":"0","ttlMs":20000000}}}, + {"name":"Quint 282: all-zero decimal text / malformed persistent","existing":{"kind":"string","value":"bad","ttlMs":-1},"futureBufferMs":"000","invalidatedAtMs":"000","expected":{"state":{"kind":"string","value":"0","ttlMs":-1}}}, + {"name":"Quint 283: all-zero decimal text / ordered finite list","existing":{"kind":"list","values":["first","second"],"ttlMs":20000000},"futureBufferMs":"000","invalidatedAtMs":"000","expected":{"state":{"kind":"string","value":"0","ttlMs":7200000}}}, + {"name":"Quint 284: all-zero decimal text / ordered persistent list","existing":{"kind":"list","values":["first","second"],"ttlMs":-1},"futureBufferMs":"000","invalidatedAtMs":"000","expected":{"state":{"kind":"string","value":"0","ttlMs":7200000}}}, + {"name":"Quint 285: all-zero decimal text / leading-zero stored decimal","existing":{"kind":"string","value":"0000900","ttlMs":100},"futureBufferMs":"000","invalidatedAtMs":"000","expected":{"state":{"kind":"string","value":"900","ttlMs":7200000}}}, + {"name":"Quint 286: all-zero decimal text / unsafe stored decimal","existing":{"kind":"string","value":"9007199254740992","ttlMs":20000000},"futureBufferMs":"000","invalidatedAtMs":"000","expected":{"state":{"kind":"string","value":"0","ttlMs":20000000}}}, + {"name":"Quint 287: all-zero decimal text / empty stored string","existing":{"kind":"string","value":"","ttlMs":100},"futureBufferMs":"000","invalidatedAtMs":"000","expected":{"state":{"kind":"string","value":"0","ttlMs":7200000}}} ] } diff --git a/formal/quint-key-vectors.json b/formal/quint-key-vectors.json index d73ea5d3..60f2c494 100644 --- a/formal/quint-key-vectors.json +++ b/formal/quint-key-vectors.json @@ -4,8901 +4,474 @@ "model": "formal/dialcache-key-protocol.qnt", "sourceSha256": { "formal/dialcache-key-protocol.qnt": "c1a1c4e692d4f60f3ed0be0242c62c28e473bacdfdbdf0f634569cf22683548f", - "formal/generate-key-vectors.mjs": "48d40116702d62cf50a398cb305e1ce4b95439b281acd3b96276ea3a5ab6fd16", + "formal/generate-key-vectors.mjs": "05764a348b161ac01a30d7a723e5018cad200020a2e95a0888b544f2401fbeea", "formal/wire-text.qnt": "c78f8c674f4e1470b0d2b605b209d82e3aab0e35fb4e0efae813247bf093eb27", "formal/cohort-boundaries.qnt": "700f0b9ee734f2511b3c7f10138b9636cef93bc1045b653479a05be1766e3407" } }, "keyVectors": [ - { - "name": "Quint key 000: empty", - "input": { - "namespace": "", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": ":id:1#Get", - "valueKey": ":id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 001: empty", - "input": { - "namespace": "", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{:id:1}#Get", - "valueKey": "{:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{:id:1}#watermark" - }, - { - "name": "Quint key 002: empty", - "input": { - "namespace": "urn", - "keyType": "", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn::1#Get", - "valueKey": "urn::1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 003: empty", - "input": { - "namespace": "urn", - "keyType": "", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn::1}#Get", - "valueKey": "{urn::1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn::1}#watermark" - }, - { - "name": "Quint key 004: empty", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:#Get", - "valueKey": "urn:id:#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 005: empty", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:}#Get", - "valueKey": "{urn:id:}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:}#watermark" - }, - { - "name": "Quint key 006: empty", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#", - "valueKey": "urn:id:1#:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 007: empty", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#", - "valueKey": "{urn:id:1}#:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 008: empty", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?=v#Get", - "valueKey": "urn:id:1?=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 009: empty", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?=v#Get", - "valueKey": "{urn:id:1}?=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 010: empty", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "" - ] - ] - }, - "logicalKey": "urn:id:1?n=#Get", - "valueKey": "urn:id:1?n=#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 011: empty", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=#Get", - "valueKey": "{urn:id:1}?n=#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 012: URI-safe punctuation", - "input": { - "namespace": "~!*'()-._", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "~!*'()-._:id:1#Get", - "valueKey": "~!*'()-._:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 013: URI-safe punctuation", - "input": { - "namespace": "~!*'()-._", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{~!*'()-._:id:1}#Get", - "valueKey": "{~!*'()-._:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{~!*'()-._:id:1}#watermark" - }, - { - "name": "Quint key 014: URI-safe punctuation", - "input": { - "namespace": "urn", - "keyType": "~!*'()-._", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:~!*'()-._:1#Get", - "valueKey": "urn:~!*'()-._:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 015: URI-safe punctuation", - "input": { - "namespace": "urn", - "keyType": "~!*'()-._", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:~!*'()-._:1}#Get", - "valueKey": "{urn:~!*'()-._:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:~!*'()-._:1}#watermark" - }, - { - "name": "Quint key 016: URI-safe punctuation", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "~!*'()-._", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:~!*'()-._#Get", - "valueKey": "urn:id:~!*'()-._#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 017: URI-safe punctuation", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "~!*'()-._", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:~!*'()-._}#Get", - "valueKey": "{urn:id:~!*'()-._}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:~!*'()-._}#watermark" - }, - { - "name": "Quint key 018: URI-safe punctuation", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "~!*'()-._", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#~!*'()-._", - "valueKey": "urn:id:1#~!*'()-._:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 019: URI-safe punctuation", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "~!*'()-._", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#~!*'()-._", - "valueKey": "{urn:id:1}#~!*'()-._:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 020: URI-safe punctuation", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "~!*'()-._", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?~!*'()-._=v#Get", - "valueKey": "urn:id:1?~!*'()-._=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 021: URI-safe punctuation", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "~!*'()-._", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?~!*'()-._=v#Get", - "valueKey": "{urn:id:1}?~!*'()-._=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 022: URI-safe punctuation", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "~!*'()-._" - ] - ] - }, - "logicalKey": "urn:id:1?n=~!*'()-._#Get", - "valueKey": "urn:id:1?n=~!*'()-._#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 023: URI-safe punctuation", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "~!*'()-._" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=~!*'()-._#Get", - "valueKey": "{urn:id:1}?n=~!*'()-._#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 024: reserved delimiters", - "input": { - "namespace": " :/?#[]@$&+,;=", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:id:1#Get", - "valueKey": "%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 025: reserved delimiters", - "input": { - "namespace": " :/?#[]@$&+,;=", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:id:1}#Get", - "valueKey": "{%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:id:1}#watermark" - }, - { - "name": "Quint key 026: reserved delimiters", - "input": { - "namespace": "urn", - "keyType": " :/?#[]@$&+,;=", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:1#Get", - "valueKey": "urn:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 027: reserved delimiters", - "input": { - "namespace": "urn", - "keyType": " :/?#[]@$&+,;=", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:1}#Get", - "valueKey": "{urn:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:1}#watermark" - }, - { - "name": "Quint key 028: reserved delimiters", - "input": { - "namespace": "urn", - "keyType": "id", - "id": " :/?#[]@$&+,;=", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D#Get", - "valueKey": "urn:id:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 029: reserved delimiters", - "input": { - "namespace": "urn", - "keyType": "id", - "id": " :/?#[]@$&+,;=", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D}#Get", - "valueKey": "{urn:id:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D}#watermark" - }, - { - "name": "Quint key 030: reserved delimiters", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": " :/?#[]@$&+,;=", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D", - "valueKey": "urn:id:1#%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 031: reserved delimiters", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": " :/?#[]@$&+,;=", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D", - "valueKey": "{urn:id:1}#%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 032: reserved delimiters", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - " :/?#[]@$&+,;=", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D=v#Get", - "valueKey": "urn:id:1?%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 033: reserved delimiters", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - " :/?#[]@$&+,;=", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D=v#Get", - "valueKey": "{urn:id:1}?%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 034: reserved delimiters", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - " :/?#[]@$&+,;=" - ] - ] - }, - "logicalKey": "urn:id:1?n=%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D#Get", - "valueKey": "urn:id:1?n=%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 035: reserved delimiters", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - " :/?#[]@$&+,;=" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D#Get", - "valueKey": "{urn:id:1}?n=%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 036: literal percent escape", - "input": { - "namespace": "%2F", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "%252F:id:1#Get", - "valueKey": "%252F:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 037: literal percent escape", - "input": { - "namespace": "%2F", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{%252F:id:1}#Get", - "valueKey": "{%252F:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{%252F:id:1}#watermark" - }, - { - "name": "Quint key 038: literal percent escape", - "input": { - "namespace": "urn", - "keyType": "%2F", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%252F:1#Get", - "valueKey": "urn:%252F:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 039: literal percent escape", - "input": { - "namespace": "urn", - "keyType": "%2F", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:%252F:1}#Get", - "valueKey": "{urn:%252F:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:%252F:1}#watermark" - }, - { - "name": "Quint key 040: literal percent escape", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "%2F", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%252F#Get", - "valueKey": "urn:id:%252F#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 041: literal percent escape", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "%2F", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:%252F}#Get", - "valueKey": "{urn:id:%252F}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:%252F}#watermark" - }, - { - "name": "Quint key 042: literal percent escape", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "%2F", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%252F", - "valueKey": "urn:id:1#%252F:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 043: literal percent escape", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "%2F", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%252F", - "valueKey": "{urn:id:1}#%252F:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 044: literal percent escape", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "%2F", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%252F=v#Get", - "valueKey": "urn:id:1?%252F=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 045: literal percent escape", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "%2F", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%252F=v#Get", - "valueKey": "{urn:id:1}?%252F=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 046: literal percent escape", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "%2F" - ] - ] - }, - "logicalKey": "urn:id:1?n=%252F#Get", - "valueKey": "urn:id:1?n=%252F#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 047: literal percent escape", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "%2F" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%252F#Get", - "valueKey": "{urn:id:1}?n=%252F#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 050: opening brace", - "input": { - "namespace": "urn", - "keyType": "{", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%7B:1#Get", - "valueKey": "urn:%7B:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 052: opening brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "{", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%7B#Get", - "valueKey": "urn:id:%7B#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 054: opening brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "{", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%7B", - "valueKey": "urn:id:1#%7B:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 055: opening brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "{", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%7B", - "valueKey": "{urn:id:1}#%7B:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 056: opening brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "{", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%7B=v#Get", - "valueKey": "urn:id:1?%7B=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 057: opening brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "{", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%7B=v#Get", - "valueKey": "{urn:id:1}?%7B=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 058: opening brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "{" - ] - ] - }, - "logicalKey": "urn:id:1?n=%7B#Get", - "valueKey": "urn:id:1?n=%7B#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 059: opening brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "{" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%7B#Get", - "valueKey": "{urn:id:1}?n=%7B#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 062: closing brace", - "input": { - "namespace": "urn", - "keyType": "}", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%7D:1#Get", - "valueKey": "urn:%7D:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 064: closing brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "}", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%7D#Get", - "valueKey": "urn:id:%7D#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 066: closing brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "}", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%7D", - "valueKey": "urn:id:1#%7D:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 067: closing brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "}", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%7D", - "valueKey": "{urn:id:1}#%7D:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 068: closing brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "}", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%7D=v#Get", - "valueKey": "urn:id:1?%7D=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 069: closing brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "}", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%7D=v#Get", - "valueKey": "{urn:id:1}?%7D=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 070: closing brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "}" - ] - ] - }, - "logicalKey": "urn:id:1?n=%7D#Get", - "valueKey": "urn:id:1?n=%7D#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 071: closing brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "}" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%7D#Get", - "valueKey": "{urn:id:1}?n=%7D#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 072: ASCII controls", - "input": { - "namespace": "\u0000\u0001\u001f", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "%00%01%1F%7F:id:1#Get", - "valueKey": "%00%01%1F%7F:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 073: ASCII controls", - "input": { - "namespace": "\u0000\u0001\u001f", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{%00%01%1F%7F:id:1}#Get", - "valueKey": "{%00%01%1F%7F:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{%00%01%1F%7F:id:1}#watermark" - }, - { - "name": "Quint key 074: ASCII controls", - "input": { - "namespace": "urn", - "keyType": "\u0000\u0001\u001f", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%00%01%1F%7F:1#Get", - "valueKey": "urn:%00%01%1F%7F:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 075: ASCII controls", - "input": { - "namespace": "urn", - "keyType": "\u0000\u0001\u001f", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:%00%01%1F%7F:1}#Get", - "valueKey": "{urn:%00%01%1F%7F:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:%00%01%1F%7F:1}#watermark" - }, - { - "name": "Quint key 076: ASCII controls", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0000\u0001\u001f", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%00%01%1F%7F#Get", - "valueKey": "urn:id:%00%01%1F%7F#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 077: ASCII controls", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0000\u0001\u001f", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:%00%01%1F%7F}#Get", - "valueKey": "{urn:id:%00%01%1F%7F}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:%00%01%1F%7F}#watermark" - }, - { - "name": "Quint key 078: ASCII controls", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "\u0000\u0001\u001f", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%00%01%1F%7F", - "valueKey": "urn:id:1#%00%01%1F%7F:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 079: ASCII controls", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "\u0000\u0001\u001f", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%00%01%1F%7F", - "valueKey": "{urn:id:1}#%00%01%1F%7F:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 080: ASCII controls", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "\u0000\u0001\u001f", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%00%01%1F%7F=v#Get", - "valueKey": "urn:id:1?%00%01%1F%7F=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 081: ASCII controls", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "\u0000\u0001\u001f", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%00%01%1F%7F=v#Get", - "valueKey": "{urn:id:1}?%00%01%1F%7F=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 082: ASCII controls", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "\u0000\u0001\u001f" - ] - ] - }, - "logicalKey": "urn:id:1?n=%00%01%1F%7F#Get", - "valueKey": "urn:id:1?n=%00%01%1F%7F#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 083: ASCII controls", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "\u0000\u0001\u001f" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%00%01%1F%7F#Get", - "valueKey": "{urn:id:1}?n=%00%01%1F%7F#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 084: first two-byte scalar", - "input": { - "namespace": "€", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "%C2%80:id:1#Get", - "valueKey": "%C2%80:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 085: first two-byte scalar", - "input": { - "namespace": "€", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{%C2%80:id:1}#Get", - "valueKey": "{%C2%80:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{%C2%80:id:1}#watermark" - }, - { - "name": "Quint key 086: first two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "€", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%C2%80:1#Get", - "valueKey": "urn:%C2%80:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 087: first two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "€", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:%C2%80:1}#Get", - "valueKey": "{urn:%C2%80:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:%C2%80:1}#watermark" - }, - { - "name": "Quint key 088: first two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "€", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%C2%80#Get", - "valueKey": "urn:id:%C2%80#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 089: first two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "€", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:%C2%80}#Get", - "valueKey": "{urn:id:%C2%80}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:%C2%80}#watermark" - }, - { - "name": "Quint key 090: first two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "€", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%C2%80", - "valueKey": "urn:id:1#%C2%80:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 091: first two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "€", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%C2%80", - "valueKey": "{urn:id:1}#%C2%80:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 092: first two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "€", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%C2%80=v#Get", - "valueKey": "urn:id:1?%C2%80=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 093: first two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "€", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%C2%80=v#Get", - "valueKey": "{urn:id:1}?%C2%80=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 094: first two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "€" - ] - ] - }, - "logicalKey": "urn:id:1?n=%C2%80#Get", - "valueKey": "urn:id:1?n=%C2%80#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 095: first two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "€" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%C2%80#Get", - "valueKey": "{urn:id:1}?n=%C2%80#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 096: last two-byte scalar", - "input": { - "namespace": "߿", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "%DF%BF:id:1#Get", - "valueKey": "%DF%BF:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 097: last two-byte scalar", - "input": { - "namespace": "߿", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{%DF%BF:id:1}#Get", - "valueKey": "{%DF%BF:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{%DF%BF:id:1}#watermark" - }, - { - "name": "Quint key 098: last two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "߿", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%DF%BF:1#Get", - "valueKey": "urn:%DF%BF:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 099: last two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "߿", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:%DF%BF:1}#Get", - "valueKey": "{urn:%DF%BF:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:%DF%BF:1}#watermark" - }, - { - "name": "Quint key 100: last two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "߿", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%DF%BF#Get", - "valueKey": "urn:id:%DF%BF#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 101: last two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "߿", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:%DF%BF}#Get", - "valueKey": "{urn:id:%DF%BF}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:%DF%BF}#watermark" - }, - { - "name": "Quint key 102: last two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "߿", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%DF%BF", - "valueKey": "urn:id:1#%DF%BF:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 103: last two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "߿", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%DF%BF", - "valueKey": "{urn:id:1}#%DF%BF:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 104: last two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "߿", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%DF%BF=v#Get", - "valueKey": "urn:id:1?%DF%BF=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 105: last two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "߿", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%DF%BF=v#Get", - "valueKey": "{urn:id:1}?%DF%BF=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 106: last two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "߿" - ] - ] - }, - "logicalKey": "urn:id:1?n=%DF%BF#Get", - "valueKey": "urn:id:1?n=%DF%BF#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 107: last two-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "߿" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%DF%BF#Get", - "valueKey": "{urn:id:1}?n=%DF%BF#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 108: first three-byte scalar", - "input": { - "namespace": "ࠀ", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "%E0%A0%80:id:1#Get", - "valueKey": "%E0%A0%80:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 109: first three-byte scalar", - "input": { - "namespace": "ࠀ", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{%E0%A0%80:id:1}#Get", - "valueKey": "{%E0%A0%80:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{%E0%A0%80:id:1}#watermark" - }, - { - "name": "Quint key 110: first three-byte scalar", - "input": { - "namespace": "urn", - "keyType": "ࠀ", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%E0%A0%80:1#Get", - "valueKey": "urn:%E0%A0%80:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 111: first three-byte scalar", - "input": { - "namespace": "urn", - "keyType": "ࠀ", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:%E0%A0%80:1}#Get", - "valueKey": "{urn:%E0%A0%80:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:%E0%A0%80:1}#watermark" - }, - { - "name": "Quint key 112: first three-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "ࠀ", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%E0%A0%80#Get", - "valueKey": "urn:id:%E0%A0%80#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 113: first three-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "ࠀ", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:%E0%A0%80}#Get", - "valueKey": "{urn:id:%E0%A0%80}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:%E0%A0%80}#watermark" - }, - { - "name": "Quint key 114: first three-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "ࠀ", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%E0%A0%80", - "valueKey": "urn:id:1#%E0%A0%80:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 115: first three-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "ࠀ", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%E0%A0%80", - "valueKey": "{urn:id:1}#%E0%A0%80:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 116: first three-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "ࠀ", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%E0%A0%80=v#Get", - "valueKey": "urn:id:1?%E0%A0%80=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 117: first three-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "ࠀ", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%E0%A0%80=v#Get", - "valueKey": "{urn:id:1}?%E0%A0%80=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 118: first three-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "ࠀ" - ] - ] - }, - "logicalKey": "urn:id:1?n=%E0%A0%80#Get", - "valueKey": "urn:id:1?n=%E0%A0%80#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 119: first three-byte scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "ࠀ" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%E0%A0%80#Get", - "valueKey": "{urn:id:1}?n=%E0%A0%80#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 120: BMP boundary scalars", - "input": { - "namespace": "퟿￿", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "%ED%9F%BF%EE%80%80%EF%BF%BF:id:1#Get", - "valueKey": "%ED%9F%BF%EE%80%80%EF%BF%BF:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 121: BMP boundary scalars", - "input": { - "namespace": "퟿￿", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{%ED%9F%BF%EE%80%80%EF%BF%BF:id:1}#Get", - "valueKey": "{%ED%9F%BF%EE%80%80%EF%BF%BF:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{%ED%9F%BF%EE%80%80%EF%BF%BF:id:1}#watermark" - }, - { - "name": "Quint key 122: BMP boundary scalars", - "input": { - "namespace": "urn", - "keyType": "퟿￿", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%ED%9F%BF%EE%80%80%EF%BF%BF:1#Get", - "valueKey": "urn:%ED%9F%BF%EE%80%80%EF%BF%BF:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 123: BMP boundary scalars", - "input": { - "namespace": "urn", - "keyType": "퟿￿", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:%ED%9F%BF%EE%80%80%EF%BF%BF:1}#Get", - "valueKey": "{urn:%ED%9F%BF%EE%80%80%EF%BF%BF:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:%ED%9F%BF%EE%80%80%EF%BF%BF:1}#watermark" - }, - { - "name": "Quint key 124: BMP boundary scalars", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "퟿￿", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%ED%9F%BF%EE%80%80%EF%BF%BF#Get", - "valueKey": "urn:id:%ED%9F%BF%EE%80%80%EF%BF%BF#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 125: BMP boundary scalars", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "퟿￿", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:%ED%9F%BF%EE%80%80%EF%BF%BF}#Get", - "valueKey": "{urn:id:%ED%9F%BF%EE%80%80%EF%BF%BF}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:%ED%9F%BF%EE%80%80%EF%BF%BF}#watermark" - }, - { - "name": "Quint key 126: BMP boundary scalars", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "퟿￿", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%ED%9F%BF%EE%80%80%EF%BF%BF", - "valueKey": "urn:id:1#%ED%9F%BF%EE%80%80%EF%BF%BF:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 127: BMP boundary scalars", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "퟿￿", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%ED%9F%BF%EE%80%80%EF%BF%BF", - "valueKey": "{urn:id:1}#%ED%9F%BF%EE%80%80%EF%BF%BF:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 128: BMP boundary scalars", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "퟿￿", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%ED%9F%BF%EE%80%80%EF%BF%BF=v#Get", - "valueKey": "urn:id:1?%ED%9F%BF%EE%80%80%EF%BF%BF=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 129: BMP boundary scalars", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "퟿￿", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%ED%9F%BF%EE%80%80%EF%BF%BF=v#Get", - "valueKey": "{urn:id:1}?%ED%9F%BF%EE%80%80%EF%BF%BF=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 130: BMP boundary scalars", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "퟿￿" - ] - ] - }, - "logicalKey": "urn:id:1?n=%ED%9F%BF%EE%80%80%EF%BF%BF#Get", - "valueKey": "urn:id:1?n=%ED%9F%BF%EE%80%80%EF%BF%BF#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 131: BMP boundary scalars", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "퟿￿" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%ED%9F%BF%EE%80%80%EF%BF%BF#Get", - "valueKey": "{urn:id:1}?n=%ED%9F%BF%EE%80%80%EF%BF%BF#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 132: combining sequence", - "input": { - "namespace": "é", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "e%CC%81:id:1#Get", - "valueKey": "e%CC%81:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 133: combining sequence", - "input": { - "namespace": "é", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{e%CC%81:id:1}#Get", - "valueKey": "{e%CC%81:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{e%CC%81:id:1}#watermark" - }, - { - "name": "Quint key 134: combining sequence", - "input": { - "namespace": "urn", - "keyType": "é", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:e%CC%81:1#Get", - "valueKey": "urn:e%CC%81:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 135: combining sequence", - "input": { - "namespace": "urn", - "keyType": "é", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:e%CC%81:1}#Get", - "valueKey": "{urn:e%CC%81:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:e%CC%81:1}#watermark" - }, - { - "name": "Quint key 136: combining sequence", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "é", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:e%CC%81#Get", - "valueKey": "urn:id:e%CC%81#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 137: combining sequence", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "é", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:e%CC%81}#Get", - "valueKey": "{urn:id:e%CC%81}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:e%CC%81}#watermark" - }, - { - "name": "Quint key 138: combining sequence", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "é", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#e%CC%81", - "valueKey": "urn:id:1#e%CC%81:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 139: combining sequence", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "é", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#e%CC%81", - "valueKey": "{urn:id:1}#e%CC%81:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 140: combining sequence", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "é", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?e%CC%81=v#Get", - "valueKey": "urn:id:1?e%CC%81=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 141: combining sequence", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "é", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?e%CC%81=v#Get", - "valueKey": "{urn:id:1}?e%CC%81=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 142: combining sequence", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "é" - ] - ] - }, - "logicalKey": "urn:id:1?n=e%CC%81#Get", - "valueKey": "urn:id:1?n=e%CC%81#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 143: combining sequence", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "é" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=e%CC%81#Get", - "valueKey": "{urn:id:1}?n=e%CC%81#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 144: precomposed accented text", - "input": { - "namespace": "é", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "%C3%A9:id:1#Get", - "valueKey": "%C3%A9:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 145: precomposed accented text", - "input": { - "namespace": "é", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{%C3%A9:id:1}#Get", - "valueKey": "{%C3%A9:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{%C3%A9:id:1}#watermark" - }, - { - "name": "Quint key 146: precomposed accented text", - "input": { - "namespace": "urn", - "keyType": "é", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%C3%A9:1#Get", - "valueKey": "urn:%C3%A9:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 147: precomposed accented text", - "input": { - "namespace": "urn", - "keyType": "é", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:%C3%A9:1}#Get", - "valueKey": "{urn:%C3%A9:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:%C3%A9:1}#watermark" - }, - { - "name": "Quint key 148: precomposed accented text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "é", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%C3%A9#Get", - "valueKey": "urn:id:%C3%A9#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 149: precomposed accented text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "é", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:%C3%A9}#Get", - "valueKey": "{urn:id:%C3%A9}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:%C3%A9}#watermark" - }, - { - "name": "Quint key 150: precomposed accented text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "é", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%C3%A9", - "valueKey": "urn:id:1#%C3%A9:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 151: precomposed accented text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "é", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%C3%A9", - "valueKey": "{urn:id:1}#%C3%A9:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 152: precomposed accented text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "é", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%C3%A9=v#Get", - "valueKey": "urn:id:1?%C3%A9=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 153: precomposed accented text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "é", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%C3%A9=v#Get", - "valueKey": "{urn:id:1}?%C3%A9=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 154: precomposed accented text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "é" - ] - ] - }, - "logicalKey": "urn:id:1?n=%C3%A9#Get", - "valueKey": "urn:id:1?n=%C3%A9#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 155: precomposed accented text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "é" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%C3%A9#Get", - "valueKey": "{urn:id:1}?n=%C3%A9#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 156: CJK text", - "input": { - "namespace": "雪種類", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "%E9%9B%AA%E7%A8%AE%E9%A1%9E:id:1#Get", - "valueKey": "%E9%9B%AA%E7%A8%AE%E9%A1%9E:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 157: CJK text", - "input": { - "namespace": "雪種類", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{%E9%9B%AA%E7%A8%AE%E9%A1%9E:id:1}#Get", - "valueKey": "{%E9%9B%AA%E7%A8%AE%E9%A1%9E:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{%E9%9B%AA%E7%A8%AE%E9%A1%9E:id:1}#watermark" - }, - { - "name": "Quint key 158: CJK text", - "input": { - "namespace": "urn", - "keyType": "雪種類", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%E9%9B%AA%E7%A8%AE%E9%A1%9E:1#Get", - "valueKey": "urn:%E9%9B%AA%E7%A8%AE%E9%A1%9E:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 159: CJK text", - "input": { - "namespace": "urn", - "keyType": "雪種類", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:%E9%9B%AA%E7%A8%AE%E9%A1%9E:1}#Get", - "valueKey": "{urn:%E9%9B%AA%E7%A8%AE%E9%A1%9E:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:%E9%9B%AA%E7%A8%AE%E9%A1%9E:1}#watermark" - }, - { - "name": "Quint key 160: CJK text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "雪種類", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%E9%9B%AA%E7%A8%AE%E9%A1%9E#Get", - "valueKey": "urn:id:%E9%9B%AA%E7%A8%AE%E9%A1%9E#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 161: CJK text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "雪種類", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:%E9%9B%AA%E7%A8%AE%E9%A1%9E}#Get", - "valueKey": "{urn:id:%E9%9B%AA%E7%A8%AE%E9%A1%9E}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:%E9%9B%AA%E7%A8%AE%E9%A1%9E}#watermark" - }, - { - "name": "Quint key 162: CJK text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "雪種類", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%E9%9B%AA%E7%A8%AE%E9%A1%9E", - "valueKey": "urn:id:1#%E9%9B%AA%E7%A8%AE%E9%A1%9E:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 163: CJK text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "雪種類", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%E9%9B%AA%E7%A8%AE%E9%A1%9E", - "valueKey": "{urn:id:1}#%E9%9B%AA%E7%A8%AE%E9%A1%9E:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 164: CJK text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "雪種類", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%E9%9B%AA%E7%A8%AE%E9%A1%9E=v#Get", - "valueKey": "urn:id:1?%E9%9B%AA%E7%A8%AE%E9%A1%9E=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 165: CJK text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "雪種類", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%E9%9B%AA%E7%A8%AE%E9%A1%9E=v#Get", - "valueKey": "{urn:id:1}?%E9%9B%AA%E7%A8%AE%E9%A1%9E=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 166: CJK text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "雪種類" - ] - ] - }, - "logicalKey": "urn:id:1?n=%E9%9B%AA%E7%A8%AE%E9%A1%9E#Get", - "valueKey": "urn:id:1?n=%E9%9B%AA%E7%A8%AE%E9%A1%9E#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 167: CJK text", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "雪種類" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%E9%9B%AA%E7%A8%AE%E9%A1%9E#Get", - "valueKey": "{urn:id:1}?n=%E9%9B%AA%E7%A8%AE%E9%A1%9E#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 168: first astral scalar", - "input": { - "namespace": "𐀀", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "%F0%90%80%80:id:1#Get", - "valueKey": "%F0%90%80%80:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 169: first astral scalar", - "input": { - "namespace": "𐀀", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{%F0%90%80%80:id:1}#Get", - "valueKey": "{%F0%90%80%80:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{%F0%90%80%80:id:1}#watermark" - }, - { - "name": "Quint key 170: first astral scalar", - "input": { - "namespace": "urn", - "keyType": "𐀀", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%F0%90%80%80:1#Get", - "valueKey": "urn:%F0%90%80%80:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 171: first astral scalar", - "input": { - "namespace": "urn", - "keyType": "𐀀", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:%F0%90%80%80:1}#Get", - "valueKey": "{urn:%F0%90%80%80:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:%F0%90%80%80:1}#watermark" - }, - { - "name": "Quint key 172: first astral scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "𐀀", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%F0%90%80%80#Get", - "valueKey": "urn:id:%F0%90%80%80#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 173: first astral scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "𐀀", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:%F0%90%80%80}#Get", - "valueKey": "{urn:id:%F0%90%80%80}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:%F0%90%80%80}#watermark" - }, - { - "name": "Quint key 174: first astral scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "𐀀", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%F0%90%80%80", - "valueKey": "urn:id:1#%F0%90%80%80:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 175: first astral scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "𐀀", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%F0%90%80%80", - "valueKey": "{urn:id:1}#%F0%90%80%80:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 176: first astral scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "𐀀", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%F0%90%80%80=v#Get", - "valueKey": "urn:id:1?%F0%90%80%80=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 177: first astral scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "𐀀", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%F0%90%80%80=v#Get", - "valueKey": "{urn:id:1}?%F0%90%80%80=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 178: first astral scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "𐀀" - ] - ] - }, - "logicalKey": "urn:id:1?n=%F0%90%80%80#Get", - "valueKey": "urn:id:1?n=%F0%90%80%80#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 179: first astral scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "𐀀" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%F0%90%80%80#Get", - "valueKey": "{urn:id:1}?n=%F0%90%80%80#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 180: emoji surrogate pair", - "input": { - "namespace": "😀", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "%F0%9F%98%80:id:1#Get", - "valueKey": "%F0%9F%98%80:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 181: emoji surrogate pair", - "input": { - "namespace": "😀", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{%F0%9F%98%80:id:1}#Get", - "valueKey": "{%F0%9F%98%80:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{%F0%9F%98%80:id:1}#watermark" - }, - { - "name": "Quint key 182: emoji surrogate pair", - "input": { - "namespace": "urn", - "keyType": "😀", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%F0%9F%98%80:1#Get", - "valueKey": "urn:%F0%9F%98%80:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 183: emoji surrogate pair", - "input": { - "namespace": "urn", - "keyType": "😀", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:%F0%9F%98%80:1}#Get", - "valueKey": "{urn:%F0%9F%98%80:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:%F0%9F%98%80:1}#watermark" - }, - { - "name": "Quint key 184: emoji surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "😀", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%F0%9F%98%80#Get", - "valueKey": "urn:id:%F0%9F%98%80#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 185: emoji surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "😀", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:%F0%9F%98%80}#Get", - "valueKey": "{urn:id:%F0%9F%98%80}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:%F0%9F%98%80}#watermark" - }, - { - "name": "Quint key 186: emoji surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "😀", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%F0%9F%98%80", - "valueKey": "urn:id:1#%F0%9F%98%80:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 187: emoji surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "😀", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%F0%9F%98%80", - "valueKey": "{urn:id:1}#%F0%9F%98%80:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 188: emoji surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "😀", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%F0%9F%98%80=v#Get", - "valueKey": "urn:id:1?%F0%9F%98%80=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 189: emoji surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "😀", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%F0%9F%98%80=v#Get", - "valueKey": "{urn:id:1}?%F0%9F%98%80=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 190: emoji surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "😀" - ] - ] - }, - "logicalKey": "urn:id:1?n=%F0%9F%98%80#Get", - "valueKey": "urn:id:1?n=%F0%9F%98%80#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 191: emoji surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "😀" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%F0%9F%98%80#Get", - "valueKey": "{urn:id:1}?n=%F0%9F%98%80#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 192: last Unicode scalar", - "input": { - "namespace": "􏿿", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "%F4%8F%BF%BF:id:1#Get", - "valueKey": "%F4%8F%BF%BF:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 193: last Unicode scalar", - "input": { - "namespace": "􏿿", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{%F4%8F%BF%BF:id:1}#Get", - "valueKey": "{%F4%8F%BF%BF:id:1}#Get:dialcache-frame-v1", - "watermarkKey": "{%F4%8F%BF%BF:id:1}#watermark" - }, - { - "name": "Quint key 194: last Unicode scalar", - "input": { - "namespace": "urn", - "keyType": "􏿿", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:%F4%8F%BF%BF:1#Get", - "valueKey": "urn:%F4%8F%BF%BF:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 195: last Unicode scalar", - "input": { - "namespace": "urn", - "keyType": "􏿿", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:%F4%8F%BF%BF:1}#Get", - "valueKey": "{urn:%F4%8F%BF%BF:1}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:%F4%8F%BF%BF:1}#watermark" - }, - { - "name": "Quint key 196: last Unicode scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "􏿿", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%F4%8F%BF%BF#Get", - "valueKey": "urn:id:%F4%8F%BF%BF#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 197: last Unicode scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "􏿿", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:%F4%8F%BF%BF}#Get", - "valueKey": "{urn:id:%F4%8F%BF%BF}#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:%F4%8F%BF%BF}#watermark" - }, - { - "name": "Quint key 198: last Unicode scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "􏿿", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#%F4%8F%BF%BF", - "valueKey": "urn:id:1#%F4%8F%BF%BF:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 199: last Unicode scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "􏿿", - "trackForInvalidation": true, - "args": [] - }, - "logicalKey": "{urn:id:1}#%F4%8F%BF%BF", - "valueKey": "{urn:id:1}#%F4%8F%BF%BF:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 200: last Unicode scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "􏿿", - "v" - ] - ] - }, - "logicalKey": "urn:id:1?%F4%8F%BF%BF=v#Get", - "valueKey": "urn:id:1?%F4%8F%BF%BF=v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 201: last Unicode scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "􏿿", - "v" - ] - ] - }, - "logicalKey": "{urn:id:1}?%F4%8F%BF%BF=v#Get", - "valueKey": "{urn:id:1}?%F4%8F%BF%BF=v#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 202: last Unicode scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "􏿿" - ] - ] - }, - "logicalKey": "urn:id:1?n=%F4%8F%BF%BF#Get", - "valueKey": "urn:id:1?n=%F4%8F%BF%BF#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 203: last Unicode scalar", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "􏿿" - ] - ] - }, - "logicalKey": "{urn:id:1}?n=%F4%8F%BF%BF#Get", - "valueKey": "{urn:id:1}?n=%F4%8F%BF%BF#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 288: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0000", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%00#Get", - "valueKey": "urn:id:%00#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 289: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0001", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%01#Get", - "valueKey": "urn:id:%01#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 290: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0002", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%02#Get", - "valueKey": "urn:id:%02#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 291: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0003", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%03#Get", - "valueKey": "urn:id:%03#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 292: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0004", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%04#Get", - "valueKey": "urn:id:%04#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 293: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0005", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%05#Get", - "valueKey": "urn:id:%05#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 294: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0006", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%06#Get", - "valueKey": "urn:id:%06#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 295: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0007", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%07#Get", - "valueKey": "urn:id:%07#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 296: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\b", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%08#Get", - "valueKey": "urn:id:%08#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 297: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\t", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%09#Get", - "valueKey": "urn:id:%09#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 298: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\n", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%0A#Get", - "valueKey": "urn:id:%0A#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 299: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u000b", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%0B#Get", - "valueKey": "urn:id:%0B#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 300: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\f", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%0C#Get", - "valueKey": "urn:id:%0C#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 301: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\r", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%0D#Get", - "valueKey": "urn:id:%0D#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 302: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u000e", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%0E#Get", - "valueKey": "urn:id:%0E#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 303: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u000f", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%0F#Get", - "valueKey": "urn:id:%0F#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 304: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0010", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%10#Get", - "valueKey": "urn:id:%10#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 305: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0011", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%11#Get", - "valueKey": "urn:id:%11#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 306: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0012", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%12#Get", - "valueKey": "urn:id:%12#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 307: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0013", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%13#Get", - "valueKey": "urn:id:%13#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 308: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0014", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%14#Get", - "valueKey": "urn:id:%14#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 309: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0015", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%15#Get", - "valueKey": "urn:id:%15#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 310: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0016", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%16#Get", - "valueKey": "urn:id:%16#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 311: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0017", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%17#Get", - "valueKey": "urn:id:%17#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 312: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0018", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%18#Get", - "valueKey": "urn:id:%18#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 313: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u0019", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%19#Get", - "valueKey": "urn:id:%19#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 314: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u001a", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%1A#Get", - "valueKey": "urn:id:%1A#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 315: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u001b", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%1B#Get", - "valueKey": "urn:id:%1B#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 316: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u001c", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%1C#Get", - "valueKey": "urn:id:%1C#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 317: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u001d", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%1D#Get", - "valueKey": "urn:id:%1D#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 318: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u001e", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%1E#Get", - "valueKey": "urn:id:%1E#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 319: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\u001f", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%1F#Get", - "valueKey": "urn:id:%1F#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 320: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": " ", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%20#Get", - "valueKey": "urn:id:%20#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 321: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "!", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:!#Get", - "valueKey": "urn:id:!#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 322: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\"", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%22#Get", - "valueKey": "urn:id:%22#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 323: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "#", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%23#Get", - "valueKey": "urn:id:%23#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 324: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "$", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%24#Get", - "valueKey": "urn:id:%24#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 325: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "%", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%25#Get", - "valueKey": "urn:id:%25#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 326: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "&", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%26#Get", - "valueKey": "urn:id:%26#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 327: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "'", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:'#Get", - "valueKey": "urn:id:'#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 328: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "(", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:(#Get", - "valueKey": "urn:id:(#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 329: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": ")", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:)#Get", - "valueKey": "urn:id:)#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 330: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "*", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:*#Get", - "valueKey": "urn:id:*#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 331: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "+", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%2B#Get", - "valueKey": "urn:id:%2B#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 332: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": ",", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%2C#Get", - "valueKey": "urn:id:%2C#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 333: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "-", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:-#Get", - "valueKey": "urn:id:-#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 334: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": ".", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:.#Get", - "valueKey": "urn:id:.#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 335: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "/", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%2F#Get", - "valueKey": "urn:id:%2F#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 336: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "0", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:0#Get", - "valueKey": "urn:id:0#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 337: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:1#Get", - "valueKey": "urn:id:1#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 338: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "2", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:2#Get", - "valueKey": "urn:id:2#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 339: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "3", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:3#Get", - "valueKey": "urn:id:3#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 340: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "4", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:4#Get", - "valueKey": "urn:id:4#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 341: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "5", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:5#Get", - "valueKey": "urn:id:5#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 342: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "6", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:6#Get", - "valueKey": "urn:id:6#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 343: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "7", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:7#Get", - "valueKey": "urn:id:7#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 344: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "8", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:8#Get", - "valueKey": "urn:id:8#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 345: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "9", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:9#Get", - "valueKey": "urn:id:9#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 346: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": ":", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%3A#Get", - "valueKey": "urn:id:%3A#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 347: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": ";", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%3B#Get", - "valueKey": "urn:id:%3B#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 348: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "<", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%3C#Get", - "valueKey": "urn:id:%3C#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 349: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "=", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%3D#Get", - "valueKey": "urn:id:%3D#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 350: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": ">", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%3E#Get", - "valueKey": "urn:id:%3E#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 351: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "?", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%3F#Get", - "valueKey": "urn:id:%3F#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 352: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "@", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%40#Get", - "valueKey": "urn:id:%40#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 353: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "A", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:A#Get", - "valueKey": "urn:id:A#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 354: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "B", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:B#Get", - "valueKey": "urn:id:B#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 355: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "C", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:C#Get", - "valueKey": "urn:id:C#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 356: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "D", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:D#Get", - "valueKey": "urn:id:D#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 357: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "E", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:E#Get", - "valueKey": "urn:id:E#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 358: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "F", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:F#Get", - "valueKey": "urn:id:F#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 359: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "G", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:G#Get", - "valueKey": "urn:id:G#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 360: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "H", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:H#Get", - "valueKey": "urn:id:H#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 361: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "I", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:I#Get", - "valueKey": "urn:id:I#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 362: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "J", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:J#Get", - "valueKey": "urn:id:J#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 363: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "K", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:K#Get", - "valueKey": "urn:id:K#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 364: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "L", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:L#Get", - "valueKey": "urn:id:L#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 365: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "M", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:M#Get", - "valueKey": "urn:id:M#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 366: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "N", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:N#Get", - "valueKey": "urn:id:N#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 367: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "O", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:O#Get", - "valueKey": "urn:id:O#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 368: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "P", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:P#Get", - "valueKey": "urn:id:P#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 369: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "Q", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:Q#Get", - "valueKey": "urn:id:Q#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 370: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "R", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:R#Get", - "valueKey": "urn:id:R#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 371: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "S", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:S#Get", - "valueKey": "urn:id:S#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 372: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "T", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:T#Get", - "valueKey": "urn:id:T#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 373: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "U", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:U#Get", - "valueKey": "urn:id:U#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 374: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "V", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:V#Get", - "valueKey": "urn:id:V#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 375: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "W", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:W#Get", - "valueKey": "urn:id:W#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 376: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "X", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:X#Get", - "valueKey": "urn:id:X#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 377: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "Y", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:Y#Get", - "valueKey": "urn:id:Y#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 378: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "Z", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:Z#Get", - "valueKey": "urn:id:Z#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 379: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "[", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%5B#Get", - "valueKey": "urn:id:%5B#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 380: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\\", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%5C#Get", - "valueKey": "urn:id:%5C#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 381: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "]", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%5D#Get", - "valueKey": "urn:id:%5D#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 382: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "^", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%5E#Get", - "valueKey": "urn:id:%5E#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 383: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "_", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:_#Get", - "valueKey": "urn:id:_#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 384: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "`", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%60#Get", - "valueKey": "urn:id:%60#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 385: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "a", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:a#Get", - "valueKey": "urn:id:a#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 386: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "b", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:b#Get", - "valueKey": "urn:id:b#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 387: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "c", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:c#Get", - "valueKey": "urn:id:c#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 388: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "d", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:d#Get", - "valueKey": "urn:id:d#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 389: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "e", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:e#Get", - "valueKey": "urn:id:e#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 390: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "f", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:f#Get", - "valueKey": "urn:id:f#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 391: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "g", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:g#Get", - "valueKey": "urn:id:g#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 392: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "h", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:h#Get", - "valueKey": "urn:id:h#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 393: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "i", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:i#Get", - "valueKey": "urn:id:i#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 394: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "j", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:j#Get", - "valueKey": "urn:id:j#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 395: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "k", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:k#Get", - "valueKey": "urn:id:k#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 396: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "l", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:l#Get", - "valueKey": "urn:id:l#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 397: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "m", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:m#Get", - "valueKey": "urn:id:m#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 398: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "n", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:n#Get", - "valueKey": "urn:id:n#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 399: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "o", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:o#Get", - "valueKey": "urn:id:o#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 400: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "p", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:p#Get", - "valueKey": "urn:id:p#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 401: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "q", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:q#Get", - "valueKey": "urn:id:q#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 402: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "r", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:r#Get", - "valueKey": "urn:id:r#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 403: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "s", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:s#Get", - "valueKey": "urn:id:s#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 404: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "t", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:t#Get", - "valueKey": "urn:id:t#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 405: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "u", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:u#Get", - "valueKey": "urn:id:u#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 406: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "v", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:v#Get", - "valueKey": "urn:id:v#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 407: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "w", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:w#Get", - "valueKey": "urn:id:w#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 408: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "x", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:x#Get", - "valueKey": "urn:id:x#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 409: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "y", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:y#Get", - "valueKey": "urn:id:y#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 410: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "z", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:z#Get", - "valueKey": "urn:id:z#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 411: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "{", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%7B#Get", - "valueKey": "urn:id:%7B#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 412: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "|", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%7C#Get", - "valueKey": "urn:id:%7C#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 413: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "}", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%7D#Get", - "valueKey": "urn:id:%7D#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 414: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "~", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:~#Get", - "valueKey": "urn:id:~#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 415: individual ASCII code unit", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "logicalKey": "urn:id:%7F#Get", - "valueKey": "urn:id:%7F#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 416: ordered duplicate arguments", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "z", - "2" - ], - [ - "a", - "1" - ], - [ - "z", - "3" - ] - ] - }, - "logicalKey": "urn:id:1?z=2&a=1&z=3#Get", - "valueKey": "urn:id:1?z=2&a=1&z=3#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 417: ordered duplicate arguments", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "z", - "2" - ], - [ - "a", - "1" - ], - [ - "z", - "3" - ] - ] - }, - "logicalKey": "{urn:id:1}?z=2&a=1&z=3#Get", - "valueKey": "{urn:id:1}?z=2&a=1&z=3#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - }, - { - "name": "Quint key 418: ordered duplicate arguments", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "z", - "3" - ], - [ - "a", - "1" - ], - [ - "z", - "2" - ] - ] - }, - "logicalKey": "urn:id:1?z=3&a=1&z=2#Get", - "valueKey": "urn:id:1?z=3&a=1&z=2#Get:dialcache-frame-v1", - "watermarkKey": null - }, - { - "name": "Quint key 419: ordered duplicate arguments", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "z", - "3" - ], - [ - "a", - "1" - ], - [ - "z", - "2" - ] - ] - }, - "logicalKey": "{urn:id:1}?z=3&a=1&z=2#Get", - "valueKey": "{urn:id:1}?z=3&a=1&z=2#Get:dialcache-frame-v1", - "watermarkKey": "{urn:id:1}#watermark" - } + {"name":"Quint key 000: empty","input":{"namespace":"","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":":id:1#Get","valueKey":":id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 001: empty","input":{"namespace":"","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{:id:1}#Get","valueKey":"{:id:1}#Get:dialcache-frame-v1","watermarkKey":"{:id:1}#watermark"}, + {"name":"Quint key 002: empty","input":{"namespace":"urn","keyType":"","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn::1#Get","valueKey":"urn::1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 003: empty","input":{"namespace":"urn","keyType":"","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn::1}#Get","valueKey":"{urn::1}#Get:dialcache-frame-v1","watermarkKey":"{urn::1}#watermark"}, + {"name":"Quint key 004: empty","input":{"namespace":"urn","keyType":"id","id":"","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:#Get","valueKey":"urn:id:#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 005: empty","input":{"namespace":"urn","keyType":"id","id":"","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:}#Get","valueKey":"{urn:id:}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:}#watermark"}, + {"name":"Quint key 006: empty","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#","valueKey":"urn:id:1#:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 007: empty","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#","valueKey":"{urn:id:1}#:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 008: empty","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["","v"]]},"logicalKey":"urn:id:1?=v#Get","valueKey":"urn:id:1?=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 009: empty","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["","v"]]},"logicalKey":"{urn:id:1}?=v#Get","valueKey":"{urn:id:1}?=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 010: empty","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n",""]]},"logicalKey":"urn:id:1?n=#Get","valueKey":"urn:id:1?n=#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 011: empty","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n",""]]},"logicalKey":"{urn:id:1}?n=#Get","valueKey":"{urn:id:1}?n=#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 012: URI-safe punctuation","input":{"namespace":"~!*'()-._","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"~!*'()-._:id:1#Get","valueKey":"~!*'()-._:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 013: URI-safe punctuation","input":{"namespace":"~!*'()-._","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{~!*'()-._:id:1}#Get","valueKey":"{~!*'()-._:id:1}#Get:dialcache-frame-v1","watermarkKey":"{~!*'()-._:id:1}#watermark"}, + {"name":"Quint key 014: URI-safe punctuation","input":{"namespace":"urn","keyType":"~!*'()-._","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:~!*'()-._:1#Get","valueKey":"urn:~!*'()-._:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 015: URI-safe punctuation","input":{"namespace":"urn","keyType":"~!*'()-._","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:~!*'()-._:1}#Get","valueKey":"{urn:~!*'()-._:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:~!*'()-._:1}#watermark"}, + {"name":"Quint key 016: URI-safe punctuation","input":{"namespace":"urn","keyType":"id","id":"~!*'()-._","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:~!*'()-._#Get","valueKey":"urn:id:~!*'()-._#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 017: URI-safe punctuation","input":{"namespace":"urn","keyType":"id","id":"~!*'()-._","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:~!*'()-._}#Get","valueKey":"{urn:id:~!*'()-._}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:~!*'()-._}#watermark"}, + {"name":"Quint key 018: URI-safe punctuation","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"~!*'()-._","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#~!*'()-._","valueKey":"urn:id:1#~!*'()-._:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 019: URI-safe punctuation","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"~!*'()-._","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#~!*'()-._","valueKey":"{urn:id:1}#~!*'()-._:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 020: URI-safe punctuation","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["~!*'()-._","v"]]},"logicalKey":"urn:id:1?~!*'()-._=v#Get","valueKey":"urn:id:1?~!*'()-._=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 021: URI-safe punctuation","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["~!*'()-._","v"]]},"logicalKey":"{urn:id:1}?~!*'()-._=v#Get","valueKey":"{urn:id:1}?~!*'()-._=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 022: URI-safe punctuation","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","~!*'()-._"]]},"logicalKey":"urn:id:1?n=~!*'()-._#Get","valueKey":"urn:id:1?n=~!*'()-._#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 023: URI-safe punctuation","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","~!*'()-._"]]},"logicalKey":"{urn:id:1}?n=~!*'()-._#Get","valueKey":"{urn:id:1}?n=~!*'()-._#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 024: reserved delimiters","input":{"namespace":" :/?#[]@$&+,;=","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:id:1#Get","valueKey":"%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 025: reserved delimiters","input":{"namespace":" :/?#[]@$&+,;=","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:id:1}#Get","valueKey":"{%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:id:1}#Get:dialcache-frame-v1","watermarkKey":"{%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:id:1}#watermark"}, + {"name":"Quint key 026: reserved delimiters","input":{"namespace":"urn","keyType":" :/?#[]@$&+,;=","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:1#Get","valueKey":"urn:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 027: reserved delimiters","input":{"namespace":"urn","keyType":" :/?#[]@$&+,;=","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:1}#Get","valueKey":"{urn:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:1}#watermark"}, + {"name":"Quint key 028: reserved delimiters","input":{"namespace":"urn","keyType":"id","id":" :/?#[]@$&+,;=","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D#Get","valueKey":"urn:id:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 029: reserved delimiters","input":{"namespace":"urn","keyType":"id","id":" :/?#[]@$&+,;=","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D}#Get","valueKey":"{urn:id:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D}#watermark"}, + {"name":"Quint key 030: reserved delimiters","input":{"namespace":"urn","keyType":"id","id":"1","useCase":" :/?#[]@$&+,;=","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D","valueKey":"urn:id:1#%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 031: reserved delimiters","input":{"namespace":"urn","keyType":"id","id":"1","useCase":" :/?#[]@$&+,;=","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D","valueKey":"{urn:id:1}#%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 032: reserved delimiters","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[[" :/?#[]@$&+,;=","v"]]},"logicalKey":"urn:id:1?%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D=v#Get","valueKey":"urn:id:1?%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 033: reserved delimiters","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[[" :/?#[]@$&+,;=","v"]]},"logicalKey":"{urn:id:1}?%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D=v#Get","valueKey":"{urn:id:1}?%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 034: reserved delimiters","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n"," :/?#[]@$&+,;="]]},"logicalKey":"urn:id:1?n=%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D#Get","valueKey":"urn:id:1?n=%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 035: reserved delimiters","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n"," :/?#[]@$&+,;="]]},"logicalKey":"{urn:id:1}?n=%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D#Get","valueKey":"{urn:id:1}?n=%20%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 036: literal percent escape","input":{"namespace":"%2F","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"%252F:id:1#Get","valueKey":"%252F:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 037: literal percent escape","input":{"namespace":"%2F","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{%252F:id:1}#Get","valueKey":"{%252F:id:1}#Get:dialcache-frame-v1","watermarkKey":"{%252F:id:1}#watermark"}, + {"name":"Quint key 038: literal percent escape","input":{"namespace":"urn","keyType":"%2F","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%252F:1#Get","valueKey":"urn:%252F:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 039: literal percent escape","input":{"namespace":"urn","keyType":"%2F","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:%252F:1}#Get","valueKey":"{urn:%252F:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:%252F:1}#watermark"}, + {"name":"Quint key 040: literal percent escape","input":{"namespace":"urn","keyType":"id","id":"%2F","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%252F#Get","valueKey":"urn:id:%252F#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 041: literal percent escape","input":{"namespace":"urn","keyType":"id","id":"%2F","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:%252F}#Get","valueKey":"{urn:id:%252F}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:%252F}#watermark"}, + {"name":"Quint key 042: literal percent escape","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"%2F","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%252F","valueKey":"urn:id:1#%252F:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 043: literal percent escape","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"%2F","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%252F","valueKey":"{urn:id:1}#%252F:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 044: literal percent escape","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["%2F","v"]]},"logicalKey":"urn:id:1?%252F=v#Get","valueKey":"urn:id:1?%252F=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 045: literal percent escape","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["%2F","v"]]},"logicalKey":"{urn:id:1}?%252F=v#Get","valueKey":"{urn:id:1}?%252F=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 046: literal percent escape","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","%2F"]]},"logicalKey":"urn:id:1?n=%252F#Get","valueKey":"urn:id:1?n=%252F#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 047: literal percent escape","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","%2F"]]},"logicalKey":"{urn:id:1}?n=%252F#Get","valueKey":"{urn:id:1}?n=%252F#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 050: opening brace","input":{"namespace":"urn","keyType":"{","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%7B:1#Get","valueKey":"urn:%7B:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 052: opening brace","input":{"namespace":"urn","keyType":"id","id":"{","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%7B#Get","valueKey":"urn:id:%7B#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 054: opening brace","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"{","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%7B","valueKey":"urn:id:1#%7B:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 055: opening brace","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"{","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%7B","valueKey":"{urn:id:1}#%7B:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 056: opening brace","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["{","v"]]},"logicalKey":"urn:id:1?%7B=v#Get","valueKey":"urn:id:1?%7B=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 057: opening brace","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["{","v"]]},"logicalKey":"{urn:id:1}?%7B=v#Get","valueKey":"{urn:id:1}?%7B=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 058: opening brace","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","{"]]},"logicalKey":"urn:id:1?n=%7B#Get","valueKey":"urn:id:1?n=%7B#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 059: opening brace","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","{"]]},"logicalKey":"{urn:id:1}?n=%7B#Get","valueKey":"{urn:id:1}?n=%7B#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 062: closing brace","input":{"namespace":"urn","keyType":"}","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%7D:1#Get","valueKey":"urn:%7D:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 064: closing brace","input":{"namespace":"urn","keyType":"id","id":"}","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%7D#Get","valueKey":"urn:id:%7D#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 066: closing brace","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"}","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%7D","valueKey":"urn:id:1#%7D:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 067: closing brace","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"}","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%7D","valueKey":"{urn:id:1}#%7D:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 068: closing brace","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["}","v"]]},"logicalKey":"urn:id:1?%7D=v#Get","valueKey":"urn:id:1?%7D=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 069: closing brace","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["}","v"]]},"logicalKey":"{urn:id:1}?%7D=v#Get","valueKey":"{urn:id:1}?%7D=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 070: closing brace","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","}"]]},"logicalKey":"urn:id:1?n=%7D#Get","valueKey":"urn:id:1?n=%7D#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 071: closing brace","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","}"]]},"logicalKey":"{urn:id:1}?n=%7D#Get","valueKey":"{urn:id:1}?n=%7D#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 072: ASCII controls","input":{"namespace":"\u0000\u0001\u001f","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"%00%01%1F%7F:id:1#Get","valueKey":"%00%01%1F%7F:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 073: ASCII controls","input":{"namespace":"\u0000\u0001\u001f","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{%00%01%1F%7F:id:1}#Get","valueKey":"{%00%01%1F%7F:id:1}#Get:dialcache-frame-v1","watermarkKey":"{%00%01%1F%7F:id:1}#watermark"}, + {"name":"Quint key 074: ASCII controls","input":{"namespace":"urn","keyType":"\u0000\u0001\u001f","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%00%01%1F%7F:1#Get","valueKey":"urn:%00%01%1F%7F:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 075: ASCII controls","input":{"namespace":"urn","keyType":"\u0000\u0001\u001f","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:%00%01%1F%7F:1}#Get","valueKey":"{urn:%00%01%1F%7F:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:%00%01%1F%7F:1}#watermark"}, + {"name":"Quint key 076: ASCII controls","input":{"namespace":"urn","keyType":"id","id":"\u0000\u0001\u001f","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%00%01%1F%7F#Get","valueKey":"urn:id:%00%01%1F%7F#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 077: ASCII controls","input":{"namespace":"urn","keyType":"id","id":"\u0000\u0001\u001f","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:%00%01%1F%7F}#Get","valueKey":"{urn:id:%00%01%1F%7F}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:%00%01%1F%7F}#watermark"}, + {"name":"Quint key 078: ASCII controls","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"\u0000\u0001\u001f","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%00%01%1F%7F","valueKey":"urn:id:1#%00%01%1F%7F:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 079: ASCII controls","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"\u0000\u0001\u001f","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%00%01%1F%7F","valueKey":"{urn:id:1}#%00%01%1F%7F:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 080: ASCII controls","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["\u0000\u0001\u001f","v"]]},"logicalKey":"urn:id:1?%00%01%1F%7F=v#Get","valueKey":"urn:id:1?%00%01%1F%7F=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 081: ASCII controls","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["\u0000\u0001\u001f","v"]]},"logicalKey":"{urn:id:1}?%00%01%1F%7F=v#Get","valueKey":"{urn:id:1}?%00%01%1F%7F=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 082: ASCII controls","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","\u0000\u0001\u001f"]]},"logicalKey":"urn:id:1?n=%00%01%1F%7F#Get","valueKey":"urn:id:1?n=%00%01%1F%7F#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 083: ASCII controls","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","\u0000\u0001\u001f"]]},"logicalKey":"{urn:id:1}?n=%00%01%1F%7F#Get","valueKey":"{urn:id:1}?n=%00%01%1F%7F#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 084: first two-byte scalar","input":{"namespace":"€","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"%C2%80:id:1#Get","valueKey":"%C2%80:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 085: first two-byte scalar","input":{"namespace":"€","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{%C2%80:id:1}#Get","valueKey":"{%C2%80:id:1}#Get:dialcache-frame-v1","watermarkKey":"{%C2%80:id:1}#watermark"}, + {"name":"Quint key 086: first two-byte scalar","input":{"namespace":"urn","keyType":"€","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%C2%80:1#Get","valueKey":"urn:%C2%80:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 087: first two-byte scalar","input":{"namespace":"urn","keyType":"€","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:%C2%80:1}#Get","valueKey":"{urn:%C2%80:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:%C2%80:1}#watermark"}, + {"name":"Quint key 088: first two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"€","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%C2%80#Get","valueKey":"urn:id:%C2%80#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 089: first two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"€","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:%C2%80}#Get","valueKey":"{urn:id:%C2%80}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:%C2%80}#watermark"}, + {"name":"Quint key 090: first two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"€","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%C2%80","valueKey":"urn:id:1#%C2%80:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 091: first two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"€","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%C2%80","valueKey":"{urn:id:1}#%C2%80:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 092: first two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["€","v"]]},"logicalKey":"urn:id:1?%C2%80=v#Get","valueKey":"urn:id:1?%C2%80=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 093: first two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["€","v"]]},"logicalKey":"{urn:id:1}?%C2%80=v#Get","valueKey":"{urn:id:1}?%C2%80=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 094: first two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","€"]]},"logicalKey":"urn:id:1?n=%C2%80#Get","valueKey":"urn:id:1?n=%C2%80#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 095: first two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","€"]]},"logicalKey":"{urn:id:1}?n=%C2%80#Get","valueKey":"{urn:id:1}?n=%C2%80#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 096: last two-byte scalar","input":{"namespace":"߿","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"%DF%BF:id:1#Get","valueKey":"%DF%BF:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 097: last two-byte scalar","input":{"namespace":"߿","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{%DF%BF:id:1}#Get","valueKey":"{%DF%BF:id:1}#Get:dialcache-frame-v1","watermarkKey":"{%DF%BF:id:1}#watermark"}, + {"name":"Quint key 098: last two-byte scalar","input":{"namespace":"urn","keyType":"߿","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%DF%BF:1#Get","valueKey":"urn:%DF%BF:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 099: last two-byte scalar","input":{"namespace":"urn","keyType":"߿","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:%DF%BF:1}#Get","valueKey":"{urn:%DF%BF:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:%DF%BF:1}#watermark"}, + {"name":"Quint key 100: last two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"߿","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%DF%BF#Get","valueKey":"urn:id:%DF%BF#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 101: last two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"߿","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:%DF%BF}#Get","valueKey":"{urn:id:%DF%BF}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:%DF%BF}#watermark"}, + {"name":"Quint key 102: last two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"߿","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%DF%BF","valueKey":"urn:id:1#%DF%BF:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 103: last two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"߿","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%DF%BF","valueKey":"{urn:id:1}#%DF%BF:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 104: last two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["߿","v"]]},"logicalKey":"urn:id:1?%DF%BF=v#Get","valueKey":"urn:id:1?%DF%BF=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 105: last two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["߿","v"]]},"logicalKey":"{urn:id:1}?%DF%BF=v#Get","valueKey":"{urn:id:1}?%DF%BF=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 106: last two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","߿"]]},"logicalKey":"urn:id:1?n=%DF%BF#Get","valueKey":"urn:id:1?n=%DF%BF#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 107: last two-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","߿"]]},"logicalKey":"{urn:id:1}?n=%DF%BF#Get","valueKey":"{urn:id:1}?n=%DF%BF#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 108: first three-byte scalar","input":{"namespace":"ࠀ","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"%E0%A0%80:id:1#Get","valueKey":"%E0%A0%80:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 109: first three-byte scalar","input":{"namespace":"ࠀ","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{%E0%A0%80:id:1}#Get","valueKey":"{%E0%A0%80:id:1}#Get:dialcache-frame-v1","watermarkKey":"{%E0%A0%80:id:1}#watermark"}, + {"name":"Quint key 110: first three-byte scalar","input":{"namespace":"urn","keyType":"ࠀ","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%E0%A0%80:1#Get","valueKey":"urn:%E0%A0%80:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 111: first three-byte scalar","input":{"namespace":"urn","keyType":"ࠀ","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:%E0%A0%80:1}#Get","valueKey":"{urn:%E0%A0%80:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:%E0%A0%80:1}#watermark"}, + {"name":"Quint key 112: first three-byte scalar","input":{"namespace":"urn","keyType":"id","id":"ࠀ","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%E0%A0%80#Get","valueKey":"urn:id:%E0%A0%80#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 113: first three-byte scalar","input":{"namespace":"urn","keyType":"id","id":"ࠀ","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:%E0%A0%80}#Get","valueKey":"{urn:id:%E0%A0%80}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:%E0%A0%80}#watermark"}, + {"name":"Quint key 114: first three-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"ࠀ","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%E0%A0%80","valueKey":"urn:id:1#%E0%A0%80:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 115: first three-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"ࠀ","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%E0%A0%80","valueKey":"{urn:id:1}#%E0%A0%80:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 116: first three-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["ࠀ","v"]]},"logicalKey":"urn:id:1?%E0%A0%80=v#Get","valueKey":"urn:id:1?%E0%A0%80=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 117: first three-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["ࠀ","v"]]},"logicalKey":"{urn:id:1}?%E0%A0%80=v#Get","valueKey":"{urn:id:1}?%E0%A0%80=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 118: first three-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","ࠀ"]]},"logicalKey":"urn:id:1?n=%E0%A0%80#Get","valueKey":"urn:id:1?n=%E0%A0%80#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 119: first three-byte scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","ࠀ"]]},"logicalKey":"{urn:id:1}?n=%E0%A0%80#Get","valueKey":"{urn:id:1}?n=%E0%A0%80#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 120: BMP boundary scalars","input":{"namespace":"퟿￿","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"%ED%9F%BF%EE%80%80%EF%BF%BF:id:1#Get","valueKey":"%ED%9F%BF%EE%80%80%EF%BF%BF:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 121: BMP boundary scalars","input":{"namespace":"퟿￿","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{%ED%9F%BF%EE%80%80%EF%BF%BF:id:1}#Get","valueKey":"{%ED%9F%BF%EE%80%80%EF%BF%BF:id:1}#Get:dialcache-frame-v1","watermarkKey":"{%ED%9F%BF%EE%80%80%EF%BF%BF:id:1}#watermark"}, + {"name":"Quint key 122: BMP boundary scalars","input":{"namespace":"urn","keyType":"퟿￿","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%ED%9F%BF%EE%80%80%EF%BF%BF:1#Get","valueKey":"urn:%ED%9F%BF%EE%80%80%EF%BF%BF:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 123: BMP boundary scalars","input":{"namespace":"urn","keyType":"퟿￿","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:%ED%9F%BF%EE%80%80%EF%BF%BF:1}#Get","valueKey":"{urn:%ED%9F%BF%EE%80%80%EF%BF%BF:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:%ED%9F%BF%EE%80%80%EF%BF%BF:1}#watermark"}, + {"name":"Quint key 124: BMP boundary scalars","input":{"namespace":"urn","keyType":"id","id":"퟿￿","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%ED%9F%BF%EE%80%80%EF%BF%BF#Get","valueKey":"urn:id:%ED%9F%BF%EE%80%80%EF%BF%BF#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 125: BMP boundary scalars","input":{"namespace":"urn","keyType":"id","id":"퟿￿","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:%ED%9F%BF%EE%80%80%EF%BF%BF}#Get","valueKey":"{urn:id:%ED%9F%BF%EE%80%80%EF%BF%BF}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:%ED%9F%BF%EE%80%80%EF%BF%BF}#watermark"}, + {"name":"Quint key 126: BMP boundary scalars","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"퟿￿","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%ED%9F%BF%EE%80%80%EF%BF%BF","valueKey":"urn:id:1#%ED%9F%BF%EE%80%80%EF%BF%BF:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 127: BMP boundary scalars","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"퟿￿","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%ED%9F%BF%EE%80%80%EF%BF%BF","valueKey":"{urn:id:1}#%ED%9F%BF%EE%80%80%EF%BF%BF:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 128: BMP boundary scalars","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["퟿￿","v"]]},"logicalKey":"urn:id:1?%ED%9F%BF%EE%80%80%EF%BF%BF=v#Get","valueKey":"urn:id:1?%ED%9F%BF%EE%80%80%EF%BF%BF=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 129: BMP boundary scalars","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["퟿￿","v"]]},"logicalKey":"{urn:id:1}?%ED%9F%BF%EE%80%80%EF%BF%BF=v#Get","valueKey":"{urn:id:1}?%ED%9F%BF%EE%80%80%EF%BF%BF=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 130: BMP boundary scalars","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","퟿￿"]]},"logicalKey":"urn:id:1?n=%ED%9F%BF%EE%80%80%EF%BF%BF#Get","valueKey":"urn:id:1?n=%ED%9F%BF%EE%80%80%EF%BF%BF#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 131: BMP boundary scalars","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","퟿￿"]]},"logicalKey":"{urn:id:1}?n=%ED%9F%BF%EE%80%80%EF%BF%BF#Get","valueKey":"{urn:id:1}?n=%ED%9F%BF%EE%80%80%EF%BF%BF#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 132: combining sequence","input":{"namespace":"é","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"e%CC%81:id:1#Get","valueKey":"e%CC%81:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 133: combining sequence","input":{"namespace":"é","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{e%CC%81:id:1}#Get","valueKey":"{e%CC%81:id:1}#Get:dialcache-frame-v1","watermarkKey":"{e%CC%81:id:1}#watermark"}, + {"name":"Quint key 134: combining sequence","input":{"namespace":"urn","keyType":"é","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:e%CC%81:1#Get","valueKey":"urn:e%CC%81:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 135: combining sequence","input":{"namespace":"urn","keyType":"é","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:e%CC%81:1}#Get","valueKey":"{urn:e%CC%81:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:e%CC%81:1}#watermark"}, + {"name":"Quint key 136: combining sequence","input":{"namespace":"urn","keyType":"id","id":"é","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:e%CC%81#Get","valueKey":"urn:id:e%CC%81#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 137: combining sequence","input":{"namespace":"urn","keyType":"id","id":"é","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:e%CC%81}#Get","valueKey":"{urn:id:e%CC%81}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:e%CC%81}#watermark"}, + {"name":"Quint key 138: combining sequence","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"é","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#e%CC%81","valueKey":"urn:id:1#e%CC%81:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 139: combining sequence","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"é","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#e%CC%81","valueKey":"{urn:id:1}#e%CC%81:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 140: combining sequence","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["é","v"]]},"logicalKey":"urn:id:1?e%CC%81=v#Get","valueKey":"urn:id:1?e%CC%81=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 141: combining sequence","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["é","v"]]},"logicalKey":"{urn:id:1}?e%CC%81=v#Get","valueKey":"{urn:id:1}?e%CC%81=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 142: combining sequence","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","é"]]},"logicalKey":"urn:id:1?n=e%CC%81#Get","valueKey":"urn:id:1?n=e%CC%81#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 143: combining sequence","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","é"]]},"logicalKey":"{urn:id:1}?n=e%CC%81#Get","valueKey":"{urn:id:1}?n=e%CC%81#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 144: precomposed accented text","input":{"namespace":"é","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"%C3%A9:id:1#Get","valueKey":"%C3%A9:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 145: precomposed accented text","input":{"namespace":"é","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{%C3%A9:id:1}#Get","valueKey":"{%C3%A9:id:1}#Get:dialcache-frame-v1","watermarkKey":"{%C3%A9:id:1}#watermark"}, + {"name":"Quint key 146: precomposed accented text","input":{"namespace":"urn","keyType":"é","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%C3%A9:1#Get","valueKey":"urn:%C3%A9:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 147: precomposed accented text","input":{"namespace":"urn","keyType":"é","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:%C3%A9:1}#Get","valueKey":"{urn:%C3%A9:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:%C3%A9:1}#watermark"}, + {"name":"Quint key 148: precomposed accented text","input":{"namespace":"urn","keyType":"id","id":"é","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%C3%A9#Get","valueKey":"urn:id:%C3%A9#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 149: precomposed accented text","input":{"namespace":"urn","keyType":"id","id":"é","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:%C3%A9}#Get","valueKey":"{urn:id:%C3%A9}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:%C3%A9}#watermark"}, + {"name":"Quint key 150: precomposed accented text","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"é","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%C3%A9","valueKey":"urn:id:1#%C3%A9:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 151: precomposed accented text","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"é","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%C3%A9","valueKey":"{urn:id:1}#%C3%A9:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 152: precomposed accented text","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["é","v"]]},"logicalKey":"urn:id:1?%C3%A9=v#Get","valueKey":"urn:id:1?%C3%A9=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 153: precomposed accented text","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["é","v"]]},"logicalKey":"{urn:id:1}?%C3%A9=v#Get","valueKey":"{urn:id:1}?%C3%A9=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 154: precomposed accented text","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","é"]]},"logicalKey":"urn:id:1?n=%C3%A9#Get","valueKey":"urn:id:1?n=%C3%A9#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 155: precomposed accented text","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","é"]]},"logicalKey":"{urn:id:1}?n=%C3%A9#Get","valueKey":"{urn:id:1}?n=%C3%A9#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 156: CJK text","input":{"namespace":"雪種類","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"%E9%9B%AA%E7%A8%AE%E9%A1%9E:id:1#Get","valueKey":"%E9%9B%AA%E7%A8%AE%E9%A1%9E:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 157: CJK text","input":{"namespace":"雪種類","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{%E9%9B%AA%E7%A8%AE%E9%A1%9E:id:1}#Get","valueKey":"{%E9%9B%AA%E7%A8%AE%E9%A1%9E:id:1}#Get:dialcache-frame-v1","watermarkKey":"{%E9%9B%AA%E7%A8%AE%E9%A1%9E:id:1}#watermark"}, + {"name":"Quint key 158: CJK text","input":{"namespace":"urn","keyType":"雪種類","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%E9%9B%AA%E7%A8%AE%E9%A1%9E:1#Get","valueKey":"urn:%E9%9B%AA%E7%A8%AE%E9%A1%9E:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 159: CJK text","input":{"namespace":"urn","keyType":"雪種類","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:%E9%9B%AA%E7%A8%AE%E9%A1%9E:1}#Get","valueKey":"{urn:%E9%9B%AA%E7%A8%AE%E9%A1%9E:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:%E9%9B%AA%E7%A8%AE%E9%A1%9E:1}#watermark"}, + {"name":"Quint key 160: CJK text","input":{"namespace":"urn","keyType":"id","id":"雪種類","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%E9%9B%AA%E7%A8%AE%E9%A1%9E#Get","valueKey":"urn:id:%E9%9B%AA%E7%A8%AE%E9%A1%9E#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 161: CJK text","input":{"namespace":"urn","keyType":"id","id":"雪種類","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:%E9%9B%AA%E7%A8%AE%E9%A1%9E}#Get","valueKey":"{urn:id:%E9%9B%AA%E7%A8%AE%E9%A1%9E}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:%E9%9B%AA%E7%A8%AE%E9%A1%9E}#watermark"}, + {"name":"Quint key 162: CJK text","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"雪種類","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%E9%9B%AA%E7%A8%AE%E9%A1%9E","valueKey":"urn:id:1#%E9%9B%AA%E7%A8%AE%E9%A1%9E:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 163: CJK text","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"雪種類","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%E9%9B%AA%E7%A8%AE%E9%A1%9E","valueKey":"{urn:id:1}#%E9%9B%AA%E7%A8%AE%E9%A1%9E:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 164: CJK text","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["雪種類","v"]]},"logicalKey":"urn:id:1?%E9%9B%AA%E7%A8%AE%E9%A1%9E=v#Get","valueKey":"urn:id:1?%E9%9B%AA%E7%A8%AE%E9%A1%9E=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 165: CJK text","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["雪種類","v"]]},"logicalKey":"{urn:id:1}?%E9%9B%AA%E7%A8%AE%E9%A1%9E=v#Get","valueKey":"{urn:id:1}?%E9%9B%AA%E7%A8%AE%E9%A1%9E=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 166: CJK text","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","雪種類"]]},"logicalKey":"urn:id:1?n=%E9%9B%AA%E7%A8%AE%E9%A1%9E#Get","valueKey":"urn:id:1?n=%E9%9B%AA%E7%A8%AE%E9%A1%9E#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 167: CJK text","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","雪種類"]]},"logicalKey":"{urn:id:1}?n=%E9%9B%AA%E7%A8%AE%E9%A1%9E#Get","valueKey":"{urn:id:1}?n=%E9%9B%AA%E7%A8%AE%E9%A1%9E#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 168: first astral scalar","input":{"namespace":"𐀀","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"%F0%90%80%80:id:1#Get","valueKey":"%F0%90%80%80:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 169: first astral scalar","input":{"namespace":"𐀀","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{%F0%90%80%80:id:1}#Get","valueKey":"{%F0%90%80%80:id:1}#Get:dialcache-frame-v1","watermarkKey":"{%F0%90%80%80:id:1}#watermark"}, + {"name":"Quint key 170: first astral scalar","input":{"namespace":"urn","keyType":"𐀀","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%F0%90%80%80:1#Get","valueKey":"urn:%F0%90%80%80:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 171: first astral scalar","input":{"namespace":"urn","keyType":"𐀀","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:%F0%90%80%80:1}#Get","valueKey":"{urn:%F0%90%80%80:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:%F0%90%80%80:1}#watermark"}, + {"name":"Quint key 172: first astral scalar","input":{"namespace":"urn","keyType":"id","id":"𐀀","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%F0%90%80%80#Get","valueKey":"urn:id:%F0%90%80%80#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 173: first astral scalar","input":{"namespace":"urn","keyType":"id","id":"𐀀","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:%F0%90%80%80}#Get","valueKey":"{urn:id:%F0%90%80%80}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:%F0%90%80%80}#watermark"}, + {"name":"Quint key 174: first astral scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"𐀀","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%F0%90%80%80","valueKey":"urn:id:1#%F0%90%80%80:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 175: first astral scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"𐀀","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%F0%90%80%80","valueKey":"{urn:id:1}#%F0%90%80%80:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 176: first astral scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["𐀀","v"]]},"logicalKey":"urn:id:1?%F0%90%80%80=v#Get","valueKey":"urn:id:1?%F0%90%80%80=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 177: first astral scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["𐀀","v"]]},"logicalKey":"{urn:id:1}?%F0%90%80%80=v#Get","valueKey":"{urn:id:1}?%F0%90%80%80=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 178: first astral scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","𐀀"]]},"logicalKey":"urn:id:1?n=%F0%90%80%80#Get","valueKey":"urn:id:1?n=%F0%90%80%80#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 179: first astral scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","𐀀"]]},"logicalKey":"{urn:id:1}?n=%F0%90%80%80#Get","valueKey":"{urn:id:1}?n=%F0%90%80%80#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 180: emoji surrogate pair","input":{"namespace":"😀","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"%F0%9F%98%80:id:1#Get","valueKey":"%F0%9F%98%80:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 181: emoji surrogate pair","input":{"namespace":"😀","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{%F0%9F%98%80:id:1}#Get","valueKey":"{%F0%9F%98%80:id:1}#Get:dialcache-frame-v1","watermarkKey":"{%F0%9F%98%80:id:1}#watermark"}, + {"name":"Quint key 182: emoji surrogate pair","input":{"namespace":"urn","keyType":"😀","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%F0%9F%98%80:1#Get","valueKey":"urn:%F0%9F%98%80:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 183: emoji surrogate pair","input":{"namespace":"urn","keyType":"😀","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:%F0%9F%98%80:1}#Get","valueKey":"{urn:%F0%9F%98%80:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:%F0%9F%98%80:1}#watermark"}, + {"name":"Quint key 184: emoji surrogate pair","input":{"namespace":"urn","keyType":"id","id":"😀","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%F0%9F%98%80#Get","valueKey":"urn:id:%F0%9F%98%80#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 185: emoji surrogate pair","input":{"namespace":"urn","keyType":"id","id":"😀","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:%F0%9F%98%80}#Get","valueKey":"{urn:id:%F0%9F%98%80}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:%F0%9F%98%80}#watermark"}, + {"name":"Quint key 186: emoji surrogate pair","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"😀","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%F0%9F%98%80","valueKey":"urn:id:1#%F0%9F%98%80:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 187: emoji surrogate pair","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"😀","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%F0%9F%98%80","valueKey":"{urn:id:1}#%F0%9F%98%80:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 188: emoji surrogate pair","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["😀","v"]]},"logicalKey":"urn:id:1?%F0%9F%98%80=v#Get","valueKey":"urn:id:1?%F0%9F%98%80=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 189: emoji surrogate pair","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["😀","v"]]},"logicalKey":"{urn:id:1}?%F0%9F%98%80=v#Get","valueKey":"{urn:id:1}?%F0%9F%98%80=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 190: emoji surrogate pair","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","😀"]]},"logicalKey":"urn:id:1?n=%F0%9F%98%80#Get","valueKey":"urn:id:1?n=%F0%9F%98%80#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 191: emoji surrogate pair","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","😀"]]},"logicalKey":"{urn:id:1}?n=%F0%9F%98%80#Get","valueKey":"{urn:id:1}?n=%F0%9F%98%80#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 192: last Unicode scalar","input":{"namespace":"􏿿","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"%F4%8F%BF%BF:id:1#Get","valueKey":"%F4%8F%BF%BF:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 193: last Unicode scalar","input":{"namespace":"􏿿","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{%F4%8F%BF%BF:id:1}#Get","valueKey":"{%F4%8F%BF%BF:id:1}#Get:dialcache-frame-v1","watermarkKey":"{%F4%8F%BF%BF:id:1}#watermark"}, + {"name":"Quint key 194: last Unicode scalar","input":{"namespace":"urn","keyType":"􏿿","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:%F4%8F%BF%BF:1#Get","valueKey":"urn:%F4%8F%BF%BF:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 195: last Unicode scalar","input":{"namespace":"urn","keyType":"􏿿","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:%F4%8F%BF%BF:1}#Get","valueKey":"{urn:%F4%8F%BF%BF:1}#Get:dialcache-frame-v1","watermarkKey":"{urn:%F4%8F%BF%BF:1}#watermark"}, + {"name":"Quint key 196: last Unicode scalar","input":{"namespace":"urn","keyType":"id","id":"􏿿","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%F4%8F%BF%BF#Get","valueKey":"urn:id:%F4%8F%BF%BF#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 197: last Unicode scalar","input":{"namespace":"urn","keyType":"id","id":"􏿿","useCase":"Get","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:%F4%8F%BF%BF}#Get","valueKey":"{urn:id:%F4%8F%BF%BF}#Get:dialcache-frame-v1","watermarkKey":"{urn:id:%F4%8F%BF%BF}#watermark"}, + {"name":"Quint key 198: last Unicode scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"􏿿","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#%F4%8F%BF%BF","valueKey":"urn:id:1#%F4%8F%BF%BF:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 199: last Unicode scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"􏿿","trackForInvalidation":true,"args":[]},"logicalKey":"{urn:id:1}#%F4%8F%BF%BF","valueKey":"{urn:id:1}#%F4%8F%BF%BF:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 200: last Unicode scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["􏿿","v"]]},"logicalKey":"urn:id:1?%F4%8F%BF%BF=v#Get","valueKey":"urn:id:1?%F4%8F%BF%BF=v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 201: last Unicode scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["􏿿","v"]]},"logicalKey":"{urn:id:1}?%F4%8F%BF%BF=v#Get","valueKey":"{urn:id:1}?%F4%8F%BF%BF=v#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 202: last Unicode scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","􏿿"]]},"logicalKey":"urn:id:1?n=%F4%8F%BF%BF#Get","valueKey":"urn:id:1?n=%F4%8F%BF%BF#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 203: last Unicode scalar","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","􏿿"]]},"logicalKey":"{urn:id:1}?n=%F4%8F%BF%BF#Get","valueKey":"{urn:id:1}?n=%F4%8F%BF%BF#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 288: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0000","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%00#Get","valueKey":"urn:id:%00#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 289: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0001","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%01#Get","valueKey":"urn:id:%01#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 290: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0002","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%02#Get","valueKey":"urn:id:%02#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 291: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0003","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%03#Get","valueKey":"urn:id:%03#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 292: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0004","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%04#Get","valueKey":"urn:id:%04#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 293: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0005","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%05#Get","valueKey":"urn:id:%05#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 294: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0006","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%06#Get","valueKey":"urn:id:%06#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 295: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0007","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%07#Get","valueKey":"urn:id:%07#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 296: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\b","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%08#Get","valueKey":"urn:id:%08#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 297: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\t","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%09#Get","valueKey":"urn:id:%09#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 298: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\n","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%0A#Get","valueKey":"urn:id:%0A#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 299: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u000b","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%0B#Get","valueKey":"urn:id:%0B#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 300: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\f","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%0C#Get","valueKey":"urn:id:%0C#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 301: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\r","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%0D#Get","valueKey":"urn:id:%0D#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 302: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u000e","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%0E#Get","valueKey":"urn:id:%0E#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 303: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u000f","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%0F#Get","valueKey":"urn:id:%0F#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 304: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0010","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%10#Get","valueKey":"urn:id:%10#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 305: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0011","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%11#Get","valueKey":"urn:id:%11#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 306: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0012","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%12#Get","valueKey":"urn:id:%12#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 307: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0013","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%13#Get","valueKey":"urn:id:%13#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 308: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0014","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%14#Get","valueKey":"urn:id:%14#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 309: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0015","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%15#Get","valueKey":"urn:id:%15#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 310: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0016","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%16#Get","valueKey":"urn:id:%16#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 311: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0017","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%17#Get","valueKey":"urn:id:%17#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 312: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0018","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%18#Get","valueKey":"urn:id:%18#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 313: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u0019","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%19#Get","valueKey":"urn:id:%19#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 314: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u001a","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%1A#Get","valueKey":"urn:id:%1A#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 315: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u001b","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%1B#Get","valueKey":"urn:id:%1B#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 316: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u001c","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%1C#Get","valueKey":"urn:id:%1C#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 317: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u001d","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%1D#Get","valueKey":"urn:id:%1D#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 318: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u001e","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%1E#Get","valueKey":"urn:id:%1E#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 319: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\u001f","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%1F#Get","valueKey":"urn:id:%1F#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 320: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":" ","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%20#Get","valueKey":"urn:id:%20#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 321: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"!","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:!#Get","valueKey":"urn:id:!#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 322: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\"","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%22#Get","valueKey":"urn:id:%22#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 323: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"#","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%23#Get","valueKey":"urn:id:%23#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 324: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"$","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%24#Get","valueKey":"urn:id:%24#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 325: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"%","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%25#Get","valueKey":"urn:id:%25#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 326: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"&","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%26#Get","valueKey":"urn:id:%26#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 327: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"'","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:'#Get","valueKey":"urn:id:'#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 328: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"(","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:(#Get","valueKey":"urn:id:(#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 329: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":")","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:)#Get","valueKey":"urn:id:)#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 330: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"*","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:*#Get","valueKey":"urn:id:*#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 331: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"+","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%2B#Get","valueKey":"urn:id:%2B#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 332: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":",","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%2C#Get","valueKey":"urn:id:%2C#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 333: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"-","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:-#Get","valueKey":"urn:id:-#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 334: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":".","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:.#Get","valueKey":"urn:id:.#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 335: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"/","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%2F#Get","valueKey":"urn:id:%2F#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 336: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"0","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:0#Get","valueKey":"urn:id:0#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 337: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:1#Get","valueKey":"urn:id:1#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 338: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"2","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:2#Get","valueKey":"urn:id:2#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 339: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"3","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:3#Get","valueKey":"urn:id:3#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 340: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"4","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:4#Get","valueKey":"urn:id:4#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 341: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"5","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:5#Get","valueKey":"urn:id:5#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 342: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"6","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:6#Get","valueKey":"urn:id:6#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 343: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"7","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:7#Get","valueKey":"urn:id:7#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 344: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"8","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:8#Get","valueKey":"urn:id:8#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 345: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"9","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:9#Get","valueKey":"urn:id:9#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 346: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":":","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%3A#Get","valueKey":"urn:id:%3A#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 347: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":";","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%3B#Get","valueKey":"urn:id:%3B#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 348: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"<","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%3C#Get","valueKey":"urn:id:%3C#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 349: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"=","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%3D#Get","valueKey":"urn:id:%3D#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 350: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":">","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%3E#Get","valueKey":"urn:id:%3E#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 351: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"?","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%3F#Get","valueKey":"urn:id:%3F#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 352: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"@","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%40#Get","valueKey":"urn:id:%40#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 353: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"A","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:A#Get","valueKey":"urn:id:A#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 354: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"B","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:B#Get","valueKey":"urn:id:B#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 355: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"C","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:C#Get","valueKey":"urn:id:C#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 356: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"D","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:D#Get","valueKey":"urn:id:D#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 357: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"E","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:E#Get","valueKey":"urn:id:E#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 358: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"F","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:F#Get","valueKey":"urn:id:F#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 359: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"G","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:G#Get","valueKey":"urn:id:G#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 360: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"H","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:H#Get","valueKey":"urn:id:H#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 361: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"I","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:I#Get","valueKey":"urn:id:I#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 362: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"J","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:J#Get","valueKey":"urn:id:J#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 363: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"K","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:K#Get","valueKey":"urn:id:K#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 364: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"L","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:L#Get","valueKey":"urn:id:L#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 365: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"M","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:M#Get","valueKey":"urn:id:M#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 366: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"N","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:N#Get","valueKey":"urn:id:N#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 367: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"O","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:O#Get","valueKey":"urn:id:O#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 368: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"P","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:P#Get","valueKey":"urn:id:P#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 369: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"Q","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:Q#Get","valueKey":"urn:id:Q#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 370: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"R","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:R#Get","valueKey":"urn:id:R#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 371: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"S","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:S#Get","valueKey":"urn:id:S#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 372: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"T","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:T#Get","valueKey":"urn:id:T#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 373: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"U","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:U#Get","valueKey":"urn:id:U#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 374: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"V","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:V#Get","valueKey":"urn:id:V#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 375: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"W","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:W#Get","valueKey":"urn:id:W#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 376: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"X","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:X#Get","valueKey":"urn:id:X#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 377: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"Y","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:Y#Get","valueKey":"urn:id:Y#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 378: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"Z","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:Z#Get","valueKey":"urn:id:Z#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 379: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"[","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%5B#Get","valueKey":"urn:id:%5B#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 380: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"\\","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%5C#Get","valueKey":"urn:id:%5C#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 381: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"]","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%5D#Get","valueKey":"urn:id:%5D#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 382: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"^","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%5E#Get","valueKey":"urn:id:%5E#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 383: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"_","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:_#Get","valueKey":"urn:id:_#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 384: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"`","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%60#Get","valueKey":"urn:id:%60#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 385: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"a","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:a#Get","valueKey":"urn:id:a#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 386: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"b","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:b#Get","valueKey":"urn:id:b#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 387: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"c","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:c#Get","valueKey":"urn:id:c#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 388: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"d","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:d#Get","valueKey":"urn:id:d#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 389: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"e","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:e#Get","valueKey":"urn:id:e#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 390: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"f","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:f#Get","valueKey":"urn:id:f#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 391: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"g","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:g#Get","valueKey":"urn:id:g#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 392: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"h","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:h#Get","valueKey":"urn:id:h#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 393: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"i","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:i#Get","valueKey":"urn:id:i#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 394: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"j","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:j#Get","valueKey":"urn:id:j#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 395: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"k","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:k#Get","valueKey":"urn:id:k#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 396: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"l","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:l#Get","valueKey":"urn:id:l#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 397: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"m","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:m#Get","valueKey":"urn:id:m#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 398: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"n","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:n#Get","valueKey":"urn:id:n#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 399: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"o","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:o#Get","valueKey":"urn:id:o#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 400: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"p","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:p#Get","valueKey":"urn:id:p#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 401: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"q","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:q#Get","valueKey":"urn:id:q#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 402: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"r","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:r#Get","valueKey":"urn:id:r#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 403: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"s","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:s#Get","valueKey":"urn:id:s#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 404: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"t","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:t#Get","valueKey":"urn:id:t#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 405: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"u","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:u#Get","valueKey":"urn:id:u#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 406: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"v","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:v#Get","valueKey":"urn:id:v#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 407: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"w","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:w#Get","valueKey":"urn:id:w#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 408: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"x","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:x#Get","valueKey":"urn:id:x#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 409: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"y","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:y#Get","valueKey":"urn:id:y#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 410: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"z","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:z#Get","valueKey":"urn:id:z#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 411: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"{","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%7B#Get","valueKey":"urn:id:%7B#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 412: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"|","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%7C#Get","valueKey":"urn:id:%7C#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 413: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"}","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%7D#Get","valueKey":"urn:id:%7D#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 414: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"~","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:~#Get","valueKey":"urn:id:~#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 415: individual ASCII code unit","input":{"namespace":"urn","keyType":"id","id":"","useCase":"Get","trackForInvalidation":false,"args":[]},"logicalKey":"urn:id:%7F#Get","valueKey":"urn:id:%7F#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 416: ordered duplicate arguments","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["z","2"],["a","1"],["z","3"]]},"logicalKey":"urn:id:1?z=2&a=1&z=3#Get","valueKey":"urn:id:1?z=2&a=1&z=3#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 417: ordered duplicate arguments","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["z","2"],["a","1"],["z","3"]]},"logicalKey":"{urn:id:1}?z=2&a=1&z=3#Get","valueKey":"{urn:id:1}?z=2&a=1&z=3#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"}, + {"name":"Quint key 418: ordered duplicate arguments","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["z","3"],["a","1"],["z","2"]]},"logicalKey":"urn:id:1?z=3&a=1&z=2#Get","valueKey":"urn:id:1?z=3&a=1&z=2#Get:dialcache-frame-v1","watermarkKey":null}, + {"name":"Quint key 419: ordered duplicate arguments","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["z","3"],["a","1"],["z","2"]]},"logicalKey":"{urn:id:1}?z=3&a=1&z=2#Get","valueKey":"{urn:id:1}?z=3&a=1&z=2#Get:dialcache-frame-v1","watermarkKey":"{urn:id:1}#watermark"} ], "invalidKeyVectors": [ - { - "name": "Quint key 048: opening brace", - "input": { - "namespace": "{", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 123 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 049: opening brace", - "input": { - "namespace": "{", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 123 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 051: opening brace", - "input": { - "namespace": "urn", - "keyType": "{", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 123 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 053: opening brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "{", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 123 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 060: closing brace", - "input": { - "namespace": "}", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 125 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 061: closing brace", - "input": { - "namespace": "}", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 125 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 063: closing brace", - "input": { - "namespace": "urn", - "keyType": "}", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 125 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 065: closing brace", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "}", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 125 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 204: lone high surrogate", - "input": { - "namespace": "\ud800", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 55296 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 205: lone high surrogate", - "input": { - "namespace": "\ud800", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 55296 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 206: lone high surrogate", - "input": { - "namespace": "urn", - "keyType": "\ud800", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 55296 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 207: lone high surrogate", - "input": { - "namespace": "urn", - "keyType": "\ud800", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 55296 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 208: lone high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\ud800", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 55296 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 209: lone high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\ud800", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 55296 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 210: lone high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "\ud800", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 55296 - ], - "args": [] - } - }, - { - "name": "Quint key 211: lone high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "\ud800", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 55296 - ], - "args": [] - } - }, - { - "name": "Quint key 212: lone high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "\ud800", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 55296 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 213: lone high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "\ud800", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 55296 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 214: lone high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "\ud800" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 55296 - ] - ] - ] - } - }, - { - "name": "Quint key 215: lone high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "\ud800" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 55296 - ] - ] - ] - } - }, - { - "name": "Quint key 216: lone low surrogate", - "input": { - "namespace": "\udc00", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 56320 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 217: lone low surrogate", - "input": { - "namespace": "\udc00", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 56320 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 218: lone low surrogate", - "input": { - "namespace": "urn", - "keyType": "\udc00", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 56320 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 219: lone low surrogate", - "input": { - "namespace": "urn", - "keyType": "\udc00", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 56320 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 220: lone low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\udc00", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 56320 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 221: lone low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\udc00", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 56320 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 222: lone low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "\udc00", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 56320 - ], - "args": [] - } - }, - { - "name": "Quint key 223: lone low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "\udc00", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 56320 - ], - "args": [] - } - }, - { - "name": "Quint key 224: lone low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "\udc00", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 56320 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 225: lone low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "\udc00", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 56320 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 226: lone low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "\udc00" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 56320 - ] - ] - ] - } - }, - { - "name": "Quint key 227: lone low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "\udc00" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 56320 - ] - ] - ] - } - }, - { - "name": "Quint key 228: reversed surrogate pair", - "input": { - "namespace": "\udc00\ud800", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 56320, - 55296 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 229: reversed surrogate pair", - "input": { - "namespace": "\udc00\ud800", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 56320, - 55296 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 230: reversed surrogate pair", - "input": { - "namespace": "urn", - "keyType": "\udc00\ud800", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 56320, - 55296 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 231: reversed surrogate pair", - "input": { - "namespace": "urn", - "keyType": "\udc00\ud800", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 56320, - 55296 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 232: reversed surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\udc00\ud800", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 56320, - 55296 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 233: reversed surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\udc00\ud800", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 56320, - 55296 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 234: reversed surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "\udc00\ud800", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 56320, - 55296 - ], - "args": [] - } - }, - { - "name": "Quint key 235: reversed surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "\udc00\ud800", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 56320, - 55296 - ], - "args": [] - } - }, - { - "name": "Quint key 236: reversed surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "\udc00\ud800", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 56320, - 55296 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 237: reversed surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "\udc00\ud800", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 56320, - 55296 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 238: reversed surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "\udc00\ud800" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 56320, - 55296 - ] - ] - ] - } - }, - { - "name": "Quint key 239: reversed surrogate pair", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "\udc00\ud800" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 56320, - 55296 - ] - ] - ] - } - }, - { - "name": "Quint key 240: repeated high surrogate", - "input": { - "namespace": "\ud800\ud800", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 55296, - 55296 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 241: repeated high surrogate", - "input": { - "namespace": "\ud800\ud800", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 55296, - 55296 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 242: repeated high surrogate", - "input": { - "namespace": "urn", - "keyType": "\ud800\ud800", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 55296, - 55296 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 243: repeated high surrogate", - "input": { - "namespace": "urn", - "keyType": "\ud800\ud800", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 55296, - 55296 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 244: repeated high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\ud800\ud800", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 55296, - 55296 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 245: repeated high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\ud800\ud800", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 55296, - 55296 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 246: repeated high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "\ud800\ud800", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 55296, - 55296 - ], - "args": [] - } - }, - { - "name": "Quint key 247: repeated high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "\ud800\ud800", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 55296, - 55296 - ], - "args": [] - } - }, - { - "name": "Quint key 248: repeated high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "\ud800\ud800", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 55296, - 55296 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 249: repeated high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "\ud800\ud800", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 55296, - 55296 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 250: repeated high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "\ud800\ud800" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 55296, - 55296 - ] - ] - ] - } - }, - { - "name": "Quint key 251: repeated high surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "\ud800\ud800" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 55296, - 55296 - ] - ] - ] - } - }, - { - "name": "Quint key 252: high surrogate before ASCII", - "input": { - "namespace": "\ud800A", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 55296, - 65 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 253: high surrogate before ASCII", - "input": { - "namespace": "\ud800A", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 55296, - 65 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 254: high surrogate before ASCII", - "input": { - "namespace": "urn", - "keyType": "\ud800A", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 55296, - 65 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 255: high surrogate before ASCII", - "input": { - "namespace": "urn", - "keyType": "\ud800A", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 55296, - 65 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 256: high surrogate before ASCII", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\ud800A", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 55296, - 65 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 257: high surrogate before ASCII", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "\ud800A", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 55296, - 65 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 258: high surrogate before ASCII", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "\ud800A", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 55296, - 65 - ], - "args": [] - } - }, - { - "name": "Quint key 259: high surrogate before ASCII", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "\ud800A", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 55296, - 65 - ], - "args": [] - } - }, - { - "name": "Quint key 260: high surrogate before ASCII", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "\ud800A", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 55296, - 65 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 261: high surrogate before ASCII", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "\ud800A", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 55296, - 65 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 262: high surrogate before ASCII", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "\ud800A" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 55296, - 65 - ] - ] - ] - } - }, - { - "name": "Quint key 263: high surrogate before ASCII", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "\ud800A" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 55296, - 65 - ] - ] - ] - } - }, - { - "name": "Quint key 264: ASCII before low surrogate", - "input": { - "namespace": "A\udc00", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 65, - 56320 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 265: ASCII before low surrogate", - "input": { - "namespace": "A\udc00", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 65, - 56320 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 266: ASCII before low surrogate", - "input": { - "namespace": "urn", - "keyType": "A\udc00", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 65, - 56320 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 267: ASCII before low surrogate", - "input": { - "namespace": "urn", - "keyType": "A\udc00", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 65, - 56320 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 268: ASCII before low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "A\udc00", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 65, - 56320 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 269: ASCII before low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "A\udc00", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 65, - 56320 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 270: ASCII before low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "A\udc00", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 65, - 56320 - ], - "args": [] - } - }, - { - "name": "Quint key 271: ASCII before low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "A\udc00", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 65, - 56320 - ], - "args": [] - } - }, - { - "name": "Quint key 272: ASCII before low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "A\udc00", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 65, - 56320 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 273: ASCII before low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "A\udc00", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 65, - 56320 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 274: ASCII before low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "A\udc00" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 65, - 56320 - ] - ] - ] - } - }, - { - "name": "Quint key 275: ASCII before low surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "A\udc00" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 65, - 56320 - ] - ] - ] - } - }, - { - "name": "Quint key 276: valid pair followed by lone surrogate", - "input": { - "namespace": "😀\ud800", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 55357, - 56832, - 55296 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 277: valid pair followed by lone surrogate", - "input": { - "namespace": "😀\ud800", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 55357, - 56832, - 55296 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 278: valid pair followed by lone surrogate", - "input": { - "namespace": "urn", - "keyType": "😀\ud800", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 55357, - 56832, - 55296 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 279: valid pair followed by lone surrogate", - "input": { - "namespace": "urn", - "keyType": "😀\ud800", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 55357, - 56832, - 55296 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 280: valid pair followed by lone surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "😀\ud800", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 55357, - 56832, - 55296 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 281: valid pair followed by lone surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "😀\ud800", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 55357, - 56832, - 55296 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [] - } - }, - { - "name": "Quint key 282: valid pair followed by lone surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "😀\ud800", - "trackForInvalidation": false, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 55357, - 56832, - 55296 - ], - "args": [] - } - }, - { - "name": "Quint key 283: valid pair followed by lone surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "😀\ud800", - "trackForInvalidation": true, - "args": [] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 55357, - 56832, - 55296 - ], - "args": [] - } - }, - { - "name": "Quint key 284: valid pair followed by lone surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "😀\ud800", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 55357, - 56832, - 55296 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 285: valid pair followed by lone surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "😀\ud800", - "v" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 55357, - 56832, - 55296 - ], - [ - 118 - ] - ] - ] - } - }, - { - "name": "Quint key 286: valid pair followed by lone surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [ - [ - "n", - "😀\ud800" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 55357, - 56832, - 55296 - ] - ] - ] - } - }, - { - "name": "Quint key 287: valid pair followed by lone surrogate", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "n", - "😀\ud800" - ] - ] - }, - "inputUtf16": { - "namespace": [ - 117, - 114, - 110 - ], - "keyType": [ - 105, - 100 - ], - "id": [ - 49 - ], - "useCase": [ - 71, - 101, - 116 - ], - "args": [ - [ - [ - 110 - ], - [ - 55357, - 56832, - 55296 - ] - ] - ] - } - } + {"name":"Quint key 048: opening brace","input":{"namespace":"{","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[123],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 049: opening brace","input":{"namespace":"{","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[123],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 051: opening brace","input":{"namespace":"urn","keyType":"{","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[123],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 053: opening brace","input":{"namespace":"urn","keyType":"id","id":"{","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[123],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 060: closing brace","input":{"namespace":"}","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[125],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 061: closing brace","input":{"namespace":"}","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[125],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 063: closing brace","input":{"namespace":"urn","keyType":"}","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[125],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 065: closing brace","input":{"namespace":"urn","keyType":"id","id":"}","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[125],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 204: lone high surrogate","input":{"namespace":"\ud800","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[55296],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 205: lone high surrogate","input":{"namespace":"\ud800","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[55296],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 206: lone high surrogate","input":{"namespace":"urn","keyType":"\ud800","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[55296],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 207: lone high surrogate","input":{"namespace":"urn","keyType":"\ud800","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[55296],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 208: lone high surrogate","input":{"namespace":"urn","keyType":"id","id":"\ud800","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[55296],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 209: lone high surrogate","input":{"namespace":"urn","keyType":"id","id":"\ud800","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[55296],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 210: lone high surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"\ud800","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[55296],"args":[]}}, + {"name":"Quint key 211: lone high surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"\ud800","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[55296],"args":[]}}, + {"name":"Quint key 212: lone high surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["\ud800","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[55296],[118]]]}}, + {"name":"Quint key 213: lone high surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["\ud800","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[55296],[118]]]}}, + {"name":"Quint key 214: lone high surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","\ud800"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[55296]]]}}, + {"name":"Quint key 215: lone high surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","\ud800"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[55296]]]}}, + {"name":"Quint key 216: lone low surrogate","input":{"namespace":"\udc00","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[56320],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 217: lone low surrogate","input":{"namespace":"\udc00","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[56320],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 218: lone low surrogate","input":{"namespace":"urn","keyType":"\udc00","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[56320],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 219: lone low surrogate","input":{"namespace":"urn","keyType":"\udc00","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[56320],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 220: lone low surrogate","input":{"namespace":"urn","keyType":"id","id":"\udc00","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[56320],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 221: lone low surrogate","input":{"namespace":"urn","keyType":"id","id":"\udc00","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[56320],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 222: lone low surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"\udc00","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[56320],"args":[]}}, + {"name":"Quint key 223: lone low surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"\udc00","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[56320],"args":[]}}, + {"name":"Quint key 224: lone low surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["\udc00","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[56320],[118]]]}}, + {"name":"Quint key 225: lone low surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["\udc00","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[56320],[118]]]}}, + {"name":"Quint key 226: lone low surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","\udc00"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[56320]]]}}, + {"name":"Quint key 227: lone low surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","\udc00"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[56320]]]}}, + {"name":"Quint key 228: reversed surrogate pair","input":{"namespace":"\udc00\ud800","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[56320,55296],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 229: reversed surrogate pair","input":{"namespace":"\udc00\ud800","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[56320,55296],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 230: reversed surrogate pair","input":{"namespace":"urn","keyType":"\udc00\ud800","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[56320,55296],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 231: reversed surrogate pair","input":{"namespace":"urn","keyType":"\udc00\ud800","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[56320,55296],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 232: reversed surrogate pair","input":{"namespace":"urn","keyType":"id","id":"\udc00\ud800","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[56320,55296],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 233: reversed surrogate pair","input":{"namespace":"urn","keyType":"id","id":"\udc00\ud800","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[56320,55296],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 234: reversed surrogate pair","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"\udc00\ud800","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[56320,55296],"args":[]}}, + {"name":"Quint key 235: reversed surrogate pair","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"\udc00\ud800","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[56320,55296],"args":[]}}, + {"name":"Quint key 236: reversed surrogate pair","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["\udc00\ud800","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[56320,55296],[118]]]}}, + {"name":"Quint key 237: reversed surrogate pair","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["\udc00\ud800","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[56320,55296],[118]]]}}, + {"name":"Quint key 238: reversed surrogate pair","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","\udc00\ud800"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[56320,55296]]]}}, + {"name":"Quint key 239: reversed surrogate pair","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","\udc00\ud800"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[56320,55296]]]}}, + {"name":"Quint key 240: repeated high surrogate","input":{"namespace":"\ud800\ud800","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[55296,55296],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 241: repeated high surrogate","input":{"namespace":"\ud800\ud800","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[55296,55296],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 242: repeated high surrogate","input":{"namespace":"urn","keyType":"\ud800\ud800","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[55296,55296],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 243: repeated high surrogate","input":{"namespace":"urn","keyType":"\ud800\ud800","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[55296,55296],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 244: repeated high surrogate","input":{"namespace":"urn","keyType":"id","id":"\ud800\ud800","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[55296,55296],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 245: repeated high surrogate","input":{"namespace":"urn","keyType":"id","id":"\ud800\ud800","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[55296,55296],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 246: repeated high surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"\ud800\ud800","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[55296,55296],"args":[]}}, + {"name":"Quint key 247: repeated high surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"\ud800\ud800","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[55296,55296],"args":[]}}, + {"name":"Quint key 248: repeated high surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["\ud800\ud800","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[55296,55296],[118]]]}}, + {"name":"Quint key 249: repeated high surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["\ud800\ud800","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[55296,55296],[118]]]}}, + {"name":"Quint key 250: repeated high surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","\ud800\ud800"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[55296,55296]]]}}, + {"name":"Quint key 251: repeated high surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","\ud800\ud800"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[55296,55296]]]}}, + {"name":"Quint key 252: high surrogate before ASCII","input":{"namespace":"\ud800A","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[55296,65],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 253: high surrogate before ASCII","input":{"namespace":"\ud800A","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[55296,65],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 254: high surrogate before ASCII","input":{"namespace":"urn","keyType":"\ud800A","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[55296,65],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 255: high surrogate before ASCII","input":{"namespace":"urn","keyType":"\ud800A","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[55296,65],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 256: high surrogate before ASCII","input":{"namespace":"urn","keyType":"id","id":"\ud800A","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[55296,65],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 257: high surrogate before ASCII","input":{"namespace":"urn","keyType":"id","id":"\ud800A","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[55296,65],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 258: high surrogate before ASCII","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"\ud800A","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[55296,65],"args":[]}}, + {"name":"Quint key 259: high surrogate before ASCII","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"\ud800A","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[55296,65],"args":[]}}, + {"name":"Quint key 260: high surrogate before ASCII","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["\ud800A","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[55296,65],[118]]]}}, + {"name":"Quint key 261: high surrogate before ASCII","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["\ud800A","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[55296,65],[118]]]}}, + {"name":"Quint key 262: high surrogate before ASCII","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","\ud800A"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[55296,65]]]}}, + {"name":"Quint key 263: high surrogate before ASCII","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","\ud800A"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[55296,65]]]}}, + {"name":"Quint key 264: ASCII before low surrogate","input":{"namespace":"A\udc00","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[65,56320],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 265: ASCII before low surrogate","input":{"namespace":"A\udc00","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[65,56320],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 266: ASCII before low surrogate","input":{"namespace":"urn","keyType":"A\udc00","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[65,56320],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 267: ASCII before low surrogate","input":{"namespace":"urn","keyType":"A\udc00","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[65,56320],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 268: ASCII before low surrogate","input":{"namespace":"urn","keyType":"id","id":"A\udc00","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[65,56320],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 269: ASCII before low surrogate","input":{"namespace":"urn","keyType":"id","id":"A\udc00","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[65,56320],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 270: ASCII before low surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"A\udc00","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[65,56320],"args":[]}}, + {"name":"Quint key 271: ASCII before low surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"A\udc00","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[65,56320],"args":[]}}, + {"name":"Quint key 272: ASCII before low surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["A\udc00","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[65,56320],[118]]]}}, + {"name":"Quint key 273: ASCII before low surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["A\udc00","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[65,56320],[118]]]}}, + {"name":"Quint key 274: ASCII before low surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","A\udc00"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[65,56320]]]}}, + {"name":"Quint key 275: ASCII before low surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","A\udc00"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[65,56320]]]}}, + {"name":"Quint key 276: valid pair followed by lone surrogate","input":{"namespace":"😀\ud800","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[55357,56832,55296],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 277: valid pair followed by lone surrogate","input":{"namespace":"😀\ud800","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[55357,56832,55296],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 278: valid pair followed by lone surrogate","input":{"namespace":"urn","keyType":"😀\ud800","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[55357,56832,55296],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 279: valid pair followed by lone surrogate","input":{"namespace":"urn","keyType":"😀\ud800","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[55357,56832,55296],"id":[49],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 280: valid pair followed by lone surrogate","input":{"namespace":"urn","keyType":"id","id":"😀\ud800","useCase":"Get","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[55357,56832,55296],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 281: valid pair followed by lone surrogate","input":{"namespace":"urn","keyType":"id","id":"😀\ud800","useCase":"Get","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[55357,56832,55296],"useCase":[71,101,116],"args":[]}}, + {"name":"Quint key 282: valid pair followed by lone surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"😀\ud800","trackForInvalidation":false,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[55357,56832,55296],"args":[]}}, + {"name":"Quint key 283: valid pair followed by lone surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"😀\ud800","trackForInvalidation":true,"args":[]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[55357,56832,55296],"args":[]}}, + {"name":"Quint key 284: valid pair followed by lone surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["😀\ud800","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[55357,56832,55296],[118]]]}}, + {"name":"Quint key 285: valid pair followed by lone surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["😀\ud800","v"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[55357,56832,55296],[118]]]}}, + {"name":"Quint key 286: valid pair followed by lone surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[["n","😀\ud800"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[55357,56832,55296]]]}}, + {"name":"Quint key 287: valid pair followed by lone surrogate","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["n","😀\ud800"]]},"inputUtf16":{"namespace":[117,114,110],"keyType":[105,100],"id":[49],"useCase":[71,101,116],"args":[[[110],[55357,56832,55296]]]}} ], "normalizeArgsVectors": [ - { - "name": "Quint key 420: empty record", - "input": {}, - "expected": [] - }, - { - "name": "Quint key 421: omitted-only record", - "input": { - "a": "__QUINT_OMITTED__" - }, - "undefinedSentinel": "__QUINT_OMITTED__", - "expected": [] - }, - { - "name": "Quint key 422: primitive values", - "input": { - "z": null, - "a": false, - "b": true, - "d": 0, - "c": "", - "e": "__QUINT_OMITTED__" - }, - "undefinedSentinel": "__QUINT_OMITTED__", - "expected": [ - [ - "a", - "false" - ], - [ - "b", - "true" - ], - [ - "c", - "" - ], - [ - "d", - "0" - ], - [ - "z", - "null" - ] - ] - }, - { - "name": "Quint key 423: signed safe integer limits", - "input": { - "z": -9007199254740991, - "a": 9007199254740991, - "b": -17 - }, - "expected": [ - [ - "a", - "9007199254740991" - ], - [ - "b", - "-17" - ], - [ - "z", - "-9007199254740991" - ] - ] - }, - { - "name": "Quint key 424: signed large bigint decimal", - "input": {}, - "bigintArgs": { - "z": "9007199254740991123", - "a": "-9007199254740991123", - "b": "0" - }, - "expected": [ - [ - "a", - "-9007199254740991123" - ], - [ - "b", - "0" - ], - [ - "z", - "9007199254740991123" - ] - ] - }, - { - "name": "Quint key 425: UTF-16 astral ordering", - "input": { - "": "b", - "😀": "a", - "￿": "c", - "퟿": "d" - }, - "expected": [ - [ - "퟿", - "d" - ], - [ - "😀", - "a" - ], - [ - "", - "b" - ], - [ - "￿", - "c" - ] - ] - }, - { - "name": "Quint key 426: prefix and empty names", - "input": { - "aa": "1", - "a": "2", - "": "3", - "a\u0000": "4" - }, - "expected": [ - [ - "", - "3" - ], - [ - "a", - "2" - ], - [ - "a\u0000", - "4" - ], - [ - "aa", - "1" - ] - ] - }, - { - "name": "Quint key 427: no Unicode normalization", - "input": { - "é": "é", - "é": "é" - }, - "expected": [ - [ - "é", - "é" - ], - [ - "é", - "é" - ] - ] - }, - { - "name": "Quint key 428: numeric-looking name order", - "input": { - "1": 1, - "2": 2, - "10": 10, - "01": 1 - }, - "expected": [ - [ - "01", - "1" - ], - [ - "1", - "1" - ], - [ - "10", - "10" - ], - [ - "2", - "2" - ] - ] - }, - { - "name": "Quint key 429: omitted versus literal text", - "input": { - "a": "undefined", - "b": "__QUINT_OMITTED__", - "c": "null", - "d": null - }, - "undefinedSentinel": "__QUINT_OMITTED__", - "expected": [ - [ - "a", - "undefined" - ], - [ - "c", - "null" - ], - [ - "d", - "null" - ] - ] - }, - { - "name": "Quint key 430: bigints beyond safe numbers", - "input": { - "o": 9007199254740991 - }, - "bigintArgs": { - "n": "9007199254740992", - "m": "-9007199254740992" - }, - "expected": [ - [ - "m", - "-9007199254740992" - ], - [ - "n", - "9007199254740992" - ], - [ - "o", - "9007199254740991" - ] - ] - }, - { - "name": "Quint key 431: case-sensitive punctuation order", - "input": { - "A": " %&=", - "a": false, - "_": null, - "Z": true - }, - "expected": [ - [ - "A", - " %&=" - ], - [ - "Z", - "true" - ], - [ - "_", - "null" - ], - [ - "a", - "false" - ] - ] - }, - { - "name": "Quint key 432: own prototype-like names", - "input": { - "constructor": 1, - "toString": true - }, - "bigintArgs": { - "__proto__": "9007199254740992" - }, - "expected": [ - [ - "__proto__", - "9007199254740992" - ], - [ - "constructor", - "1" - ], - [ - "toString", - "true" - ] - ] - } + {"name":"Quint key 420: empty record","input":{},"expected":[]}, + {"name":"Quint key 421: omitted-only record","input":{"a":"__QUINT_OMITTED__"},"undefinedSentinel":"__QUINT_OMITTED__","expected":[]}, + {"name":"Quint key 422: primitive values","input":{"z":null,"a":false,"b":true,"d":0,"c":"","e":"__QUINT_OMITTED__"},"undefinedSentinel":"__QUINT_OMITTED__","expected":[["a","false"],["b","true"],["c",""],["d","0"],["z","null"]]}, + {"name":"Quint key 423: signed safe integer limits","input":{"z":-9007199254740991,"a":9007199254740991,"b":-17},"expected":[["a","9007199254740991"],["b","-17"],["z","-9007199254740991"]]}, + {"name":"Quint key 424: signed large bigint decimal","input":{},"bigintArgs":{"z":"9007199254740991123","a":"-9007199254740991123","b":"0"},"expected":[["a","-9007199254740991123"],["b","0"],["z","9007199254740991123"]]}, + {"name":"Quint key 425: UTF-16 astral ordering","input":{"":"b","😀":"a","￿":"c","퟿":"d"},"expected":[["퟿","d"],["😀","a"],["","b"],["￿","c"]]}, + {"name":"Quint key 426: prefix and empty names","input":{"aa":"1","a":"2","":"3","a\u0000":"4"},"expected":[["","3"],["a","2"],["a\u0000","4"],["aa","1"]]}, + {"name":"Quint key 427: no Unicode normalization","input":{"é":"é","é":"é"},"expected":[["é","é"],["é","é"]]}, + {"name":"Quint key 428: numeric-looking name order","input":{"1":1,"2":2,"10":10,"01":1},"expected":[["01","1"],["1","1"],["10","10"],["2","2"]]}, + {"name":"Quint key 429: omitted versus literal text","input":{"a":"undefined","b":"__QUINT_OMITTED__","c":"null","d":null},"undefinedSentinel":"__QUINT_OMITTED__","expected":[["a","undefined"],["c","null"],["d","null"]]}, + {"name":"Quint key 430: bigints beyond safe numbers","input":{"o":9007199254740991},"bigintArgs":{"n":"9007199254740992","m":"-9007199254740992"},"expected":[["m","-9007199254740992"],["n","9007199254740992"],["o","9007199254740991"]]}, + {"name":"Quint key 431: case-sensitive punctuation order","input":{"A":" %&=","a":false,"_":null,"Z":true},"expected":[["A"," %&="],["Z","true"],["_","null"],["a","false"]]}, + {"name":"Quint key 432: own prototype-like names","input":{"constructor":1,"toString":true},"bigintArgs":{"__proto__":"9007199254740992"},"expected":[["__proto__","9007199254740992"],["constructor","1"],["toString","true"]]} ], "rampVectors": [ - { - "name": "Quint key 433: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "layer": "local", - "sample": 38.475490640848875, - "hashNumerator": 1652509740 - }, - { - "name": "Quint key 434: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "layer": "remote", - "sample": 1.4885220443829894, - "hashNumerator": 63931535 - }, - { - "name": "Quint key 435: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "layer": "shadow", - "sample": 20.02826475072652, - "hashNumerator": 860207421 - }, - { - "name": "Quint key 436: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "layer": "local", - "sample": 4.17773830704391, - "hashNumerator": 179432494 - }, - { - "name": "Quint key 437: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "layer": "remote", - "sample": 62.78921433258802, - "hashNumerator": 2696776221 - }, - { - "name": "Quint key 438: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "layer": "shadow", - "sample": 1.6445291927084327, - "hashNumerator": 70631991 - }, - { - "name": "Quint key 439: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "layer": "local", - "sample": 2.6515295961871743, - "hashNumerator": 113882329 - }, - { - "name": "Quint key 440: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "layer": "remote", - "sample": 26.181362383067608, - "hashNumerator": 1124480952 - }, - { - "name": "Quint key 441: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "layer": "shadow", - "sample": 97.77715564705431, - "hashNumerator": 4199496858 - }, - { - "name": "Quint key 442: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "😀", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "layer": "local", - "sample": 94.60908013861626, - "hashNumerator": 4063429051 - }, - { - "name": "Quint key 443: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "😀", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "layer": "remote", - "sample": 96.63744098506868, - "hashNumerator": 4150546486 - }, - { - "name": "Quint key 444: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "😀", - "useCase": "Get", - "trackForInvalidation": false, - "args": [] - }, - "layer": "shadow", - "sample": 4.348370525985956, - "hashNumerator": 186761092 - }, - { - "name": "Quint key 445: key-specific discriminator hash", - "input": { - "namespace": "é", - "keyType": "id", - "id": "雪", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "layer": "local", - "sample": 70.11993327178061, - "hashNumerator": 3011628202 - }, - { - "name": "Quint key 446: key-specific discriminator hash", - "input": { - "namespace": "é", - "keyType": "id", - "id": "雪", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "layer": "remote", - "sample": 75.83117561880499, - "hashNumerator": 3256924193 - }, - { - "name": "Quint key 447: key-specific discriminator hash", - "input": { - "namespace": "é", - "keyType": "id", - "id": "雪", - "useCase": "Get", - "trackForInvalidation": true, - "args": [] - }, - "layer": "shadow", - "sample": 84.56435154657811, - "hashNumerator": 3632011243 - }, - { - "name": "Quint key 448: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "z", - "3" - ], - [ - "a", - "1" - ], - [ - "z", - "2" - ] - ] - }, - "layer": "local", - "sample": 38.621399900875986, - "hashNumerator": 1658776495 - }, - { - "name": "Quint key 449: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "z", - "3" - ], - [ - "a", - "1" - ], - [ - "z", - "2" - ] - ] - }, - "layer": "remote", - "sample": 48.412148701027036, - "hashNumerator": 2079285954 - }, - { - "name": "Quint key 450: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Get", - "trackForInvalidation": true, - "args": [ - [ - "z", - "3" - ], - [ - "a", - "1" - ], - [ - "z", - "2" - ] - ] - }, - "layer": "shadow", - "sample": 98.15586507320404, - "hashNumerator": 4215762304 - }, - { - "name": "Quint key 451: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "0", - "useCase": "ShadowLayers", - "trackForInvalidation": true, - "args": [] - }, - "layer": "local", - "sample": 44.0400491701439, - "hashNumerator": 1891505709 - }, - { - "name": "Quint key 452: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "0", - "useCase": "ShadowLayers", - "trackForInvalidation": true, - "args": [] - }, - "layer": "remote", - "sample": 55.71753652766347, - "hashNumerator": 2393049972 - }, - { - "name": "Quint key 453: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "0", - "useCase": "ShadowLayers", - "trackForInvalidation": true, - "args": [] - }, - "layer": "shadow", - "sample": 74.59508269093931, - "hashNumerator": 3203834406 - }, - { - "name": "Quint key 454: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Behavior", - "trackForInvalidation": false, - "args": [] - }, - "layer": "local", - "sample": 99.95154617354274, - "hashNumerator": 4292886220 - }, - { - "name": "Quint key 455: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Behavior", - "trackForInvalidation": false, - "args": [] - }, - "layer": "remote", - "sample": 23.723373911343515, - "hashNumerator": 1018911151 - }, - { - "name": "Quint key 456: key-specific discriminator hash", - "input": { - "namespace": "urn", - "keyType": "id", - "id": "1", - "useCase": "Behavior", - "trackForInvalidation": false, - "args": [] - }, - "layer": "shadow", - "sample": 60.51247932482511, - "hashNumerator": 2598991197 - } + {"name":"Quint key 433: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"layer":"local","sample":38.475490640848875,"hashNumerator":1652509740}, + {"name":"Quint key 434: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"layer":"remote","sample":1.4885220443829894,"hashNumerator":63931535}, + {"name":"Quint key 435: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":false,"args":[]},"layer":"shadow","sample":20.02826475072652,"hashNumerator":860207421}, + {"name":"Quint key 436: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"layer":"local","sample":4.17773830704391,"hashNumerator":179432494}, + {"name":"Quint key 437: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"layer":"remote","sample":62.78921433258802,"hashNumerator":2696776221}, + {"name":"Quint key 438: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[]},"layer":"shadow","sample":1.6445291927084327,"hashNumerator":70631991}, + {"name":"Quint key 439: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"","useCase":"Get","trackForInvalidation":false,"args":[]},"layer":"local","sample":2.6515295961871743,"hashNumerator":113882329}, + {"name":"Quint key 440: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"","useCase":"Get","trackForInvalidation":false,"args":[]},"layer":"remote","sample":26.181362383067608,"hashNumerator":1124480952}, + {"name":"Quint key 441: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"","useCase":"Get","trackForInvalidation":false,"args":[]},"layer":"shadow","sample":97.77715564705431,"hashNumerator":4199496858}, + {"name":"Quint key 442: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"😀","useCase":"Get","trackForInvalidation":false,"args":[]},"layer":"local","sample":94.60908013861626,"hashNumerator":4063429051}, + {"name":"Quint key 443: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"😀","useCase":"Get","trackForInvalidation":false,"args":[]},"layer":"remote","sample":96.63744098506868,"hashNumerator":4150546486}, + {"name":"Quint key 444: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"😀","useCase":"Get","trackForInvalidation":false,"args":[]},"layer":"shadow","sample":4.348370525985956,"hashNumerator":186761092}, + {"name":"Quint key 445: key-specific discriminator hash","input":{"namespace":"é","keyType":"id","id":"雪","useCase":"Get","trackForInvalidation":true,"args":[]},"layer":"local","sample":70.11993327178061,"hashNumerator":3011628202}, + {"name":"Quint key 446: key-specific discriminator hash","input":{"namespace":"é","keyType":"id","id":"雪","useCase":"Get","trackForInvalidation":true,"args":[]},"layer":"remote","sample":75.83117561880499,"hashNumerator":3256924193}, + {"name":"Quint key 447: key-specific discriminator hash","input":{"namespace":"é","keyType":"id","id":"雪","useCase":"Get","trackForInvalidation":true,"args":[]},"layer":"shadow","sample":84.56435154657811,"hashNumerator":3632011243}, + {"name":"Quint key 448: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["z","3"],["a","1"],["z","2"]]},"layer":"local","sample":38.621399900875986,"hashNumerator":1658776495}, + {"name":"Quint key 449: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["z","3"],["a","1"],["z","2"]]},"layer":"remote","sample":48.412148701027036,"hashNumerator":2079285954}, + {"name":"Quint key 450: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Get","trackForInvalidation":true,"args":[["z","3"],["a","1"],["z","2"]]},"layer":"shadow","sample":98.15586507320404,"hashNumerator":4215762304}, + {"name":"Quint key 451: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"0","useCase":"ShadowLayers","trackForInvalidation":true,"args":[]},"layer":"local","sample":44.0400491701439,"hashNumerator":1891505709}, + {"name":"Quint key 452: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"0","useCase":"ShadowLayers","trackForInvalidation":true,"args":[]},"layer":"remote","sample":55.71753652766347,"hashNumerator":2393049972}, + {"name":"Quint key 453: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"0","useCase":"ShadowLayers","trackForInvalidation":true,"args":[]},"layer":"shadow","sample":74.59508269093931,"hashNumerator":3203834406}, + {"name":"Quint key 454: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Behavior","trackForInvalidation":false,"args":[]},"layer":"local","sample":99.95154617354274,"hashNumerator":4292886220}, + {"name":"Quint key 455: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Behavior","trackForInvalidation":false,"args":[]},"layer":"remote","sample":23.723373911343515,"hashNumerator":1018911151}, + {"name":"Quint key 456: key-specific discriminator hash","input":{"namespace":"urn","keyType":"id","id":"1","useCase":"Behavior","trackForInvalidation":false,"args":[]},"layer":"shadow","sample":60.51247932482511,"hashNumerator":2598991197} ] } diff --git a/formal/recovery-read-smoke.itf.json b/formal/recovery-read-smoke.itf.json index 7028f1ea..268b9fa7 100644 --- a/formal/recovery-read-smoke.itf.json +++ b/formal/recovery-read-smoke.itf.json @@ -11,2534 +11,19 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "1000" - }, - "acceptedMaximum": { - "#bigint": "5000" - }, - "activeSource": { - "#bigint": "-1" - }, - "canRecover": false, - "canWrite": false, - "candidate": { - "#bigint": "0" - }, - "candidateCreated": { - "#bigint": "0" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "0" - }, - "expires": { - "#bigint": "0" - }, - "frame": { - "#bigint": "0" - }, - "freshMs": { - "#bigint": "1000" - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - }, - "localVersion": { - "#bigint": "0" - }, - "markerExpires": { - "#bigint": "0" - }, - "markers": [], - "maximumMs": { - "#bigint": "5000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "readReceipts": [], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000000000" - }, - "watermark": { - "#bigint": "0" - }, - "writeFailed": false, - "writeReceipts": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "1000" - }, - "acceptedMaximum": { - "#bigint": "5000" - }, - "activeSource": { - "#bigint": "-1" - }, - "canRecover": false, - "canWrite": false, - "candidate": { - "#bigint": "0" - }, - "candidateCreated": { - "#bigint": "0" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "0" - }, - "expires": { - "#bigint": "0" - }, - "frame": { - "#bigint": "0" - }, - "freshMs": { - "#bigint": "1000" - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - }, - "localVersion": { - "#bigint": "0" - }, - "markerExpires": { - "#bigint": "7200000" - }, - "markers": [], - "maximumMs": { - "#bigint": "5000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "readReceipts": [], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000000000" - }, - "watermark": { - "#bigint": "1000000000" - }, - "writeFailed": false, - "writeReceipts": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "observeMarker" - }, - "mbt::actionTaken": "observeMarker", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "1000" - }, - "acceptedMaximum": { - "#bigint": "5000" - }, - "activeSource": { - "#bigint": "-1" - }, - "canRecover": false, - "canWrite": false, - "candidate": { - "#bigint": "0" - }, - "candidateCreated": { - "#bigint": "0" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "0" - }, - "expires": { - "#bigint": "0" - }, - "frame": { - "#bigint": "0" - }, - "freshMs": { - "#bigint": "1000" - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - }, - "localVersion": { - "#bigint": "0" - }, - "markerExpires": { - "#bigint": "7200000" - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "maximumMs": { - "#bigint": "5000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "readReceipts": [], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000000000" - }, - "watermark": { - "#bigint": "1000000000" - }, - "writeFailed": false, - "writeReceipts": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "1000" - }, - "acceptedMaximum": { - "#bigint": "5000" - }, - "activeSource": { - "#bigint": "-1" - }, - "canRecover": false, - "canWrite": false, - "candidate": { - "#bigint": "0" - }, - "candidateCreated": { - "#bigint": "0" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "0" - }, - "expires": { - "#bigint": "0" - }, - "frame": { - "#bigint": "0" - }, - "freshMs": { - "#bigint": "1000" - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - }, - "localVersion": { - "#bigint": "0" - }, - "markerExpires": { - "#bigint": "7200000" - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "maximumMs": { - "#bigint": "5000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "1" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "readReceipts": [], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000000001" - }, - "watermark": { - "#bigint": "1000000000" - }, - "writeFailed": false, - "writeReceipts": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "1000" - }, - "acceptedMaximum": { - "#bigint": "5000" - }, - "activeSource": { - "#bigint": "-1" - }, - "canRecover": false, - "canWrite": false, - "candidate": { - "#bigint": "0" - }, - "candidateCreated": { - "#bigint": "0" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "0" - }, - "expires": { - "#bigint": "0" - }, - "frame": { - "#bigint": "0" - }, - "freshMs": { - "#bigint": "7200000" - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - }, - "localVersion": { - "#bigint": "0" - }, - "markerExpires": { - "#bigint": "7200000" - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "maximumMs": { - "#bigint": "14400000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "1" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "readReceipts": [], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000000001" - }, - "watermark": { - "#bigint": "1000000000" - }, - "writeFailed": false, - "writeReceipts": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "7200000" - }, - "acceptedMaximum": { - "#bigint": "14400000" - }, - "activeSource": { - "#bigint": "-1" - }, - "canRecover": false, - "canWrite": false, - "candidate": { - "#bigint": "0" - }, - "candidateCreated": { - "#bigint": "0" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "0" - }, - "expires": { - "#bigint": "0" - }, - "frame": { - "#bigint": "0" - }, - "freshMs": { - "#bigint": "7200000" - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - }, - "localVersion": { - "#bigint": "0" - }, - "markerExpires": { - "#bigint": "7200000" - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "maximumMs": { - "#bigint": "14400000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "1" - }, - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "readReceipts": [], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000000001" - }, - "watermark": { - "#bigint": "1000000000" - }, - "writeFailed": false, - "writeReceipts": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "7200000" - }, - "acceptedMaximum": { - "#bigint": "14400000" - }, - "activeSource": { - "#bigint": "0" - }, - "canRecover": true, - "canWrite": true, - "candidate": { - "#bigint": "0" - }, - "candidateCreated": { - "#bigint": "0" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "0" - }, - "expires": { - "#bigint": "0" - }, - "frame": { - "#bigint": "0" - }, - "freshMs": { - "#bigint": "7200000" - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - }, - "localVersion": { - "#bigint": "0" - }, - "markerExpires": { - "#bigint": "7200000" - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "maximumMs": { - "#bigint": "14400000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "1" - }, - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "observedFence": { - "#bigint": "1000000000" - }, - "phase": { - "#bigint": "3" - }, - "readReceipts": [ - { - "age": { - "#bigint": "1000000001" - }, - "freshDecode": false, - "freshMs": { - "#bigint": "7200000" - }, - "validFrame": false - } - ], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000000001" - }, - "watermark": { - "#bigint": "1000000000" - }, - "writeFailed": false, - "writeReceipts": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "7200000" - }, - "acceptedMaximum": { - "#bigint": "14400000" - }, - "activeSource": { - "#bigint": "0" - }, - "canRecover": true, - "canWrite": true, - "candidate": { - "#bigint": "0" - }, - "candidateCreated": { - "#bigint": "0" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "1000000001" - }, - "expires": { - "#bigint": "3600001" - }, - "frame": { - "#bigint": "2" - }, - "freshMs": { - "#bigint": "7200000" - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - }, - "localVersion": { - "#bigint": "0" - }, - "markerExpires": { - "#bigint": "7200000" - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "maximumMs": { - "#bigint": "14400000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "1" - }, - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "observedFence": { - "#bigint": "1000000000" - }, - "phase": { - "#bigint": "0" - }, - "readReceipts": [ - { - "age": { - "#bigint": "1000000001" - }, - "freshDecode": false, - "freshMs": { - "#bigint": "7200000" - }, - "validFrame": false - } - ], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000000001" - }, - "watermark": { - "#bigint": "1000000000" - }, - "writeFailed": false, - "writeReceipts": [ - { - "requested": { - "#bigint": "14400000" - }, - "tracked": true, - "ttl": { - "#bigint": "3600000" - } - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "observeMarker" - }, - "mbt::actionTaken": "observeMarker", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "7200000" - }, - "acceptedMaximum": { - "#bigint": "14400000" - }, - "activeSource": { - "#bigint": "0" - }, - "canRecover": true, - "canWrite": true, - "candidate": { - "#bigint": "0" - }, - "candidateCreated": { - "#bigint": "0" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "1000000001" - }, - "expires": { - "#bigint": "3600001" - }, - "frame": { - "#bigint": "2" - }, - "freshMs": { - "#bigint": "7200000" - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - }, - "localVersion": { - "#bigint": "0" - }, - "markerExpires": { - "#bigint": "7200000" - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199999" - } - } - ], - "maximumMs": { - "#bigint": "14400000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "1" - }, - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "observedFence": { - "#bigint": "1000000000" - }, - "phase": { - "#bigint": "0" - }, - "readReceipts": [ - { - "age": { - "#bigint": "1000000001" - }, - "freshDecode": false, - "freshMs": { - "#bigint": "7200000" - }, - "validFrame": false - } - ], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000000001" - }, - "watermark": { - "#bigint": "1000000000" - }, - "writeFailed": false, - "writeReceipts": [ - { - "requested": { - "#bigint": "14400000" - }, - "tracked": true, - "ttl": { - "#bigint": "3600000" - } - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "7200000" - }, - "acceptedMaximum": { - "#bigint": "14400000" - }, - "activeSource": { - "#bigint": "0" - }, - "canRecover": true, - "canWrite": true, - "candidate": { - "#bigint": "0" - }, - "candidateCreated": { - "#bigint": "0" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "1000000001" - }, - "expires": { - "#bigint": "3600001" - }, - "frame": { - "#bigint": "2" - }, - "freshMs": { - "#bigint": "7200000" - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - }, - "localVersion": { - "#bigint": "0" - }, - "markerExpires": { - "#bigint": "7200000" - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199999" - } - } - ], - "maximumMs": { - "#bigint": "14400000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "1" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "observedFence": { - "#bigint": "1000000000" - }, - "phase": { - "#bigint": "1" - }, - "readReceipts": [ - { - "age": { - "#bigint": "1000000001" - }, - "freshDecode": false, - "freshMs": { - "#bigint": "7200000" - }, - "validFrame": false - } - ], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000000001" - }, - "watermark": { - "#bigint": "1000000000" - }, - "writeFailed": false, - "writeReceipts": [ - { - "requested": { - "#bigint": "14400000" - }, - "tracked": true, - "ttl": { - "#bigint": "3600000" - } - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "7200000" - }, - "acceptedMaximum": { - "#bigint": "14400000" - }, - "activeSource": { - "#bigint": "0" - }, - "canRecover": true, - "canWrite": true, - "candidate": { - "#bigint": "2" - }, - "candidateCreated": { - "#bigint": "1000000001" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "1000000001" - }, - "expires": { - "#bigint": "3600001" - }, - "frame": { - "#bigint": "2" - }, - "freshMs": { - "#bigint": "7200000" - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - }, - "localVersion": { - "#bigint": "0" - }, - "markerExpires": { - "#bigint": "7200000" - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199999" - } - } - ], - "maximumMs": { - "#bigint": "14400000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "1" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "2" - }, - "readReceipts": [ - { - "age": { - "#bigint": "1000000001" - }, - "freshDecode": false, - "freshMs": { - "#bigint": "7200000" - }, - "validFrame": false - }, - { - "age": { - "#bigint": "0" - }, - "freshDecode": true, - "freshMs": { - "#bigint": "7200000" - }, - "validFrame": true - } - ], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000000001" - }, - "watermark": { - "#bigint": "1000000000" - }, - "writeFailed": false, - "writeReceipts": [ - { - "requested": { - "#bigint": "14400000" - }, - "tracked": true, - "ttl": { - "#bigint": "3600000" - } - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "7200000" - }, - "acceptedMaximum": { - "#bigint": "14400000" - }, - "activeSource": { - "#bigint": "0" - }, - "canRecover": true, - "canWrite": true, - "candidate": { - "#bigint": "2" - }, - "candidateCreated": { - "#bigint": "1000000001" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "1000000001" - }, - "expires": { - "#bigint": "3600001" - }, - "frame": { - "#bigint": "2" - }, - "freshMs": { - "#bigint": "7200000" - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "localExpires": { - "#bigint": "1001" - }, - "localValue": { - "#bigint": "2" - }, - "localVersion": { - "#bigint": "1" - }, - "markerExpires": { - "#bigint": "7200000" - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199999" - } - } - ], - "maximumMs": { - "#bigint": "14400000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "1" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "readReceipts": [ - { - "age": { - "#bigint": "1000000001" - }, - "freshDecode": false, - "freshMs": { - "#bigint": "7200000" - }, - "validFrame": false - }, - { - "age": { - "#bigint": "0" - }, - "freshDecode": true, - "freshMs": { - "#bigint": "7200000" - }, - "validFrame": true - } - ], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000000001" - }, - "watermark": { - "#bigint": "1000000000" - }, - "writeFailed": false, - "writeReceipts": [ - { - "requested": { - "#bigint": "14400000" - }, - "tracked": true, - "ttl": { - "#bigint": "3600000" - } - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "999" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "999" - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "7200000" - }, - "acceptedMaximum": { - "#bigint": "14400000" - }, - "activeSource": { - "#bigint": "0" - }, - "canRecover": true, - "canWrite": true, - "candidate": { - "#bigint": "2" - }, - "candidateCreated": { - "#bigint": "1000000001" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "1000000001" - }, - "expires": { - "#bigint": "3600001" - }, - "frame": { - "#bigint": "2" - }, - "freshMs": { - "#bigint": "7200000" - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "localExpires": { - "#bigint": "1001" - }, - "localValue": { - "#bigint": "2" - }, - "localVersion": { - "#bigint": "1" - }, - "markerExpires": { - "#bigint": "7200000" - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199999" - } - } - ], - "maximumMs": { - "#bigint": "14400000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "1000" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "readReceipts": [ - { - "age": { - "#bigint": "1000000001" - }, - "freshDecode": false, - "freshMs": { - "#bigint": "7200000" - }, - "validFrame": false - }, - { - "age": { - "#bigint": "0" - }, - "freshDecode": true, - "freshMs": { - "#bigint": "7200000" - }, - "validFrame": true - } - ], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000001000" - }, - "watermark": { - "#bigint": "1000000000" - }, - "writeFailed": false, - "writeReceipts": [ - { - "requested": { - "#bigint": "14400000" - }, - "tracked": true, - "ttl": { - "#bigint": "3600000" - } - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "observeMarker" - }, - "mbt::actionTaken": "observeMarker", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "acceptedFresh": { - "#bigint": "7200000" - }, - "acceptedMaximum": { - "#bigint": "14400000" - }, - "activeSource": { - "#bigint": "0" - }, - "canRecover": true, - "canWrite": true, - "candidate": { - "#bigint": "2" - }, - "candidateCreated": { - "#bigint": "1000000001" - }, - "closed": [ - false, - false - ], - "compression": [], - "created": { - "#bigint": "1000000001" - }, - "expires": { - "#bigint": "3600001" - }, - "frame": { - "#bigint": "2" - }, - "freshMs": { - "#bigint": "7200000" - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "localExpires": { - "#bigint": "1001" - }, - "localValue": { - "#bigint": "2" - }, - "localVersion": { - "#bigint": "1" - }, - "markerExpires": { - "#bigint": "7200000" - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199999" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199000" - } - } - ], - "maximumMs": { - "#bigint": "14400000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "1000" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "readReceipts": [ - { - "age": { - "#bigint": "1000000001" - }, - "freshDecode": false, - "freshMs": { - "#bigint": "7200000" - }, - "validFrame": false - }, - { - "age": { - "#bigint": "0" - }, - "freshDecode": true, - "freshMs": { - "#bigint": "7200000" - }, - "validFrame": true - } - ], - "recoveryReceipts": [], - "scope": { - "#bigint": "2" - }, - "tracked": true, - "wall": { - "#bigint": "1000001000" - }, - "watermark": { - "#bigint": "1000000000" - }, - "writeFailed": false, - "writeReceipts": [ - { - "requested": { - "#bigint": "14400000" - }, - "tracked": true, - "ttl": { - "#bigint": "3600000" - } - } - ] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"observeMarker"},"mbt::actionTaken":"observeMarker","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"observeMarker"},"mbt::actionTaken":"observeMarker","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199999"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199999"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199999"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199999"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"999"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"999"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199999"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"observeMarker"},"mbt::actionTaken":"observeMarker","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199999"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199000"}}],"compression":[]}} ] } diff --git a/formal/recovery-smoke.itf.json b/formal/recovery-smoke.itf.json index e00fe6fc..00d7a0e2 100644 --- a/formal/recovery-smoke.itf.json +++ b/formal/recovery-smoke.itf.json @@ -11,5967 +11,66 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "6" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "joinCall" - }, - "mbt::actionTaken": "joinCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process" - ], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "joinCall" - }, - "mbt::actionTaken": "joinCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local" - ], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "joinCall" - }, - "mbt::actionTaken": "joinCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local" - ], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local" - ], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5000" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "loadFault" - }, - "mbt::actionTaken": "loadFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "joinCall" - }, - "mbt::actionTaken": "joinCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "closeScope" - }, - "mbt::actionTaken": "closeScope", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "joinCall" - }, - "mbt::actionTaken": "joinCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "loadFault" - }, - "mbt::actionTaken": "loadFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "joinCall" - }, - "mbt::actionTaken": "joinCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5000" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "closeScope" - }, - "mbt::actionTaken": "closeScope", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "loadFault" - }, - "mbt::actionTaken": "loadFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5000" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "loadFault" - }, - "mbt::actionTaken": "loadFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "loadFault" - }, - "mbt::actionTaken": "loadFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "loadFault" - }, - "mbt::actionTaken": "loadFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5000" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "loadFault" - }, - "mbt::actionTaken": "loadFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "4" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "4" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "5" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "5" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "6" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "6" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "loadFault" - }, - "mbt::actionTaken": "loadFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "6" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "6" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5000" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "6" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "loadFault" - }, - "mbt::actionTaken": "loadFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "6" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "ok", - "ok", - "ok", - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "request_local", - "request_local", - "request_local", - "request_local", - "request_local" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"6"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"6"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"joinCall"},"mbt::actionTaken":"joinCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process"],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"joinCall"},"mbt::actionTaken":"joinCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local"],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"joinCall"},"mbt::actionTaken":"joinCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local"],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local"],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5000"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5000"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"loadFault"},"mbt::actionTaken":"loadFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"joinCall"},"mbt::actionTaken":"joinCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"closeScope"},"mbt::actionTaken":"closeScope","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"1"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4000"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"1"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"joinCall"},"mbt::actionTaken":"joinCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"loadFault"},"mbt::actionTaken":"loadFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"joinCall"},"mbt::actionTaken":"joinCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5000"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5000"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"closeScope"},"mbt::actionTaken":"closeScope","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"loadFault"},"mbt::actionTaken":"loadFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5000"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5000"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4000"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"loadFault"},"mbt::actionTaken":"loadFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"loadFault"},"mbt::actionTaken":"loadFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"loadFault"},"mbt::actionTaken":"loadFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4000"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5000"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5000"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"loadFault"},"mbt::actionTaken":"loadFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"4"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"4"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"5"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"5"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"6"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"6"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"loadFault"},"mbt::actionTaken":"loadFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"6"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"6"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5000"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5000"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"6"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"loadFault"},"mbt::actionTaken":"loadFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"6"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok","ok","ok","ok","ok","ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"2"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":["process","request_local","request_local","request_local","request_local","request_local"],"fallbackErrors":["remote"],"warnings":{"#bigint":"0"}}}} ] } diff --git a/formal/replay/bindings.d.mts b/formal/replay/bindings.d.mts index f396d7b1..69118a47 100644 --- a/formal/replay/bindings.d.mts +++ b/formal/replay/bindings.d.mts @@ -4,6 +4,8 @@ export interface Binding { setup: Array>; /** protocol.schema.json definition that every observation for this binding must satisfy. */ observation: "behaviorObservation" | "coreObservation" | "localClockObservation"; + /** How the coordinator checks causally-ready-v1 for the session: by settlement receipt, by the controlled wall clock alone (core), or not at all (local-clock). */ + settlement: "receipt" | "wallClock" | "none"; commands(index: number, observed: unknown, environment: { wallMs: number }): Array>; assert(index: number, observed: unknown): void; } diff --git a/formal/replay/bindings.mjs b/formal/replay/bindings.mjs index 951ee64a..17d83e39 100644 --- a/formal/replay/bindings.mjs +++ b/formal/replay/bindings.mjs @@ -20,7 +20,12 @@ export function profileActions() { // the native boundary. The input mapping receives a fresh action descriptor, // actual observations, and actual clocks; it cannot inspect model predictions. // `observation` names the protocol.schema.json definition every observation -// for this binding must satisfy before any comparison runs. +// for this binding must satisfy before any comparison runs. `settlement` says +// how the coordinator checks the causally-ready-v1 contract for the session: +// "receipt" for behavior drivers, which attach a settlement receipt to each +// observation; "wallClock" for core, whose commands are awaited +// request/response but whose wall clock the schedule controls; "none" for +// local-clock, which reports the real process clock that no rule constrains. export function bindTrace(name, raw, path) { if (Object.hasOwn(profiles, name)) { const profile = profiles[name]; @@ -29,7 +34,7 @@ export function bindTrace(name, raw, path) { ? profile.fixture(trace.steps[0].choice) : profile.fixture; return { - trace, fixture, setup: profile.setup, observation: "behaviorObservation", + trace, fixture, setup: profile.setup, observation: "behaviorObservation", settlement: "receipt", commands(index, observed, environment) { const { action, choice } = trace.steps[index]; return action === "init" ? [] : [featureInput(profile, action, choice, observed, environment)]; @@ -43,7 +48,7 @@ export function bindTrace(name, raw, path) { const parsed = core.parseItfTrace(raw, path); const trace = { path, steps: parsed.states }; return { - trace, fixture: {}, setup: [], observation: "coreObservation", + trace, fixture: {}, setup: [], observation: "coreObservation", settlement: "wallClock", commands(index) { return core.coreCommands(trace.steps[index].action); }, @@ -55,7 +60,7 @@ export function bindTrace(name, raw, path) { if (name === "local-clock") { const trace = localClock.parseLocalClockTrace(raw, path); return { - trace, fixture: {}, setup: [], observation: "localClockObservation", + trace, fixture: {}, setup: [], observation: "localClockObservation", settlement: "none", commands(index) { const { action, choice } = trace.steps[index]; return localClock.localClockInput(action, choice); @@ -71,7 +76,7 @@ export function bindTrace(name, raw, path) { const expected = effects.expectedObservations(trace); const initialInput = { action: "init", choice: trace.steps[0].choice }; return { - trace, fixture, observation: "behaviorObservation", + trace, fixture, observation: "behaviorObservation", settlement: "receipt", setup: [ { op: "faults", value: { holdReads: true, holdLoads: true, holdDumps: true, holdWrites: true } }, ...effects.inputsFor(initialInput, emptyObservation(fixture), { wallMs: 0 }), diff --git a/formal/replay/coordinator.mjs b/formal/replay/coordinator.mjs index 63e50a9e..388b629a 100644 --- a/formal/replay/coordinator.mjs +++ b/formal/replay/coordinator.mjs @@ -4,6 +4,7 @@ import { fileURLToPath } from "node:url"; import { profileActions, bindTrace } from "./bindings.mjs"; import { parseJSON, replayLines } from "./validation.mjs"; import { assertSchema, schemaViolation } from "./schema.mjs"; +import { SettlementLedger, receiptDefinition } from "./settlement.mjs"; export const protocolVersion = 1; export const settlement = "causally-ready-v1"; @@ -33,11 +34,18 @@ export class ReplayCoordinator { const binding = bindTrace(request.profile, parseJSON(raw), request.path); const { trace } = binding; const session = String(++this.#nextSession); - this.#sessions.set(session, { binding, trace, index: 0 }); - // `observation` names the $defs definition the driver's records must - // satisfy, so a port can validate them locally before each round trip. + // A checked session keeps a settlement ledger of the commands it issued: + // a behavior session's receipts are checked against the schedule the + // driver actually ran, the core session's wall clock alone. The + // local-clock driver reports the real process clock, which no rule reads. + const ledger = binding.settlement === "none" ? undefined : new SettlementLedger(binding.fixture, binding.setup); + this.#sessions.set(session, { binding, trace, index: 0, ledger }); + // `observation` and `receipt` name the $defs definitions the driver's + // records must satisfy, so a port can validate them locally before each + // round trip; a null receipt means the session carries none. return { - session, settlement, observation: binding.observation, fixture: binding.fixture, setup: binding.setup, + session, settlement, observation: binding.observation, receipt: binding.settlement === "receipt" ? receiptDefinition : null, + fixture: binding.fixture, setup: binding.setup, actions: trace.steps.map(step => step.action), steps: trace.steps.length, }; } @@ -48,13 +56,29 @@ export class ReplayCoordinator { const session = this.#sessions.get(request.session); if (!session) throw new Error("Unknown replay session"); - const { binding, trace, index } = session; + const { binding, trace, index, ledger } = session; try { if (request.index !== index) throw new Error("Duplicate or skipped replay observation"); // A malformed observation is a driver or transport defect, never // comparison evidence: report it as a plain infrastructure error. const malformed = schemaViolation(request.observed, binding.observation, "observed"); if (malformed !== undefined) throw new Error(`Malformed replay observation: ${binding.observation} at ${malformed}`); + // The settlement receipt is checked before the observation is compared, + // so an unsettled driver fails by name and never earns comparison credit. + // The binding alone decides whether an observe must carry one; its shape + // is validated separately from the request so the path names the receipt + // member. A core session carries none and is held to the wall-clock rule + // alone; a local-clock session is not checked. + if (Object.hasOwn(request, "receipt")) { + if (binding.settlement !== "receipt") throw new Error("Unexpected settlement receipt"); + const shape = schemaViolation(request.receipt, receiptDefinition, "receipt"); + if (shape !== undefined) throw new Error(`Malformed settlement receipt at ${shape}`); + ledger.assert(request.receipt, request.observed, request.environment); + } else if (binding.settlement === "receipt") { + throw new Error("Missing settlement receipt"); + } else { + ledger?.assertWallClock(request.observed, request.environment); + } try { binding.assert(index, request.observed); } catch (cause) { @@ -76,6 +100,7 @@ export class ReplayCoordinator { const inputs = binding.commands(nextIndex, request.observed, request.environment); for (const input of inputs) assertSchema(input, "command"); if (inputs.length === 0) throw new Error("Replay action produced no command"); + ledger?.issue(inputs); session.index = nextIndex; return { complete: false, index: nextIndex, inputs }; } catch (cause) { diff --git a/formal/replay/effects.d.mts b/formal/replay/effects.d.mts index ea515eca..f7a38d79 100644 --- a/formal/replay/effects.d.mts +++ b/formal/replay/effects.d.mts @@ -2,11 +2,16 @@ import type { Fixture, Input, Observation } from "../../test/formal/behavior-dri export const actions: readonly string[]; export const observedFields: readonly string[]; export interface Event { event: string; location: string; detail: string; amount: number } -export type State = Record<"now"|"wall"|"readStarted"|"decodeStarted"|"tracked"|"reply"|"replyAt"|"readBudget"|"baseReadBudget"|"phase"|"activeLoader"|"activeRead"|"deadline"|"refill"|"acceptedAt"|"acceptedWall"|"observerFailed"|"readAborts"|"observedFence"|"writeTimestamp"|"storedTimestamp"|"watermark"|"loaders"|"reads"|"writes"|"invalidations"|"loads"|"dumps"|"policyCalls",number>&{calls:number[];sources:number[];readStates:number[];readBudgets:number[];events:Event[]}; -export interface Step { action:string;choice?:number;state:State } -export interface Trace { path:string;steps:Step[] } -export function parseTrace(raw:unknown,path:string):Trace; -export function fixtureFor(mode:number):Fixture; -export function inputsFor(step:Pick,observed:Observation,environment:{wallMs:number}):Input[]; -export function project(observed:Observation):Record; -export function expectedObservations(trace:Trace):Record[]; +export interface ReadContext { index: number; timeoutMs: number; aborted: boolean } +// The observation the version-2 contract asserts at a step, parsed from the composed layout (s.o, s.io, s.events) or the retired one. +export type Expected = Record<"loaders"|"reads"|"writes"|"invalidations"|"loads"|"dumps"|"policyCalls", number> & { calls: number[]; events: Event[]; writeTtls: number[]; readAborts: number[]; readContexts: ReadContext[] }; +export interface Step { action: string; choice: number; expected: Expected } +export interface Trace { path: string; steps: Step[] } +export function parseTrace(raw: unknown, path: string): Trace; +export interface EffectsDescriptor { explicitInputs: true; parseTrace: typeof parseTrace; actions: Record } +export const effectsDescriptor: EffectsDescriptor; +export function fixtureFor(mode: number): Fixture; +// The choice is read only for the actions that record one (init, the reply, the budget policy, the observer fault, the loader and read settlements). +export function inputsFor(step: { action: string; choice?: number }, observed: Observation, environment: { wallMs: number }): Input[]; +export function project(observed: Observation): Record; +export function expectedObservations(trace: Trace): Expected[]; diff --git a/formal/replay/effects.mjs b/formal/replay/effects.mjs index 7c8779ac..0987593e 100644 --- a/formal/replay/effects.mjs +++ b/formal/replay/effects.mjs @@ -2,69 +2,110 @@ import assert from "node:assert/strict"; import { assertSubset } from "./validation.mjs"; import { assertInputMetadata, itfInteger, itfSignedInteger, record } from "./itf.mjs"; export const actions = ["init", "beginCall", "resolveLoader", "rejectLoader", "releaseRead", "failRead", "releaseLoad", "failLoad", "releaseDump", "failDump", "releaseWrite", "failWrite", "seedRemote", "tick", "jumpClock", "rollbackWall", "observerFault", "readBudgetPolicy", "adapterReply", "invalidate", "futureFence"]; -const fields = ["now", "wall", "readStarted", "decodeStarted", "tracked", "reply", "replyAt", "readBudget", "baseReadBudget", "phase", "activeLoader", "activeRead", "deadline", "refill", "acceptedAt", "acceptedWall", "observerFailed", "readAborts", "observedFence", "writeTimestamp", "storedTimestamp", "watermark", - "loaders", "reads", "writes", "invalidations", "loads", "dumps", "policyCalls"]; export const observedFields = ["loaders", "reads", "writes", "invalidations", "loads", "dumps", "policyCalls"]; const eventNames = ["request", "disabled", "miss", "error", "coalesced", "invalidation", "get", "fallback", "serialization", "futureOffset", "size", "storedSize", "writeDispatch"]; const timedEvents = new Set(["get", "fallback", "serialization", "futureOffset"]); +// The effects caller codes of the version-2 contract (BEHAVIOR.md): 0 pending, +// 1 value 1, 2 original source error, 3 timeout. The composed text records +// the shared conformance_observations codes (3 source error, 4 deadline +// error); the projection maps them to the contract's codes, so the asserted +// record is unchanged by the composition. +const sharedToEffectsCode = { 0: 0, 1: 1, 3: 2, 4: 3 }; +// The fixture's remote TTL, the retention every write carries. +const REMOTE_TTL_MS = 60000; +const chosenActions = new Set(["init", "adapterReply", "readBudgetPolicy", "observerFault", "resolveLoader", "rejectLoader", "releaseRead", "failRead"]); +const choiceBounds = { init: [0, 5], readBudgetPolicy: [0, 4], observerFault: [0, 1], adapterReply: [1, 16] }; + +function parseEvents(raw, context) { + if (!Array.isArray(raw)) throw new Error(`${context}: missing event observations`); + return raw.map(value => { + const event = record(value, context); + if (Object.keys(event).sort().join() !== "amount,detail,event,location" || typeof event.event !== "string" || + !eventNames.some(name => name === event.event) || typeof event.location !== "string" || typeof event.detail !== "string") { + throw new Error(`${context}: invalid event observation`); + } + const amount = itfInteger(event.amount, context); + return { event: event.event, location: event.location, detail: event.detail, amount: timedEvents.has(event.event) ? amount / 1000 : amount }; + }); +} +function integers(raw, context, name) { + if (!Array.isArray(raw)) throw new Error(`${context}: missing ${name} list`); + return raw.map(value => itfInteger(value, `${context} ${name}`)); +} +// The expected observation of the composed layout: the shared observation +// record `o`, the read channel `io` and the events channel. +function composedExpected(rawState, context) { + const o = record(rawState.o, context), io = record(rawState.io, context); + const calls = integers(o.calls, context, "calls").map(code => { + if (!Object.hasOwn(sharedToEffectsCode, code)) throw new Error(`${context}: unsupported caller outcome ${code}`); + return sharedToEffectsCode[code]; + }); + const budgets = integers(io.budgets, context, "budgets"), aborted = integers(io.aborted, context, "aborted"); + if (budgets.some(budget => ![10, 20, 30, 50].includes(budget))) throw new Error(`${context}: unsupported read budget`); + return { + ...Object.fromEntries(observedFields.map(field => [field, itfInteger(o[field], `${context} ${field}`)])), + calls, events: parseEvents(rawState.events, context), writeTtls: integers(o.writeTtls, context, "writeTtls"), + readAborts: aborted, readContexts: budgets.map((timeoutMs, index) => ({ index, timeoutMs, aborted: false })), + }; +} +// The expected observation of the retired layout (the text before the +// composition), read from its private fields as the version-2 driver did: +// the same record, so a history of either layout is asserted identically. +// Transitional, for the corpus differential whose reference is the merge base +// with main while that base still carries the retired text: once main carries +// the composed text, delete retiredFields, retiredExpected and the layout +// branch in parseTrace (the kernel README's record row names this deletion). +const retiredFields = ["now", "wall", "readStarted", "decodeStarted", "tracked", "reply", "replyAt", "readBudget", "baseReadBudget", "phase", "activeLoader", "activeRead", "deadline", "refill", "acceptedAt", "acceptedWall", "observerFailed", "readAborts", "observedFence", "writeTimestamp", "storedTimestamp", "watermark", + ...observedFields]; +function retiredExpected(rawState, context, previous) { + if (Object.keys(rawState).length !== retiredFields.length + 5) throw new Error(`${context}: unexpected model fields`); + const state = Object.fromEntries(retiredFields.map(field => [field, itfInteger(rawState[field], `${context} ${field}`)])); + const calls = integers(rawState.calls, context, "calls"), readBudgets = integers(rawState.readBudgets, context, "readBudgets"); + integers(rawState.sources, context, "sources"); integers(rawState.readStates, context, "readStates"); + if (calls.some(code => code > 3) || readBudgets.some(budget => ![10, 20, 30, 50].includes(budget))) throw new Error(`${context}: unsupported code`); + const readAborts = previous === undefined ? [] : [...previous.readAborts, ...(state.readAborts > previous.private.readAborts ? [previous.private.activeRead] : [])]; + return { private: state, expected: { + ...Object.fromEntries(observedFields.map(field => [field, state[field]])), + calls, events: parseEvents(rawState.events, context), writeTtls: Array(state.writes).fill(REMOTE_TTL_MS), + readAborts, readContexts: readBudgets.map((timeoutMs, index) => ({ index, timeoutMs, aborted: false })), + } }; +} +// A parsed history: per step the explicit input and the observation the +// drivers are asserted against, whichever layout recorded it. export function parseTrace(value, path) { const states = record(value, path).states; - if (!Array.isArray(states) || states.length < 2) - throw new Error(`${path}: expected a nonempty trace`); + if (!Array.isArray(states) || states.length < 2) throw new Error(`${path}: expected a nonempty trace`); + let previous; const steps = states.map((raw, index) => { const context = `${path} step ${index}`; const step = record(raw, context); const input = record(step.input, context); - if (Object.keys(input).sort().join() !== "choice,name") - throw new Error(`${context}: invalid explicit input`); + if (Object.keys(input).sort().join() !== "choice,name") throw new Error(`${context}: invalid explicit input`); const action = input.name; - if (!actions.some((name) => name === action) || ((index === 0) !== (action === "init"))) { - throw new Error(`${context}: unknown or misplaced action ${JSON.stringify(action)}`); - } - const chosen = action === "init" || action === "adapterReply" || action === "readBudgetPolicy" || action === "observerFault" || action === "resolveLoader" || action === "rejectLoader" || action === "releaseRead" || action === "failRead"; + if (!actions.some(name => name === action) || ((index === 0) !== (action === "init"))) throw new Error(`${context}: unknown or misplaced action ${JSON.stringify(action)}`); + const chosen = chosenActions.has(action); const encoded = itfSignedInteger(input.choice, context); let choice; if (chosen) { - if (encoded < 0) - throw new Error(`${context}: missing effect choice`); + if (encoded < 0) throw new Error(`${context}: missing effect choice`); choice = encoded; - if ((action === "init" && choice > 5) || (action === "readBudgetPolicy" && choice > 4) - || (action === "observerFault" && choice > 1) - || (action === "adapterReply" && (choice < 1 || choice > 16))) - throw new Error(`${context}: unsupported effect choice`); - } - else if (encoded !== -1) - throw new Error(`${context}: unexpected effect choice`); + const bounds = choiceBounds[action]; + if (bounds && (choice < bounds[0] || choice > bounds[1])) throw new Error(`${context}: unsupported effect choice`); + } else if (encoded !== -1) throw new Error(`${context}: unexpected effect choice`); assertInputMetadata(step, action, encoded, chosen, context); const rawState = record(step.s, context); - if (Object.keys(rawState).length !== fields.length + 5) - throw new Error(`${context}: unexpected model fields`); - const integers = Object.fromEntries(fields.map((field) => [field, itfInteger(rawState[field], `${context} ${field}`)])); - const state = { ...integers, calls: [], sources: [], readStates: [], readBudgets: [], events: [] }; - for (const field of ["calls", "sources", "readStates", "readBudgets"]) { - const values = rawState[field]; - if (!Array.isArray(values)) - throw new Error(`${context}: missing ${field} list`); - state[field] = values.map((value) => itfInteger(value, `${context} ${field}`)); - if (state[field].some((value) => (field === "readBudgets" ? ![10, 20, 30, 50].includes(value) : value > (field === "calls" ? 3 : 2)))) { - throw new Error(`${context}: unsupported ${field} code`); - } - } - if (!Array.isArray(rawState.events)) - throw new Error(`${context}: missing event observations`); - state.events = rawState.events.map(raw => { - const value = record(raw, context); - if (Object.keys(value).sort().join() !== "amount,detail,event,location" || typeof value.event !== "string" || - !eventNames.some(event => event === value.event) || typeof value.location !== "string" || typeof value.detail !== "string") { - throw new Error(`${context}: invalid event observation`); - } - const amount = itfInteger(value.amount, context); - return { event: value.event, location: value.location, detail: value.detail, amount: timedEvents.has(value.event) ? amount / 1000 : amount }; - }); - return { action: action, ...(choice === undefined ? {} : { choice }), state }; + let expected; + if (Object.hasOwn(rawState, "o")) expected = composedExpected(rawState, context); + else { const parsed = retiredExpected(rawState, context, previous); previous = { ...parsed, readAborts: parsed.expected.readAborts }; expected = parsed.expected; } + return { action, choice: encoded, expected }; }); return { path, steps }; } +// The explicit-input descriptor the corpus differential replays this profile +// with: the actions and their choice domains, over the record above. +export const effectsDescriptor = { explicitInputs: true, parseTrace, + actions: Object.fromEntries(actions.filter(name => name !== "init").map(name => [name, + chosenActions.has(name) ? { choices: choiceBounds[name] ? Array.from({ length: choiceBounds[name][1] - choiceBounds[name][0] + 1 }, (_, i) => choiceBounds[name][0] + i) : "index" } : {}])) }; // Concrete JSON encodings of the model's semantic reply classes. Timestamps // come from the controlled external clock, never expected model state. function adapterReply(choice, stamp) { @@ -113,20 +154,16 @@ export function inputsFor(step, observed, environment) { function projectEvents(observed) { return observed.events.filter(event => event.event !== "readContext" && event.event !== "readAbort").map(event => { if (event.event === "writeDispatch") { - if (typeof event.index !== "number") - throw new Error("Missing actual write index"); + if (typeof event.index !== "number") throw new Error("Missing actual write index"); return { event: event.event, location: "remote", detail: "", amount: event.index }; } assertSubset(event, { cacheNamespace: "urn", keyType: "id" }); - if (event.event !== "invalidation") - assert.deepEqual(event.useCase, "Behavior"); - if (event.event === "error") - assert.deepEqual(event.inFallback, event.error === "fallback"); + if (event.event !== "invalidation") assert.deepEqual(event.useCase, "Behavior"); + if (event.event === "error") assert.deepEqual(event.inFallback, event.error === "fallback"); const location = event.layer ?? event.scope; const detail = event.reason ?? event.error ?? event.operation ?? ""; const amount = event.seconds ?? event.bytes ?? 0; - if (typeof location !== "string" || typeof detail !== "string" || typeof amount !== "number") - throw new Error("Invalid actual diagnostic observation"); + if (typeof location !== "string" || typeof detail !== "string" || typeof amount !== "number") throw new Error("Invalid actual diagnostic observation"); return { event: event.event, location, detail, amount }; }); } @@ -145,5 +182,4 @@ export function fixtureFor(mode) { return { policy: { ttlSec: { remote: 60 }, ...(mode >= 2 ? { remoteReadTimeoutMs: 10 } : {}) }, tracked: mode !== 5, readTimeoutMs: mode === 0 ? "default" : 20, observe: ["readContext", "readAbort", ...eventNames] }; } -export function expectedObservations(trace) { const aborted = []; return trace.steps.map((step, index) => { const previous = trace.steps[index - 1]?.state; if (previous !== undefined && step.state.readAborts > previous.readAborts) - aborted.push(previous.activeRead); return { ...Object.fromEntries(observedFields.map(field => [field, step.state[field]])), calls: step.state.calls, events: step.state.events, writeTtls: Array(step.state.writes).fill(60000), readAborts: [...aborted], readContexts: step.state.readBudgets.map((timeoutMs, index) => ({ index, timeoutMs, aborted: false })) }; }); } +export function expectedObservations(trace) { return trace.steps.map(step => step.expected); } diff --git a/formal/replay/local-clock.d.mts b/formal/replay/local-clock.d.mts index 5d26c897..17f7054b 100644 --- a/formal/replay/local-clock.d.mts +++ b/formal/replay/local-clock.d.mts @@ -6,3 +6,4 @@ export function parseLocalClockTrace(raw:unknown,path:string):LocalClockTrace; export function localClockInput(action:string,choice:number):Array<{op:string;instance?:number;ticks?:number;offered?:number}>; export function assertLocalClockObservation(step:LocalClockStep,observed:Projected):void; export const localClockActions:string[]; +export const localClockDescriptor:{explicitInputs:true;actions:Record;actionBindings:Record}; diff --git a/formal/replay/local-clock.mjs b/formal/replay/local-clock.mjs index 012e8863..96940f7a 100644 --- a/formal/replay/local-clock.mjs +++ b/formal/replay/local-clock.mjs @@ -59,3 +59,11 @@ export function assertLocalClockObservation(step, observed) { assert.deepEqual(observed, step.expected); } export const localClockActions = Object.keys(choices).filter(action => action !== "init"); +// The explicit-input descriptor the corpus differential replays this profile +// with: the same action choices, over the shared observation record. The +// binding names the public wrapper a reference text declares where `call` +// is its parametrized action (the text before the wrapper was renamed), so a +// history replays through that text too. +export const localClockDescriptor = { explicitInputs: true, + actions: Object.fromEntries(localClockActions.map(action => [action, { choices: choices[action] }])), + actionBindings: { call: "callCache" } }; diff --git a/formal/replay/protocol.schema.json b/formal/replay/protocol.schema.json index 71b39744..90919eaa 100644 --- a/formal/replay/protocol.schema.json +++ b/formal/replay/protocol.schema.json @@ -142,6 +142,10 @@ "type": "object", "description": "The driver's complete current observation, encoded per profile: $defs/behaviorObservation for every feature profile and for effects, $defs/coreObservation for core, $defs/localClockObservation for local-clock. The prepare result names the session's definition in `observation`; ports should validate each record against that definition locally before sending it, so a shape defect is attributed to the driver without a coordinator round trip. The coordinator validates it again before any comparison and reports a violation as 'Malformed replay observation: at ', so a shape error is an infrastructure failure, never an observation mismatch." }, + "receipt": { + "type": "object", + "description": "The driver's settlement receipt for this observation, required on every observe of a behavior session (feature profiles and effects) and never sent on core and local-clock sessions, whose commands are awaited request/response. It is validated against $defs/settlementReceipt after `observed` passes its shape check; a missing, unexpected or malformed receipt is reported as 'Missing settlement receipt', 'Unexpected settlement receipt' or 'Malformed settlement receipt at receipt.', all infrastructure errors. Ports should validate it locally against the definition the prepare result names before sending." + }, "environment": { "type": "object", "properties": { @@ -230,6 +234,13 @@ ], "description": "The $defs definition every observation of this session must satisfy: behaviorObservation for feature profiles and effects, coreObservation for core, localClockObservation for local-clock. Ports validate each observed record against it locally before sending." }, + "receipt": { + "enum": [ + "settlementReceipt", + null + ], + "description": "The $defs definition of the settlement receipt every observe of this session must carry: settlementReceipt for feature profiles and effects, whose drivers run a controlled executor; null for core and local-clock, whose commands are awaited request/response and which never send one. Ports validate each receipt against it locally before sending." + }, "fixture": { "$ref": "#/$defs/fixture" }, @@ -254,6 +265,7 @@ "session", "settlement", "observation", + "receipt", "fixture", "setup", "actions", @@ -2014,6 +2026,81 @@ ], "additionalProperties": false }, + "settlementReceipt": { + "type": "object", + "description": "Settlement receipt of a behavior driver (feature profiles and effects), sent as the `receipt` member of every observe request of the session and describing the same instant as `observed`. The coordinator checks it before any observation comparison, in this order: `runnable` must be 0 (R2); `elapsedMs` must equal the sum of every advance command's ms plus observed.loaders x fixture.sourceWorkMs plus observed.comparisons x fixture.comparisonMs (R3); environment.wallMs must equal 1788868800000 plus every advance and shiftWall ms plus the same fixture work (R4); `held` must equal the gates the schedule leaves open (R5). A failed rule is reported as 'Settlement violation: ...', an infrastructure error without comparison markers, never an observation mismatch. Core sessions carry no receipt and are held to R4 alone, with advanceWall as their clock command; the local-clock driver reports the real process clock, which no rule constrains. Timer-delivery policy is enforced by the next observation, not by the receipt (R6).", + "properties": { + "elapsedMs": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991, + "description": "The driver's controlled monotonic clock in whole milliseconds when the reported observation was taken; moved only by advance commands and by the sourceWorkMs/comparisonMs fixture work, never by settling." + }, + "runnable": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991, + "description": "What one zero-time verification drain of the driver's controlled executor found after the reported snapshot: 0 when nothing ran and no observation field or pending-timer count changed; otherwise the driver's count of what it found (Node: 1 if the observation changed plus the absolute fake-timer count delta; Go: deferred functions dispatched plus 1 if the observation changed)." + }, + "held": { + "type": "object", + "description": "Controlled external gates still unsettled at the reported snapshot: loaders not yet resolved or rejected, held adapter operations per kind that no release command settled (gates the library abandons, such as deadline-aborted reads, stay registered until their release), and scopes opened but not closed, setup included.", + "properties": { + "loaders": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "reads": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "writes": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "dumps": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "loads": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "policies": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + }, + "scopes": { + "type": "integer", + "minimum": 0, + "maximum": 9007199254740991 + } + }, + "required": [ + "loaders", + "reads", + "writes", + "dumps", + "loads", + "policies", + "scopes" + ], + "additionalProperties": false + } + }, + "required": [ + "elapsedMs", + "runnable", + "held" + ], + "additionalProperties": false + }, "behaviorFixture": { "type": "object", "description": "Construction-time configuration of the behavior driver. Omitted fields take the driver default named in each description; sentinel strings select the library default instead of the driver default.", diff --git a/formal/replay/settlement.d.mts b/formal/replay/settlement.d.mts new file mode 100644 index 00000000..f6472a27 --- /dev/null +++ b/formal/replay/settlement.d.mts @@ -0,0 +1,42 @@ +/** protocol.schema.json definition every behavior driver's receipt must satisfy. */ +export const receiptDefinition: "settlementReceipt"; +/** Matches the rule texts `SettlementLedger.assert` produces; the mutation runners classify violations by it. */ +export const settlementViolationPattern: RegExp; +/** 2026-09-08T12:00:00.000Z: where every controlled driver starts its wall clock. */ +export const wallEpochMs: 1788868800000; + +export interface HeldGates { + loaders: number; + reads: number; + writes: number; + dumps: number; + loads: number; + policies: number; + scopes: number; +} + +/** What a behavior driver attests about the instant its observation was taken. */ +export interface SettlementReceipt { + /** The driver's controlled monotonic clock, in whole milliseconds. */ + elapsedMs: number; + /** What one zero-time verification drain after the snapshot found; 0 means settled. */ + runnable: number; + /** Controlled external gates still unsettled at the snapshot. */ + held: HeldGates; +} + +export class SettlementLedger { + /** Only the two elapsed-time sentinels of the fixture are read. */ + constructor(fixture: { sourceWorkMs?: number; comparisonMs?: number } | Record, + setup?: ReadonlyArray>); + /** Record the commands issued since the previous observation. */ + issue(commands: ReadonlyArray>): void; + /** The receipt the schedule requires for this observation (runnable is always 0). */ + expected(observed: unknown): SettlementReceipt; + /** The wall clock the schedule requires for this observation. */ + wallMs(observed: unknown): number; + /** Throws `Settlement violation: ...` for the first rule (R2 to R5) the receipt breaks. */ + assert(receipt: SettlementReceipt, observed: unknown, environment: { wallMs: number }): void; + /** R4 alone: throws `Settlement violation: wall clock ...` when the reported wall clock leaves the schedule. */ + assertWallClock(observed: unknown, environment: { wallMs: number }): void; +} diff --git a/formal/replay/settlement.mjs b/formal/replay/settlement.mjs new file mode 100644 index 00000000..19acfcb8 --- /dev/null +++ b/formal/replay/settlement.mjs @@ -0,0 +1,150 @@ +// The causally-ready-v1 settlement contract, made checkable. A behavior driver +// attaches a receipt to every observation: its controlled monotonic clock, what +// one zero-time verification drain found after the reported snapshot, and the +// external gates it still holds. The ledger below derives what the schedule +// requires from the commands the coordinator issued plus the driver's own public +// counters, so every rule is a driver-integrity check: a library fault that +// starts an extra source moves the counters, the ledger and the driver's clock +// together, passes here, and then fails the observation comparison where the +// mutation lanes credit it. Violations carry no comparison markers. The core +// driver attaches no receipt: its commands are awaited request/response, so +// its ledger holds it to the wall-clock rule alone. +export const receiptDefinition = "settlementReceipt"; + +// Every controlled driver starts its wall clock at 2026-09-08T12:00:00.000Z. +export const wallEpochMs = 1788868800000; + +// Held effects by kind: the counter the driver increments before parking on the +// gate, the fault flag that parks it, and the receipt member that reports it. +const kinds = { + read: { counter: "reads", hold: "holdReads", held: "reads" }, + write: { counter: "writes", hold: "holdWrites", held: "writes" }, + dump: { counter: "dumps", hold: "holdDumps", held: "dumps" }, + load: { counter: "loads", hold: "holdLoads", held: "loads" }, + policy: { counter: "policyCalls", hold: "holdPolicies", held: "policies" }, +}; + +// Receipt member to the gate kind named in an R5 violation, in report order. +const gateNames = { loaders: "loader", reads: "read", writes: "write", dumps: "dump", loads: "load", policies: "policy", scopes: "scope" }; + +function violation(message) { + return new Error(`Settlement violation: ${message}`); +} + +// The four rule texts assert() produces, for the mutation runners: a failure +// that matches is the driver failing its own contract and is recorded against +// the mutant, never read as a detection. A test that quotes the phrase in an +// expectation prints it into its failure message; matching the rule texts, +// not the phrase, keeps such a failure a detection. Kept beside the texts so +// a new or reworded rule changes both together. +export const settlementViolationPattern = /Settlement violation: (?:\d+ runnable task\(s\) at observation|monotonic clock at|wall clock at|\w+ gates held)/; + +export class SettlementLedger { + #fixture; + #hold = { read: false, write: false, dump: false, load: false, policy: false }; + #heldStarted = { read: 0, write: 0, dump: 0, load: 0, policy: 0 }; + #released = { read: 0, write: 0, dump: 0, load: 0, policy: 0 }; + #previous = { reads: 0, writes: 0, dumps: 0, loads: 0, policyCalls: 0 }; + #settled = 0; + #advanceMs = 0; + #shiftWallMs = 0; + #openScopes = 0; + // Commands issued since the previous observation that can start an effect. + #effectsSinceObservation = 0; + + constructor(fixture, setup = []) { + this.#fixture = fixture; + this.issue(setup); + } + + // Record the commands issued since the previous observation. + issue(commands) { + for (const command of commands) { + if (command.op === "faults") { + for (const [kind, { hold }] of Object.entries(kinds)) { + if (!Object.hasOwn(command.value, hold) || command.value[hold] === this.#hold[kind]) continue; + // R5 attributes every effect started since the previous observation + // by the hold flags in force at that observation, while both drivers + // decide holding when the effect starts. The two agree only while a + // hold change precedes every effect-starting command of its interval, + // so any other schedule is refused as the ledger's own limit, not as + // a violation by the driver. + if (this.#effectsSinceObservation > 0) { + throw new Error(`Settlement ledger cannot attribute held gates: ${hold} changes after an effect-starting command in one observation interval`); + } + this.#hold[kind] = command.value[hold]; + } + continue; + } + // Seeding the remote and opening a scope start no gated effect. + if (command.op !== "seed" && command.op !== "openScope") this.#effectsSinceObservation++; + switch (command.op) { + case "release": this.#released[command.effect]++; break; + case "resolve": case "reject": this.#settled++; break; + case "advance": this.#advanceMs += command.ms; break; + // Core's advanceWall moves only the wall clock: that driver has no + // controlled monotonic clock to report. + case "shiftWall": case "advanceWall": this.#shiftWallMs += command.ms; break; + case "openScope": this.#openScopes++; break; + case "closeScope": this.#openScopes--; break; + default: break; + } + } + } + + // The receipt the schedule requires for an observation. Effects started since + // the previous observation are held when their kind's hold flag is on; the + // driver's counters are the only observation fields read. Calling this twice + // for the same observation is harmless: the second call sees no new starts. + expected(observed) { + const held = { loaders: observed.loaders - this.#settled, scopes: this.#openScopes }; + for (const [kind, { counter, held: member }] of Object.entries(kinds)) { + const started = observed[counter] - this.#previous[counter]; + if (this.#hold[kind]) this.#heldStarted[kind] += started; + this.#previous[counter] = observed[counter]; + held[member] = this.#heldStarted[kind] - this.#released[kind]; + } + this.#effectsSinceObservation = 0; + return { elapsedMs: this.#advanceMs + this.#workMs(observed), runnable: 0, held }; + } + + // The wall clock the schedule requires: the epoch plus every advance and + // wall shift, plus the fixture work the driver consumes inside callbacks. + wallMs(observed) { + return wallEpochMs + this.#advanceMs + this.#shiftWallMs + this.#workMs(observed); + } + + // Check a driver's receipt and reported wall clock against the schedule, in + // the order R2 (quiescence), R3 (monotonic clock), R4 (wall clock), R5 (held + // gates). Reported values enter the message only as the numbers compared. + assert(receipt, observed, environment) { + const required = this.expected(observed); + if (receipt.runnable !== 0) throw violation(`${receipt.runnable} runnable task(s) at observation`); + if (receipt.elapsedMs !== required.elapsedMs) { + throw violation(`monotonic clock at ${receipt.elapsedMs} ms, schedule requires ${required.elapsedMs} ms`); + } + this.assertWallClock(observed, environment); + for (const [member, gate] of Object.entries(gateNames)) { + if (receipt.held[member] !== required.held[member]) { + throw violation(`${gate} gates held ${receipt.held[member]}, schedule requires ${required.held[member]}`); + } + } + } + + // R4 alone, for a session that carries no receipt but controls its wall + // clock (core). + assertWallClock(observed, environment) { + const wallMs = this.wallMs(observed); + if (environment.wallMs !== wallMs) throw violation(`wall clock at ${environment.wallMs} ms, schedule requires ${wallMs} ms`); + } + + // Elapsed time the two fixture sentinels consume inside callbacks. Only a + // fixture that names a sentinel reads the matching observation counter, so + // the core fixture `{}` requires no work of a core observation. + #workMs(observed) { + let ms = 0; + if (this.#fixture.sourceWorkMs) ms += observed.loaders * this.#fixture.sourceWorkMs; + if (this.#fixture.comparisonMs) ms += observed.comparisons * this.#fixture.comparisonMs; + return ms; + } +} diff --git a/formal/replay/witnesses/admission.mjs b/formal/replay/witnesses/admission.mjs index a94300f6..ebeda095 100644 --- a/formal/replay/witnesses/admission.mjs +++ b/formal/replay/witnesses/admission.mjs @@ -1,17 +1,22 @@ import { createWitnessRecorder } from "./recorder.mjs"; +import { fidelityBinding } from "./fidelity.mjs"; // Shadow-job admission witnesses use declared inputs and public observations // only. Job bookkeeping below mirrors the observed effect indices; it never -// reads private model admissions. +// reads private model admissions. Wherever a history still carries the +// model's private predictions, the fidelity check compares the shadow after +// every step with the composed layout (dialcache-admission-conformance.qnt +// over the kernel library): the live jobs by loader ordinal with their +// identity, phase, expiry and timeout, each pending held read and decode as a +// caller flight's (its identity, captured selection and callers) or a job's, +// the flights registered for sharing, and the clock. export function admissionWitnesses(histories, recorder = createWitnessRecorder()) { - for (const { path, steps } of histories) { + for (const { path, steps, predictions } of histories) { recorder.enter(path); - let now = 0; let overlay = 0; - const registered = new Map(); - const jobs = new Map(); - const reads = new Map(); - const loads = new Map(); + const shadow = { now: 0, registered: new Map(), jobs: new Map(), reads: new Map(), loads: new Map() }; + const { registered, jobs, reads, loads } = shadow; + const shadows = []; const released = new Set(); const instance = identity => Math.floor(identity / 3); const finish = index => { @@ -24,12 +29,12 @@ export function admissionWitnesses(histories, recorder = createWitnessRecorder() recorder.credit(`action:${step.action}`); const o = step.expected; const previous = steps[i - 1]?.expected; - if (previous === undefined) continue; + if (previous === undefined) { shadows.push(structuredClone(shadow)); continue; } for (const outcome of o.shadow) recorder.credit(`outcome:${outcome}`); if (step.action === "policy") overlay = step.choice; if (step.action === "advance") { - now += step.choice; - for (const job of jobs.values()) if (now >= job.deadline) job.timedOut = true; + shadow.now += step.choice; + for (const job of jobs.values()) if (shadow.now >= job.deadline) job.timedOut = true; } if (step.action === "beginCall") { if (o.reads > previous.reads) { @@ -63,7 +68,7 @@ export function admissionWitnesses(histories, recorder = createWitnessRecorder() if ([...jobs.values()].filter(job => instance(job.identity) !== instance(flight.identity)).length === 2) recorder.credit("other-instance-full-admission"); if ([...jobs.values()].some(job => job.identity % 3 === flight.identity % 3)) recorder.credit("per-instance-deduplication"); if (released.has(flight.identity)) recorder.credit("readmission-after-timeout-drains"); - jobs.set(o.loaders - 1, { identity: flight.identity, phase: "source", deadline: now + 10, timedOut: false }); + jobs.set(o.loaders - 1, { identity: flight.identity, phase: "source", deadline: shadow.now + 10, timedOut: false }); } else if (o.shadow.length > previous.shadow.length) { if (duplicate && active.length < 2) recorder.credit("duplicate-with-free-capacity"); if (!duplicate && active.length === 2) recorder.credit("full-capacity-drop"); @@ -87,7 +92,67 @@ export function admissionWitnesses(histories, recorder = createWitnessRecorder() loads.set(o.loads - 1, { job: loader }); } else finish(loader); } + shadows.push(structuredClone(shadow)); } + if (carriesPrivateState(predictions)) checkFidelity(shadows, predictions, path); } return recorder.labels(); } + +// The composed layout read back in the shadow's terms. The registry is +// pending-only, so every job is live; a job is keyed by the loader ordinal of +// the detached flight it runs over, its phase is the held lifecycle's (waiting +// for its source, decoding, confirming) and its deadline (keyed by its source) +// is compared while the budget is pending. A held read or decode over a +// source with a job confirming or decoding is that job's; any other is a +// caller flight's, whose identity is its source's, whose selection is the one +// captured for the flight and whose callers are the owners the registry +// names. A flight registered for sharing is the process registry's entry for +// its identity. +const KEYS = 3, WAITING_SOURCE = 1, DECODING = 2, CONFIRMING = 3, JOB_DEADLINE = 2; +const PHASES = new Map([[WAITING_SOURCE, "source"], [DECODING, "decode"], [CONFIRMING, "confirmation"]]); +const layoutFields = ["now", "sources", "owners", "processFlights", "jobs", "deadlines", "selected", "loaders", "reads", "loads"]; +function modelView(state, context) { + const { sources, owners, processFlights, jobs, deadlines, selected, loaders, reads, loads } = state; + const identityOf = flight => sources[flight].instance * KEYS + sources[flight].key; + const flightView = flight => ({ identity: identityOf(flight), selected: selected.includes(flight), callers: owners.flatMap((owned, caller) => owned === flight ? [caller] : []) }); + const ordinalOf = job => { + const ordinal = loaders.indexOf(job.source); + if (ordinal < 0) throw new Error(`${context}: a job runs over flight ${job.source}, which no loader maps to`); + return ordinal; + }; + const effectView = (flight, phase) => { + const job = jobs.find(candidate => candidate.source === flight && candidate.phase === phase); + return job !== undefined ? { job: ordinalOf(job) } : { flight: flightView(flight) }; + }; + const jobViews = new Map(); + for (const job of jobs) { + const phase = PHASES.get(job.phase); + if (phase === undefined) throw new Error(`${context}: the job over flight ${job.source} is in phase ${job.phase}, which the held lifecycle never takes`); + const due = deadlines.find(deadline => deadline.kind === JOB_DEADLINE && deadline.index === job.source); + jobViews.set(ordinalOf(job), { identity: identityOf(job.source), phase, timedOut: job.timedOut, ...(due !== undefined ? { deadline: due.at } : {}) }); + } + return { + now: state.now, + registered: new Map(processFlights.flatMap((flight, identity) => flight >= 0 ? [[identity, flightView(flight)]] : [])), + jobs: jobViews, + reads: new Map(reads.map(held => [held.read, effectView(held.flight, CONFIRMING)])), + loads: new Map(loads.map(held => [held.load, effectView(held.flight, DECODING)])), + }; +} +// The shadow projected to the fields the layout carries: a job's deadline is +// compared only while the model still holds its budget. +function shadowView(shadow, model) { + const flight = ({ identity, selected, callers }) => ({ identity, selected, callers }); + const effect = held => "job" in held ? { job: held.job } : { flight: flight(held.flight) }; + const project = entries => new Map([...entries].map(([key, value]) => [key, effect(value)])); + return { + now: shadow.now, + registered: new Map([...shadow.registered].map(([identity, held]) => [identity, flight(held)])), + jobs: new Map([...shadow.jobs].map(([ordinal, job]) => [ordinal, Object.fromEntries(Object.keys(model.jobs.get(ordinal) ?? { identity: 0, phase: 0, timedOut: 0 }).map(key => [key, job[key]]))])), + reads: project(shadow.reads), + loads: project(shadow.loads), + }; +} +const { carriesPrivateState, checkFidelity } = fidelityBinding({ publicChannels: ["o"], layoutFields, + view: (shadow, state, context) => { const model = modelView(state, context); return [shadowView(shadow, model), model]; } }); diff --git a/formal/replay/witnesses/effects-authority.d.mts b/formal/replay/witnesses/effects-authority.d.mts index 731a87e2..1b7a91a1 100644 --- a/formal/replay/witnesses/effects-authority.d.mts +++ b/formal/replay/witnesses/effects-authority.d.mts @@ -1,20 +1,11 @@ +import type { Expected, Trace } from "../effects.mjs"; import type { WitnessRecorder } from "./recorder.mjs"; -import type { RawHistory } from "./trace.mjs"; -export interface EffectsPublicState { - calls: number[]; - reads: number; - loaders: number; - loads: number; - dumps: number; - writes: number; - events: Array<{ event: string; location: string; detail: string; amount: number }>; -} export interface EffectsAuthorityRule { name: string; regression: string; commands: string[]; - consequence: (state: EffectsPublicState) => boolean; + consequence: (expected: Expected) => boolean; } export const effectsAuthorityRules: readonly EffectsAuthorityRule[]; -export function effectsAuthorityWitnesses(histories: readonly RawHistory[], recorder?: WitnessRecorder): Set; +export function effectsAuthorityWitnesses(histories: readonly Trace[], recorder?: WitnessRecorder): Set; diff --git a/formal/replay/witnesses/effects-authority.mjs b/formal/replay/witnesses/effects-authority.mjs index 22f35987..7c34f711 100644 --- a/formal/replay/witnesses/effects-authority.mjs +++ b/formal/replay/witnesses/effects-authority.mjs @@ -1,5 +1,4 @@ -import { itfInteger, record } from "../itf.mjs"; -import { explicitInput, witnessCommand as cmd } from "./trace.mjs"; +import { witnessCommand as cmd } from "./trace.mjs"; import { createWitnessRecorder } from "./recorder.mjs"; const init = cmd("init", 2), begin = cmd("beginCall"), read = cmd("releaseRead", 0); @@ -7,12 +6,14 @@ const resolve = cmd("resolveLoader", 0), reject = cmd("rejectLoader", 0); const load = cmd("releaseLoad"), dump = cmd("releaseDump"), write = cmd("releaseWrite"); const fault = cmd("observerFault", 1); const same = (actual, expected) => JSON.stringify(actual) === JSON.stringify(expected); -const hit = s => same(s.calls, [1]) && s.reads === 1 && s.loads === 1 && s.loaders === 0 && s.writes === 0; -const publishedAndRead = s => same(s.calls, [1, 1]) && s.reads === 2 && s.loads === 1 && s.loaders === 1 && s.dumps === 1 && s.writes === 1; +const hit = o => same(o.calls, [1]) && o.reads === 1 && o.loads === 1 && o.loaders === 0 && o.writes === 0; +const publishedAndRead = o => same(o.calls, [1, 1]) && o.reads === 2 && o.loads === 1 && o.loaders === 1 && o.dumps === 1 && o.writes === 1; // Inputs identify a deliberately narrow distinguishing schedule. Credit then -// depends only on observations asserted by every driver: no phase, private -// timestamp, stored value, or model authorization predicate enters these rules. +// depends only on the observation asserted by every driver (the parsed +// history's `expected`: counters, caller codes and events in callback +// seconds); no phase, private timestamp, stored value or model authorization +// predicate enters these rules. export const effectsAuthorityRules = [ { name: "observer-failure-hit", regression: "observerFailuresCannotPreventCacheHitTest", commands: [init, fault, cmd("seedRemote"), begin, read, load], consequence: hit }, @@ -20,18 +21,18 @@ export const effectsAuthorityRules = [ commands: [init, fault, begin, read, resolve, dump, write, begin, cmd("releaseRead", 1), load], consequence: publishedAndRead }, { name: "observer-failure-source-error", regression: "observerFailuresCannotReplaceSourceErrorTest", commands: [init, fault, begin, cmd("failRead", 0), reject], - consequence: s => same(s.calls, [2]) && s.reads === 1 && s.loaders === 1 && s.loads === 0 && s.writes === 0 }, + consequence: o => same(o.calls, [2]) && o.reads === 1 && o.loaders === 1 && o.loads === 0 && o.writes === 0 }, { name: "write-stamp-after-serialization", regression: "writeStampAfterSerializationClearsInterveningFenceTest", commands: [init, begin, read, resolve, cmd("invalidate"), cmd("tick"), dump, write, begin, cmd("releaseRead", 1), load], consequence: publishedAndRead }, { name: "future-offset-observing-layer-positive-seconds", regression: "futureFrameReportsPositiveObservingOffsetTest", commands: [init, cmd("seedRemote"), cmd("rollbackWall"), begin, read, reject], - consequence: s => same(s.calls, [2]) && s.loads === 0 && s.loaders === 1 && same( - s.events.filter(e => e.event === "futureOffset"), [{ event: "futureOffset", location: "remote", detail: "", amount: 1 }]) }, + consequence: o => same(o.calls, [2]) && o.loads === 0 && o.loaders === 1 && same( + o.events.filter(e => e.event === "futureOffset"), [{ event: "futureOffset", location: "remote", detail: "", amount: 1 }]) }, { name: "shared-failure-preserves-leader-and-follower-trail", regression: "coalescedFailureKeepsOneLeaderAndFollowerTrailTest", commands: [init, begin, begin, cmd("failRead", 0), reject], - consequence: s => same(s.calls, [2, 2]) && s.reads === 1 && s.loaders === 1 && s.loads === 0 && s.writes === 0 && same( - s.events.filter(e => ["request", "coalesced", "error"].includes(e.event)), [ + consequence: o => same(o.calls, [2, 2]) && o.reads === 1 && o.loaders === 1 && o.loads === 0 && o.writes === 0 && same( + o.events.filter(e => ["request", "coalesced", "error"].includes(e.event)), [ { event: "request", location: "remote", detail: "", amount: 0 }, { event: "coalesced", location: "process", detail: "", amount: 0 }, { event: "error", location: "remote", detail: "cache_read", amount: 0 }, @@ -39,32 +40,14 @@ export const effectsAuthorityRules = [ ]) }, ]; -// Histories carry their raw ITF states; the public observations are read and -// checked here. +// Over the parsed histories: the recorded inputs and the asserted observations. export function effectsAuthorityWitnesses(histories, recorder = createWitnessRecorder()) { - for (const { path, states: rawStates } of histories) { + for (const { path, steps } of histories) { recorder.enter(path); - const commands = []; - const states = rawStates.map(rawState => { - const state = record(rawState, path), s = record(state.s, path); - const input = explicitInput(state, path); - commands.push(cmd(input.name, input.choice)); - if (!Array.isArray(s.calls) || !Array.isArray(s.events)) throw new Error("Missing effects public observations"); - return { - ...Object.fromEntries(["reads", "loaders", "loads", "dumps", "writes"].map(key => [key, itfInteger(s[key], path)])), - calls: s.calls.map(value => itfInteger(value, path)), - events: s.events.map(raw => { - const event = record(raw, path); - if (typeof event.event !== "string" || typeof event.location !== "string" || typeof event.detail !== "string") throw new Error("Invalid effects public diagnostic"); - const ms = itfInteger(event.amount, path); - return { event: event.event, location: event.location, detail: event.detail, - amount: ["get", "fallback", "serialization", "futureOffset"].includes(event.event) ? ms / 1000 : ms }; - }), - }; - }); + const commands = steps.map(step => cmd(step.action, step.choice)); for (const rule of effectsAuthorityRules) { if (commands.length >= rule.commands.length && rule.commands.every((value, index) => commands[index] === value) - && rule.consequence(states[rule.commands.length - 1])) recorder.credit(rule.name, rule.commands.length - 1); + && rule.consequence(steps[rule.commands.length - 1].expected)) recorder.credit(rule.name, rule.commands.length - 1); } } return recorder.labels(); diff --git a/formal/replay/witnesses/effects.d.mts b/formal/replay/witnesses/effects.d.mts index 3387ce1b..d292f245 100644 --- a/formal/replay/witnesses/effects.d.mts +++ b/formal/replay/witnesses/effects.d.mts @@ -1,3 +1,6 @@ import type { Trace } from "../effects.mjs"; import type { WitnessRecorder } from "./recorder.mjs"; -export function effectsWitnesses(traces: readonly Trace[], recorder?: WitnessRecorder): Set; +import type { PrivateHistory } from "./trace.mjs"; +// A parsed effects history; one that still carries the model's private predictions is also bound by the fidelity check. +export type EffectsWitnessHistory = Trace & Partial>; +export function effectsWitnesses(traces: readonly EffectsWitnessHistory[], recorder?: WitnessRecorder): Set; diff --git a/formal/replay/witnesses/effects.mjs b/formal/replay/witnesses/effects.mjs index 1c8f42fc..07a6ed3c 100644 --- a/formal/replay/witnesses/effects.mjs +++ b/formal/replay/witnesses/effects.mjs @@ -1,101 +1,229 @@ import { createWitnessRecorder } from "./recorder.mjs"; +import { fidelityBinding } from "./fidelity.mjs"; + +// The effects witnesses are decided from the recorded inputs and the asserted +// observation alone (the counters, caller codes, events, read contexts, read +// aborts and write TTLs the version-2 contract asserts); no rule reads the +// model's private state. What a rule needs beyond the observation deltas is +// shadowed here from the inputs: both clocks (the fixture's origin, tick and +// jumpClock advances, wall rollbacks), the watermark invalidations raise, the +// read budget in force (the fixture's base and the runtime choices), the +// queued reply, and per loader ordinal its start, its deadline and whether it +// is running, abandoned (its deadline delivered) or settled. Which phase a +// history is in is read from the observation (a read dispatched, a decode +// held, a loader started, callers completed, a dump or a write dispatched), +// never re-decided. +// +// The labels that read private fields before this rewrite, and their public +// checkpoints with the same consequence: +// - reply:N, untracked-demotes-fenced-reply, normalized-*: the reply a +// releaseRead consumed shaped the read (the step reported a miss, or held a +// decode, and no read deadline error); the fixture's tracking is the init +// choice; a fenced reply's class is the input. +// - normalized-fence-blocks-publication / -fences-refill:N: the resolve of the +// flight that miss started completed its callers with a value and dispatched +// no dump (refill was allowed: the read completed); -allows-refill:N: it +// dispatched one. +// - follower-keeps-read-budget: a beginCall that dispatched no read while the +// budget in force differs from the pending read's context budget. +// - abandoned-overlap: a loader whose deadline a tick delivered is unsettled +// while another loader starts. +// - read-timeout-starts-source, read-late-settlement, abandoned-read-settles: +// readAborts grew (at a tick, or at a late reply); a read settles that +// readAborts already lists. +// - decode-outlives-deadline, acquired-hit-survives-invalidation, +// successful-read-has-no-late-cancel: the shadow clocks at the read reply +// that held the decode and at its release; the shadow watermark. +// - failed-read-no-refill, failed-decode-refills: the read that started the +// loader failed or aborted; a failLoad preceded the loader. +// - serialize-outlives-deadline, publication-after-deadline, late-*: the +// shadow deadline of the loader whose flight the dump or write belongs to. +// - late-rejection-does-not-repeat-error: a rejectLoader of an abandoned +// ordinal adds no error event and completes no caller. +// - delayed-fenced-write: the wall at the dump release that dispatched the +// write is at or below the shadow watermark at the write's release, and a +// later read reply starts a loader. +// - dump-rechecks-fence-after-rollback: a releaseDump that dispatched no write. +// +// The fidelity check (the shared scaffold, fidelity.mjs) binds the shadow to +// the model wherever a history carries the composed layout's private +// predictions: both clocks, the watermark, the queued reply, the drained flags +// and, through the loaders' flights, the sources' recorded outcomes. + +const CLOCK_STEP_MS = 10, WALL_ROLLBACK_MS = 1000, FUTURE_BUFFER_MS = 20, SOURCE_BUDGET_MS = 10; +// The read budget each fixture starts with (library 50, instance 20, +// operation 10, runtime 30, null provider 10, untracked 10), the base a +// runtime reset (choice 0) inherits, and the runtime budgets of choices 1..4. +const INITIAL_BUDGETS = [50, 20, 10, 30, 10, 10], BASE_BUDGETS = [50, 20, 10, 10, 10, 10], RUNTIME_BUDGETS = [0, 10, 20, 30, 50]; +const FENCED_REPLIES = [7, 12, 16], FRAME_REPLY = 15; +const RUNNING = 0, ABANDONED = 1, SETTLED = 2; + +const initialShadow = choice => ({ now: 10000, wall: 100000, watermark: 0, tracked: choice !== 5, base: BASE_BUDGETS[choice], budget: INITIAL_BUDGETS[choice], + reply: 0, replyAt: 0, loaders: [], openRead: undefined, decodeStarted: undefined, acquiredAt: undefined, lastFailedRead: false, failedDecode: false, writeTimestamp: undefined }); +const grew = (o, previous, field) => previous !== undefined && o[field] > previous[field]; +const newEvents = (o, previous) => o.events.slice(previous?.events.length ?? 0); +const completedWithValue = (o, previous) => o.calls.some((value, index) => value === 1 && previous.calls[index] === 0); + +// The shadow after one step: the inputs move the environment, the observation +// says what the flight did. Returns the next shadow and the facts the labels read. +function advanceShadow(before, step, previous, o) { + const s = { ...before, loaders: before.loaders.map(loader => ({ ...loader })) }; + const events = newEvents(o, previous); + const facts = { events }; + const loaderStarted = grew(o, previous, "loaders"); + switch (step.action) { + case "beginCall": { + // A leader's read is open until it settles or its deadline is delivered; + // a follower joins while it is open under the leader's budget. + if (grew(o, previous, "reads")) s.openRead = o.readContexts.length - 1; + else if (s.openRead !== undefined) facts.followerBudgetDiffers = s.budget !== o.readContexts[s.openRead].timeoutMs; + break; + } + case "releaseRead": case "failRead": { + const aborted = o.readAborts.length > previous.readAborts.length; + const alreadyAborted = previous.readAborts.includes(step.choice); + const shaped = !aborted && !alreadyAborted && (events.some(e => e.event === "miss") || grew(o, previous, "loads")); + if (step.action === "releaseRead") { facts.consumed = s.reply; if (shaped) facts.shapedBy = s.reply; s.reply = 0; } + facts.aborted = aborted; facts.alreadyAborted = alreadyAborted; + if (step.choice === s.openRead && (step.action === "releaseRead" || aborted)) s.openRead = undefined; + if (step.action === "failRead" && step.choice === s.openRead && !alreadyAborted) s.openRead = undefined; + if (grew(o, previous, "loads")) { s.decodeStarted = s.now; s.acquiredAt = s.wall; } + if (loaderStarted) { s.lastFailedRead = step.action === "failRead" || aborted; s.failedDecode = false; } + break; + } + case "releaseLoad": case "failLoad": + facts.decodeStarted = s.decodeStarted; facts.acquiredAt = s.acquiredAt; + if (step.action === "failLoad") s.failedDecode = true; + if (loaderStarted && step.action === "failLoad") s.lastFailedRead = false; + break; + case "resolveLoader": case "rejectLoader": { + const loader = s.loaders[step.choice]; + facts.loader = loader === undefined ? undefined : { ...loader }; + if (loader !== undefined) loader.state = SETTLED; + break; + } + case "releaseDump": case "failDump": case "releaseWrite": case "failWrite": + facts.running = s.loaders.find(l => l.state === RUNNING); + if (step.action === "releaseDump" && grew(o, previous, "writes")) s.writeTimestamp = s.wall; + if (step.action === "releaseWrite") facts.writeTimestamp = s.writeTimestamp; + break; + case "tick": { + // A tick delivers a due loader deadline: its flight completes with a + // timeout and the loader is abandoned. + const running = s.loaders.find(l => l.state === RUNNING); + if (running !== undefined && s.now + CLOCK_STEP_MS >= running.deadline && events.some(e => e.event === "fallback")) running.state = ABANDONED; + // A read deadline the tick delivers aborts the open read and starts a + // loader with refill denied. + if (o.readAborts.length > previous.readAborts.length) { s.openRead = undefined; if (loaderStarted) { s.lastFailedRead = true; s.failedDecode = false; } } + s.now += CLOCK_STEP_MS; s.wall += CLOCK_STEP_MS; + break; + } + case "jumpClock": s.now += CLOCK_STEP_MS; s.wall += CLOCK_STEP_MS; break; + case "rollbackWall": s.wall -= WALL_ROLLBACK_MS; break; + case "invalidate": s.watermark = Math.max(s.watermark, s.wall); break; + case "futureFence": s.watermark = Math.max(s.watermark, s.wall + FUTURE_BUFFER_MS); break; + case "adapterReply": s.reply = step.choice; s.replyAt = s.wall; break; + case "readBudgetPolicy": s.budget = step.choice === 0 ? s.base : RUNTIME_BUDGETS[step.choice]; break; + case "seedRemote": case "observerFault": break; + default: throw new Error(`unknown effects action ${step.action}`); + } + // A loader the step started runs from now under the fixed source budget; + // a loader whose flight completed at this step without settling (a late + // reply's deadline error at a read, a tick) is abandoned above. + if (loaderStarted) s.loaders.push({ start: s.now, deadline: s.now + SOURCE_BUDGET_MS, state: RUNNING, failedRead: s.lastFailedRead, failedDecode: s.failedDecode, shapedBy: facts.shapedBy }); + // A loader whose result arrived after its deadline is settled by that + // arrival; its flight completed with a timeout. + if ((step.action === "resolveLoader" || step.action === "rejectLoader") && facts.loader?.state === RUNNING && before.now >= facts.loader.deadline) facts.late = true; + return { shadow: s, facts }; +} + +// The shadow's view beside the model's, in the composed layout's fields: the +// clocks, the watermark, the queued reply (its stamp only while one is +// queued), and per loader whether it drained and whether its flight was +// abandoned (a deadline error recorded while the loader is still pending). +const { carriesPrivateState, checkFidelity } = fidelityBinding({ publicChannels: ["o", "io", "events"], + layoutFields: ["now", "skew", "watermark", "reply", "replyAt", "drained", "sources", "loaders"], + view: (shadow, m) => [ + { now: shadow.now, skew: shadow.wall - shadow.now, watermark: [shadow.watermark], reply: shadow.reply, replyAt: shadow.reply === 0 ? m.replyAt : shadow.replyAt, + drained: shadow.loaders.map(l => l.state === SETTLED), abandoned: shadow.loaders.map(l => l.state === ABANDONED) }, + { now: m.now, skew: m.skew, watermark: m.watermark, reply: m.reply, replyAt: m.replyAt, drained: m.drained, + abandoned: m.drained.map((drained, ordinal) => !drained && m.sources[m.loaders[ordinal]].result === 4) }] }); -// Pending-effect witnesses over the parsed effects trace: declared inputs, -// public counters/results/events and the model's private phase, deadline and -// fence predictions that identify which schedule the corpus actually reached. export function effectsWitnesses(traces, recorder = createWitnessRecorder()) { for (const trace of traces) { recorder.enter(trace.path); - recorder.credit(`fixture:${trace.steps[0].choice}`); - let budgetChanged = false; - let delayedWriteWasFenced = false; - const normalizedFenceSources = new Set(); - const normalizedReplies = new Map(); - let failedRead = false; - let failedDecode = false; - let acquiredAt; - let decodeStarted = 0; + const fixture = trace.steps[0].choice; + recorder.credit(`fixture:${fixture}`); + let shadow = initialShadow(fixture); + const shadows = [shadow]; + let budgetChanged = false, delayedWriteWasFenced = false; for (const [index, step] of trace.steps.entries()) { recorder.step(index); - const s = step.state; - const previous = trace.steps[index - 1]?.state; + const o = step.expected, previous = trace.steps[index - 1]?.expected; if (step.action === "readBudgetPolicy") budgetChanged = true; - if (!budgetChanged && previous?.readBudgets.length === 0 && s.readBudgets.length === 1) { - recorder.credit(`initial-budget:${trace.steps[0].choice}`); - } - for (const event of s.events) { + if (!budgetChanged && previous?.readContexts.length === 0 && o.readContexts.length === 1) recorder.credit(`initial-budget:${fixture}`); + for (const event of o.events) { recorder.credit(`event:${event.event}`); if (event.event === "error" || event.event === "miss") recorder.credit(`${event.event}:${event.detail}`); if (event.event === "serialization" && event.amount > 0) recorder.credit(`duration:${event.detail}`); } - if (step.action === "releaseRead" && previous !== undefined && previous.reply > 0 && previous.readStates[step.choice] === 0 && previous.now < previous.deadline) { - recorder.credit(`reply:${previous.reply}`); - if (previous.tracked === 1 && [7, 12, 16].includes(previous.reply) && s.phase === 1) normalizedFenceSources.add(s.activeLoader); - if (previous.tracked === 0 && previous.reply === 16) recorder.credit("untracked-demotes-fenced-reply"); - if (s.phase === 1) normalizedReplies.set(s.activeLoader, previous.reply); + for (const context of o.readContexts) recorder.credit(`read-budget:${context.timeoutMs}`); + if (index === 0) continue; + const { shadow: next, facts } = advanceShadow(shadow, step, previous, o); + if (step.action === "releaseRead" && facts.shapedBy > 0) { + recorder.credit(`reply:${facts.shapedBy}`); + if (!shadow.tracked && facts.shapedBy === 16) recorder.credit("untracked-demotes-fenced-reply"); } - if (previous !== undefined && step.action === "resolveLoader" && previous.sources[step.choice] === 0 && previous.refill === 1 && previous.now < previous.deadline) { - if (normalizedFenceSources.has(step.choice) && previous.observedFence > previous.wall && s.dumps === previous.dumps) recorder.credit("normalized-fence-blocks-publication"); - const reply = normalizedReplies.get(step.choice); - if (reply !== undefined && s.observedFence === 0 && s.dumps === previous.dumps + 1) { - recorder.credit(`normalized-reply-allows-refill:${reply}`); - } - if (reply !== undefined && s.observedFence > previous.wall && s.dumps === previous.dumps && s.calls.includes(1)) { + if (step.action === "resolveLoader" && facts.loader?.state === RUNNING && !facts.late && !facts.loader.failedRead) { + const reply = facts.loader.shapedBy; + const fenced = reply !== undefined && shadow.tracked && FENCED_REPLIES.includes(reply); + if (fenced && o.dumps === previous.dumps && completedWithValue(o, previous)) { + recorder.credit("normalized-fence-blocks-publication"); recorder.credit(`normalized-reply-fences-refill:${reply}`); } - if (step.choice === previous.activeLoader && previous.calls.filter(value => value === 0).length > 1) { - recorder.credit("source-followers-share-accepted-result"); - } + if (reply !== undefined && !fenced && o.dumps === previous.dumps + 1) recorder.credit(`normalized-reply-allows-refill:${reply}`); + if (previous.calls.filter(value => value === 0).length > 1) recorder.credit("source-followers-share-accepted-result"); } - for (const budget of s.readBudgets) recorder.credit(`read-budget:${budget}`); - if (step.action === "beginCall" && previous?.phase === 3 && previous.readBudget !== previous.readBudgets[previous.activeRead]) recorder.credit("follower-keeps-read-budget"); - if (s.sources.includes(0) && s.sources.includes(1)) recorder.credit("abandoned-overlap"); + if (step.action === "beginCall" && facts.followerBudgetDiffers === true && previous.calls.includes(0)) recorder.credit("follower-keeps-read-budget"); + if (next.loaders.some(l => l.state === ABANDONED) && next.loaders.some(l => l.state === RUNNING)) recorder.credit("abandoned-overlap"); if (step.action === "seedRemote") delayedWriteWasFenced = false; - if (previous?.phase === 3 && s.phase === 1) { - failedRead = step.action === "failRead" || s.readAborts > previous.readAborts; - failedDecode = false; - if (s.readAborts > previous.readAborts) { - recorder.credit("read-timeout-starts-source"); - if (step.action !== "tick") recorder.credit("read-late-settlement"); - } - } - if ((step.action === "releaseRead" || step.action === "failRead") && previous?.readStates[step.choice] === 1) { - recorder.credit("abandoned-read-settles"); + if (facts.aborted) { + recorder.credit("read-timeout-starts-source"); + if (step.action !== "tick") recorder.credit("read-late-settlement"); } - if (step.action === "releaseRead" && s.phase === 4) { acquiredAt = s.wall; decodeStarted = s.now; } - if (step.action === "releaseLoad" && acquiredAt !== undefined) { - if (s.now - decodeStarted >= 10) recorder.credit("decode-outlives-deadline"); - if (s.watermark >= acquiredAt) recorder.credit("acquired-hit-survives-invalidation"); - if (s.now - decodeStarted >= 10 && s.readAborts === previous?.readAborts && s.loaders === previous.loaders) { + if (step.action === "tick" && o.readAborts.length > previous.readAborts.length) recorder.credit("read-timeout-starts-source"); + if ((step.action === "releaseRead" || step.action === "failRead") && facts.alreadyAborted) recorder.credit("abandoned-read-settles"); + if (step.action === "releaseLoad" && facts.decodeStarted !== undefined) { + if (next.now - facts.decodeStarted >= CLOCK_STEP_MS) recorder.credit("decode-outlives-deadline"); + if (next.watermark >= facts.acquiredAt) recorder.credit("acquired-hit-survives-invalidation"); + if (next.now - facts.decodeStarted >= CLOCK_STEP_MS && o.readAborts.length === previous.readAborts.length && o.loaders === previous.loaders) { recorder.credit("successful-read-has-no-late-cancel"); } } - if (step.action === "failLoad") failedDecode = true; - if (step.action === "resolveLoader" && previous?.sources[step.choice] === 0 && previous.now < previous.deadline) { - if (failedRead && s.phase === 0 && s.dumps === previous.dumps) recorder.credit("failed-read-no-refill"); - if (failedDecode && s.dumps > previous.dumps) recorder.credit("failed-decode-refills"); + if (step.action === "resolveLoader" && facts.loader?.state === RUNNING && !facts.late) { + if (facts.loader.failedRead && !previous.calls.every((value, i) => value === o.calls[i]) && o.dumps === previous.dumps && !o.calls.includes(0)) recorder.credit("failed-read-no-refill"); + if (facts.loader.failedDecode && o.dumps > previous.dumps) recorder.credit("failed-decode-refills"); } - if (step.action === "releaseDump" && s.phase === 0) recorder.credit("dump-rechecks-fence-after-rollback"); + if (step.action === "releaseDump" && o.writes === previous.writes) recorder.credit("dump-rechecks-fence-after-rollback"); if (step.action === "failDump") recorder.credit("dump-failure-preserves-value"); if (step.action === "failWrite") recorder.credit("write-failure-preserves-value"); - if (step.action === "releaseDump" && previous !== undefined && previous.now >= previous.deadline) recorder.credit("serialize-outlives-deadline"); - if (step.action === "rejectLoader" && previous?.sources[step.choice] === 1 && - s.events.filter(event => event.event === "error" && event.detail === "fallback").length === - previous.events.filter(event => event.event === "error" && event.detail === "fallback").length && - s.calls.every((value, index) => value === previous.calls[index])) recorder.credit("late-rejection-does-not-repeat-error"); + if (step.action === "releaseDump" && facts.running === undefined && shadow.loaders.length && shadow.now >= shadow.loaders.at(-1).deadline) recorder.credit("serialize-outlives-deadline"); + if (step.action === "rejectLoader" && facts.loader?.state === ABANDONED && + o.events.filter(e => e.event === "error" && e.detail === "fallback").length === previous.events.filter(e => e.event === "error" && e.detail === "fallback").length && + o.calls.every((value, i) => value === previous.calls[i])) recorder.credit("late-rejection-does-not-repeat-error"); if (step.action === "releaseWrite") { - delayedWriteWasFenced = s.storedTimestamp <= s.watermark; - if (previous !== undefined && previous.now >= previous.deadline) recorder.credit("publication-after-deadline"); + delayedWriteWasFenced = facts.writeTimestamp !== undefined && facts.writeTimestamp <= next.watermark; + if (shadow.loaders.length && shadow.now >= shadow.loaders.at(-1).deadline) recorder.credit("publication-after-deadline"); } - // Require a later public read/refill to expose the stored stale write. - if (delayedWriteWasFenced && step.action === "releaseRead" && previous?.phase === 3 - && s.loaders === previous.loaders + 1) recorder.credit("delayed-fenced-write"); - if (previous?.phase === 1 && previous.sources[step.choice] === 0 && previous.now >= previous.deadline - && (step.action === "resolveLoader" || step.action === "rejectLoader")) { + if (delayedWriteWasFenced && step.action === "releaseRead" && !facts.aborted && !facts.alreadyAborted && o.loaders === previous.loaders + 1) recorder.credit("delayed-fenced-write"); + if (facts.late) { recorder.credit("late-settlement"); recorder.credit(step.action === "resolveLoader" ? "late-resolve" : "late-reject"); } + shadow = next; + shadows.push(shadow); } + if (carriesPrivateState(trace.predictions)) checkFidelity(shadows, trace.predictions, trace.path); } return recorder.labels(); } diff --git a/formal/replay/witnesses/evidence.mjs b/formal/replay/witnesses/evidence.mjs index 85187051..788774c7 100644 --- a/formal/replay/witnesses/evidence.mjs +++ b/formal/replay/witnesses/evidence.mjs @@ -1,5 +1,5 @@ import { createHash } from "node:crypto"; -import { mkdirSync, readFileSync, writeFileSync } from "node:fs"; +import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs"; import { basename, resolve } from "node:path"; import { replaySources } from "../sources.mjs"; @@ -15,9 +15,15 @@ export function witnessInputs(profile, directory = ".") { const execution = JSON.parse(readFileSync(resolve(directory, "formal/execution.json"), "utf8")); const entry = registry.profiles.find(candidate => candidate.id === profile); if (entry === undefined) throw new Error(`Unknown witness profile ${profile}`); + // Every Quint library: each source under formal/ and formal/kernel/ that no + // scheduled model claims, in sorted order (formal/execution.mjs libraryPaths; + // the replay closure stays self-contained, and Go derives the same list). + const models = new Set(execution.models.map(model => model.path)); + const libraries = ["formal", "formal/kernel"].flatMap(folder => existsSync(resolve(directory, folder)) ? readdirSync(resolve(directory, folder)) + .filter(name => name.endsWith(".qnt")).map(name => `${folder}/${name}`) : []).sort().filter(path => !models.has(path)); const inputs = [...new Set(["formal/profiles.json", "formal/coverage-witnesses.json", "formal/execution.json", `formal/dialcache-${profile}-conformance.qnt`, "formal/conformance-observations.qnt", - ...execution.libraries, ...replaySources(directory), ...(entry.witnessSources ?? [])])]; + ...libraries, ...replaySources(directory), ...(entry.witnessSources ?? [])])]; const foreign = inputs.filter(path => /^(test|src|go)\//.test(path)); if (foreign.length) throw new Error(`Witness inputs must be language neutral; remove ${foreign.join(", ")} from witnessSources`); return inputs; diff --git a/formal/replay/witnesses/fidelity.d.mts b/formal/replay/witnesses/fidelity.d.mts new file mode 100644 index 00000000..67975c16 --- /dev/null +++ b/formal/replay/witnesses/fidelity.d.mts @@ -0,0 +1,11 @@ +export type PrivateState = Record; +export type FidelityView = (shadow: Shadow, state: State, context: string) => [Record, Record]; +export function carriesPrivateState(predictions: readonly PrivateState[] | undefined, publicChannels: readonly string[]): boolean; +export function requireLayout(state: State, layoutFields: readonly string[], context: string): State; +export function compareViews(ours: Record, theirs: Record, context: string): void; +export function checkFidelity(shadows: readonly Shadow[], predictions: readonly State[], path: string, view: FidelityView): void; +export function shadowSequence(initial: Shadow, frames: ReadonlyArray<{ after: Shadow }>): Shadow[]; +export function fidelityBinding(options: { publicChannels: readonly string[]; layoutFields?: readonly string[]; view: FidelityView }): { + carriesPrivateState(predictions: readonly PrivateState[] | undefined): boolean; + checkFidelity(shadows: readonly Shadow[], predictions: readonly State[], path: string): void; +}; diff --git a/formal/replay/witnesses/fidelity.mjs b/formal/replay/witnesses/fidelity.mjs new file mode 100644 index 00000000..12846398 --- /dev/null +++ b/formal/replay/witnesses/fidelity.mjs @@ -0,0 +1,51 @@ +import { isDeepStrictEqual } from "node:util"; + +// The fidelity scaffold the public-only classifiers share. A classifier +// shadows from the recorded inputs and the asserted public channels what its +// rules need and, wherever a history still carries the model's private +// predictions, compares the shadow after every step with them field by field, +// so a shadow that drifts from the model is refused rather than credited. +// What differs per classifier is handed to `fidelityBinding`: the public +// channels a projected history is reduced to, the layout fields a private +// state must carry before it is read (a history in another layout is named at +// its first missing field rather than misread), and `view(shadow, state, +// context)`, which returns the two records to compare in the classifier's own +// field names: the shadow's view first, the model's second. + +// A history projected to its public channels carries nothing to compare; any +// other decoded field is the model's private layout. +export const carriesPrivateState = (predictions, publicChannels) => predictions !== undefined + && predictions.some(state => Object.keys(state).some(field => !publicChannels.includes(field))); + +export function requireLayout(state, layoutFields, context) { + for (const field of layoutFields) if (!Object.hasOwn(state, field)) throw new Error(`${context}: private layout is missing ${field}`); + return state; +} + +// The shadow's view against the model's, naming the first field that differs. +export function compareViews(ours, theirs, context) { + for (const [field, value] of Object.entries(ours)) { + if (!isDeepStrictEqual(value, theirs[field])) throw new Error(`${context}: shadow ${field} ${JSON.stringify(value)} differs from the model's ${JSON.stringify(theirs[field])}`); + } +} + +// shadows[0] is the initial shadow and shadows[i] the shadow after step i; +// predictions[i] is the model's private state at step i. +export function checkFidelity(shadows, predictions, path, view) { + for (const [index, shadow] of shadows.entries()) { + const context = `${path} step ${index}`; + const [ours, theirs] = view(shadow, predictions[index], context); + compareViews(ours, theirs, context); + } +} + +// The shadows of a frame walk: the initial shadow, then each frame's `after`. +export const shadowSequence = (initial, frames) => [initial, ...frames.map(frame => frame.after)]; + +export function fidelityBinding({ publicChannels, layoutFields = [], view }) { + return { + carriesPrivateState: predictions => carriesPrivateState(predictions, publicChannels), + checkFidelity: (shadows, predictions, path) => checkFidelity(shadows, predictions, path, + (shadow, state, context) => view(shadow, requireLayout(state, layoutFields, context), context)), + }; +} diff --git a/formal/replay/witnesses/independent.d.mts b/formal/replay/witnesses/independent.d.mts index 1637528e..c2462346 100644 --- a/formal/replay/witnesses/independent.d.mts +++ b/formal/replay/witnesses/independent.d.mts @@ -1,3 +1,5 @@ +import type { Step } from "../features.mjs"; import type { FeatureHistory } from "./index.mjs"; import type { WitnessRecorder } from "./recorder.mjs"; export function independentWitnesses(histories: readonly FeatureHistory[], recorder?: WitnessRecorder): Set; +export function independentSourceDeadlineWitnesses(path: string, steps: readonly Step[], recorder: WitnessRecorder): void; diff --git a/formal/replay/witnesses/independent.mjs b/formal/replay/witnesses/independent.mjs index 94cd6cf2..af2f5d2d 100644 --- a/formal/replay/witnesses/independent.mjs +++ b/formal/replay/witnesses/independent.mjs @@ -1,44 +1,442 @@ +import { isDeepStrictEqual } from "node:util"; +import { actionLabels } from "./labels.mjs"; import { createWitnessRecorder } from "./recorder.mjs"; +import { fidelityBinding, shadowSequence } from "./fidelity.mjs"; +import { profiles } from "../features.mjs"; -// Independent-call witnesses: public results, read IO and recovery outcomes, -// plus private call/read/load predictions that identify the schedule probed. +// The independent witnesses are decided from the recorded inputs, the asserted +// observation o and the asserted read IO channel alone; no rule reads the +// model's private state. What a rule needs beyond those deltas is shadowed +// here from the inputs: the elapsed clock, the read budget and recovery age +// each caller captured at beginCall, which read, source and decode belong to +// which caller (one read per call; a source starts at the read reply, read +// deadline or failed fresh decode of its caller; a decode starts at the read +// reply, rejection or expiry of its caller's source), and each source's +// deadline. The shadow delivers due deadlines the way the model does, in time +// order and registration order for equal instants, including sources a read +// deadline starts inside the same advance. A recorded outcome the shadowed +// schedule forbids (a deadline error ahead of its deadline, a recovery outcome +// on a fresh decode, a settlement of an expired source that changes the +// observation) is a contradiction and throws. The fidelity check compares the +// shadow after every step with the model's private predictions in every +// history that still carries them: the composed profile's layout (its flights, +// held reads and decodes, loader ordinals, snapshots, deadlines and drained +// flags) is read back into the shadow's fields wherever the layout carries +// them, so a shadow that drifts from the model is refused, not credited. +// +// The labels that read private fields before this rewrite are redefined +// around public checkpoints with the same consequence: +// - independent-read-overlap, one-read-times-out-before-another: a read is +// active from its beginCall until its reply or its entry in io.aborted. +// - late-read-does-not-affect-other-call: the replied read is one io.aborted +// already lists, and o is unchanged (the shadow throws otherwise). +// - late-source-does-not-affect-other-call: the settled source is past its +// shadowed deadline, and o is unchanged (the shadow throws otherwise). +// - refill-authority-is-per-call: a write at a settlement while another +// shadowed source is still running for a caller whose read failed or timed +// out (the model's canWrite is exactly that read outcome). +// - acquired-recovery-survives-invalidation, acquired-fresh-decode-survives- +// invalidation: o.invalidations grew between the caller's read reply and its +// served recovery or fresh decode. Before the read, readability required the +// frame to be stamped after the watermark, so only an invalidation after the +// read moves the watermark to or past the acquired stamp; the watermark +// comparison and this checkpoint are the same fact. +// - distinct-retained-recovery-values: two served recoveries (o.recovery grew +// by "served") completed their callers with different results. +// - independent-recovery-age-boundary: the missing caller's captured recovery +// age differs from that of another still-pending caller; both ages are the +// policy inputs in force at each beginCall. +// - failed-recovery-keeps-source-error: a failed recovery decode (o.recovery +// grew by "deserialization_error") completed its caller with the source +// error and io.sourceErrors names the caller's shadowed source. +const independent = profiles.independent; +const SOURCE_BUDGET_MS = independent.fixture.fallbackTimeoutMs; +const INITIAL_READ_BUDGET_MS = independent.fixture.readTimeoutMs; +const INITIAL_MAX_AGE_MS = independent.fixture.policy.staleOnErrorMaxAgeSec * 1000; +if (![SOURCE_BUDGET_MS, INITIAL_READ_BUDGET_MS, INITIAL_MAX_AGE_MS].every(Number.isInteger)) throw new Error("The independent profile must declare numeric read, fallback and recovery budgets"); +// The policy input decoded as the driver decodes it; the two read budgets a +// history can record are its even and odd choices. +const policyInput = choice => independent.actions.policy.input(choice).value; +const READ_BUDGETS = [...new Set(independent.actions.policy.choices.map(choice => policyInput(choice).remoteReadTimeoutMs))]; + +const CALL_PENDING = 0, SOURCE_ERROR = 3, DEADLINE_ERROR = 4; +const settled = value => value === 1 || value === 2; +// The shadow's phase and source encodings (the former model's), for the fidelity check. +const READ_PENDING = 1, SOURCE_RUNNING = 2, FRESH_DECODE = 3, RECOVERY_DECODE = 4, CALL_DONE = 5, NO_SOURCE = -1; + +// Independent-call witnesses over the shadowed schedule; the source-budget +// rule below keeps its own minimal shadow and its own crediting. export function independentWitnesses(histories, recorder = createWitnessRecorder()) { - for (const { path, steps, predictions: states } of histories) { + actionLabels(histories, recorder); + for (const { path, steps, predictions } of histories) { recorder.enter(path); - const recovered = new Map(); - for (const [i, step] of steps.entries()) { - recorder.step(i); - recorder.credit(`action:${step.action}`); - if (i === 0) continue; - const before = states[i - 1], previous = steps[i - 1].expected, o = step.expected; - if (step.action === "beginCall" && states[i].reads.filter(r => r.active === true).length > 1) recorder.credit("independent-read-overlap"); - if (new Set(step.io.sourceErrors.filter(id => id > 0)).size >= 2) recorder.credit("independent-source-error-identities"); - if (step.io.budgets.includes(5) && step.io.budgets.includes(10)) recorder.credit("independent-read-budgets"); - if (step.io.aborted.length > steps[i - 1].io.aborted.length && o.calls.includes(0) && - states[i].reads.some(r => r.active === true)) recorder.credit("one-read-times-out-before-another"); - if ((step.action === "releaseRead" || step.action === "failRead") && before.reads[step.choice].active === false && - previous.calls.includes(0) && JSON.stringify(o) === JSON.stringify(previous)) recorder.credit("late-read-does-not-affect-other-call"); - if (step.action === "releaseLoad" || step.action === "failLoad") { - const load = before.loads[step.choice], caller = load.caller, call = before.calls[caller]; - if (load.recovery === true && step.action === "failLoad" && o.calls[caller] === 3 && step.io.sourceErrors[caller] === call.source + 1) { - recorder.credit("failed-recovery-keeps-source-error"); + independentSourceDeadlineWitnesses(path, steps, recorder); + const frames = shadowHistory(steps, path); + if (carriesPrivateState(predictions)) checkFidelity(shadowSequence(initialShadow(), frames), predictions, path); + callWitnesses(frames, recorder); + } + return recorder.labels(); +} + +// The shadow keeps the elapsed clock, the read budget and recovery age the +// next caller captures, and per caller, read, source, decode and timer the +// fields the model keeps for them that the inputs and public deltas decide: +// never a frame, a candidate or a fence. +const initialShadow = () => ({ now: 0, readBudget: INITIAL_READ_BUDGET_MS, maxAge: INITIAL_MAX_AGE_MS, calls: [], reads: [], sources: [], loads: [], timers: [] }); + +// One frame per transition: the recorded action, the asserted observation and +// IO before and after it, the shadow before and after it, and the receipt of +// the transition decoded from the deltas: for a read reply its caller and +// whether the read was late, started a source or a fresh decode; for a +// settlement its source, caller and whether the source had expired; for a +// decode release its caller, whether it was a recovery and its outcome; for an +// advance the reads it aborted and the sources it expired. +function shadowHistory(steps, path) { + const contradiction = (index, message) => new Error(`${path} step ${index}: ${message}`); + let shadow = initialShadow(); + const frames = []; + for (let index = 1; index < steps.length; index++) { + const { action, choice, expected: current, io } = steps[index], { expected: prior, io: priorIo } = steps[index - 1]; + const before = shadow, after = structuredClone(shadow); + const expect = (condition, message) => { if (!condition) throw contradiction(index, message); }; + const started = current.loaders - prior.loaders, loaded = current.loads - prior.loads; + const finished = prior.calls.flatMap((result, caller) => result === CALL_PENDING && current.calls[caller] !== CALL_PENDING ? [caller] : []); + const outcomes = current.recovery.slice(prior.recovery.length), aborted = io.aborted.slice(priorIo.aborted.length); + // What the shadowed schedule says this step did; compared with the deltas below. + const predicted = { starts: 0, loads: 0, classifications: 0, aborted: [], outcomes: [], finished: new Map() }; + const startSource = (caller, at) => { + Object.assign(after.calls[caller], { phase: SOURCE_RUNNING, source: after.sources.length }); + after.timers.push({ read: false, index: after.sources.length, at: at + SOURCE_BUDGET_MS }); + after.sources.push({ caller, pending: true, active: true, startedAt: at, settledAt: -1, outcome: CALL_PENDING }); + predicted.starts++; + }; + const startLoad = (caller, recovery) => { + after.calls[caller].phase = recovery ? RECOVERY_DECODE : FRESH_DECODE; + after.loads.push({ caller, pending: true, recovery }); + predicted.loads++; + }; + const finish = (caller, accepts) => { after.calls[caller].phase = CALL_DONE; predicted.finished.set(caller, accepts); }; + // A source failure or deadline: the caller completes with the error unless + // its read left it a recovery candidate, in which case a still-pending + // result is the recovery decode and a completed one a miss. + const reject = (caller, error) => { + const call = after.calls[caller]; + call.error = error; + if (call.canRecover) predicted.classifications++; + if (!call.canRecover) finish(caller, value => value === error); + else if (current.calls[caller] === CALL_PENDING) startLoad(caller, true); + else { predicted.outcomes.push("miss"); finish(caller, value => value === error); } + }; + let receipt; + expect(current.calls.length === prior.calls.length + (action === "beginCall" ? 1 : 0), "changed the number of callers outside beginCall"); + switch (action) { + case "beginCall": { + const caller = before.calls.length; + expect(current.calls[caller] === CALL_PENDING && io.budgets.length === current.calls.length, `caller ${caller} began without a pending result and one read budget`); + expect(io.budgets.at(-1) === before.readBudget, `read budget ${io.budgets.at(-1)} but the policy shadow holds ${before.readBudget}`); + after.calls.push({ source: NO_SOURCE, phase: READ_PENDING, maxAge: before.maxAge, canRecover: false, canWrite: false, error: SOURCE_ERROR }); + after.timers.push({ read: true, index: caller, at: before.now + before.readBudget }); + after.reads.push({ caller, pending: true, active: true }); + receipt = { caller }; + break; + } + case "releaseRead": case "failRead": { + const failed = action === "failRead", read = after.reads[choice]; + expect(read?.pending === true, `replies to no pending read ${choice}`); + read.pending = false; + const caller = read.caller; + if (!read.active) { + expect(isDeepStrictEqual(current, prior), `late read ${choice} changed the observation`); + receipt = { caller, late: true }; + break; + } + read.active = false; + after.calls[caller].canWrite = !failed; + if (started === 1 && loaded === 0) { after.calls[caller].canRecover = !failed; startSource(caller, before.now); receipt = { caller, late: false, starts: true }; } + else if (!failed && started === 0 && loaded === 1) { after.calls[caller].canRecover = false; startLoad(caller, false); receipt = { caller, late: false, decodes: true }; } + else throw contradiction(index, `active read ${choice} replied without starting caller ${caller}'s source or fresh decode`); + break; + } + case "resolveLoader": case "rejectLoader": { + const { loader, value = SOURCE_ERROR } = independent.actions[action].input(choice); + const source = after.sources[loader]; + expect(source?.pending === true, `settles no pending source ${loader}`); + source.pending = false; + const caller = source.caller; + if (!source.active) { + expect(isDeepStrictEqual(current, prior), `settles expired source ${loader} but the observation changed`); + receipt = { loader, caller, late: true, value }; + break; } - if (load.recovery === true && o.calls[caller] === load.value) { - recovered.set(caller, o.calls[caller]); - if (new Set(recovered.values()).size === 2) recorder.credit("distinct-retained-recovery-values"); - if (before.watermark >= call.created) recorder.credit("acquired-recovery-survives-invalidation"); + Object.assign(source, { active: false, settledAt: before.now, outcome: value }); + const call = after.calls[caller]; + if (value === SOURCE_ERROR) reject(caller, SOURCE_ERROR); + else { + if (current.writes > prior.writes) { + expect(call.canWrite, `caller ${caller} refilled after its read failed or timed out`); + expect(current.writeTtls.at(-1) === call.maxAge, `write with TTL ${current.writeTtls.at(-1)} but caller ${caller} captured ${call.maxAge}`); + } + finish(caller, result => result === value); } - if (load.recovery === false && step.action === "releaseLoad" && before.watermark >= call.acquiredAt) recorder.credit("acquired-fresh-decode-survives-invalidation"); - if (load.recovery === true && o.recovery.at(-1) === "miss" && before.calls.some(c => c.maxAge !== call.maxAge && c.phase !== 5)) recorder.credit("independent-recovery-age-boundary"); + receipt = { loader, caller, late: false, value }; + break; } - if (step.action === "resolveLoader" || step.action === "rejectLoader") { - const source = before.sources[step.action === "rejectLoader" ? step.choice : Math.floor((step.choice - 1) / 2)]; - if (source.active === false && previous.calls.includes(0) && JSON.stringify(o) === JSON.stringify(previous)) recorder.credit("late-source-does-not-affect-other-call"); - if (o.writes > previous.writes && before.calls.some(c => c.phase === 2 && c.canWrite === false)) recorder.credit("refill-authority-is-per-call"); + case "releaseLoad": case "failLoad": { + const failed = action === "failLoad", load = after.loads[choice]; + expect(load?.pending === true, `releases no pending decode ${choice}`); + load.pending = false; + const caller = load.caller; + if (!load.recovery) { + if (failed) { after.calls[caller].canRecover = false; startSource(caller, before.now); } + else finish(caller, settled); + receipt = { load: choice, caller, recovery: false }; + break; + } + const [outcome] = outcomes; + expect(outcomes.length === 1 && (failed ? outcome === "deserialization_error" : outcome === "served" || outcome === "miss"), + `recovery decode ${choice} of caller ${caller} recorded ${JSON.stringify(outcomes)}`); + predicted.outcomes.push(outcome); + finish(caller, outcome === "served" ? settled : result => result === after.calls[caller].error); + receipt = { load: choice, caller, recovery: true, outcome }; + break; + } + case "advance": { + // Visit each due instant in order; deliver every timer due at it in + // registration order. A source a read deadline starts is due later. + const target = before.now + choice, expired = []; + const live = timer => timer.read ? after.reads[timer.index].active : after.sources[timer.index].active; + for (let now = before.now; ;) { + const due = after.timers.filter(timer => live(timer) && timer.at > now && timer.at <= target).map(timer => timer.at); + if (due.length === 0) break; + now = Math.min(...due); + for (const timer of [...after.timers]) { + if (timer.at !== now || !live(timer)) continue; + if (timer.read) { + after.reads[timer.index].active = false; + predicted.aborted.push(timer.index); + startSource(after.reads[timer.index].caller, now); + } else { + Object.assign(after.sources[timer.index], { active: false, settledAt: now, outcome: DEADLINE_ERROR }); + expired.push(timer.index); + reject(after.sources[timer.index].caller, DEADLINE_ERROR); + } + } + } + after.now = target; + receipt = { aborted: predicted.aborted, expired }; + break; } - for (const outcome of o.recovery) recorder.credit(`recovery:${outcome}`); - if (o.calls.includes(4)) recorder.credit("source-deadline"); + case "policy": { + const { remoteReadTimeoutMs, staleOnErrorMaxAgeSec } = policyInput(choice); + after.readBudget = remoteReadTimeoutMs; after.maxAge = staleOnErrorMaxAgeSec * 1000; + break; + } + case "invalidate": expect(current.invalidations === prior.invalidations + 1, "invalidated without recording the invalidation"); break; + case "seed": break; + default: throw contradiction(index, `unknown independent action ${action}`); } + // Bind the shadowed transition to the public deltas. + expect(started === predicted.starts, `${started} sources started but the shadowed schedule starts ${predicted.starts}`); + expect(loaded === predicted.loads, `${loaded} decodes started but the shadowed schedule starts ${predicted.loads}`); + expect(isDeepStrictEqual(aborted, predicted.aborted), `aborted reads ${JSON.stringify(aborted)} but the shadowed read deadlines abort ${JSON.stringify(predicted.aborted)}`); + expect(isDeepStrictEqual(outcomes, predicted.outcomes), `recovery outcomes ${JSON.stringify(outcomes)} but the shadowed schedule records ${JSON.stringify(predicted.outcomes)}`); + for (const caller of finished) { + const accepts = predicted.finished.get(caller), result = current.calls[caller]; + if (accepts === undefined) { + const deadline = after.sources[after.calls[caller].source]?.startedAt + SOURCE_BUDGET_MS; + if (result === DEADLINE_ERROR && deadline > after.now) throw contradiction(index, `caller ${caller} deadline ${deadline} after now ${after.now}`); + throw contradiction(index, `caller ${caller} completed with ${result} outside the shadowed schedule`); + } + expect(accepts(result), `caller ${caller} completed with ${result}, not the shadowed outcome`); + } + for (const caller of predicted.finished.keys()) expect(finished.includes(caller), `caller ${caller} should have completed but stays ${current.calls[caller]}`); + expect(current.classifications - prior.classifications === predicted.classifications, `${current.classifications - prior.classifications} classifications but the shadowed schedule records ${predicted.classifications}`); + frames.push({ index, action, choice, prior, current, io, before, after, receipt }); + shadow = after; } - return recorder.labels(); + return frames; +} + +// A history projected to its public channels carries nothing to compare; any +// other decoded state is the model's private layout and must agree with the +// shadow on every field the shadow keeps that the layout carries. The layout +// is the composed profile's (dialcache-independent-conformance.qnt over the +// kernel library): a caller's flight is owners[caller], a held read or decode +// names its flight, loaders maps the drivers' ordinal to its flight, retained +// holds the pending snapshots and deadlines the pending due instants. Held +// records are pending-only, so the shadow's per-caller history is read back +// where the layout still holds it: a read's activity and a loader's owner, +// drain and outcome always; a decode's owner and kind while it is held; a +// loader's start while its deadline is pending; a caller's maximum while its +// read is held, its snapshot retained or its refill authorized; its recovery +// flag while it is pending; its refill authority once a loader has started; +// its error, the outcome its flight recorded, while it decodes a candidate. +// The instant a loader settled, a decode's value and a candidate's stamps and +// fence are not compared. +const NO_OWNER = -1, READ_DEADLINE = 0, SOURCE_DEADLINE = 1; +const layoutFields = ["o", "now", "readBudget", "ttls", "owners", "sources", "reads", "loads", "loaders", "retained", "deadlines", "drained"]; +// The shadow's fields derived from one private layout state. A field the +// layout does not carry at this step is left out and not compared. +function modelView(state, context) { + const { o, owners, sources, reads, loads, loaders, retained, deadlines, drained } = state; + const ownerOf = flight => flight < 0 ? NO_OWNER : owners.indexOf(flight); + const latestLoader = flight => loaders.reduce((latest, candidate, ordinal) => candidate === flight ? ordinal : latest, NO_SOURCE); + const calls = o.calls.map((result, caller) => { + const flight = owners[caller]; + if (!(flight >= 0)) throw new Error(`${context}: caller ${caller} owns no flight`); + const source = latestLoader(flight), load = loads.find(held => held.flight === flight), snapshot = retained.find(held => held.flight === flight); + const read = reads.find(held => held.flight === flight), authority = sources[flight]; + const phase = result !== CALL_PENDING ? CALL_DONE : load !== undefined ? (load.recovery ? RECOVERY_DECODE : FRESH_DECODE) : source >= 0 ? SOURCE_RUNNING : READ_PENDING; + return { source, phase, + ...(read !== undefined ? { maxAge: read.ttls.retentionMs } : snapshot !== undefined ? { maxAge: snapshot.maximum } : authority.retentionMs > 0 ? { maxAge: authority.retentionMs } : {}), + ...(result === CALL_PENDING ? { canRecover: snapshot !== undefined } : {}), + ...(source >= 0 ? { canWrite: authority.retentionMs > 0 } : {}), + ...(phase === RECOVERY_DECODE ? { error: authority.result } : {}) }; + }); + const readViews = Array.from({ length: o.reads }, (_, index) => { + const held = reads.find(read => read.read === index); + return { caller: held !== undefined && held.flight >= 0 ? ownerOf(held.flight) : index, pending: held !== undefined, active: held !== undefined && held.flight !== NO_OWNER }; + }); + const loadViews = Array.from({ length: o.loads }, (_, index) => { + const held = loads.find(load => load.load === index); + return held === undefined ? { pending: false } : { caller: ownerOf(held.flight), pending: true, recovery: held.recovery }; + }); + const sourceViews = loaders.map((flight, ordinal) => { + const due = deadlines.find(deadline => deadline.kind === SOURCE_DEADLINE && deadline.index === ordinal); + return { caller: ownerOf(flight), pending: !drained[ordinal], active: sources[flight].result === CALL_PENDING, outcome: sources[flight].result, + ...(due !== undefined ? { startedAt: due.at - SOURCE_BUDGET_MS } : {}) }; + }); + const timers = deadlines.map(deadline => ({ read: deadline.kind === READ_DEADLINE, index: deadline.index, at: deadline.at })); + return { now: state.now, readBudget: state.readBudget, maxAge: state.ttls.retentionMs, calls, reads: readViews, loads: loadViews, sources: sourceViews, timers }; +} +// The shadow projected to the fields the layout carries at this step: each +// list entry keeps the keys of the model's view of it; the timers are the +// live ones (a delivered or settled timer is no pending deadline). +function shadowView(shadow, model) { + const project = (records, views) => records.map((record, index) => Object.fromEntries(Object.keys(views[index] ?? {}).map(key => [key, record[key]]))); + const live = timer => timer.read ? shadow.reads[timer.index].active : shadow.sources[timer.index].active; + return { now: shadow.now, readBudget: shadow.readBudget, maxAge: shadow.maxAge, calls: project(shadow.calls, model.calls), + reads: shadow.reads, loads: project(shadow.loads, model.loads), sources: project(shadow.sources, model.sources), timers: shadow.timers.filter(live) }; +} + +// A history projected to o and io carries nothing to compare; any other +// decoded state is the composed layout, read through modelView and compared +// with the shadow projected to the fields the layout carries at each step. +const { carriesPrivateState, checkFidelity } = fidelityBinding({ publicChannels: ["o", "io"], layoutFields, + view: (shadow, state, context) => { const model = modelView(state, context); return [shadowView(shadow, model), model]; } }); + +// Per-call cancellation, late effects, refill authority, acquired snapshots +// across invalidation, captured recovery age and original error identities, +// from the frames' receipts and the public deltas. +function callWitnesses(frames, recorder) { + const invalidationsAtRead = new Map(), recovered = new Map(); + for (const frame of frames) { + recorder.step(frame.index); + const { action, prior, current, io, before, after, receipt } = frame; + if (new Set(io.sourceErrors.filter(id => id > 0)).size >= 2) recorder.credit("independent-source-error-identities"); + if (READ_BUDGETS.every(budget => io.budgets.includes(budget))) recorder.credit("independent-read-budgets"); + for (const outcome of current.recovery) recorder.credit(`recovery:${outcome}`); + if (current.calls.includes(DEADLINE_ERROR)) recorder.credit("source-deadline"); + const activeReads = after.reads.filter(read => read.active).length; + if (action === "beginCall" && activeReads > 1) recorder.credit("independent-read-overlap"); + if (action === "advance" && receipt.aborted.length > 0 && current.calls.includes(CALL_PENDING) && activeReads > 0) recorder.credit("one-read-times-out-before-another"); + if (action === "releaseRead" || action === "failRead") { + if (receipt.late && prior.calls.includes(CALL_PENDING)) recorder.credit("late-read-does-not-affect-other-call"); + if (!receipt.late && action === "releaseRead") invalidationsAtRead.set(receipt.caller, current.invalidations); + } + if (action === "resolveLoader" || action === "rejectLoader") { + if (receipt.late && prior.calls.includes(CALL_PENDING)) recorder.credit("late-source-does-not-affect-other-call"); + if (current.writes > prior.writes && before.sources.some(source => source.active && !before.calls[source.caller].canWrite)) recorder.credit("refill-authority-is-per-call"); + } + if (action === "releaseLoad" || action === "failLoad") { + const { caller, recovery, outcome } = receipt, call = before.calls[caller]; + const invalidatedSinceRead = invalidationsAtRead.has(caller) && current.invalidations > invalidationsAtRead.get(caller); + if (!recovery) { + if (action === "releaseLoad" && invalidatedSinceRead) recorder.credit("acquired-fresh-decode-survives-invalidation"); + continue; + } + if (action === "failLoad" && current.calls[caller] === SOURCE_ERROR && io.sourceErrors[caller] === call.source + 1) recorder.credit("failed-recovery-keeps-source-error"); + if (outcome === "served") { + recovered.set(caller, current.calls[caller]); + if (new Set(recovered.values()).size === 2) recorder.credit("distinct-retained-recovery-values"); + if (invalidatedSinceRead) recorder.credit("acquired-recovery-survives-invalidation"); + } + if (outcome === "miss" && before.calls.some((other, index) => index !== caller && other.maxAge !== call.maxAge && prior.calls[index] === CALL_PENDING)) { + recorder.credit("independent-recovery-age-boundary"); + } + } + } +} + +// Independent source budgets. The shadow keeps the clock (the sum of advance +// choices) and attributes every source start to its caller from public deltas: +// a read reply (releaseRead/failRead k) whose o.loaders grows starts caller k's +// source now; an advance starts one source per newly aborted read at that +// read's beginCall time plus its budget; a failed fresh decode (failLoad j) +// starts the load owner's source, loads being attributed at the read reply or +// rejectLoader that produced them. Any other growth leaves the history +// unattributable and it earns neither label. A caller's result moving 0 -> 4 is +// its last source expiring at startedAt + SOURCE_BUDGET_MS; a 4 recorded ahead +// of that instant contradicts the shadowed clock. The delivery is exact when +// the step is the advance crossing the instant; a 4 surfacing later, after a +// recovery decode, is recorded but not exact. +// later-source-survives-earlier-deadline: B's source, started after A's and +// inside A's budget, settles a value after A's deadline was delivered. +// later-source-expires-at-own-deadline: such a B expires exactly at its own +// later deadline after A expired at an earlier step. Two deadlines in one +// advance, or sources started at one instant, credit neither label. +export function independentSourceDeadlineWitnesses(path, steps, recorder) { + let now = 0; + const beginNow = [], budgets = [], sources = [], loads = [], expired = new Map(), survives = [], ownDeadline = []; + const staggered = (earlier, source) => earlier.startedAt < source.startedAt && source.startedAt < earlier.deadline; + for (let i = 1; i < steps.length; i++) { + const step = steps[i], prior = steps[i - 1]; + const { action, choice, expected: current, io } = step, previous = prior.expected; + const started = current.loaders - previous.loaders, loaded = current.loads - previous.loads; + if (action === "beginCall") { + // One read per call: the read index is the caller index. + if (io.budgets.length !== current.calls.length) return; + beginNow.push(now); budgets.push(io.budgets.at(-1)); + } + if (action === "advance") { + const aborted = io.aborted.slice(prior.io.aborted.length); + if (started !== aborted.length) return; + for (const read of aborted) sources.push({ caller: read, startedAt: beginNow[read] + budgets[read] }); + for (let k = 0; k < loaded; k++) loads.push({ caller: undefined }); + now += choice; + } else if (action === "releaseRead" || action === "failRead") { + if (started > 1 || loaded > 1) return; + if (started === 1) sources.push({ caller: choice, startedAt: now }); + if (loaded === 1) loads.push({ caller: choice }); + } else if (action === "rejectLoader") { + if (started > 0 || loaded > 1) return; + if (loaded === 1) loads.push({ caller: sources[choice]?.caller }); + } else if (action === "failLoad") { + if (started > 1 || loaded > 0) return; + if (started === 1) { + const caller = loads[choice]?.caller; + if (caller === undefined) return; + sources.push({ caller, startedAt: now }); + } + } else if (started > 0 || loaded > 0) return; + for (let caller = 0; caller < previous.calls.length; caller++) { + if (previous.calls[caller] !== 0) continue; + const result = current.calls[caller]; + if (result === DEADLINE_ERROR) { + const source = sources.findLast(candidate => candidate.caller === caller); + if (source === undefined) return; + const deadline = source.startedAt + SOURCE_BUDGET_MS; + if (now < deadline) throw new Error(`${path} step ${i}: caller ${caller} deadline ${deadline} after now ${now}`); + const exact = action === "advance" && now - choice < deadline; + if (exact) for (const earlier of expired.values()) if (staggered(earlier, source) && earlier.step < i) ownDeadline.push(i); + expired.set(caller, { startedAt: source.startedAt, deadline, step: i }); + } else if (settled(result) && action === "resolveLoader") { + const source = sources[Math.floor((choice - 1) / 2)]; + if (source === undefined || source.caller !== caller) return; + for (const earlier of expired.values()) if (staggered(earlier, source) && earlier.step < i && now >= earlier.deadline) survives.push(i); + } + } + } + if (survives.length) recorder.credit("later-source-survives-earlier-deadline", ...new Set(survives)); + if (ownDeadline.length) recorder.credit("later-source-expires-at-own-deadline", ...new Set(ownDeadline)); } diff --git a/formal/replay/witnesses/index.d.mts b/formal/replay/witnesses/index.d.mts index 37750349..c6124b62 100644 --- a/formal/replay/witnesses/index.d.mts +++ b/formal/replay/witnesses/index.d.mts @@ -2,9 +2,9 @@ import type { Trace as EffectsTrace } from "../effects.mjs"; import type { Trace as FeatureTrace } from "../features.mjs"; import type { LocalClockTrace } from "../local-clock.mjs"; import type { WitnessProvenance, WitnessRecorder } from "./recorder.mjs"; -import type { PrivateHistory, RawHistory } from "./trace.mjs"; +import type { PrivateHistory } from "./trace.mjs"; export type FeatureHistory = FeatureTrace & PrivateHistory; -export type EffectsHistory = EffectsTrace & RawHistory; +export type EffectsHistory = EffectsTrace & PrivateHistory; export type WitnessHistory = FeatureHistory | EffectsHistory | LocalClockTrace; export type WitnessCorpus = FeatureHistory[] | EffectsHistory[] | LocalClockTrace[]; export interface HistorySequences { diff --git a/formal/replay/witnesses/index.mjs b/formal/replay/witnesses/index.mjs index bc5dc023..3dd08e93 100644 --- a/formal/replay/witnesses/index.mjs +++ b/formal/replay/witnesses/index.mjs @@ -16,7 +16,6 @@ import { createWitnessRecorder } from "./recorder.mjs"; import { recoveryWitnesses } from "./recovery.mjs"; import { recoveryAdmissionWitnesses } from "./recovery-admission.mjs"; import { recoveryReadWitnesses } from "./recovery-read.mjs"; -import { recoveryShadowWitnesses } from "./recovery-shadow.mjs"; import { runtimeWitnesses } from "./runtime.mjs"; import { runtimeBoundaryWitnesses } from "./runtime-boundaries.mjs"; import { scopeWitnesses } from "./scope.mjs"; @@ -24,7 +23,7 @@ import { shadowWitnesses } from "./shadow.mjs"; import { shadowDiagnosticsWitnesses } from "./shadow-diagnostics.mjs"; import { shadowLayersWitnesses } from "./shadow-layers.mjs"; import { sourceBudgetsWitnesses } from "./source-budgets.mjs"; -import { readTrace, traceStates, witnessStates } from "./trace.mjs"; +import { readTrace, witnessStates } from "./trace.mjs"; // One language-neutral witness evaluator for every profile with a completion // gate. Any port runs it over the same sampled histories and exported @@ -38,10 +37,12 @@ export const witnessProfiles = [...Object.keys(featureProfiles), "effects", "loc // The shared strict parser for a profile's histories. Effects and feature // histories keep their raw ITF states for the classifiers keyed on explicit -// inputs and public observations; feature histories also carry their decoded -// private predictions. +// inputs and public observations, and carry their decoded private +// predictions for the fidelity checks. function historyParser(profile) { - if (profile === "effects") return (raw, path) => ({ ...parseEffectsTrace(raw, path), states: traceStates(raw, path) }); + // Effects histories carry their decoded private predictions beside the + // parsed steps for the classifier's fidelity check, as feature histories do. + if (profile === "effects") return (raw, path) => ({ ...parseEffectsTrace(raw, path), ...witnessStates(raw, path) }); if (profile === "local-clock") return parseLocalClockTrace; const definition = featureProfiles[profile]; if (definition === undefined) throw new Error(`Unknown witness profile ${profile}`); @@ -67,9 +68,8 @@ export function evaluateCorpus(profile, corpus, recorder = createWitnessRecorder case "layers": layersWitnesses(corpus, recorder); runtimeWitnesses(profile, corpus, recorder); break; case "admission": admissionWitnesses(corpus, recorder); break; case "independent": independentWitnesses(corpus, recorder); break; - case "recovery": recoveryWitnesses(corpus, recorder); recoveryShadowWitnesses(profile, corpus, recorder); break; - case "shadow": - shadowWitnesses(corpus, recorder); recoveryShadowWitnesses(profile, corpus, recorder); shadowDiagnosticsWitnesses(corpus, recorder); break; + case "recovery": recoveryWitnesses(corpus, recorder); break; + case "shadow": shadowWitnesses(corpus, recorder); shadowDiagnosticsWitnesses(corpus, recorder); break; case "recovery-read": actionLabels(corpus, recorder); recoveryReadWitnesses(corpus, recorder); recoveryAdmissionWitnesses(corpus, recorder); break; case "shadow-layers": actionLabels(corpus, recorder); shadowLayersWitnesses(corpus, recorder); break; case "local-failure": actionLabels(corpus, recorder); localFailureWitnesses(corpus, recorder); break; diff --git a/formal/replay/witnesses/policy.mjs b/formal/replay/witnesses/policy.mjs index 4985c6ff..ce7a37c7 100644 --- a/formal/replay/witnesses/policy.mjs +++ b/formal/replay/witnesses/policy.mjs @@ -1,6 +1,6 @@ -import { isDeepStrictEqual } from "node:util"; import { actionLabels } from "./labels.mjs"; import { createWitnessRecorder } from "./recorder.mjs"; +import { fidelityBinding, shadowSequence } from "./fidelity.mjs"; // The policy witnesses are decided from the recorded inputs and the asserted // observation alone; no rule reads the model's private state, so the profile @@ -153,25 +153,13 @@ function modelView(shadow) { ({ instance: 0, key, localMs: localTtl, fence: 0, retentionMs: remoteTtl > 0 ? retention : 0, result, shared })) }; } -// A history projected to its public channels carries nothing to compare; any -// other decoded state is the model's private layout and must match the shadow. -const publicChannels = ["o", "policyErrors"]; -const carriesPrivateState = predictions => predictions !== undefined - && predictions.some(state => Object.keys(state).some(field => !publicChannels.includes(field))); - -// The binding between the public-only shadow and the model: the shadow after -// each step must equal the model's private predictions field by field. When -// the profile is recomposed from the kernel library, this view is re-encoded -// against the new private layout; the classifiers do not change. -function checkFidelity(frames, predictions, path) { - const shadows = [initialShadow(), ...frames.map(frame => frame.after)]; - for (const [index, shadow] of shadows.entries()) { - const model = predictions[index]; - for (const [field, value] of Object.entries(modelView(shadow))) { - if (!isDeepStrictEqual(value, model[field])) throw new Error(`${path} step ${index}: shadow ${field} ${JSON.stringify(value)} differs from the model's ${JSON.stringify(model[field])}`); - } - } -} +// The binding between the public-only shadow and the model: a history +// projected to o and policyErrors carries nothing to compare; any other +// decoded state is the model's private layout, and the shadow in the model's +// field names must equal it after each step. When the profile is recomposed +// from the kernel library, modelView is re-encoded against the new private +// layout; the classifiers do not change. +const { carriesPrivateState, checkFidelity } = fidelityBinding({ publicChannels: ["o", "policyErrors"], view: (shadow, state) => [modelView(shadow), state] }); const pendingSources = shadow => shadow.sources.filter(source => source.result === 0); @@ -350,7 +338,7 @@ export function policyWitnesses(histories, recorder = createWitnessRecorder()) { for (const { path, steps, predictions } of histories) { recorder.enter(path); const frames = shadowHistory(steps, path); - if (carriesPrivateState(predictions)) checkFidelity(frames, predictions, path); + if (carriesPrivateState(predictions)) checkFidelity(shadowSequence(initialShadow(), frames), predictions, path); settlementWitnesses(frames, recorder); clockWitnesses(frames, recorder); layerWitnesses(frames, recorder); diff --git a/formal/replay/witnesses/recovery-shadow.d.mts b/formal/replay/witnesses/recovery-shadow.d.mts deleted file mode 100644 index cc586854..00000000 --- a/formal/replay/witnesses/recovery-shadow.d.mts +++ /dev/null @@ -1,4 +0,0 @@ -import type { WitnessRecorder } from "./recorder.mjs"; -import type { PrivateHistory } from "./trace.mjs"; - -export function recoveryShadowWitnesses(profile: string, histories: readonly PrivateHistory[], recorder?: WitnessRecorder): Set; diff --git a/formal/replay/witnesses/recovery-shadow.mjs b/formal/replay/witnesses/recovery-shadow.mjs deleted file mode 100644 index f88b86f1..00000000 --- a/formal/replay/witnesses/recovery-shadow.mjs +++ /dev/null @@ -1,206 +0,0 @@ -import { explicitInput, integer } from "./trace.mjs"; -import { createWitnessRecorder } from "./recorder.mjs"; - -// Classify schedules only after every driver has independently replayed its -// public observations. Private Quint state identifies the external boundary; -// each witness also requires its visible consequence, never merely an input. -// The committed smoke traces omit private state and are not coverage evidence. -const number = (state, name) => integer(state[name], name); -function settled(before, after, value) { - return after.calls.some((result, index) => before.calls[index] === 0 && result === value); -} -function unchangedWork(before, after) { - return after.reads === before.reads && after.loads === before.loads - && after.dumps === before.dumps && after.writes === before.writes; -} - -function recoveryWitnesses(steps, recorder) { - const FRESH_DECODE = 1, SOURCE_RUNNING = 2, RECOVERY_DECODE = 3; - let acquired; - let acquisitionObservations; - let failedFreshDecode = false; - let decodeStartedAge; - for (let index = 1; index < steps.length; index++) { - recorder.step(index); - const before = steps[index - 1].s, after = steps[index].s; - const previous = before.o, actual = after.o, action = steps[index].input.name; - if (action === "beginCall" && actual.reads === previous.reads + 1) { - acquired = before; - acquisitionObservations = actual; - failedFreshDecode = false; - decodeStartedAge = undefined; - } - if (acquired === undefined || acquisitionObservations === undefined) continue; - const ageAtRead = number(acquired, "wall") - number(acquired, "created"); - const ageNow = number(before, "wall") - number(before, "candidateCreated"); - const phase = number(before, "phase"); - if (number(after, "phase") === RECOVERY_DECODE && phase !== RECOVERY_DECODE) { - // advance() delivers the source deadline before completing its clock jump. - // Recovery decoding starts at that timer boundary, not at the final clock. - const untilDeadline = action === "advance" - ? number(before, "deadline") - number(before, "now") : 0; - decodeStartedAge = ageNow + untilDeadline; - } - const initialBytesPresent = number(acquired, "frame") > 0 - && acquired.readFailed === false && number(acquired, "now") < number(acquired, "expires"); - const initialBytesUnfenced = number(acquired, "created") > number(acquired, "watermark"); - const appendedRecovery = actual.recovery.slice(previous.recovery.length); - const noSharedWrite = actual.dumps === acquisitionObservations.dumps - && actual.writes === acquisitionObservations.writes; - const noReread = actual.reads === acquisitionObservations.reads; - const returnsCandidate = settled(previous, actual, number(before, "candidate")); - const returnsSourceError = settled(previous, actual, 3); - const returnsDeadline = settled(previous, actual, 4); - - if (action === "releaseLoad" && phase === FRESH_DECODE) { - failedFreshDecode = before.loadFailed === true; - if (!failedFreshDecode && returnsCandidate && actual.loaders === acquisitionObservations.loaders - && actual.recovery.length === previous.recovery.length && noSharedWrite) { - if (ageAtRead === 0) recorder.credit("fresh-zero-age-skips-source"); - if (ageAtRead === 999) recorder.credit("last-fresh-age-skips-source"); - } - } - if (action === "resolveLoader" && phase === SOURCE_RUNNING - && number(before, "candidate") > 0 && ageAtRead >= 1000 - && settled(previous, actual, 2) && actual.loads === previous.loads - && actual.recovery.length === previous.recovery.length) { - recorder.credit("source-success-skips-stale-decode"); - } - if (action === "rejectLoader" && phase === SOURCE_RUNNING && returnsSourceError - && actual.loads === previous.loads && noSharedWrite && noReread) { - if (number(before, "classifier") === 2 && actual.classifications === previous.classifications + 1 - && number(before, "candidate") > 0 && ageNow >= 0 && ageNow < number(before, "acceptedMaxAge")) { - recorder.credit("classifier-error-keeps-error-without-decode"); - } - if (failedFreshDecode && actual.classifications === previous.classifications - && appendedRecovery.length === 0) recorder.credit("failed-fresh-decode-is-not-recovery"); - if (acquired.readFailed === true && actual.classifications === previous.classifications - && appendedRecovery.length === 0) recorder.credit("failed-initial-read-skips-recovery"); - } - if (appendedRecovery.includes("miss") && phase === SOURCE_RUNNING - && (returnsSourceError || returnsDeadline) && actual.loads === previous.loads - && noReread && noSharedWrite) { - // Isolate the rejection rule: a fenced or physically missing value cannot - // establish that the age check itself prevented recovery, and vice versa. - if (initialBytesPresent && initialBytesUnfenced) { - if (ageAtRead === number(acquired, "maxAge")) recorder.credit("maximum-age-read-preserves-source-error"); - if (ageAtRead < 0) recorder.credit("future-read-preserves-source-error"); - } - if (initialBytesPresent && !initialBytesUnfenced - && ageAtRead >= 0 && ageAtRead < number(acquired, "maxAge")) { - recorder.credit("fenced-read-does-not-retain"); - } - if (number(before, "candidate") > 0 && ageNow >= number(before, "acceptedMaxAge")) { - recorder.credit("maximum-age-before-decode-skips-load"); - } - } - if (action === "releaseLoad" && phase === RECOVERY_DECODE && noSharedWrite && noReread) { - if (appendedRecovery.includes("served") && returnsCandidate) { - if (ageAtRead === 1000) recorder.credit("first-stale-age-recovers-without-publication"); - if (ageNow === number(before, "acceptedMaxAge") - 1) recorder.credit("last-recovery-age-serves"); - if (ageNow >= 0 && ageNow < 1000 && ageAtRead >= 1000) recorder.credit("rollback-below-fresh-age-still-recovers"); - if (number(before, "frame") !== number(before, "candidate")) recorder.credit("replacement-cannot-change-recovered-value"); - const ages = after.d.ages; - if (decodeStartedAge !== undefined && ageNow !== decodeStartedAge && ages.at(-1) === ageNow) { - recorder.credit("recovery-age-sampled-at-successful-decode"); - } - } - if (appendedRecovery.includes("miss") && ageNow === number(before, "acceptedMaxAge") - && (returnsSourceError || returnsDeadline)) recorder.credit("exact-maximum-after-decode-rejects"); - } - } -} - -// Normalize the published text/binary fixture encodings to byte identities. -// Whitespace-distinct JSON remains distinct even when decoded values agree. -function payloadBytes(payload) { - return ({ 3: 1, 4: 2, 6: 5, 8: 7 })[payload] ?? payload; -} - -function shadowWitnesses(steps, recorder) { - const C0_READ = 1, SNAPSHOT_DECODE = 3, CONFIRMATION_READ = 4; - const FILL_SERIALIZE = 5, FILL_WRITE = 6; - let c0Future = false, c0Fenced = false, failedReadWhileCallerPending = false; - let callStart; - for (let index = 1; index < steps.length; index++) { - recorder.step(index); - const before = steps[index - 1].s, after = steps[index].s; - const previous = before.o, actual = after.o, action = steps[index].input.name; - const phase = number(before, "phase"); - const appended = actual.shadow.slice(previous.shadow.length); - if (action === "beginCall") { - callStart = actual; c0Future = false; c0Fenced = false; failedReadWhileCallerPending = false; - } - if (callStart === undefined) continue; - const keepsCaller = JSON.stringify(previous.calls) === JSON.stringify(actual.calls); - const noWrite = actual.writes === callStart.writes; - if (action === "releaseRead" && phase === C0_READ && before.abandoned === false) { - c0Future = number(before, "frame") > 0 && number(before, "created") > number(before, "wall") - && number(before, "created") > number(before, "watermark") && before.readFailed === false; - c0Fenced = number(before, "frame") > 0 && number(before, "created") <= number(before, "watermark") - && before.readFailed === false; - failedReadWhileCallerPending = previous.calls.at(-1) === 0 && appended.includes("redis_error"); - } - if (action === "resolveLoader" && failedReadWhileCallerPending - && (settled(previous, actual, 1) || settled(previous, actual, 2)) - && unchangedWork(previous, actual) && appended.length === 0) { - recorder.credit("dark-read-error-still-allows-source-result"); - } - if (appended.includes("filled") && actual.loads === callStart.loads && keepsCaller) { - if (c0Future) recorder.credit("future-dark-c0-fills-without-decoding"); - if (c0Fenced) recorder.credit("fenced-dark-c0-can-fill-after-cutoff"); - } - if (action === "releaseRead" && phase === CONFIRMATION_READ && keepsCaller && noWrite) { - const sameBytes = payloadBytes(number(before, "frame")) === payloadBytes(number(before, "c0")); - if (appended.includes("superseded") && number(before, "frame") > 0 && sameBytes - && before.readFailed === false && number(before, "created") <= number(before, "watermark")) { - recorder.credit("fenced-c1-supersedes-without-repair"); - } - const visibleC1 = number(before, "frame") > 0 - && number(before, "created") > number(before, "watermark") && before.readFailed === false; - if (visibleC1 && sameBytes && appended.includes("mismatch")) { - recorder.credit("same-c1-bytes-confirm-mismatch"); - if (number(before, "created") > number(before, "wall")) { - recorder.credit("future-c1-confirms-payload-without-repair"); - } - } - if (visibleC1 && !sameBytes && appended.includes("superseded")) { - recorder.credit("different-c1-bytes-supersede"); - } - } - if (action === "releaseLoad" && phase === SNAPSHOT_DECODE && noWrite && keepsCaller) { - if (appended.includes("match") && actual.reads === previous.reads) recorder.credit("equal-comparison-skips-c1"); - if (appended.includes("deserialization_error") && actual.dumps === previous.dumps) { - recorder.credit("present-undecodable-c0-is-not-repaired"); - } - } - if (appended.includes("source_error") && noWrite && actual.loads === callStart.loads - && actual.calls.at(-1) === 3) recorder.credit("dark-source-error-never-decodes-or-fills"); - if (action === "releaseDump" && phase === FILL_SERIALIZE && appended.includes("fill_error") - && noWrite && keepsCaller) recorder.credit("fill-serialization-error-preserves-caller"); - if (action === "releaseWrite" && phase === FILL_WRITE && appended.includes("fill_error") - && before.writeFailed === true && actual.writes === previous.writes && keepsCaller) { - recorder.credit("fill-write-error-preserves-caller"); - } - if (before.abandoned === true && keepsCaller && appended.length === 0 - && unchangedWork(previous, actual)) { - if (action === "releaseRead" && phase === C0_READ) recorder.credit("late-c0-cannot-start-new-shadow-work"); - if (action === "releaseRead" && phase === CONFIRMATION_READ) recorder.credit("late-c1-cannot-emit-second-verdict"); - if (action === "releaseLoad" && phase === SNAPSHOT_DECODE) recorder.credit("late-shadow-decode-cannot-start-c1"); - if (action === "releaseDump" && phase === FILL_SERIALIZE) recorder.credit("late-shadow-dump-cannot-dispatch-write"); - if (action === "releaseWrite" && phase === FILL_WRITE) recorder.credit("late-shadow-write-cannot-change-caller-or-verdict"); - } - } -} - -export function recoveryShadowWitnesses(profile, histories, recorder = createWitnessRecorder()) { - if (profile !== "recovery" && profile !== "shadow") return recorder.labels(); - for (const { path, states, predictions } of histories) { - recorder.enter(path); - if (states[0]?.s?.phase === undefined) continue; - const steps = predictions.map((s, index) => ({ s, input: index === 0 ? undefined : explicitInput(states[index], `${path} step ${index}`) })); - if (profile === "recovery") recoveryWitnesses(steps, recorder); - else shadowWitnesses(steps, recorder); - } - return recorder.labels(); -} diff --git a/formal/replay/witnesses/recovery.mjs b/formal/replay/witnesses/recovery.mjs index a914616b..923ef4f1 100644 --- a/formal/replay/witnesses/recovery.mjs +++ b/formal/replay/witnesses/recovery.mjs @@ -1,8 +1,167 @@ import { flowLabels } from "./labels.mjs"; import { createWitnessRecorder } from "./recorder.mjs"; +import { fidelityBinding } from "./fidelity.mjs"; +// The recovery witnesses are decided from the recorded inputs and the two +// driver channels (`o`, `d`) alone; no rule reads the model's private state, +// so the profile can be recomposed without changing a count. What a rule needs +// beyond the observation deltas is shadowed here from the inputs, in the +// drivers' own terms: both clocks (the init fixture, `advance`, `rollbackWall`), +// the frame a `seed` stores and its stamp, the frame a stored refill leaves, +// the watermark an `invalidate` raises, the maximum a `policy` sets, the fault +// switches, the fixture's request flag and instance classifier, the scopes a +// `closeScope` closes, and the flight's private facts restated once: the +// candidate the acquiring read retained (readable, unfenced and aged in +// [F, M) at the read), its stamp and the maximum in force, the classifier the +// begin code names, the loader deadline and the abandoned or settled sources. +// Which phase the flight is in is read from the observation (a read +// dispatched, a decode held, a loader started, callers completed), never +// re-decided. The fidelity check binds the shadow to the model by comparing +// it, after every step, with the model's private predictions in every history +// that carries them, re-encoded against the composed layout (storage lists, +// `ttls`, `resolved`, the kernel classifier codes, `loads`, `deadlines`, +// `retained`, `drained`). + +const IDLE = 0, FRESH_DECODE = 1, SOURCE_RUNNING = 2, RECOVERY_DECODE = 3; +const REGISTERED = 0, ABANDONED = 1, SETTLED = 2; +// The drivers' classifier codes: beginCall choice % 4 (allow, deny, error, +// inherit) and init choice % 4 (timeout-only, allow, deny, error). +const ALLOW = 0, DENY = 1, ERROR = 2, TIMEOUT_ONLY = 3, INHERIT = 3; +const FRESH_AGE_MS = 1000, SOURCE_BUDGET_MS = 10, FIXTURE_TTL_MS = 60000, INITIAL_MAX_AGE_MS = 5000; +const SEED_AGES = [0, 999, 1000, 4999, 5000, -1, 1000]; +const INSTANCE_CLASSIFIERS = [TIMEOUT_ONLY, ALLOW, DENY, ERROR]; +const VALUE_ONE = 1, VALUE_TWO = 2, SOURCE_ERROR = 3, DEADLINE_ERROR = 4; + +const initialShadow = choice => ({ + now: 10000, wall: 100000, frame: VALUE_ONE, created: 99000, expires: 70000, watermark: 0, maxAge: INITIAL_MAX_AGE_MS, + readFailed: false, loadFailed: false, request: choice >= 4, instanceClassifier: INSTANCE_CLASSIFIERS[choice % 4], + closed: [false, false], attached: [false, false], memo: [0, 0], phase: IDLE, + candidate: 0, candidateCreated: 0, acceptedMaxAge: INITIAL_MAX_AGE_MS, classifier: ALLOW, canRecover: false, + deadline: 0, sources: [], activeLoader: 0, +}); +// The one value the step's completed callers received, if any completed. +const completedWith = (prior, current) => { + const values = new Set(current.calls.filter((v, j) => prior.calls[j] === 0 && v !== 0)); + return values.size === 1 ? [...values][0] : undefined; +}; +const memoized = (s, value) => { + if (!s.request || !(value === VALUE_ONE || value === VALUE_TWO)) return s.memo; + return s.memo.map((m, scope) => s.attached[scope] && !s.closed[scope] ? value : m); +}; +// The shadow after one recorded step: the inputs decide the environment and +// the selections, the observation decides what the flight did. +function advanceShadow(before, step, prior, current) { + const s = { ...before, closed: [...before.closed], attached: [...before.attached], memo: [...before.memo], sources: [...before.sources] }; + const { action, choice } = step; + const completed = completedWith(prior, current); + const readDispatched = current.reads > prior.reads, loadHeld = current.loads > prior.loads, loaderStarted = current.loaders > prior.loaders; + switch (action) { + case "beginCall": { + const scope = Math.floor(choice / 4), policy = choice % 4; + if (!readDispatched) break; // a memo hit: nothing changes in the flight + const readable = !s.readFailed && s.frame > 0 && s.now < s.expires && s.created > s.watermark; + const eligible = readable && s.created <= s.wall && s.wall - s.created < s.maxAge; + s.attached = [false, false]; s.attached[scope] = true; + s.phase = loadHeld ? FRESH_DECODE : SOURCE_RUNNING; + s.classifier = policy === INHERIT ? s.instanceClassifier : policy; + s.candidate = eligible ? s.frame : 0; s.candidateCreated = s.created; s.acceptedMaxAge = s.maxAge; + s.canRecover = !s.readFailed; + if (loaderStarted) { s.sources.push(REGISTERED); s.activeLoader = s.sources.length - 1; } + s.deadline = s.now + SOURCE_BUDGET_MS; + break; + } + case "joinCall": if (current.calls.at(-1) === 0) s.attached[choice] = true; break; + case "closeScope": s.closed[choice] = true; s.memo[choice] = 0; s.attached[choice] = false; break; + case "resolveLoader": case "rejectLoader": case "rejectTimeout": { + const abandoned = s.sources[choice] === ABANDONED; + s.sources[choice] = SETTLED; + if (abandoned) break; + if (action === "resolveLoader") { + s.phase = IDLE; + if (current.writes > prior.writes) { s.frame = VALUE_TWO; s.created = s.wall; s.expires = s.now + s.acceptedMaxAge; } + s.memo = memoized(s, VALUE_TWO); + } else s.phase = loadHeld ? RECOVERY_DECODE : IDLE; + break; + } + case "releaseLoad": { + const retry = s.phase === FRESH_DECODE && loaderStarted; + if (completed !== undefined) s.memo = memoized(s, completed); + if (retry) { s.phase = SOURCE_RUNNING; s.canRecover = false; s.sources.push(REGISTERED); s.activeLoader = s.sources.length - 1; s.deadline = s.now + SOURCE_BUDGET_MS; } + else s.phase = IDLE; + break; + } + case "seed": s.frame = choice === 6 ? VALUE_TWO : VALUE_ONE; s.created = s.wall - SEED_AGES[choice]; s.expires = s.now + FIXTURE_TTL_MS; break; + case "advance": { + // The loader deadline is delivered inside the advance: the source is + // abandoned and the flight holds its recovery decode or completes. + if (s.phase === SOURCE_RUNNING && s.now + choice >= s.deadline) { + s.sources[s.activeLoader] = ABANDONED; + s.phase = loadHeld ? RECOVERY_DECODE : IDLE; + } + s.now += choice; s.wall += choice; + break; + } + case "invalidate": if (s.wall > s.watermark) s.watermark = s.wall; break; + case "rollbackWall": s.wall -= 1000; break; + case "policy": s.maxAge = choice; break; + case "readFault": s.readFailed = choice === 1; break; + case "loadFault": s.loadFailed = choice === 1; break; + default: throw new Error(`unknown recovery action ${action}`); + } + return s; +} +function shadowHistory(steps) { + const shadows = [initialShadow(steps[0].choice)]; + for (let i = 1; i < steps.length; i++) shadows.push(advanceShadow(shadows[i - 1], steps[i], steps[i - 1].expected, steps[i].expected)); + return shadows; +} + +// The binding between the public-only shadow and the model: after each step +// the shadow, re-encoded into the composed layout, must equal the model's +// private predictions field by field. The kernel's classifier codes are +// recovery.qnt's (TIMEOUT_ONLY 0, ALLOW 1, DENY 2; a classifier that throws +// is DENY); a decode is held while `loads` is nonempty, a loader runs while a +// source deadline is registered, and the flight's snapshot is `retained`. +const KERNEL_CLASSIFIER = { [TIMEOUT_ONLY]: 0, [ALLOW]: 1, [DENY]: 2, [ERROR]: 2 }; +function modelView(shadow) { + const running = shadow.phase === SOURCE_RUNNING, recovering = shadow.phase === RECOVERY_DECODE; + return { + now: shadow.now, skew: shadow.wall - shadow.now, remoteValues: [shadow.frame], created: [shadow.created], expires: [shadow.expires], watermark: [shadow.watermark], + readFailed: shadow.readFailed, loadFailed: shadow.loadFailed, closed: shadow.closed, memo: shadow.memo, + ttls: { localMs: 0, freshMs: FRESH_AGE_MS, retentionMs: shadow.maxAge }, + resolved: { layers: { request: shadow.request, local: false, remote: true }, coalesce: true }, + instanceClassifier: KERNEL_CLASSIFIER[shadow.instanceClassifier], + decoding: shadow.phase === FRESH_DECODE || recovering, recoveryDecoding: recovering, + deadlines: running ? [shadow.deadline] : [], + snapshot: (running || recovering) && shadow.canRecover + ? { candidate: shadow.candidate, created: shadow.candidateCreated, maximum: shadow.acceptedMaxAge, classifier: KERNEL_CLASSIFIER[shadow.classifier] } : null, + drained: shadow.sources.map(source => source === SETTLED), + }; +} +// The composed layout's fields the view reads; a history in another layout +// (the retired text's corpus until the hosted run regenerates it) is named at +// its first missing field rather than misread. +const layoutFields = ["now", "skew", "remoteValues", "created", "expires", "watermark", "readFailed", "loadFailed", "closed", "memo", "ttls", "resolved", "instanceClassifier", "loads", "deadlines", "retained", "drained"]; +// The model's private state in the shadow's terms: a decode is held while +// `loads` is nonempty, a loader runs while a source deadline is registered, +// and the flight's snapshot is `retained`. +function layoutView(m) { + return { + now: m.now, skew: m.skew, remoteValues: m.remoteValues, created: m.created, expires: m.expires, watermark: m.watermark, + readFailed: m.readFailed, loadFailed: m.loadFailed, closed: m.closed, memo: m.memo, ttls: m.ttls, resolved: m.resolved, instanceClassifier: m.instanceClassifier, + decoding: m.loads.length > 0, recoveryDecoding: m.loads.length > 0 && m.loads[0].recovery === true, + deadlines: m.deadlines.map(due => due.at), + snapshot: m.retained.length > 0 ? { candidate: m.retained[0].candidate, created: m.retained[0].created, maximum: m.retained[0].maximum, classifier: m.retained[0].classifier } : null, + drained: m.drained, + }; +} +// A history projected to o and d carries nothing to compare; any other decoded +// state is the composed layout, which must equal the shadow after each step. +const { carriesPrivateState, checkFidelity } = fidelityBinding({ publicChannels: ["o", "d"], layoutFields, view: (shadow, state) => [modelView(shadow), layoutView(state)] }); + +// -- Request-scope memoization of a recovered value ----------------------------- function recoveryScopeWitnesses(histories, recorder) { - for (const { path, steps, predictions: states } of histories) { + for (const { path, steps, shadows } of histories) { recorder.enter(path); const memo = new Map(); const probes = new Map(); @@ -10,17 +169,15 @@ function recoveryScopeWitnesses(histories, recorder) { for (const [i, step] of steps.entries()) { recorder.step(i); if (i === 0 || steps[0].choice < 4) continue; - const before = states[i - 1], after = states[i]; + const before = shadows[i - 1], after = shadows[i]; const previous = steps[i - 1].expected, o = step.expected; if (step.action === "closeScope") { memo.delete(step.choice); - if (before.phase === 3 && before.attached[step.choice]) closedDuringDecode = true; + if (before.phase === RECOVERY_DECODE && before.attached[step.choice]) closedDuringDecode = true; } if (step.action === "releaseLoad" && o.recovery.length > previous.recovery.length && o.recovery.at(-1) === "served") { const group = o.recovery.length; - for (const scope of [0, 1]) if (before.attached[scope] && !before.closed[scope]) { - memo.set(scope, { value: after.memo[scope], group }); - } + for (const scope of [0, 1]) if (before.attached[scope] && !before.closed[scope]) memo.set(scope, { value: after.memo[scope], group }); if (closedDuringDecode) probeAfterClosedRecovery = true; closedDuringDecode = false; } else if (step.action === "releaseLoad" || (step.action === "resolveLoader" && o.calls.some((v, j) => v > 0 && previous.calls[j] === 0))) { @@ -41,73 +198,61 @@ function recoveryScopeWitnesses(histories, recorder) { if (step.action === "joinCall" && step.diagnostics.coalesced.length > steps[i - 1].diagnostics.coalesced.length && step.diagnostics.coalesced.at(-1) === "request_local") recorder.credit("request-follower-shares-recovery-flight"); } } - return recorder.labels(); } -// A wall rollback during decode leaves the retained candidate created after -// the observed wall; the recovery must miss. Reads the private phase, load -// fault and candidate creation time that select this schedule. +// A wall rollback during decode leaves the retained candidate stamped after +// the observed wall; the recovery must miss. function rollbackWitnesses(histories, recorder) { - for (const { path, steps, predictions: states } of histories) { + for (const { path, steps, shadows } of histories) { recorder.enter(path); for (const [i, step] of steps.entries()) { recorder.step(i); if (i === 0) continue; - const before = states[i - 1], previous = steps[i - 1].expected, o = step.expected; - if (step.action === "releaseLoad" && before.phase === 3 && before.loadFailed === false && + const before = shadows[i - 1], previous = steps[i - 1].expected, o = step.expected; + if (step.action === "releaseLoad" && before.phase === RECOVERY_DECODE && before.loadFailed === false && before.wall < before.candidateCreated && o.recovery.length > previous.recovery.length && o.recovery.at(-1) === "miss") recorder.credit("rollback-rejects-retained-future"); } } } -// Stale-recovery flow witnesses over declared inputs, public results, recovery -// outcomes and fallback diagnostics. Classifier choices come from the init and -// beginCall inputs of the history, never from private model state. -export function recoveryWitnesses(histories, recorder = createWitnessRecorder()) { - rollbackWitnesses(histories, recorder); - recoveryScopeWitnesses(histories, recorder); - flowLabels(histories, true, recorder); +// -- Classification and settlement flow over the public channels ----------------- +// Classifier choices come from the init and beginCall inputs of the history. +function flowWitnesses(histories, recorder) { for (const { path, steps } of histories) { recorder.enter(path); - let invalidatedDuringFlight = false; - let advancedDuringDecode = false; - let decoding = false; - let classifier = -1; - let operationClassifier = -1; - let recoveryCause = ""; - let recoveryErrorCount = 0; + let invalidatedDuringFlight = false, advancedDuringDecode = false, decoding = false; + let classifier = -1, operationClassifier = -1, recoveryCause = "", recoveryErrorCount = 0; const abandoned = new Set(); let currentSource = -1; for (const [i, step] of steps.entries()) { recorder.step(i); - const o = step.expected; - const previous = steps[i - 1]?.expected; + const o = step.expected, previous = steps[i - 1]?.expected; if (previous === undefined) continue; if (step.action === "beginCall") { invalidatedDuringFlight = false; advancedDuringDecode = false; decoding = false; + operationClassifier = step.choice % 4; recoveryErrorCount = step.diagnostics.fallbackErrors.length; + classifier = step.choice % 4 === INHERIT ? INSTANCE_CLASSIFIERS[steps[0].choice % 4] : step.choice % 4; } - if (step.action === "beginCall") { operationClassifier = step.choice % 4; recoveryErrorCount = step.diagnostics.fallbackErrors.length; } - if (step.action === "beginCall") classifier = step.choice % 4 === 3 ? [3, 0, 1, 2][steps[0].choice % 4] : step.choice % 4; if (o.loaders > previous.loaders) { if (abandoned.size > 0) recorder.credit("recovery-abandoned-overlap"); currentSource = o.loaders - 1; decoding = false; } const rejected = step.action === "rejectLoader" || step.action === "rejectTimeout"; if (step.action === "advance" && currentSource >= 0 && !decoding && - (o.loads > previous.loads || o.recovery.length > previous.recovery.length || o.calls.some((c, i) => c === 4 && previous.calls[i] === 0))) { + (o.loads > previous.loads || o.recovery.length > previous.recovery.length || o.calls.some((c, j) => c === DEADLINE_ERROR && previous.calls[j] === 0))) { abandoned.add(currentSource); recoveryCause = "deadline"; - if (classifier === 1 && o.calls.includes(4)) { - if (operationClassifier === 1) recorder.credit("explicit-denial-overrides-timeout"); - if (operationClassifier === 3 && steps[0].choice % 4 === 2) recorder.credit("instance-denial-overrides-timeout-default"); + if (classifier === DENY && o.calls.includes(DEADLINE_ERROR)) { + if (operationClassifier === DENY) recorder.credit("explicit-denial-overrides-timeout"); + if (operationClassifier === INHERIT && steps[0].choice % 4 === 2) recorder.credit("instance-denial-overrides-timeout-default"); } } if (rejected && !abandoned.has(step.choice)) { const instance = steps[0].choice % 4; - if (instance === 1 && operationClassifier === 1 && o.calls.some((c, j) => c === 3 && previous.calls[j] === 0)) recorder.credit("operation-denial-overrides-instance-allow"); - if (instance === 3 && operationClassifier === 3 && o.calls.some((c, j) => c === 3 && previous.calls[j] === 0)) recorder.credit("instance-classifier-error-preserves-source"); + if (instance === 1 && operationClassifier === DENY && o.calls.some((c, j) => c === SOURCE_ERROR && previous.calls[j] === 0)) recorder.credit("operation-denial-overrides-instance-allow"); + if (instance === 3 && operationClassifier === INHERIT && o.calls.some((c, j) => c === SOURCE_ERROR && previous.calls[j] === 0)) recorder.credit("instance-classifier-error-preserves-source"); recoveryCause = step.action === "rejectTimeout" ? "propagated-timeout" : "source-error"; - if (classifier === 3 && step.action === "rejectLoader" && o.calls.includes(3) && o.loads === previous.loads) recorder.credit("default-denies-ordinary-error"); + if (classifier === TIMEOUT_ONLY && step.action === "rejectLoader" && o.calls.includes(SOURCE_ERROR) && o.loads === previous.loads) recorder.credit("default-denies-ordinary-error"); } if ((rejected || step.action === "resolveLoader") && abandoned.has(step.choice)) { recorder.credit("recovery-late-source-settles"); abandoned.delete(step.choice); @@ -115,13 +260,11 @@ export function recoveryWitnesses(histories, recorder = createWitnessRecorder()) if (o.loads > previous.loads && step.action !== "beginCall") decoding = true; if (o.recovery.length > previous.recovery.length && o.recovery.at(-1) === "served") { if (step.diagnostics.fallbackErrors.length === recoveryErrorCount + 1 && step.diagnostics.fallbackErrors.at(-1) === "remote") recorder.credit("recovery-keeps-source-failure-trail"); - if (steps[0].choice % 4 === 1 && operationClassifier === 3 && recoveryCause === "source-error") recorder.credit("instance-allow-recovers-ordinary-error"); - if (steps[0].choice % 4 === 2 && operationClassifier === 0) recorder.credit("operation-allow-overrides-instance-denial"); - } - if (o.recovery.length > previous.recovery.length && o.recovery.at(-1) === "served" && classifier === 3) { - recorder.credit(`default-recovers-${recoveryCause}`); + if (steps[0].choice % 4 === 1 && operationClassifier === INHERIT && recoveryCause === "source-error") recorder.credit("instance-allow-recovers-ordinary-error"); + if (steps[0].choice % 4 === 2 && operationClassifier === ALLOW) recorder.credit("operation-allow-overrides-instance-denial"); + if (classifier === TIMEOUT_ONLY) recorder.credit(`default-recovers-${recoveryCause}`); } - if (step.action === "releaseLoad" && o.recovery.at(-1) === "deserialization_error" && o.calls.some((c, i) => c === 4 && previous.calls[i] === 0)) recorder.credit("recovery-failure-preserves-timeout"); + if (step.action === "releaseLoad" && o.recovery.at(-1) === "deserialization_error" && o.calls.some((c, j) => c === DEADLINE_ERROR && previous.calls[j] === 0)) recorder.credit("recovery-failure-preserves-timeout"); if (step.action === "invalidate" && o.calls.includes(0)) invalidatedDuringFlight = true; if (step.action === "rejectLoader" && o.loads > previous.loads) decoding = true; if (step.action === "advance" && decoding) advancedDuringDecode = true; @@ -133,5 +276,96 @@ export function recoveryWitnesses(histories, recorder = createWitnessRecorder()) } } } +} + +// -- The F/M boundaries, the fence and the decode rules, over the shadow ---------- +// Each witness requires its distinguishing input, an otherwise eligible +// candidate and the visible consequence, never merely a phase or a label. +const settled = (before, after, value) => after.calls.some((result, index) => before.calls[index] === 0 && result === value); +function ruleWitnesses(histories, recorder) { + for (const { path, steps, shadows, predictions } of histories) { + recorder.enter(path); + let acquired, acquisitionObservations, failedFreshDecode = false, decodeStartedAge; + for (let index = 1; index < steps.length; index++) { + recorder.step(index); + const before = shadows[index - 1], after = shadows[index]; + const previous = steps[index - 1].expected, actual = steps[index].expected, action = steps[index].action; + if (action === "beginCall" && actual.reads === previous.reads + 1) { + acquired = before; acquisitionObservations = actual; failedFreshDecode = false; decodeStartedAge = undefined; + } + if (acquired === undefined || acquisitionObservations === undefined) continue; + const ageAtRead = acquired.wall - acquired.created; + const ageNow = before.wall - before.candidateCreated; + const phase = before.phase; + if (after.phase === RECOVERY_DECODE && phase !== RECOVERY_DECODE) { + // advance() delivers the source deadline before completing its clock + // jump: recovery decoding starts at that instant, not at the final clock. + const untilDeadline = action === "advance" ? before.deadline - before.now : 0; + decodeStartedAge = ageNow + untilDeadline; + } + const initialBytesPresent = acquired.frame > 0 && acquired.readFailed === false && acquired.now < acquired.expires; + const initialBytesUnfenced = acquired.created > acquired.watermark; + const appendedRecovery = actual.recovery.slice(previous.recovery.length); + const noSharedWrite = actual.dumps === acquisitionObservations.dumps && actual.writes === acquisitionObservations.writes; + const noReread = actual.reads === acquisitionObservations.reads; + const returnsCandidate = settled(previous, actual, before.candidate); + const returnsSourceError = settled(previous, actual, SOURCE_ERROR); + const returnsDeadline = settled(previous, actual, DEADLINE_ERROR); + if (action === "releaseLoad" && phase === FRESH_DECODE) { + failedFreshDecode = before.loadFailed === true; + if (!failedFreshDecode && returnsCandidate && actual.loaders === acquisitionObservations.loaders + && actual.recovery.length === previous.recovery.length && noSharedWrite) { + if (ageAtRead === 0) recorder.credit("fresh-zero-age-skips-source"); + if (ageAtRead === 999) recorder.credit("last-fresh-age-skips-source"); + } + } + if (action === "resolveLoader" && phase === SOURCE_RUNNING && before.candidate > 0 && ageAtRead >= 1000 + && settled(previous, actual, VALUE_TWO) && actual.loads === previous.loads && actual.recovery.length === previous.recovery.length) { + recorder.credit("source-success-skips-stale-decode"); + } + if (action === "rejectLoader" && phase === SOURCE_RUNNING && returnsSourceError && actual.loads === previous.loads && noSharedWrite && noReread) { + if (before.classifier === ERROR && actual.classifications === previous.classifications + 1 + && before.candidate > 0 && ageNow >= 0 && ageNow < before.acceptedMaxAge) recorder.credit("classifier-error-keeps-error-without-decode"); + if (failedFreshDecode && actual.classifications === previous.classifications && appendedRecovery.length === 0) recorder.credit("failed-fresh-decode-is-not-recovery"); + if (acquired.readFailed === true && actual.classifications === previous.classifications && appendedRecovery.length === 0) recorder.credit("failed-initial-read-skips-recovery"); + } + if (appendedRecovery.includes("miss") && phase === SOURCE_RUNNING && (returnsSourceError || returnsDeadline) + && actual.loads === previous.loads && noReread && noSharedWrite) { + // Isolate the rejection rule: a fenced or physically missing value cannot + // establish that the age check itself prevented recovery, and vice versa. + if (initialBytesPresent && initialBytesUnfenced) { + if (ageAtRead === acquired.maxAge) recorder.credit("maximum-age-read-preserves-source-error"); + if (ageAtRead < 0) recorder.credit("future-read-preserves-source-error"); + } + if (initialBytesPresent && !initialBytesUnfenced && ageAtRead >= 0 && ageAtRead < acquired.maxAge) recorder.credit("fenced-read-does-not-retain"); + if (before.candidate > 0 && ageNow >= before.acceptedMaxAge) recorder.credit("maximum-age-before-decode-skips-load"); + } + if (action === "releaseLoad" && phase === RECOVERY_DECODE && noSharedWrite && noReread) { + if (appendedRecovery.includes("served") && returnsCandidate) { + if (ageAtRead === 1000) recorder.credit("first-stale-age-recovers-without-publication"); + if (ageNow === before.acceptedMaxAge - 1) recorder.credit("last-recovery-age-serves"); + if (ageNow >= 0 && ageNow < 1000 && ageAtRead >= 1000) recorder.credit("rollback-below-fresh-age-still-recovers"); + if (before.frame !== before.candidate) recorder.credit("replacement-cannot-change-recovered-value"); + // The drivers' age channel in milliseconds (the parsed step carries seconds). + const ages = predictions[index].d.ages; + if (decodeStartedAge !== undefined && ageNow !== decodeStartedAge && ages.at(-1) === ageNow) recorder.credit("recovery-age-sampled-at-successful-decode"); + } + if (appendedRecovery.includes("miss") && ageNow === before.acceptedMaxAge && (returnsSourceError || returnsDeadline)) recorder.credit("exact-maximum-after-decode-rejects"); + } + } + } +} + +export function recoveryWitnesses(histories, recorder = createWitnessRecorder()) { + const shadowed = histories.map(history => { + const shadows = shadowHistory(history.steps); + if (carriesPrivateState(history.predictions)) checkFidelity(shadows, history.predictions, history.path); + return { ...history, shadows }; + }); + rollbackWitnesses(shadowed, recorder); + recoveryScopeWitnesses(shadowed, recorder); + flowLabels(shadowed, true, recorder); + flowWitnesses(shadowed, recorder); + ruleWitnesses(shadowed, recorder); return recorder.labels(); } diff --git a/formal/replay/witnesses/runtime-boundaries.mjs b/formal/replay/witnesses/runtime-boundaries.mjs index e401df63..8ac34194 100644 --- a/formal/replay/witnesses/runtime-boundaries.mjs +++ b/formal/replay/witnesses/runtime-boundaries.mjs @@ -64,7 +64,7 @@ export function runtimeBoundaryTraceWitnesses(history, recorder = standaloneReco if (falsyProbes.size === 4) recorder.credit(`falsy-values:${layerNames[layer]}`); if (equality !== undefined && layer !== 0 && Math.floor(policy / 3) === 2 && publication.policy < 12 && Math.floor(publication.policy / 3) === 2 - && publication.loader > equality.loader && value !== equality.value) recorder.credit(`exact-serving-cohort:${layerNames[layer]}`); + && publication.loader >= equality.loadersAtSettlement && value !== equality.value) recorder.credit(`exact-serving-cohort:${layerNames[layer]}`); if (priorPublication !== undefined && publication.loader < priorPublication.loader && value !== priorPublication.value && !defaultSharing && layer === 0 && publication.policy % 3 === 0 && priorPublication.policy % 3 === 0) recorder.credit("inherited-false-request-last-writer"); @@ -103,9 +103,21 @@ export function runtimeBoundaryTraceWitnesses(history, recorder = standaloneReco priorPublication = publication; publication = { loader, value, policy: source.policy }; } else if (layer !== 0 && source.policy < 12 && Math.floor(source.policy / 3) === 1 - && source.reads === 0 && step.writes === before.writes) equality = { loader, value }; - else if (publication !== undefined && source.reads === 0 && step.writes === before.writes - && (source.policy >= 14 && source.policy <= 17 || source.policy === 21 || source.policy === 13 && layer === 0)) { + && source.reads === 0 && step.writes === before.writes) { + // The above-sample publication must come from a source that started at or + // after this settlement. In the local fixture reads and writes stay 0, so + // a source that overlapped the equality source and published later is + // indistinguishable from a port that admits the key at equality. + equality = { loader, value, loadersAtSettlement: step.loaders }; + } else if (publication !== undefined && source.reads === 0 && step.writes === before.writes + && (source.policy >= 14 && source.policy <= 17 && fixture < 6 && (source.policy === 14 || source.policy === 16 || layer !== 0) + || source.policy === 21 || source.policy === 13 && layer === 0)) { + // An invalid or null leaf (14-17) only shows a bypass where the layer + // holding the publication would be on under a coerced or inherited + // reading: fixtures 6-8 enable that layer only through a runtime-TTL + // reply, so a new loader with no read there proves nothing. Policies 15 + // and 17 (requestLocal) are publicly identical to 13 in the request + // fixtures, so they need a shared layer. preserved = { policy: source.policy, publication, bypassValue: value }; } } diff --git a/formal/replay/witnesses/runtime.mjs b/formal/replay/witnesses/runtime.mjs index 0b27c688..b26f8ff4 100644 --- a/formal/replay/witnesses/runtime.mjs +++ b/formal/replay/witnesses/runtime.mjs @@ -8,19 +8,59 @@ const successful = value => value !== undefined && value > 0 && value !== 3 && v // schedule; a later public call must expose retained values, skipped work, or // independent work. It neither drives implementations nor adds a behavioral // oracle. (The policy and scope profiles' runtime rules live in policy.mjs and -// scope.mjs; policy.mjs reads no private predictions.) +// scope.mjs; policy.mjs reads no private predictions.) The tracked local-only +// rule reads the parsed inputs and public observations only. export function runtimeWitnesses(profile, histories, recorder = createWitnessRecorder()) { if (profile !== "layers") return recorder.labels(); - for (const { path, states, predictions } of histories) { + for (const { path, steps, states, predictions } of histories) { recorder.enter(path); + // Excerpt fixtures carry raw states without parsed steps. + if (steps !== undefined) trackedLocalOnlyWitnesses(path, steps, recorder); // Published smoke fixtures deliberately retain only public observations. if (states[0]?.s?.sources === undefined) continue; - const steps = predictions.map((s, index) => ({ s, input: index === 0 ? undefined : explicitInput(states[index], `${path} step ${index}`) })); - layersWitnesses(steps, recorder); + const predicted = predictions.map((s, index) => ({ s, input: index === 0 ? undefined : explicitInput(states[index], `${path} step ${index}`) })); + layersWitnesses(predicted, recorder); } return recorder.labels(); } +// Tracked reads without a remote adapter (init choice 5: tracked = fixture % 2, +// remote available = fixture < 4). A source a caller starts while the local +// layer is on publishes its settled value to the caller's (instance, key). A +// later caller in a fresh context (3 or 4, so no request memo) on the same +// instance and key that returns that value without starting a source or +// reading was served by that local publication: the fixture has no remote and +// a joined flight leaves the caller pending. The model keeps reads and writes +// at zero here; anything else is a contradiction, not a schedule. +const localLayerOn = policy => policy === 0 || policy === 1 || policy === 3; +function trackedLocalOnlyWitnesses(path, steps, recorder) { + if (steps[0].choice !== 5) return; + let policy = 0; + // Source indices follow o.loaders; a start outside beginCall stays + // unattributed so later indices still line up. + const sources = [], published = new Map(); + for (let i = 1; i < steps.length; i++) { + recorder.step(i); + const { action, choice, expected: current } = steps[i], prior = steps[i - 1].expected; + if (current.reads !== 0 || current.writes !== 0) throw new Error(`${path} step ${i}: adapter effects in the fixture without a remote adapter`); + if (action === "policy") policy = choice; + if (action === "resolveLoader") { + const source = sources[Math.floor((choice - 1) / 2)]; + if (source?.localOn) published.set(source.identity, (choice - 1) % 2 + 1); + } + if (action !== "beginCall") { + for (let started = current.loaders - prior.loaders; started > 0; started--) sources.push(undefined); + continue; + } + const context = Math.floor(choice / 4), key = choice % 4; + const identity = (context === 2 || context === 4 ? 1 : 0) * 4 + key; + if (current.loaders > prior.loaders) sources.push({ identity, localOn: localLayerOn(policy) }); + const value = current.calls.at(-1); + if (context >= 3 && current.loaders === prior.loaders && current.reads === prior.reads && successful(value) + && localLayerOn(policy) && published.get(identity) === value) recorder.credit("tracked-local-only-hit"); + } +} + function layersWitnesses(steps, recorder) { const sourcePublications = new Map(); const probed = new Map(); @@ -87,7 +127,7 @@ function layersWitnesses(steps, recorder) { } if (localHit) { recorder.credit("local-hit-stops-remote-and-source"); - if (trackedLocalOnly.get(identity) === value) recorder.credit(before.remoteAvailable ? "tracked-remote-disabled-local-hit" : "tracked-local-only-hit"); + if (before.remoteAvailable && trackedLocalOnly.get(identity) === value) recorder.credit("tracked-remote-disabled-local-hit"); } if (starts && before.sources.some(source => source.key === key && source.instance !== instance && source.result === 0)) { recorder.credit("different-instances-own-distinct-flights"); diff --git a/formal/replay/witnesses/shadow.mjs b/formal/replay/witnesses/shadow.mjs index 0c2e5c63..9482c9c7 100644 --- a/formal/replay/witnesses/shadow.mjs +++ b/formal/replay/witnesses/shadow.mjs @@ -1,32 +1,213 @@ import { flowLabels } from "./labels.mjs"; import { createWitnessRecorder } from "./recorder.mjs"; +import { fidelityBinding } from "./fidelity.mjs"; + +// The shadow profile's witnesses, decided from the recorded inputs and the +// asserted public channels alone. What a rule needs beyond the observation +// deltas is shadowed here: the fixture the init choice names (comparator, +// comparison time, source work, hook, default logging), both clocks, the +// frame a seed or a fill stored with its stamp, the watermark an invalidation +// raised, the fault switches, and the one dark job the drivers run at a time +// (its phase, its acquired C0 with the frame's stamp and the fence it observed, +// whether its budget expired). The shadow replays the profile's rules over the +// inputs and is bound to the model two ways: at every step the outcome label +// and the read, decode, dump and write counts it predicts must equal the +// observed ones or the classifier refuses the history, and wherever a history +// still carries the model's private predictions the fidelity check compares +// the shadow after every step with the composed layout +// (dialcache-shadow-conformance.qnt over the kernel library): the frame, its +// stamp and the watermark, the two clocks, the fault switches, the one live +// job as a shadow::Job record and the read or decode it holds by ordinal. + +const IDLE = 0, C0_READ = 1, SOURCE_WAIT = 2, SNAPSHOT_DECODE = 3, CONFIRMATION_READ = 4, FILL_SERIALIZE = 5, FILL_WRITE = 6, JOB_DONE = 7; +const NOT_STARTED = 0, PENDING = 1, ACCEPTED = 2, FAILED = 3, TIMED_OUT = 4; +const VALUES = 0, EQUAL = 1, UNEQUAL = 2, ERROR = 3; +const BUDGET = 10, FRESH = 60000; +// The drivers' seed choices: byte identity (a binary spelling shares the +// bytes of its text form), decoded value and form. +const payloadBytes = payload => ({ 3: 1, 4: 2, 6: 5, 8: 7 })[payload] ?? payload; +const decoded = payload => payload >= 7 ? 3 : [3, 5, 6].includes(payload) ? 1 : payload === 4 ? 2 : payload; +const binary = payload => [3, 4, 5, 8].includes(payload); + +function fixtureOf(choice) { + return { + comparator: choice >= 11 ? VALUES : choice === 10 ? ERROR : choice % 4, + comparisonMs: choice === 9 || choice === 10 ? BUDGET : 0, + sourceWorkMs: choice === 12 ? BUDGET : choice === 11 ? BUDGET - 1 : 0, + hook: choice !== 8, + defaultLog: choice >= 4 && choice < 8, + }; +} +function initial(choice) { + const fixture = fixtureOf(choice); + return { ...fixture, now: 10000, wall: 100000, frame: 0, created: 0, watermark: 0, c0: 0, c0Created: 0, phase: IDLE, abandoned: false, deadline: 0, + source: NOT_STARTED, sourcePending: false, sourceValue: 0, fence: 0, writeStamp: 0, + readFailed: false, loadFailed: false, dumpFailed: false, writeFailed: false, + shadowActive: fixture.hook, log: fixture.defaultLog, invalidLog: false, invalidShadow: false, acceptedLog: false, acceptedInvalidLog: false, + predicted: { outcome: undefined, reads: 0, loads: 0, dumps: 0, writes: 0 } }; +} +// The profile's rules over the shadow; `predicted` collects what the step must +// show on the public channels. +function done(s, outcome) { s.phase = JOB_DONE; s.predicted.outcome = outcome; } +function continueJob(s) { + if (s.phase !== SOURCE_WAIT || s.source === PENDING) return; + if (s.source === FAILED) return done(s, "source_error"); + if (s.source === TIMED_OUT) return done(s, "timeout"); + if (s.c0 > 0) { s.phase = SNAPSHOT_DECODE; s.predicted.loads++; return; } + if (!(s.wall > s.fence)) return done(s, "fill_fenced"); + s.phase = FILL_SERIALIZE; s.predicted.dumps++; +} +function apply(before, action, choice) { + const s = { ...before, predicted: { outcome: undefined, reads: 0, loads: 0, dumps: 0, writes: 0 } }; + switch (action) { + case "beginCall": { + const jobExpired = s.shadowActive && s.sourceWorkMs >= BUDGET; + s.deadline = s.now + BUDGET; s.now += s.sourceWorkMs; s.wall += s.sourceWorkMs; + s.phase = s.shadowActive && !jobExpired ? C0_READ : JOB_DONE; + s.source = PENDING; s.sourcePending = true; s.sourceValue = 0; s.abandoned = jobExpired; + s.c0 = 0; s.c0Created = 0; s.fence = 0; s.acceptedLog = s.log; s.acceptedInvalidLog = s.invalidLog; + if (s.shadowActive && !jobExpired) s.predicted.reads++; + if (jobExpired) s.predicted.outcome = "timeout"; + break; + } + case "resolveLoader": case "rejectLoader": { + const expired = s.source === TIMED_OUT || s.now >= s.deadline; + s.sourcePending = false; + s.source = expired ? TIMED_OUT : action === "resolveLoader" ? ACCEPTED : FAILED; + if (action === "resolveLoader") s.sourceValue = choice; + continueJob(s); + break; + } + case "releaseRead": { + const readable = s.frame > 0 && s.created > s.watermark; + const snapshot = readable ? s.frame : 0; + const acquired = s.created <= s.wall && s.wall - s.created < FRESH ? snapshot : 0; + if (s.abandoned) { s.phase = JOB_DONE; break; } + if (s.phase === CONFIRMATION_READ) { done(s, s.readFailed ? "confirmation_error" : payloadBytes(snapshot) === payloadBytes(s.c0) ? "mismatch" : "superseded"); break; } + if (s.readFailed) { done(s, "redis_error"); break; } + s.phase = SOURCE_WAIT; s.c0 = acquired; s.c0Created = s.created; s.fence = readable ? 0 : s.watermark; + continueJob(s); + break; + } + case "releaseLoad": { + if (s.abandoned) { s.phase = JOB_DONE; break; } + if (s.loadFailed) { done(s, "deserialization_error"); break; } + s.now += s.comparisonMs; s.wall += s.comparisonMs; + const match = s.comparator === EQUAL || (s.comparator === VALUES && decoded(s.c0) === s.sourceValue); + if (s.now >= s.deadline) { s.abandoned = true; done(s, "timeout"); break; } + if (s.comparator === ERROR) { done(s, "comparison_error"); break; } + if (match) { done(s, "match"); break; } + s.phase = CONFIRMATION_READ; s.predicted.reads++; + break; + } + case "releaseDump": { + if (s.abandoned) { s.phase = JOB_DONE; break; } + if (s.dumpFailed) { done(s, "fill_error"); break; } + if (!(s.wall > s.fence)) { done(s, "fill_fenced"); break; } + s.phase = FILL_WRITE; s.writeStamp = s.wall; s.predicted.writes++; + break; + } + case "releaseWrite": { + if (!s.writeFailed) { s.frame = s.sourceValue; s.created = s.writeStamp; } + if (s.abandoned) { s.phase = JOB_DONE; break; } + done(s, s.writeFailed ? "fill_error" : "filled"); + break; + } + case "advance": { + const expired = s.now + choice >= s.deadline; + if (s.source === PENDING && expired) s.source = TIMED_OUT; + if (s.phase > IDLE && s.phase < JOB_DONE && !s.abandoned && expired) { + s.abandoned = true; s.predicted.outcome = "timeout"; + if (s.phase === SOURCE_WAIT) s.phase = JOB_DONE; + } + s.now += choice; s.wall += choice; + break; + } + case "seed": case "seedUnicode": case "reencode": s.frame = choice; s.created = s.wall; break; + case "invalidate": if (!s.writeFailed) s.watermark = Math.max(s.watermark, s.wall + choice); break; + case "rollbackWall": s.wall -= 1000; break; + case "advanceWall": s.wall += choice; break; + case "logPolicy": s.log = choice === 1; s.invalidLog = choice === 2; s.invalidShadow = false; s.shadowActive = s.hook; break; + case "shadowPolicy": s.shadowActive = s.hook && choice === 0; s.log = s.defaultLog; s.invalidShadow = choice === 2; s.invalidLog = false; break; + case "readFault": s.readFailed = choice === 1; break; + case "loadFault": s.loadFailed = choice === 1; break; + case "dumpFault": s.dumpFailed = choice === 1; break; + case "writeFault": s.writeFailed = choice === 1; break; + default: throw new Error(`unknown action ${action}`); + } + return s; +} +// The shadow bound to the history: what the step predicts must be what the +// drivers observed, or the history is refused rather than classified. +function bind(path, index, s, previous, actual) { + const appended = actual.shadow.slice(previous.shadow.length); + const expect = (name, want, got) => { if (want !== got) throw new Error(`${path} step ${index}: shadow predicts ${name} ${want}, observed ${got}`); }; + expect("outcome", s.predicted.outcome ?? "none", appended[0] ?? "none"); + expect("appended count", s.predicted.outcome === undefined ? 0 : 1, appended.length); + expect("reads", previous.reads + s.predicted.reads, actual.reads); + expect("loads", previous.loads + s.predicted.loads, actual.loads); + expect("dumps", previous.dumps + s.predicted.dumps, actual.dumps); + expect("writes", previous.writes + s.predicted.writes, actual.writes); +} + +// The composed layout's payload codes for the drivers' seed choices +// (payloads: BINARY 1000, PADDED 400, UNICODE 500) and its job phases. +const codeOf = [0, 1, 2, 1001, 1002, 1401, 401, 503, 1503]; +const phaseOf = { [C0_READ]: 0, [SOURCE_WAIT]: 1, [SNAPSHOT_DECODE]: 2, [CONFIRMATION_READ]: 3, [FILL_SERIALIZE]: 4, [FILL_WRITE]: 5 }; +// The shadow in the composed layout's names: the one frame with its stamp and +// watermark, the monotonic clock and the wall skew, the fault switches, the +// one live job the pending-only registry keeps (none once the job finished, or +// timed out while waiting for its source) and the read or decode it holds +// under the drivers' latest ordinal. +function modelView(shadow, o) { + const live = shadow.phase > IDLE && shadow.phase < JOB_DONE; + const source = o.calls.length - 1; + const job = live ? { + source, dark: true, cached: codeOf[shadow.c0], stamp: shadow.c0Created, fence: shadow.fence, + ttls: { localMs: 0, freshMs: FRESH, retentionMs: FRESH }, phase: phaseOf[shadow.phase], timedOut: shadow.abandoned, logging: shadow.acceptedLog, + } : undefined; + const reading = live && (shadow.phase === C0_READ || shadow.phase === CONFIRMATION_READ); + const decoding = live && shadow.phase === SNAPSHOT_DECODE; + return { remoteValues: [codeOf[shadow.frame]], created: [shadow.created], watermark: [shadow.watermark], now: shadow.now, skew: shadow.wall - shadow.now, + readFailed: shadow.readFailed, loadFailed: shadow.loadFailed, dumpFailed: shadow.dumpFailed, writeFailed: shadow.writeFailed, jobs: job ? [job] : [], + reads: reading ? [{ read: o.reads - 1, flight: source }] : [], loads: decoding ? [{ load: o.loads - 1, flight: source }] : [] }; +} +const layoutFields = ["remoteValues", "created", "watermark", "now", "skew", "readFailed", "loadFailed", "dumpFailed", "writeFailed", "jobs", "reads", "loads"]; +const binding = fidelityBinding({ publicChannels: ["o", "d"], layoutFields, + view: (shadow, state) => [modelView(shadow, shadow.observed), { ...state, + reads: state.reads.map(held => ({ read: held.read, flight: held.flight })), loads: state.loads.map(held => ({ load: held.load, flight: held.flight })) }] }); -// Shadow-comparison flow witnesses. Model-private payload values classify -// reached comparison schedules only; replay has already compared the public -// callbacks and results independently. export function shadowWitnesses(histories, recorder = createWitnessRecorder()) { flowLabels(histories, true, recorder); - for (const { path, steps, predictions: shadowStates } of histories) { + for (const { path, steps, predictions } of histories) { recorder.enter(path); - let c0Released = false; - let shadowTimedOut = false; + // shadows[i] is the shadow after step i; a rule reading the state a step + // began from reads shadows[i - 1]. + const shadows = [{ ...initial(steps[0].choice), observed: steps[0].expected }]; + for (let i = 1; i < steps.length; i++) { + const next = apply(shadows[i - 1], steps[i].action, steps[i].choice); + bind(path, i, next, steps[i - 1].expected, steps[i].expected); + next.observed = steps[i].expected; + shadows.push(next); + } + if (binding.carriesPrivateState(predictions)) binding.checkFidelity(shadows, predictions, path); + // -- Comparison, captured policy and verdict flow ---------------------------------- + let c0Released = false, shadowTimedOut = false; let logging = steps[0].choice >= 4 && steps[0].choice < 8; const defaultLogging = logging; let sawShadowPolicy = false, acceptedDefaultLogging = false; let shadowPolicy = 0, jobAdmitted = false, changedAdmittedJob = false; - let acceptedLogging = false; - let acceptedInvalidLogging = false; - let invalidLoggingReportedAtAdmission = false; - let wallRolledAfterC0 = false; + let acceptedLogging = false, acceptedInvalidLogging = false, invalidLoggingReportedAtAdmission = false, wallRolledAfterC0 = false; for (const [i, step] of steps.entries()) { recorder.step(i); const o = step.expected; const previous = steps[i - 1]?.expected; if (previous === undefined) continue; + const before = shadows[i - 1]; if (step.action === "beginCall") { c0Released = false; shadowTimedOut = false; acceptedLogging = logging; wallRolledAfterC0 = false; - acceptedInvalidLogging = shadowStates[i - 1].invalidLog === true; + acceptedInvalidLogging = before.invalidLog === true; invalidLoggingReportedAtAdmission = step.diagnostics.configErrors === steps[i - 1].diagnostics.configErrors + 1; acceptedDefaultLogging = !defaultLogging && !sawShadowPolicy; jobAdmitted = o.reads > previous.reads; changedAdmittedJob = false; @@ -59,18 +240,14 @@ export function shadowWitnesses(histories, recorder = createWitnessRecorder()) { if (o.shadow.length > previous.shadow.length) { const outcome = o.shadow.at(-1); if (changedAdmittedJob && shadowPolicy > 0 && ["match", "mismatch", "filled"].includes(outcome)) recorder.credit("admitted-job-keeps-shadow-policy"); - const c0Payload = shadowStates[i - 1].c0; - const frame = shadowStates[i - 1].frame; - const decoded = payload => payload >= 7 ? 3 : [3, 5, 6].includes(payload) ? 1 : payload === 4 ? 2 : payload; - const c0Value = decoded(c0Payload); - const binary = payload => [3, 4, 5, 8].includes(payload); + const c0Payload = before.c0, frame = before.frame, c0Value = decoded(c0Payload); if (step.action === "releaseRead" && outcome === "mismatch" && c0Payload >= 7 && frame >= 7 && binary(c0Payload) !== binary(frame)) { recorder.credit(binary(c0Payload) ? "binary-to-text-confirmation" : "text-to-binary-confirmation"); } if (step.action === "releaseRead" && outcome === "superseded" && frame > 0 && decoded(frame) === c0Value) recorder.credit("different-bytes-same-value-superseded"); if (step.action === "releaseLoad" && outcome === "match" && binary(c0Payload) && steps[0].choice % 4 === 0) recorder.credit("binary-c0-compares-decoded-value"); if (step.action === "releaseLoad" && outcome === "timeout" && o.comparisons > previous.comparisons) recorder.credit(`comparison-crosses-deadline:${steps[0].choice}`); - const sourceValue = shadowStates[i - 1].sourceValue; + const sourceValue = before.sourceValue; if (outcome === "match" && c0Value !== sourceValue && steps[0].choice % 4 === 1) recorder.credit("custom-equal-overrides-values"); if (outcome === "mismatch" && c0Value === sourceValue && steps[0].choice % 4 === 2) recorder.credit("custom-unequal-confirms-equal-values"); if (outcome === "mismatch" && acceptedLogging !== logging) recorder.credit(`captured-logging:${acceptedLogging}`); @@ -95,6 +272,60 @@ export function shadowWitnesses(histories, recorder = createWitnessRecorder()) { if (o.shadow.length > previous.shadow.length && o.shadow.at(-1) === "timeout") shadowTimedOut = true; if (step.action === "releaseWrite" && shadowTimedOut) recorder.credit("write-completes-after-timeout"); } + // -- Caller preservation, fences, byte identity and late effects -------------------- + let c0Future = false, c0Fenced = false, failedReadWhileCallerPending = false, callStart; + for (let index = 1; index < steps.length; index++) { + recorder.step(index); + const before = shadows[index - 1], previous = steps[index - 1].expected, actual = steps[index].expected, action = steps[index].action; + const phase = before.phase; + const appended = actual.shadow.slice(previous.shadow.length); + if (action === "beginCall") { callStart = actual; c0Future = false; c0Fenced = false; failedReadWhileCallerPending = false; } + if (callStart === undefined) continue; + const keepsCaller = JSON.stringify(previous.calls) === JSON.stringify(actual.calls); + const noWrite = actual.writes === callStart.writes; + if (action === "releaseRead" && phase === C0_READ && before.abandoned === false) { + c0Future = before.frame > 0 && before.created > before.wall && before.created > before.watermark && before.readFailed === false; + c0Fenced = before.frame > 0 && before.created <= before.watermark && before.readFailed === false; + failedReadWhileCallerPending = previous.calls.at(-1) === 0 && appended.includes("redis_error"); + } + const settled = value => actual.calls.some((result, i) => previous.calls[i] === 0 && result === value); + const unchangedWork = actual.reads === previous.reads && actual.loads === previous.loads && actual.dumps === previous.dumps && actual.writes === previous.writes; + if (action === "resolveLoader" && failedReadWhileCallerPending && (settled(1) || settled(2)) && unchangedWork && appended.length === 0) { + recorder.credit("dark-read-error-still-allows-source-result"); + } + if (appended.includes("filled") && actual.loads === callStart.loads && keepsCaller) { + if (c0Future) recorder.credit("future-dark-c0-fills-without-decoding"); + if (c0Fenced) recorder.credit("fenced-dark-c0-can-fill-after-cutoff"); + } + if (action === "releaseRead" && phase === CONFIRMATION_READ && keepsCaller && noWrite) { + const sameBytes = payloadBytes(before.frame) === payloadBytes(before.c0); + if (appended.includes("superseded") && before.frame > 0 && sameBytes && before.readFailed === false && before.created <= before.watermark) { + recorder.credit("fenced-c1-supersedes-without-repair"); + } + const visibleC1 = before.frame > 0 && before.created > before.watermark && before.readFailed === false; + if (visibleC1 && sameBytes && appended.includes("mismatch")) { + recorder.credit("same-c1-bytes-confirm-mismatch"); + if (before.created > before.wall) recorder.credit("future-c1-confirms-payload-without-repair"); + } + if (visibleC1 && !sameBytes && appended.includes("superseded")) recorder.credit("different-c1-bytes-supersede"); + } + if (action === "releaseLoad" && phase === SNAPSHOT_DECODE && noWrite && keepsCaller) { + if (appended.includes("match") && actual.reads === previous.reads) recorder.credit("equal-comparison-skips-c1"); + if (appended.includes("deserialization_error") && actual.dumps === previous.dumps) recorder.credit("present-undecodable-c0-is-not-repaired"); + } + if (appended.includes("source_error") && noWrite && actual.loads === callStart.loads && actual.calls.at(-1) === 3) recorder.credit("dark-source-error-never-decodes-or-fills"); + if (action === "releaseDump" && phase === FILL_SERIALIZE && appended.includes("fill_error") && noWrite && keepsCaller) recorder.credit("fill-serialization-error-preserves-caller"); + if (action === "releaseWrite" && phase === FILL_WRITE && appended.includes("fill_error") && before.writeFailed === true && actual.writes === previous.writes && keepsCaller) { + recorder.credit("fill-write-error-preserves-caller"); + } + if (before.abandoned === true && keepsCaller && appended.length === 0 && unchangedWork) { + if (action === "releaseRead" && phase === C0_READ) recorder.credit("late-c0-cannot-start-new-shadow-work"); + if (action === "releaseRead" && phase === CONFIRMATION_READ) recorder.credit("late-c1-cannot-emit-second-verdict"); + if (action === "releaseLoad" && phase === SNAPSHOT_DECODE) recorder.credit("late-shadow-decode-cannot-start-c1"); + if (action === "releaseDump" && phase === FILL_SERIALIZE) recorder.credit("late-shadow-dump-cannot-dispatch-write"); + if (action === "releaseWrite" && phase === FILL_WRITE) recorder.credit("late-shadow-write-cannot-change-caller-or-verdict"); + } + } } return recorder.labels(); } diff --git a/formal/run-models.mjs b/formal/run-models.mjs index f18fe6ee..e3a4b215 100644 --- a/formal/run-models.mjs +++ b/formal/run-models.mjs @@ -2,7 +2,7 @@ import { spawnSync } from 'node:child_process'; import { mkdirSync, readFileSync, readdirSync, rmSync } from 'node:fs'; import { basename, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; -import { readExecution, root, validateExecution } from './execution.mjs'; +import { readExecution, root, scheduleExecution, validateExecution } from './execution.mjs'; import { CommandFailure, printGroup, resolveConcurrency, runPool, seconds, spawnBuffered } from './quint-pool.mjs'; import { normalizeTraceFiles } from './replay-inputs.mjs'; import { bindTrace } from './replay/bindings.mjs'; @@ -23,7 +23,7 @@ export function executionPlan(mode, manifest = readExecution(), seed = process.e const { settings, check, test } = manifest; const options = [`--backend=${settings.backend}`, `--n-threads=${settings.threads}`, `--seed=${seed}`]; const commands = []; - for (const model of manifest.models) { + for (const model of scheduleExecution(manifest).models) { if (mode === 'check') { commands.push({ command: 'quint', args: ['typecheck', model.path] }); commands.push({ command: 'quint', args: ['run', model.path, ...options, diff --git a/formal/runtime-boundaries-smoke.itf.json b/formal/runtime-boundaries-smoke.itf.json index da92f0e3..b0238796 100644 --- a/formal/runtime-boundaries-smoke.itf.json +++ b/formal/runtime-boundaries-smoke.itf.json @@ -11,668 +11,16 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"8"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} ] } diff --git a/formal/scope-smoke.itf.json b/formal/scope-smoke.itf.json index e633e4a6..5f27be54 100644 --- a/formal/scope-smoke.itf.json +++ b/formal/scope-smoke.itf.json @@ -11,6193 +11,66 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "openScope" - }, - "mbt::actionTaken": "openScope", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "7" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "7" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "openScope" - }, - "mbt::actionTaken": "openScope", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "openScope" - }, - "mbt::actionTaken": "openScope", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "openScope" - }, - "mbt::actionTaken": "openScope", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "34" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "34" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "7" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "6" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "7" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "7" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "9" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "50" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "50" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "9" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "9" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "9" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "10" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "10" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "10" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "10" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "10" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "10" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "10" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "11" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "11" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "11" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "9" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "11" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "9" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "11" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "9" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "closeScope" - }, - "mbt::actionTaken": "closeScope", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "11" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "9" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "11" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "9" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "12" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "9" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "12" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "10" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "12" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "10" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "11" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "11" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "12" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "10" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local", - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "13" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "10" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local", - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "86" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "86" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "13" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "10" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local", - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "13" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "11" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local", - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "closeScope" - }, - "mbt::actionTaken": "closeScope", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "13" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "11" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local", - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "13" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "11" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local", - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "14" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "11" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local", - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "15" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "11" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local", - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "15" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "11" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local", - "request_local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "13" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "13" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "15" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "11" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local", - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "9" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "8" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "15" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "12" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - false, - false, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - true, - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [ - "request_local", - "local", - "local", - "local", - "request_local", - "local", - "request_local", - "local" - ], - "warnings": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"openScope"},"mbt::actionTaken":"openScope","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"7"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"7"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"openScope"},"mbt::actionTaken":"openScope","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"openScope"},"mbt::actionTaken":"openScope","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"openScope"},"mbt::actionTaken":"openScope","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"34"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"34"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"7"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"6"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"6"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"7"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"7"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"9"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"50"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"50"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"9"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"9"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"9"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"10"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"8"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"10"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"10"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"10"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"10"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"10"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"10"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"11"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"11"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"11"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"9"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"11"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"9"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"11"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"9"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"closeScope"},"mbt::actionTaken":"closeScope","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"11"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"9"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"11"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"9"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"12"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"9"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"12"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"10"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"12"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"10"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"11"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"11"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"12"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"10"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local","request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"13"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"10"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local","request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"86"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"86"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"13"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"10"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local","request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"13"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"11"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local","request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"closeScope"},"mbt::actionTaken":"closeScope","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"13"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"11"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local","request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"13"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"11"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local","request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"14"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"11"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local","request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"15"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"11"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true,true,true,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local","request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"15"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"11"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true,true,true,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local","request_local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"13"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"13"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"15"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"11"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true,true,true,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local","request_local","local"],"warnings":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"9"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"8"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"15"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"12"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[false,false,false,true,true,true,true,true,true,true,true,true,true,true,false],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":["request_local","local","local","local","request_local","local","request_local","local"],"warnings":{"#bigint":"0"}}}} ] } diff --git a/formal/semantic-cases.json b/formal/semantic-cases.json index 7bedb29d..85dd31d3 100644 --- a/formal/semantic-cases.json +++ b/formal/semantic-cases.json @@ -2,267 +2,1109 @@ "schemaVersion": 1, "scope": "Reviewed feature and known-corner-case inventory derived from C01-C60/W01-W09, docs, tests, and all positive portable scenarios. Evidence describes bounded observations; this is not an exhaustive input or schedule proof. Native binding cases are catalogued separately.", "cases": [ - {"id": "C01.no-cache-plumbing", "rule": "disabled calls bypass policy and caches", "scenarios": ["disabled calls bypass policy and caches"], "generated": [{"profile": "scope", "witness": "disabled-bypass"}], "models": ["formal/dialcache-core.qnt:passThroughSkipsCacheMachinery", "formal/dialcache-conformance.qnt:disabledAndRequestCallsKeepTheirOwnLifetimesTest"], "vectors": [], "contracts": ["C01"], "quintReplays": ["core/disabledAndRequestCallsKeepTheirOwnLifetimesTest"]}, - {"id": "C01.no-deadline", "rule": "outside calls have no fallback deadline or sharing", "scenarios": ["outside calls have no fallback deadline or sharing"], "generated": [{"profile": "source-budgets", "witness": "outside-calls-skip-source-deadlines-sharing-and-publication"}], "models": ["formal/dialcache-flight-deadlines.qnt:outsideSourceHasNoDeadline", "formal/dialcache-flight-deadlines.qnt:outsideCallsIgnoreConfiguredSourceDeadlineTest", "formal/dialcache-source-budgets-conformance.qnt:outsideSourcesHaveNoDeadline", "formal/dialcache-source-budgets-conformance.qnt:outsideAndInvalidOutsideCallsIgnoreDeadlineAndSharingTest"], "vectors": [], "contracts": ["C01"], "provenance": ["test/dialcache-liveness.test.ts:keeps initially disabled calls as true pass-through", "src/dialcache.ts:executeCacheOperation"], "quintReplays": ["source-budgets/outsideAndInvalidOutsideCallsIgnoreDeadlineAndSharingTest"]}, - {"id": "C02.nested-memo", "rule": "nested enable and disable preserve outer memo", "scenarios": ["nested enable and disable preserve outer memo"], "generated": [{"profile": "scope", "witness": "nested-memo-hit"}], "models": ["formal/dialcache-core.qnt:nestedDisablePreservesMemoTest"], "vectors": [], "contracts": ["C02"]}, - {"id": "C02.reenabled-memo", "rule": "reenabling inside disabled scope reuses memo and preserves siblings", "scenarios": ["reenabling inside disabled scope reuses memo and preserves siblings"], "generated": [{"profile": "scope", "witness": "reenabled-memo-hit"}], "models": ["formal/dialcache-scope-conformance.qnt:nestedCloseAndDisabledBypassKeepOuterMemoTest"], "vectors": [], "contracts": ["C02"], "quintReplays": ["scope/nestedCloseAndDisabledBypassKeepOuterMemoTest"]}, - {"id": "C03.late-publication", "rule": "late old-scope value cannot enter a replacement scope", "scenarios": ["late old-scope value cannot enter a replacement scope", "closed scope cannot be repopulated by late work"], "generated": [{"profile": "scope", "witness": "replacement-miss-after-late-source"}], "models": ["formal/dialcache-core.qnt:requestValueBelongsToCurrentScope", "formal/dialcache-core.qnt:lateResultCannotEnterReplacementScopeTest", "formal/dialcache-scope-conformance.qnt:closedScopesHaveNoMemo", "formal/dialcache-scope-conformance.qnt:lateSourceCannotPopulateReplacementTest"], "vectors": [], "contracts": ["C03"], "quintReplays": ["scope/lateSourceCannotPopulateReplacementTest"]}, - {"id": "C03.detached-bypass", "rule": "Calls using a closed outer context bypass caching", "scenarios": [], "generated": [{"profile": "scope", "witness": "detached-bypass"}], "models": ["formal/dialcache-core.qnt:passThroughSkipsCacheMachinery"], "vectors": [], "contracts": ["C03"]}, - {"id": "C04.pending-policy", "rule": "policy resolution after scope closure is pass-through", "scenarios": ["policy resolution after scope closure is pass-through"], "generated": [{"profile": "scope", "witness": "policy-reply-after-close"}], "models": ["formal/dialcache-scope-conformance.qnt:policyReplyAfterCloseBypassesRequestTest"], "vectors": [], "contracts": ["C04"], "quintReplays": ["scope/policyReplyAfterCloseBypassesRequestTest"]}, - {"id": "C05.participating-publication", "rule": "untracked source fills remote local and request layers", "scenarios": ["untracked source fills remote local and request layers"], "generated": [{"profile": "layers", "witness": "source-publication-probed-in-all-three-layers"}], "models": ["formal/dialcache-core.qnt:untrackedSourcePublishesToAllParticipatingLayersTest", "formal/dialcache-layers-conformance.qnt:untrackedSourcePublicationIsProbedInAllThreeLayersTest"], "vectors": [], "contracts": ["C05"], "provenance": ["src/dialcache.ts:getThroughRequestLocal/getThroughLocal/getThroughRemote"], "quintReplays": ["layers/untrackedSourcePublicationIsProbedInAllThreeLayersTest"]}, - {"id": "C05.first-hit", "rule": "local hit stops new shadow work", "scenarios": ["local hit stops new shadow work"], "generated": [{"profile": "shadow-layers", "witness": "dark-local-source-publication-stops-later-shadow"}, {"profile": "shadow-layers", "witness": "dark-request-source-publication-is-scope-local"}, {"profile": "shadow-layers", "witness": "validated-remote-hit-warms-local-and-stops-shadow"}, {"profile": "shadow-layers", "witness": "served-diagnostic-source-never-publishes-local"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesLocalBeforeShadowWriteTest", "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesRequestBeforeShadowWriteTest", "formal/dialcache-shadow-layers-conformance.qnt:validatedRemoteHitStopsFurtherShadowTest", "formal/dialcache-shadow-layers-conformance.qnt:servedDiagnosticSourceDoesNotPopulateLocalTest"], "vectors": [], "contracts": ["C05"], "quintReplays": ["shadow-layers/darkSourcePublishesLocalBeforeShadowWriteTest", "shadow-layers/darkSourcePublishesRequestBeforeShadowWriteTest", "shadow-layers/servedDiagnosticSourceDoesNotPopulateLocalTest", "shadow-layers/validatedRemoteHitStopsFurtherShadowTest"]}, - {"id": "C06.null-request", "rule": "null remains a value in request cache", "scenarios": ["null remains a value in request cache"], "generated": [{"profile": "scope", "witness": "memo-value:6"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/requestFalsyValuesRemainDistinctAndReusableTest"]}, - {"id": "C06.null-local", "rule": "null remains a value in local cache", "scenarios": ["null remains a value in local cache"], "generated": [{"profile": "policy", "witness": "local-value:6"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/localFalsyValuesRemainDistinctAndReusableTest"]}, - {"id": "C06.null-remote", "rule": "null remains a value in remote cache", "scenarios": ["null remains a value in remote cache"], "generated": [{"profile": "policy", "witness": "remote-value:6"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/remoteFalsyValuesRemainDistinctAndReusableTest"]}, - {"id": "C06.false-request", "rule": "false remains a value in request cache", "scenarios": ["false remains a value in request cache"], "generated": [{"profile": "scope", "witness": "memo-value:7"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/requestFalsyValuesRemainDistinctAndReusableTest"]}, - {"id": "C06.false-local", "rule": "false remains a value in local cache", "scenarios": ["false remains a value in local cache"], "generated": [{"profile": "policy", "witness": "local-value:7"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/localFalsyValuesRemainDistinctAndReusableTest"]}, - {"id": "C06.false-remote", "rule": "false remains a value in remote cache", "scenarios": ["false remains a value in remote cache"], "generated": [{"profile": "policy", "witness": "remote-value:7"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", "formal/dialcache-policy-conformance.qnt:falsyRemoteValuesAreServedFromRemoteTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/remoteFalsyValuesRemainDistinctAndReusableTest", "policy/falsyRemoteValuesAreServedFromRemoteTest"]}, - {"id": "C06.zero-request", "rule": "zero remains a value in request cache", "scenarios": ["zero remains a value in request cache"], "generated": [{"profile": "scope", "witness": "memo-value:8"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/requestFalsyValuesRemainDistinctAndReusableTest"]}, - {"id": "C06.zero-local", "rule": "zero remains a value in local cache", "scenarios": ["zero remains a value in local cache"], "generated": [{"profile": "policy", "witness": "local-value:8"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/localFalsyValuesRemainDistinctAndReusableTest"]}, - {"id": "C06.zero-remote", "rule": "zero remains a value in remote cache", "scenarios": ["zero remains a value in remote cache"], "generated": [{"profile": "policy", "witness": "remote-value:8"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", "formal/dialcache-policy-conformance.qnt:falsyRemoteValuesAreServedFromRemoteTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/remoteFalsyValuesRemainDistinctAndReusableTest", "policy/falsyRemoteValuesAreServedFromRemoteTest"]}, - {"id": "C06.empty-string-request", "rule": "empty string remains a value in request cache", "scenarios": ["empty string remains a value in request cache"], "generated": [{"profile": "scope", "witness": "memo-value:9"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/requestFalsyValuesRemainDistinctAndReusableTest"]}, - {"id": "C06.empty-string-local", "rule": "empty string remains a value in local cache", "scenarios": ["empty string remains a value in local cache"], "generated": [{"profile": "policy", "witness": "local-value:9"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/localFalsyValuesRemainDistinctAndReusableTest"]}, - {"id": "C06.empty-string-remote", "rule": "empty string remains a value in remote cache", "scenarios": ["empty string remains a value in remote cache"], "generated": [{"profile": "policy", "witness": "remote-value:9"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", "formal/dialcache-policy-conformance.qnt:falsyRemoteValuesAreServedFromRemoteTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/remoteFalsyValuesRemainDistinctAndReusableTest", "policy/falsyRemoteValuesAreServedFromRemoteTest"]}, - {"id": "C06.absent-request", "rule": "undefined is a memoized value", "scenarios": ["undefined is a memoized value"], "generated": [{"profile": "scope", "witness": "memo-value:5"}], "models": ["formal/dialcache-scope-conformance.qnt:absentValueIsMemoizedTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["scope/absentValueIsMemoizedTest"]}, - {"id": "C06.absent-local", "rule": "absent result remains cacheable in local storage", "scenarios": ["absent result remains cacheable in local storage"], "generated": [{"profile": "policy", "witness": "local-value:5"}], "models": ["formal/dialcache-policy-conformance.qnt:absentValueIsStoredAndReusedTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["policy/absentValueIsStoredAndReusedTest"]}, - {"id": "C06.absent-remote", "rule": "absent result remains cacheable in remote storage", "scenarios": ["absent result remains cacheable in remote storage"], "generated": [{"profile": "policy", "witness": "remote-value:5"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:remoteAbsenceAndLiteralTextStayDistinctTest"], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/remoteAbsenceAndLiteralTextStayDistinctTest"]}, - {"id": "C07.scope-isolation", "rule": "concurrent outer request scopes retain independent flights and memo", "scenarios": ["concurrent outer request scopes retain independent flights and memo", "outer scopes isolate request memo"], "generated": [{"profile": "scope", "witness": "independent-scope-overlap"}], "models": ["formal/dialcache-layers-conformance.qnt:separateRequestRootsRetainIndependentValuesTest"], "vectors": [], "contracts": ["C07"], "quintReplays": ["layers/separateRequestRootsRetainIndependentValuesTest"]}, - {"id": "C07.no-capacity-limit", "rule": "request memo has no process local capacity cap", "scenarios": ["request memo has no process local capacity cap"], "generated": [{"profile": "layers", "witness": "request-memo-exceeds-local-capacity"}], "models": ["formal/dialcache-layers-conformance.qnt:requestMemoExceedsLocalCapacityTest"], "vectors": [], "contracts": ["C07"], "quintReplays": ["layers/requestMemoExceedsLocalCapacityTest"]}, - {"id": "C08.shared-capacity", "rule": "shared local capacity spans operation identities", "scenarios": ["shared local capacity spans operation identities", "local capacity evicts the least recently used key"], "generated": [{"profile": "layers", "witness": "lru-eviction-probed"}], "models": ["formal/dialcache-layers-conformance.qnt:capacityIsPerInstance", "formal/dialcache-layers-conformance.qnt:localReadPromotesBeforeEvictionTest"], "vectors": [], "contracts": ["C08"], "quintReplays": ["layers/localReadPromotesBeforeEvictionTest"]}, - {"id": "C08.instance-capacity", "rule": "instances isolate local storage and registered flights", "scenarios": ["instances isolate local storage and registered flights"], "generated": [{"profile": "layers", "witness": "capacity-is-per-instance"}, {"profile": "layers", "witness": "different-instances-own-distinct-flights"}], "models": ["formal/dialcache-layers-conformance.qnt:oneInstanceEvictionCannotEvictAnotherInstanceTest", "formal/dialcache-layers-conformance.qnt:sourceOwnershipNeverCrossesKeyOrInstance"], "vectors": [], "contracts": ["C08"], "provenance": ["test/dialcache-coalescing.test.ts:does not coalesce shared-layer work across DialCache instances"], "quintReplays": ["layers/oneInstanceEvictionCannotEvictAnotherInstanceTest"]}, - {"id": "C08.read-promotes", "rule": "Reading an entry promotes it before a later LRU eviction", "scenarios": [], "generated": [{"profile": "layers", "witness": "lru-read-promotes"}, {"profile": "layers", "witness": "promoted-value-survives-eviction"}], "models": ["formal/dialcache-layers-conformance.qnt:localReadPromotesBeforeEvictionTest"], "vectors": [], "contracts": ["C08"], "quintReplays": ["layers/localReadPromotesBeforeEvictionTest"]}, - {"id": "C09.fixed-local-ttl", "rule": "Local hits preserve insertion expiry; the exact TTL boundary expires", "scenarios": ["local exact TTL boundary expires"], "generated": [{"profile": "policy", "witness": "local-hit-preserves-insertion-expiry"}], "models": ["formal/dialcache-policy-conformance.qnt:localHitDoesNotRenewInsertionTtlTest", "formal/dialcache-policy-conformance.qnt:localHitsRespectInsertionExpiry", "formal/dialcache-rule-checks.qnt:localBoundaryIsExclusive", "formal/dialcache-rule-checks.qnt:localGridUsesWholeMilliseconds", "formal/dialcache-source-budgets-conformance.qnt:localEntryExpiresAfterItsTtlTest"], "vectors": [], "contracts": ["C09"], "quintReplays": ["policy/localHitDoesNotRenewInsertionTtlTest", "source-budgets/localEntryExpiresAfterItsTtlTest"]}, - {"id": "C09.wall-rollback", "rule": "local expiry uses monotonic time across application wall rollback", "scenarios": ["local expiry uses monotonic time across application wall rollback"], "generated": [{"profile": "policy", "witness": "rollback-preserves-live-local"}, {"profile": "policy", "witness": "rollback-does-not-extend-local-ttl"}], "models": ["formal/dialcache-policy-conformance.qnt:wallRollbackDoesNotExtendLocalTtlTest"], "vectors": [], "contracts": ["C09"], "quintReplays": ["policy/wallRollbackDoesNotExtendLocalTtlTest"]}, - {"id": "C09.insertion-age", "rule": "nearly expired remote hit warms local for its full insertion TTL", "scenarios": ["nearly expired remote hit warms local for its full insertion TTL"], "generated": [], "models": ["formal/dialcache-policy-conformance.qnt:remoteHitStartsFullLocalInsertionTtlTest", "formal/dialcache-policy-conformance.qnt:remoteHitWarmsLocalForTheReplysLocalTtlTest"], "vectors": [], "contracts": ["C09"], "quintReplays": ["policy/remoteHitStartsFullLocalInsertionTtlTest", "policy/remoteHitWarmsLocalForTheReplysLocalTtlTest"]}, - {"id": "C10.zero-capacity", "rule": "zero local capacity retains coalescing but no settled value", "scenarios": ["zero local capacity retains coalescing but no settled value"], "generated": [{"profile": "layers", "witness": "zero-capacity-still-shares"}, {"profile": "layers", "witness": "zero-capacity-reloads"}], "models": ["formal/dialcache-layers-conformance.qnt:zeroCapacityHasNoLocalValues", "formal/dialcache-layers-conformance.qnt:zeroCapacityKeepsSharingWithoutStorageTest"], "vectors": [], "contracts": ["C10"], "quintReplays": ["layers/zeroCapacityKeepsSharingWithoutStorageTest"]}, - {"id": "C11.distinct-keys", "rule": "different keys own independent flights", "scenarios": ["different keys own independent flights"], "generated": [{"profile": "policy", "witness": "cross-key-overlap"}], "models": ["formal/dialcache-layers-conformance.qnt:pendingSourcesKeepEntityAndOperationIdentityTest", "formal/dialcache-layers-conformance.qnt:sourceOwnershipNeverCrossesKeyOrInstance"], "vectors": [], "contracts": ["C11"], "quintReplays": ["layers/pendingSourcesKeepEntityAndOperationIdentityTest"]}, - {"id": "C11.one-registered-flight", "rule": "Eligible concurrent same-key calls share one registered source", "scenarios": [], "generated": [{"profile": "policy", "witness": "coalesced-result"}], "models": ["formal/dialcache-effects-conformance.qnt:oneRegisteredSource", "formal/dialcache-flight-deadlines.qnt:oneSourcePerRegisteredFlight", "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest", "formal/dialcache-conformance.qnt:coalescedPairPublishesOneReusableValueTest", "formal/dialcache-scope-conformance.qnt:pendingRequestFlightIsJoinedBeforeMemoReadTest", "formal/dialcache-layers-conformance.qnt:coalescingCallerJoinsPendingFlightBeforeSeededFrameTest"], "vectors": [], "contracts": ["C11"], "quintReplays": ["runtime-boundaries/runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest", "core/coalescedPairPublishesOneReusableValueTest", "scope/pendingRequestFlightIsJoinedBeforeMemoReadTest", "layers/coalescingCallerJoinsPendingFlightBeforeSeededFrameTest"]}, - {"id": "C12.separate-request-memos", "rule": "request misses join one process flight then memoize separately", "scenarios": ["request misses join one process flight then memoize separately"], "generated": [{"profile": "layers", "witness": "request-misses-share-process-flight"}], "models": ["formal/dialcache-layers-conformance.qnt:requestMissesShareProcessAndMemoizeSeparatelyTest"], "vectors": [], "contracts": ["C12"], "quintReplays": ["layers/requestMissesShareProcessAndMemoizeSeparatelyTest"]}, - {"id": "C13.uncoalesced-caching", "rule": "coalescing off keeps settled caching", "scenarios": ["coalescing off keeps settled caching"], "generated": [{"profile": "policy", "witness": "uncoalesced-local-settled-hit"}, {"profile": "policy", "witness": "uncoalesced-remote-settled-hit"}, {"profile": "scope", "witness": "uncoalesced-request-settled-hit"}], "models": ["formal/dialcache-policy-conformance.qnt:independentLocalCallsStillReuseSettledValueTest", "formal/dialcache-runtime-boundaries-conformance.qnt:disabledSharingDoesNotJoinRegisteredFlightTest", "formal/dialcache-scope-conformance.qnt:independentSourceIsNotRegisteredForLaterSharingTest", "formal/dialcache-runtime-boundaries-conformance.qnt:defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest"], "vectors": [], "contracts": ["C13"], "provenance": ["test/dialcache-coalescing.test.ts:performs independent Redis reads and writes when coalescing is disabled", "test/dialcache-coalescing.test.ts:memoizes sequential request-local reads without coalescing concurrent ones when coalescing is disabled"], "quintReplays": ["policy/independentLocalCallsStillReuseSettledValueTest", "runtime-boundaries/disabledSharingDoesNotJoinRegisteredFlightTest", "scope/independentSourceIsNotRegisteredForLaterSharingTest", "runtime-boundaries/defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest"]}, - {"id": "C13.local-last-writer", "rule": "independent local publication is last writer wins", "scenarios": ["independent local publication is last writer wins"], "generated": [{"profile": "policy", "witness": "independent-local-last-completion-probed"}], "models": ["formal/dialcache-policy-conformance.qnt:independentLocalPublicationUsesLastCompletionTest", "formal/dialcache-source-budgets-conformance.qnt:rejectedSourceLeavesPublishedLocalEntryTest", "formal/dialcache-source-budgets-conformance.qnt:republishedEqualValueRestampsLocalExpiryTest"], "vectors": [], "contracts": ["C13"], "quintReplays": ["policy/independentLocalPublicationUsesLastCompletionTest", "source-budgets/rejectedSourceLeavesPublishedLocalEntryTest", "source-budgets/republishedEqualValueRestampsLocalExpiryTest"]}, - {"id": "C13.remote-last-writer", "rule": "independent remote publication is last writer wins", "scenarios": ["independent remote publication is last writer wins"], "generated": [], "models": ["formal/dialcache-policy-conformance.qnt:independentRemotePublicationUsesLastCompletionTest", "formal/dialcache-runtime-boundaries-conformance.qnt:remoteHitPromotesIntoNewlyEnabledLocalLayerTest"], "vectors": [], "contracts": ["C13"], "quintReplays": ["policy/independentRemotePublicationUsesLastCompletionTest", "runtime-boundaries/remoteHitPromotesIntoNewlyEnabledLocalLayerTest"]}, - {"id": "C14.inactive-layers", "rule": "inactive serving layers do not coalesce", "scenarios": ["inactive serving layers do not coalesce"], "generated": [{"profile": "policy", "witness": "inactive-layers-independent-sources"}], "models": ["formal/dialcache-flight-deadlines.qnt:flightsRequireEligibleCaching", "formal/dialcache-flight-deadlines.qnt:noFlightWhenCoalescingIneligible", "formal/dialcache-flight-deadlines.qnt:inactiveServingLayersKeepConcurrentCallsIndependentTest"], "vectors": [], "contracts": ["C14"]}, - {"id": "C15.shared-error-retry", "rule": "rejected request flight is shared then removed for retry", "scenarios": ["rejected request flight is shared then removed for retry"], "generated": [{"profile": "scope", "witness": "shared-rejection"}, {"profile": "scope", "witness": "rejected-flight-retry"}], "models": ["formal/dialcache-scope-conformance.qnt:rejectedFlightAllowsRetryTest"], "vectors": [], "contracts": ["C15"], "quintReplays": ["scope/rejectedFlightAllowsRetryTest"]}, - {"id": "C16.null-inherits", "rule": "null provider inherits operation defaults", "scenarios": ["null provider inherits operation defaults"], "generated": [], "models": ["formal/dialcache-runtime-policy.qnt:nullProviderRetainsEveryBaselineLeafTest", "formal/dialcache-runtime-boundaries-conformance.qnt:nullProviderInheritsConfiguredServingAndDefaultSharingTest"], "vectors": [], "contracts": ["C16"], "quintReplays": ["runtime-boundaries/nullProviderInheritsConfiguredServingAndDefaultSharingTest"]}, - {"id": "C16.sparse-leaves", "rule": "Runtime overlays replace only supplied leaves", "scenarios": ["sparse TTL overlay retains the remote TTL and replaces local insertion TTL", "sparse ramp overlay preserves the disabled sibling layer"], "generated": [{"profile": "policy", "witness": "sparse-empty-provider-inherits-local-hit"}, {"profile": "policy", "witness": "sparse-empty-provider-inherits-remote-hit"}], "models": ["formal/dialcache-runtime-policy.qnt:runtimeOverlayIsLeafWise", "formal/dialcache-runtime-policy.qnt:sparseLocalOverridePreservesRemoteAndFeaturesTest"], "vectors": [], "contracts": ["C16"], "provenance": ["test/dialcache-config-ramp.test.ts:inherits defaults per field when the runtime config is sparse"]}, - {"id": "C16.ttl-implies-ramp", "rule": "A configured TTL with omitted ramp enables the layer fully", "scenarios": ["runtime TTLs without ramps enable both serving layers"], "generated": [], "models": ["formal/dialcache-runtime-policy.qnt:configuredTtlImpliesDefaultFullRamp", "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlWithoutRampActivatesLayerTest", "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeRemoteTtlWithoutRampActivatesLayerTest", "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest"], "vectors": [], "contracts": ["C16"], "quintReplays": ["runtime-boundaries/runtimeLocalTtlWithoutRampActivatesLayerTest", "runtime-boundaries/runtimeRemoteTtlWithoutRampActivatesLayerTest", "runtime-boundaries/runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", "runtime-boundaries/runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest"]}, - {"id": "C17.library-defaults", "rule": "Request memoization, recovery, and shadow default off; coalescing defaults on", "scenarios": ["library defaults disable request memo recovery and shadow while sharing active work"], "generated": [], "models": ["formal/dialcache-runtime-policy.qnt:featureLibraryDefaults", "formal/dialcache-runtime-policy.qnt:omittedPolicyUsesLibraryDefaultsTest", "formal/dialcache-runtime-boundaries-conformance.qnt:omittedRampAndSharingUseLibraryDefaultsTest"], "vectors": [], "contracts": ["C17"], "quintReplays": ["runtime-boundaries/omittedRampAndSharingUseLibraryDefaultsTest"]}, - {"id": "C17.disable-keeps-entry", "rule": "runtime ramp changes preserve existing entries", "scenarios": ["runtime ramp changes preserve existing entries"], "generated": [{"profile": "policy", "witness": "serving-disabled-preserves-existing-local"}], "models": ["formal/dialcache-runtime-policy.qnt:disablingPolicyDoesNotEvictInsertedEntriesTest", "formal/dialcache-policy-conformance.qnt:disablingServingKeepsExistingLocalForReenablementTest"], "vectors": [], "contracts": ["C17"], "quintReplays": ["policy/disablingServingKeepsExistingLocalForReenablementTest"]}, - {"id": "C18.captured-insertion", "rule": "pending invocation keeps insertion TTL snapshot", "scenarios": ["pending invocation keeps insertion TTL snapshot"], "generated": [{"profile": "policy", "witness": "publication-after-policy-change"}], "models": ["formal/dialcache-runtime-policy.qnt:existingLocalEntryKeepsInsertionTtl", "formal/dialcache-runtime-policy.qnt:policyChangeDuringInvocationTest"], "vectors": [], "contracts": ["C18"]}, - {"id": "C18.captured-shadow-fill", "rule": "dark fill preserves accepted runtime TTL and retention after policy changes", "scenarios": ["dark fill preserves accepted runtime TTL and retention after policy changes"], "generated": [{"profile": "shadow-layers", "witness": "dark-fill-policy-snapshot-controls-physical-expiry"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:darkFillRetainsPolicyThroughSerializationTest"], "vectors": [], "contracts": ["C18"], "quintReplays": ["shadow-layers/darkFillRetainsPolicyThroughSerializationTest"]}, - {"id": "C18.existing-leader", "rule": "runtime reenabling joins the registered flight before a newer local hit", "scenarios": ["runtime reenabling joins the registered flight before a newer local hit"], "generated": [{"profile": "policy", "witness": "join-after-policy-change"}], "models": ["formal/dialcache-policy-conformance.qnt:sharedSourcesKeepRegistration", "formal/dialcache-policy-conformance.qnt:independentCompletionKeepsRegisteredLeaderTest", "formal/dialcache-policy-conformance.qnt:independentFailureKeepsRegisteredLeaderTest"], "vectors": [], "contracts": ["C18"], "quintReplays": ["policy/independentCompletionKeepsRegisteredLeaderTest", "policy/independentFailureKeepsRegisteredLeaderTest"]}, - {"id": "C19.memo-bypass", "rule": "request policy bypass retains memo for later reenabling", "scenarios": ["request policy bypass retains memo for later reenabling"], "generated": [{"profile": "scope", "witness": "memo-after-policy-bypass"}], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:falseRequestLeafPreservesMemoForReenablementTest", "formal/dialcache-scope-conformance.qnt:bypassedRequestFailureIsAttributedToLocalTest"], "vectors": [], "contracts": ["C19"], "quintReplays": ["runtime-boundaries/falseRequestLeafPreservesMemoForReenablementTest", "scope/bypassedRequestFailureIsAttributedToLocalTest"]}, - {"id": "C20.provider-failure", "rule": "provider failure fails open without caching", "scenarios": ["provider failure fails open without caching"], "generated": [{"profile": "policy", "witness": "provider-failure-preserves-existing-local"}], "models": ["formal/dialcache-policy-conformance.qnt:providerFailureBypassesAndPreservesExistingLocalTest"], "vectors": [], "contracts": ["C20"], "quintReplays": ["policy/providerFailureBypassesAndPreservesExistingLocalTest"]}, - {"id": "C20.invalid-invocation-policy", "rule": "invalid runtime remoteReadTimeoutMs bypasses all cache layers", "scenarios": ["invalid runtime remoteReadTimeoutMs bypasses all cache layers"], "generated": [{"profile": "policy", "witness": "invalid-read-budget-bypasses-caching"}], "models": ["formal/dialcache-policy-conformance.qnt:invalidReadBudgetBypassesAllCachingTest"], "vectors": [], "contracts": ["C20"], "quintReplays": ["policy/invalidReadBudgetBypassesAllCachingTest"]}, - {"id": "C21.invalid-layer", "rule": "invalid local TTL leaves valid remote serving available", "scenarios": ["invalid local TTL leaves valid remote serving available"], "generated": [{"profile": "policy", "witness": "invalid-local-ttl-preserves-remote-hit"}], "models": ["formal/dialcache-policy-conformance.qnt:invalidLocalTtlStillServesFreshRemoteTest"], "vectors": [], "contracts": ["C21"], "quintReplays": ["policy/invalidLocalTtlStillServesFreshRemoteTest"]}, - {"id": "C21.invalid-recovery", "rule": "invalid optional staleOnErrorMaxAgeSec preserves fresh remote serving", "scenarios": ["invalid optional staleOnErrorMaxAgeSec preserves fresh remote serving"], "generated": [{"profile": "policy", "witness": "invalid-recovery-retention:23"}, {"profile": "policy", "witness": "invalid-recovery-retention:24"}], "models": ["formal/dialcache-policy-conformance.qnt:recoveryAgeEqualToFreshTtlStillServesFreshRemoteTest", "formal/dialcache-policy-conformance.qnt:negativeRecoveryAgeStillServesFreshRemoteTest"], "vectors": [], "contracts": ["C21"], "quintReplays": ["policy/recoveryAgeEqualToFreshTtlStillServesFreshRemoteTest", "policy/negativeRecoveryAgeStillServesFreshRemoteTest"]}, - {"id": "C21.invalid-shadow", "rule": "invalid optional shadow preserves fresh remote serving", "scenarios": ["invalid optional shadow preserves fresh remote serving"], "generated": [{"profile": "policy", "witness": "invalid-shadow-preserves-serving"}], "models": ["formal/dialcache-policy-conformance.qnt:invalidShadowPreservesNormalServingTest"], "vectors": [], "contracts": ["C21"], "quintReplays": ["policy/invalidShadowPreservesNormalServingTest"]}, - {"id": "C21.invalid-dark-shadow", "rule": "invalid optional shadow disables dark reads while retaining local publication", "scenarios": ["invalid optional shadow disables dark reads while retaining local publication"], "generated": [{"profile": "shadow-layers", "witness": "invalid-dark-shadow-preserves-local-source-publication"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:invalidShadowKeepsLocalPublicationTest"], "vectors": [], "contracts": ["C21"], "quintReplays": ["shadow-layers/invalidShadowKeepsLocalPublicationTest"]}, - {"id": "C22.freshness-boundary", "rule": "remote exact fresh TTL expires", "scenarios": ["remote exact fresh TTL expires"], "generated": [{"profile": "recovery", "witness": "fresh-zero-age-skips-source"}, {"profile": "recovery", "witness": "last-fresh-age-skips-source"}, {"profile": "policy", "witness": "remote-exact-fresh-boundary-miss"}], "models": ["formal/dialcache-stale-recovery.qnt:lastFreshAgeSkipsSourceTest", "formal/dialcache-recovery-conformance.qnt:lastFreshReadDoesNotInvokeSourceTest", "formal/dialcache-policy-conformance.qnt:exactRemoteFreshBoundaryStartsSourceTest", "formal/dialcache-rule-checks.qnt:freshBoundaryIsExclusive", "formal/dialcache-policy-conformance.qnt:remoteHitsRespectAcquiredFreshness", "formal/dialcache-policy-conformance.qnt:remoteHitBeforeBoundaryDoesNotRenewFreshnessTest"], "vectors": [], "contracts": ["C22"], "evidenceNotes": ["Zero-age evidence also closes fresh-side boundary; exact F continues to use independent tests."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "quintReplays": ["policy/exactRemoteFreshBoundaryStartsSourceTest", "recovery/lastFreshReadDoesNotInvokeSourceTest", "policy/remoteHitBeforeBoundaryDoesNotRenewFreshnessTest"]}, - {"id": "C22.physical-vs-logical", "rule": "runtime changes preserve in-flight physical TTL and affect later freshness", "scenarios": ["runtime changes preserve in-flight physical TTL and affect later freshness"], "generated": [{"profile": "policy", "witness": "increased-fresh-ttl-reuses-retained-frame"}, {"profile": "policy", "witness": "increased-fresh-ttl-cannot-resurrect-expired-storage"}], "models": ["formal/dialcache-policy-conformance.qnt:increasedFreshTtlCanReusePhysicallyRetainedValueTest", "formal/dialcache-policy-conformance.qnt:increasedFreshTtlCannotResurrectExpiredStorageTest"], "vectors": [], "contracts": ["C22"], "quintReplays": ["policy/increasedFreshTtlCanReusePhysicallyRetainedValueTest", "policy/increasedFreshTtlCannotResurrectExpiredStorageTest"]}, - {"id": "C23.library-read-budget", "rule": "library read deadline precedence", "scenarios": ["library read deadline precedence"], "generated": [{"profile": "effects", "witness": "initial-budget:0"}], "models": ["formal/dialcache-effects-conformance.qnt:libraryReadBudgetIsFiftyMillisecondsTest"], "vectors": [], "contracts": ["C23"], "quintReplays": ["effects/libraryReadBudgetIsFiftyMillisecondsTest"]}, - {"id": "C23.instance-read-budget", "rule": "instance read deadline precedence", "scenarios": ["instance read deadline precedence"], "generated": [{"profile": "effects", "witness": "initial-budget:1"}], "models": ["formal/dialcache-effects-conformance.qnt:instanceReadBudgetOverridesLibraryTest"], "vectors": [], "contracts": ["C23"], "quintReplays": ["effects/instanceReadBudgetOverridesLibraryTest"]}, - {"id": "C23.operation-read-budget", "rule": "operation read deadline precedence", "scenarios": ["operation read deadline precedence"], "generated": [{"profile": "effects", "witness": "initial-budget:2"}], "models": ["formal/dialcache-effects-conformance.qnt:operationReadBudgetOverridesInstanceTest"], "vectors": [], "contracts": ["C23"], "quintReplays": ["effects/operationReadBudgetOverridesInstanceTest"]}, - {"id": "C23.runtime-read-budget", "rule": "runtime read deadline precedence", "scenarios": ["runtime read deadline precedence"], "generated": [{"profile": "effects", "witness": "initial-budget:3"}], "models": ["formal/dialcache-effects-conformance.qnt:runtimeReadBudgetOverridesOperationTest"], "vectors": [], "contracts": ["C23"], "quintReplays": ["effects/runtimeReadBudgetOverridesOperationTest"]}, - {"id": "C23.source-start", "rule": "fallback deadline starts after remote read completes", "scenarios": ["fallback deadline starts after remote read completes"], "generated": [{"profile": "effects", "witness": "read-timeout-starts-source"}], "models": ["formal/dialcache-flight-deadlines.qnt:fallbackDeadlineStartsWithFallback", "formal/dialcache-flight-deadlines.qnt:delayedLookupKeepsFullSourceBudgetTest", "formal/dialcache-effects-conformance.qnt:readTimeoutStartsIndependentSourceDeadlineTest", "formal/dialcache-effects-connection.qnt:effectsDeadlineMatchesSourceStart"], "vectors": [], "contracts": ["C23"]}, - {"id": "C23.default-source-budget", "rule": "library source deadline defaults to sixty seconds", "scenarios": ["library source deadline defaults to sixty seconds"], "generated": [{"profile": "source-budgets", "witness": "default-source-budget-expires-at-sixty-seconds"}], "models": ["formal/dialcache-flight-deadlines.qnt:omittedSourceBudgetUsesSixtySeconds", "formal/dialcache-flight-deadlines.qnt:librarySourceDeadlineIsSixtySecondsTest", "formal/dialcache-source-budgets-conformance.qnt:defaultSourceBudgetExpiresAtSixtySecondsTest"], "vectors": [], "contracts": ["C23"], "quintReplays": ["source-budgets/defaultSourceBudgetExpiresAtSixtySecondsTest"]}, - {"id": "C24.follower-read", "rule": "late follower inherits remaining read deadline", "scenarios": ["late follower inherits remaining read deadline"], "generated": [{"profile": "effects", "witness": "follower-keeps-read-budget"}], "models": ["formal/dialcache-effects-conformance.qnt:followerKeepsAcceptedReadBudgetTest"], "vectors": [], "contracts": ["C24"]}, - {"id": "C24.follower-source", "rule": "late follower inherits remaining fallback deadline", "scenarios": ["late follower inherits remaining fallback deadline"], "generated": [{"profile": "source-budgets", "witness": "late-follower-keeps-leaders-remaining-source-budget"}], "models": ["formal/dialcache-flight-deadlines.qnt:lateFollowerKeepsLeaderSourceDeadlineTest", "formal/dialcache-source-budgets-conformance.qnt:followersKeepTheirOwnersOutcome", "formal/dialcache-source-budgets-conformance.qnt:lateFollowerUsesLeadersRemainingBudgetTest", "formal/dialcache-source-connection.qnt:sourceOwnersMatchContract", "formal/dialcache-source-connection.qnt:followerKeepsAcquiredOwner"], "vectors": [], "contracts": ["C24"], "quintReplays": ["source-budgets/lateFollowerUsesLeadersRemainingBudgetTest"]}, - {"id": "C24.independent-reads", "rule": "uncoalesced remote reads own independent remaining budgets", "scenarios": ["uncoalesced remote reads own independent remaining budgets"], "generated": [{"profile": "independent", "witness": "independent-read-budgets"}, {"profile": "independent", "witness": "one-read-times-out-before-another"}], "models": ["formal/dialcache-independent-conformance.qnt:independentReadDeadlinesStartSeparateSourcesTest"], "vectors": [], "contracts": ["C24"]}, - {"id": "C25.late-source-rejected", "rule": "late resolve loses to deadline before timer delivery", "scenarios": ["late resolve loses to deadline before timer delivery"], "generated": [{"profile": "effects", "witness": "late-resolve"}], "models": ["formal/dialcache-flight-deadlines.qnt:timedOutSourceCannotPublish", "formal/dialcache-flight-deadlines.qnt:lateSettlementBeforeTimerTest", "formal/dialcache-rule-checks.qnt:sourceBoundaryIsExclusive", "formal/dialcache-source-connection.qnt:acceptedSourcesMatchContract"], "vectors": [], "contracts": ["C25"]}, - {"id": "C25.late-rejection", "rule": "late reject loses to deadline before timer delivery", "scenarios": ["late reject loses to deadline before timer delivery"], "generated": [{"profile": "effects", "witness": "late-reject"}], "models": ["formal/dialcache-flight-deadlines.qnt:timedOutSourceCannotPublish", "formal/dialcache-flight-deadlines.qnt:lateSettlementBeforeTimerTest"], "vectors": [], "contracts": ["C25"]}, - {"id": "C25.abandoned-overlap", "rule": "timeout releases flight while old loader continues", "scenarios": ["timeout releases flight while old loader continues"], "generated": [{"profile": "effects", "witness": "abandoned-overlap"}, {"profile": "source-budgets", "witness": "abandoned-source-cannot-replace-successful-retry"}], "models": ["formal/dialcache-flight-deadlines.qnt:abandonedSourceMayOverlapNewFlightTest", "formal/dialcache-effects-conformance.qnt:timedOutLoaderOverlapsNewFlightTest", "formal/dialcache-source-budgets-conformance.qnt:abandonedSourceCannotReplaceSuccessfulRetryTest"], "vectors": [], "contracts": ["C25"], "quintReplays": ["source-budgets/abandonedSourceCannotReplaceSuccessfulRetryTest"]}, - {"id": "C26.unbounded-source", "rule": "disabled fallback deadline accepts later source settlement", "scenarios": ["disabled fallback deadline accepts later source settlement"], "generated": [{"profile": "source-budgets", "witness": "unbounded-enabled-source-publishes-after-sixty-seconds"}], "models": ["formal/dialcache-flight-deadlines.qnt:disabledSourceDeadlineNeverTimesOut", "formal/dialcache-flight-deadlines.qnt:explicitlyUnboundedEnabledSourceAcceptsLateValueTest", "formal/dialcache-source-budgets-conformance.qnt:unboundedEnabledSourcePublishesAfterSixtySecondsTest"], "vectors": [], "contracts": ["C26"], "quintReplays": ["source-budgets/unboundedEnabledSourcePublishesAfterSixtySecondsTest"]}, - {"id": "C26.publication-ownership", "rule": "accepted serialization and write outlive fallback deadline", "scenarios": ["accepted serialization and write outlive fallback deadline"], "generated": [{"profile": "effects", "witness": "serialize-outlives-deadline"}, {"profile": "effects", "witness": "publication-after-deadline"}], "models": ["formal/dialcache-flight-deadlines.qnt:publicationRequiresAcceptedSource", "formal/dialcache-flight-deadlines.qnt:acceptedPublicationOutlivesDeadlineTest", "formal/dialcache-effects-conformance.qnt:writeRequiresAcceptedSource", "formal/dialcache-effects-conformance.qnt:acceptedWriteOutlivesDeadlineTest"], "vectors": [], "contracts": ["C26"]}, - {"id": "C26.decode-ownership", "rule": "fresh decoding is outside the source deadline", "scenarios": ["fresh decoding is outside the source deadline"], "generated": [{"profile": "effects", "witness": "decode-outlives-deadline"}], "models": ["formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest"], "vectors": [], "contracts": ["C26"]}, - {"id": "C27.key-failure", "rule": "key construction failure runs source with its enabled deadline", "scenarios": ["key construction failure runs source with its enabled deadline"], "generated": [{"profile": "source-budgets", "witness": "invalid-enabled-key-preserves-source-deadline"}], "models": ["formal/dialcache-flight-deadlines.qnt:keyFailureKeepsEnabledSourceDeadlineTest", "formal/dialcache-flight-deadlines.qnt:independentAcceptanceChecksCapturedDeadline", "formal/dialcache-source-budgets-conformance.qnt:onlyEnabledValidCallsResolvePolicy", "formal/dialcache-source-budgets-conformance.qnt:invalidKeyStillKeepsEnabledSourceDeadlineTest"], "vectors": [], "contracts": ["C27"], "quintReplays": ["source-budgets/invalidKeyStillKeepsEnabledSourceDeadlineTest"]}, - {"id": "C27.dump-failure", "rule": "dump failure returns source and does not retain value", "scenarios": ["dump failure returns source and does not retain value"], "generated": [{"profile": "effects", "witness": "dump-failure-preserves-value"}], "models": ["formal/dialcache-effects-conformance.qnt:dumpFailurePreservesSourceTest"], "vectors": [], "contracts": ["C27"]}, - {"id": "C27.write-failure", "rule": "write failure returns source and does not retain value", "scenarios": ["write failure returns source and does not retain value"], "generated": [{"profile": "effects", "witness": "write-failure-preserves-value"}], "models": ["formal/dialcache-effects-conformance.qnt:writeFailurePreservesSourceTest"], "vectors": [], "contracts": ["C27"]}, - {"id": "C27.local-read-failure", "rule": "Failed local reads skip reuse and local publication", "scenarios": [], "generated": [{"profile": "local-failure", "witness": "failed-local-read-preserves-old-value-and-memoizes-remote"}, {"profile": "local-failure", "witness": "failed-local-read-suppresses-later-source-publication"}], "models": ["formal/dialcache-core.qnt:failedLocalReadSkipsReuseAndPublication", "formal/dialcache-core.qnt:localReadFailureContinuesToRemoteTest", "formal/dialcache-core.qnt:localReadFailureSuppressesSourcePublicationTest", "formal/dialcache-local-failure-conformance.qnt:failedReadKeepsPriorLocalValue", "formal/dialcache-local-failure-conformance.qnt:localReadFailureFallsThroughAndPreservesOldLocalTest", "formal/dialcache-local-failure-conformance.qnt:localReadFailureSkipsSourcePublicationButMemoizesTest"], "vectors": [], "contracts": ["C27"], "quintReplays": ["local-failure/localReadFailureFallsThroughAndPreservesOldLocalTest", "local-failure/localReadFailureSkipsSourcePublicationButMemoizesTest"]}, - {"id": "C27.local-write-failure", "rule": "A failed local write preserves the accepted source result", "scenarios": [], "generated": [{"profile": "local-failure", "witness": "failed-local-write-keeps-result-and-request-memo"}], "models": ["formal/dialcache-core.qnt:failedLocalWritePreservesAcceptedResult", "formal/dialcache-core.qnt:localWriteFailurePreservesSourceAndMemoTest", "formal/dialcache-core.qnt:localWriteFailurePreservesRemoteHitTest", "formal/dialcache-local-failure-conformance.qnt:failedWriteKeepsAcceptedCallerResult", "formal/dialcache-local-failure-conformance.qnt:localWriteFailureKeepsSourceAndRequestMemoTest"], "vectors": [], "contracts": ["C27"], "quintReplays": ["local-failure/localWriteFailureKeepsSourceAndRequestMemoTest"]}, - {"id": "C28.no-refill-after-read-failure", "rule": "remote read timeout suppresses refill and late read", "scenarios": ["remote read timeout suppresses refill and late read", "read failure returns source and does not retain value"], "generated": [{"profile": "effects", "witness": "failed-read-no-refill"}, {"profile": "effects", "witness": "abandoned-read-settles"}], "models": ["formal/dialcache-core.qnt:remoteFailureNeverRefills", "formal/dialcache-effects-conformance.qnt:readTimeoutStartsIndependentSourceDeadlineTest", "formal/dialcache-effects-conformance.qnt:lateReadCannotBecomeHitTest", "formal/dialcache-conformance.qnt:failedReadPreservesPreviouslyStoredBytesTest"], "vectors": [], "contracts": ["C28"], "quintReplays": ["core/failedReadPreservesPreviouslyStoredBytesTest"]}, - {"id": "C28.untracked-local-publication", "rule": "untracked read failure still permits active local publication", "scenarios": ["untracked read failure still permits active local publication"], "generated": [{"profile": "policy", "witness": "failed-untracked-read-still-warms-local"}], "models": ["formal/dialcache-core.qnt:remoteReadFailureStillPublishesUntrackedLocalAndRequestTest", "formal/dialcache-policy-conformance.qnt:untrackedReadFailureStillWarmsActiveLocalTest"], "vectors": [], "contracts": ["C28"], "quintReplays": ["policy/untrackedReadFailureStillWarmsActiveLocalTest"]}, - {"id": "C29.missing-redis-local", "rule": "missing remote adapter leaves valid local serving available", "scenarios": ["missing remote adapter leaves valid local serving available"], "generated": [{"profile": "layers", "witness": "absent-remote-preserves-local-reuse"}], "models": ["formal/dialcache-layers-conformance.qnt:absentRemoteHasNoAdapterEffects", "formal/dialcache-layers-conformance.qnt:absentRemotePreservesLocalReuseTest"], "vectors": [], "contracts": ["C29"], "quintReplays": ["layers/absentRemotePreservesLocalReuseTest"]}, - {"id": "C29.missing-redis-maintenance", "rule": "Missing Redis surfaces a maintenance error while local reuse remains valid", "scenarios": [], "generated": [{"profile": "layers", "witness": "absent-remote-maintenance-preserves-local"}], "models": ["formal/dialcache-layers-conformance.qnt:absentRemoteMaintenancePreservesLocalReuseTest"], "vectors": [], "contracts": ["C29"], "quintReplays": ["layers/absentRemoteMaintenancePreservesLocalReuseTest"]}, - {"id": "C29.maintenance-failure", "rule": "explicit invalidation surfaces mutation failure", "scenarios": ["explicit invalidation surfaces mutation failure"], "generated": [{"profile": "recovery-read", "witness": "failed-maintenance-preserves-existing-marker"}, {"profile": "recovery-read", "witness": "failed-maintenance-preserves-absent-marker"}], "models": ["formal/dialcache-recovery-read-conformance.qnt:failedInvalidationPreservesExistingMarkerTest", "formal/dialcache-recovery-read-conformance.qnt:failedInvalidationDoesNotCreateMarkerTest"], "vectors": [], "contracts": ["C29"], "quintReplays": ["recovery-read/failedInvalidationPreservesExistingMarkerTest", "recovery-read/failedInvalidationDoesNotCreateMarkerTest"]}, - {"id": "C30.observer-isolation", "rule": "observer failures cannot change cache or source outcomes", "scenarios": ["observer failures cannot change cache or source outcomes"], "generated": [{"profile": "effects", "witness": "observer-failure-hit"}, {"profile": "effects", "witness": "observer-failure-publication"}, {"profile": "effects", "witness": "observer-failure-source-error"}], "models": ["formal/dialcache-effects-conformance.qnt:observerFailuresCannotPreventCacheHitTest", "formal/dialcache-effects-conformance.qnt:observerFailuresCannotPreventPublicationTest", "formal/dialcache-effects-conformance.qnt:observerFailuresCannotReplaceSourceErrorTest"], "vectors": [], "contracts": ["C30"], "quintReplays": ["effects/observerFailuresCannotPreventCacheHitTest", "effects/observerFailuresCannotPreventPublicationTest", "effects/observerFailuresCannotReplaceSourceErrorTest"]}, - {"id": "C31.tracked-no-local-fill", "rule": "tracked refill suppresses local until a Redis hit warms it", "scenarios": ["tracked refill suppresses local until a Redis hit warms it"], "generated": [{"profile": "layers", "witness": "tracked-refill-needs-remote-validation"}, {"profile": "layers", "witness": "validated-tracked-hit-warms-local"}, {"profile": "recovery-read", "witness": "tracked-source-requires-validation-before-local-reuse"}], "models": ["formal/dialcache-core.qnt:trackedRemoteFallbackSuppressesLocalPublication", "formal/dialcache-layers-conformance.qnt:trackedSourceWaitsForValidatedReadToWarmLocalTest", "formal/dialcache-recovery-read-conformance.qnt:trackedSourceNeedsRemoteValidationBeforeLocalReuseTest"], "vectors": [], "contracts": ["C31"], "quintReplays": ["recovery-read/trackedSourceNeedsRemoteValidationBeforeLocalReuseTest", "layers/trackedSourceWaitsForValidatedReadToWarmLocalTest"]}, - {"id": "C32.grouped-invalidation", "rule": "one invalidation fences all tracked operation variants only for its entity", "scenarios": ["one invalidation fences all tracked operation variants only for its entity"], "generated": [{"profile": "layers", "witness": "invalidation-fences-both-operations"}], "models": ["formal/dialcache-layers-conformance.qnt:invalidationGroupsOperationsButPreservesAcquiredCachesTest", "formal/dialcache-conformance.qnt:invalidationRefillsFromCurrentSourceTest"], "vectors": [], "contracts": ["C32"], "quintReplays": ["layers/invalidationGroupsOperationsButPreservesAcquiredCachesTest", "core/invalidationRefillsFromCurrentSourceTest"]}, - {"id": "C32.untracked-unaffected", "rule": "untracked Redis values ignore invalidation markers", "scenarios": ["untracked Redis values ignore invalidation markers"], "generated": [{"profile": "layers", "witness": "untracked-ignores-watermark"}], "models": ["formal/dialcache-layers-conformance.qnt:untrackedReadsIgnoreGroupedInvalidationTest"], "vectors": [], "contracts": ["C32"], "quintReplays": ["layers/untrackedReadsIgnoreGroupedInvalidationTest"]}, - {"id": "C34.first-fence", "rule": "observed future fence suppresses serialization and refill", "scenarios": ["observed future fence suppresses serialization and refill"], "generated": [{"profile": "effects", "witness": "normalized-fence-blocks-publication"}], "models": ["formal/dialcache-tracked-invalidation.qnt:observedFutureFenceSkipsRefillTest", "formal/dialcache-tracked-invalidation.qnt:refillAtFenceEqualitySkipsWriteTest", "formal/dialcache-effects-conformance.qnt:absentReplyWithFutureFenceBlocksRefillTest"], "vectors": [], "contracts": ["C34"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "quintReplays": ["effects/absentReplyWithFutureFenceBlocksRefillTest"]}, - {"id": "C34.second-fence", "rule": "tracked refill rechecks clock after serialization", "scenarios": ["tracked refill rechecks clock after serialization"], "generated": [{"profile": "effects", "witness": "dump-rechecks-fence-after-rollback"}], "models": ["formal/dialcache-effects-conformance.qnt:rollbackDuringDumpRechecksObservedFenceTest"], "vectors": [], "contracts": ["C34"]}, - {"id": "C34.write-timestamp", "rule": "admitted tracked refill timestamps after serialization", "scenarios": ["admitted tracked refill timestamps after serialization"], "generated": [{"profile": "effects", "witness": "write-stamp-after-serialization"}], "models": ["formal/dialcache-effects-conformance.qnt:writeStampAfterSerializationClearsInterveningFenceTest"], "vectors": [], "contracts": ["C34"], "quintReplays": ["effects/writeStampAfterSerializationClearsInterveningFenceTest"]}, - {"id": "C35.delayed-old-write", "rule": "delayed old write is fenced after invalidation", "scenarios": ["delayed old write is fenced after invalidation"], "generated": [{"profile": "effects", "witness": "delayed-fenced-write"}], "models": ["formal/dialcache-tracked-invalidation.qnt:staleValueAfterInvalidationIsFenced", "formal/dialcache-tracked-invalidation.qnt:acquiredAfterInvalidationDoesNotServeStale", "formal/dialcache-effects-conformance.qnt:delayedWriteRemainsFencedTest", "formal/dialcache-tracked-invalidation.qnt:acquisitionAfterInvalidationRejectsOldBytesTest", "formal/dialcache-tracked-invalidation.qnt:staleWriteAtCoveredDelayEqualityRemainsFencedTest", "formal/dialcache-tracked-invalidation.qnt:freshWriteBeyondBufferBecomesReadableTest"], "vectors": [], "contracts": ["C35"], "evidenceNotes": ["Stale-write guarantee requires documented buffer >= stale work delay + writer clock lead; regression is conditional on those model bounds."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}]}, - {"id": "C36.acquired-fresh", "rule": "acquired tracked snapshot survives later invalidation", "scenarios": ["acquired tracked snapshot survives later invalidation"], "generated": [{"profile": "independent", "witness": "acquired-fresh-decode-survives-invalidation"}], "models": ["formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest", "formal/dialcache-independent-conformance.qnt:acceptedFreshDecodeSurvivesOtherInvalidationTest", "formal/dialcache-tracked-invalidation.qnt:acquiredSnapshotSurvivesLaterInvalidationTest"], "vectors": [], "contracts": ["C36"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}]}, - {"id": "C36.acquired-local", "rule": "invalidation preserves acquired local value", "scenarios": ["invalidation preserves acquired local value"], "generated": [{"profile": "layers", "witness": "invalidation-preserves-local-hit"}], "models": ["formal/dialcache-layers-conformance.qnt:invalidationGroupsOperationsButPreservesAcquiredCachesTest"], "vectors": [], "contracts": ["C36"], "quintReplays": ["layers/invalidationGroupsOperationsButPreservesAcquiredCachesTest"]}, - {"id": "C36.acquired-request", "rule": "invalidation preserves acquired request value", "scenarios": ["invalidation preserves acquired request value"], "generated": [{"profile": "layers", "witness": "invalidation-preserves-request-hit"}], "models": ["formal/dialcache-layers-conformance.qnt:invalidationGroupsOperationsButPreservesAcquiredCachesTest"], "vectors": [], "contracts": ["C36"], "quintReplays": ["layers/invalidationGroupsOperationsButPreservesAcquiredCachesTest"]}, - {"id": "C37.physical-cap", "rule": "tracked retention has a one hour physical cap", "scenarios": ["tracked retention has a one hour physical cap"], "generated": [{"profile": "recovery-read", "witness": "tracked-physical-cap-expires-before-logical-freshness"}], "models": ["formal/dialcache-recovery-read-conformance.qnt:trackedWritesRespectPhysicalCap", "formal/dialcache-recovery-read-conformance.qnt:trackedPhysicalRetentionExpiresAtCapTest"], "vectors": [], "contracts": ["C37"], "quintReplays": ["recovery-read/trackedPhysicalRetentionExpiresAtCapTest"]}, - {"id": "C37.logical-age-unclamped", "rule": "tracked stale retention cap does not clamp logical recovery age", "scenarios": ["tracked stale retention cap does not clamp logical recovery age"], "generated": [{"profile": "recovery-read", "witness": "logical-recovery-age-exceeds-physical-cap"}], "models": ["formal/dialcache-recovery-read-conformance.qnt:recoveredAgeUsesLogicalMaximum", "formal/dialcache-recovery-read-conformance.qnt:physicalCapDoesNotClampLogicalRecoveryTest"], "vectors": [], "contracts": ["C37"], "quintReplays": ["recovery-read/physicalCapDoesNotClampLogicalRecoveryTest"]}, - {"id": "C38.marker-transition", "rule": "A watermark cutoff never moves backwards", "scenarios": [], "generated": [], "models": ["formal/dialcache-recovery-conformance.qnt:rollbackCannotLowerInvalidationWatermarkTest", "formal/dialcache-invalidation-transition.qnt:successfulCutoffIsExactMaximum", "formal/dialcache-invalidation-transition.qnt:futureCutoffDoesNotMoveBackwardsTest"], "vectors": ["invalidation/existing future cutoff never moves backwards"], "contracts": ["C38", "W09"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 002: zero buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 014: buffered cutoff / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 026: retention above floor / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 038: maximum buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 050: maximum safe sum / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 062: leading decimal zeros / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 242: maximum timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 254: zero timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 278: all-zero decimal text / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 009: zero buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 013: buffered cutoff / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 015: buffered cutoff / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 016: buffered cutoff / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 021: buffered cutoff / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 033: retention above floor / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 252: zero timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 253: zero timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 255: zero timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 256: zero timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 261: zero timestamp / leading-zero stored decimal"}], "quintReplays": ["recovery/rollbackCannotLowerInvalidationWatermarkTest"]}, - {"id": "C39.reject-before-mutation", "rule": "Invalid watermark arguments reject before mutation", "scenarios": [], "generated": [], "models": ["formal/dialcache-invalidation-transition.qnt:argumentValidationIsExact", "formal/dialcache-invalidation-transition.qnt:rejectedInputPreservesEntireRedisState", "formal/dialcache-invalidation-transition.qnt:rejectedFractionPreservesOrderedListTest", "formal/dialcache-invalidation-transition.qnt:rejectedUnsafeSumPreservesPersistentMalformedTextTest", "formal/dialcache-invalidation-transition.qnt:newlineAndPlusAreNotDecimalGrammarTest"], "vectors": ["invalidation/negative buffer rejects before mutation", "invalidation/fractional buffer rejects before mutation", "invalidation/over-limit buffer rejects before mutation", "invalidation/exponent timestamp rejects before mutation", "invalidation/negative timestamp rejects before mutation", "invalidation/unsafe sum rejects before mutation", "invalidation/negative buffer preserves absent state", "invalidation/negative buffer preserves malformed finite string", "invalidation/negative buffer preserves malformed persistent string", "invalidation/negative buffer preserves finite list contents", "invalidation/negative buffer preserves persistent list contents", "invalidation/fractional buffer preserves absent state", "invalidation/fractional buffer preserves malformed finite string", "invalidation/fractional buffer preserves malformed persistent string", "invalidation/fractional buffer preserves finite list contents", "invalidation/fractional buffer preserves persistent list contents", "invalidation/over-limit buffer preserves absent state", "invalidation/over-limit buffer preserves malformed finite string", "invalidation/over-limit buffer preserves malformed persistent string", "invalidation/over-limit buffer preserves finite list contents", "invalidation/over-limit buffer preserves persistent list contents", "invalidation/exponent timestamp preserves absent state", "invalidation/exponent timestamp preserves malformed finite string", "invalidation/exponent timestamp preserves malformed persistent string", "invalidation/exponent timestamp preserves finite list contents", "invalidation/exponent timestamp preserves persistent list contents", "invalidation/negative timestamp preserves absent state", "invalidation/negative timestamp preserves malformed finite string", "invalidation/negative timestamp preserves malformed persistent string", "invalidation/negative timestamp preserves finite list contents", "invalidation/negative timestamp preserves persistent list contents", "invalidation/unsafe sum preserves absent state", "invalidation/unsafe sum preserves malformed finite string", "invalidation/unsafe sum preserves malformed persistent string", "invalidation/unsafe sum preserves finite list contents", "invalidation/unsafe sum preserves persistent list contents"], "contracts": ["C39", "W09"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 072: negative buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 073: negative buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 074: negative buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 075: negative buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 076: negative buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 077: negative buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 078: negative buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 079: negative buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 080: negative buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 081: negative buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 082: negative buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 083: negative buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 084: fractional buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 085: fractional buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 086: fractional buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 087: fractional buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 088: fractional buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 089: fractional buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 090: fractional buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 091: fractional buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 092: fractional buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 093: fractional buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 094: fractional buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 095: fractional buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 096: over-limit buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 097: over-limit buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 098: over-limit buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 099: over-limit buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 100: over-limit buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 101: over-limit buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 102: over-limit buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 103: over-limit buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 104: over-limit buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 105: over-limit buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 106: over-limit buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 107: over-limit buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 108: unsafe buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 109: unsafe buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 110: unsafe buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 111: unsafe buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 112: unsafe buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 113: unsafe buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 114: unsafe buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 115: unsafe buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 116: unsafe buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 117: unsafe buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 118: unsafe buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 119: unsafe buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 120: exponent timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 121: exponent timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 122: exponent timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 123: exponent timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 124: exponent timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 125: exponent timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 126: exponent timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 127: exponent timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 128: exponent timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 129: exponent timestamp / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 130: exponent timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 131: exponent timestamp / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 132: negative timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 133: negative timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 134: negative timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 135: negative timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 136: negative timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 137: negative timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 138: negative timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 139: negative timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 140: negative timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 141: negative timestamp / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 142: negative timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 143: negative timestamp / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 144: unsafe sum / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 145: unsafe sum / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 146: unsafe sum / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 147: unsafe sum / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 148: unsafe sum / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 149: unsafe sum / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 150: unsafe sum / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 151: unsafe sum / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 152: unsafe sum / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 153: unsafe sum / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 154: unsafe sum / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 155: unsafe sum / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 156: empty buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 157: empty buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 158: empty buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 159: empty buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 160: empty buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 161: empty buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 162: empty buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 163: empty buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 164: empty buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 165: empty buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 166: empty buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 167: empty buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 168: explicit plus buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 169: explicit plus buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 170: explicit plus buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 171: explicit plus buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 172: explicit plus buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 173: explicit plus buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 174: explicit plus buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 175: explicit plus buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 176: explicit plus buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 177: explicit plus buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 178: explicit plus buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 179: explicit plus buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 180: space-prefixed buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 181: space-prefixed buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 182: space-prefixed buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 183: space-prefixed buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 184: space-prefixed buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 185: space-prefixed buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 186: space-prefixed buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 187: space-prefixed buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 188: space-prefixed buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 189: space-prefixed buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 190: space-prefixed buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 191: space-prefixed buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 192: hexadecimal buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 193: hexadecimal buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 194: hexadecimal buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 195: hexadecimal buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 196: hexadecimal buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 197: hexadecimal buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 198: hexadecimal buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 199: hexadecimal buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 200: hexadecimal buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 201: hexadecimal buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 202: hexadecimal buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 203: hexadecimal buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 204: newline-suffixed buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 205: newline-suffixed buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 206: newline-suffixed buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 207: newline-suffixed buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 208: newline-suffixed buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 209: newline-suffixed buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 210: newline-suffixed buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 211: newline-suffixed buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 212: newline-suffixed buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 213: newline-suffixed buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 214: newline-suffixed buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 215: newline-suffixed buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 216: fractional timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 217: fractional timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 218: fractional timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 219: fractional timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 220: fractional timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 221: fractional timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 222: fractional timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 223: fractional timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 224: fractional timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 225: fractional timestamp / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 226: fractional timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 227: fractional timestamp / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 228: unsafe timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 229: unsafe timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 230: unsafe timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 231: unsafe timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 232: unsafe timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 233: unsafe timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 234: unsafe timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 235: unsafe timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 236: unsafe timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 237: unsafe timestamp / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 238: unsafe timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 239: unsafe timestamp / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 264: empty timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 265: empty timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 266: empty timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 267: empty timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 268: empty timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 269: empty timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 270: empty timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 271: empty timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 272: empty timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 273: empty timestamp / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 274: empty timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 275: empty timestamp / empty stored string"}]}, - {"id": "C40.first-stale", "rule": "first stale age is recoverable without shared publication", "scenarios": ["first stale age is recoverable without shared publication"], "generated": [{"profile": "recovery", "witness": "first-stale-age-recovers-without-publication"}], "models": ["formal/dialcache-stale-recovery.qnt:recoveredStaleHasNoSharedPublication", "formal/dialcache-stale-recovery.qnt:servedValueCanAgeTest", "formal/dialcache-stale-recovery.qnt:firstStaleAgeRetainsWithoutDecodingTest", "formal/dialcache-rule-checks.qnt:retentionStartsAtFreshBoundary"], "vectors": [], "contracts": ["C40"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}]}, - {"id": "C40.last-stale", "rule": "last millisecond before M is recoverable", "scenarios": ["last millisecond before M is recoverable"], "generated": [{"profile": "recovery", "witness": "last-recovery-age-serves"}], "models": ["formal/dialcache-recovery-conformance.qnt:lastRecoveryMillisecondIsServedTest", "formal/dialcache-stale-recovery.qnt:lastRecoveryAgeStillServesTest"], "vectors": [], "contracts": ["C40"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/lastRecoveryMillisecondIsServedTest"]}, - {"id": "C40.maximum-age", "rule": "maximum age is not retained for recovery", "scenarios": ["maximum age is not retained for recovery", "initially too-old bytes cannot recover after wall rollback"], "generated": [{"profile": "recovery", "witness": "maximum-age-read-preserves-source-error"}], "models": ["formal/dialcache-stale-recovery.qnt:retainedCandidateWasEligible", "formal/dialcache-recovery-conformance.qnt:maximumAgeAtReadDoesNotDecodeTest", "formal/dialcache-stale-recovery.qnt:exactMaximumAgeDoesNotRetainTest", "formal/dialcache-stale-recovery.qnt:initiallyTooOldCannotRecoverAfterRollbackTest"], "vectors": [], "contracts": ["C40"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/maximumAgeAtReadDoesNotDecodeTest"]}, - {"id": "C40.future-rejected", "rule": "future age is not retained for recovery", "scenarios": ["future age is not retained for recovery", "initially future bytes cannot recover after wall clock catches up"], "generated": [{"profile": "recovery", "witness": "future-read-preserves-source-error"}], "models": ["formal/dialcache-stale-recovery.qnt:retainedCandidateWasEligible", "formal/dialcache-stale-recovery.qnt:futureFrameIsNotRetainedTest", "formal/dialcache-stale-recovery.qnt:initiallyFutureCannotRecoverAfterClockAdvanceTest", "formal/dialcache-stale-recovery.qnt:futureFrameIsNeverFreshOrRetained"], "vectors": [], "contracts": ["C40"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}]}, - {"id": "C41.success-skips-decode", "rule": "source success skips retained candidate decoding", "scenarios": ["source success skips retained candidate decoding"], "generated": [{"profile": "recovery", "witness": "source-success-skips-stale-decode"}], "models": ["formal/dialcache-stale-recovery.qnt:sourceSuccessDoesNotDecodeCandidate", "formal/dialcache-stale-recovery.qnt:acceptedSourceNeverDecodesRetainedBytesTest"], "vectors": [], "contracts": ["C41"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}]}, - {"id": "C41.denial-keeps-error", "rule": "denied recovery preserves source error without decoding", "scenarios": ["denied recovery preserves source error without decoding"], "generated": [{"profile": "recovery", "witness": "operation-denial-overrides-instance-allow"}], "models": ["formal/dialcache-recovery-conformance.qnt:operationDenialReplacesInstanceAllowTest", "formal/dialcache-stale-recovery.qnt:deniedRecoveryNeverDecodesRetainedBytesTest"], "vectors": [], "contracts": ["C41"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/operationDenialReplacesInstanceAllowTest"]}, - {"id": "C41.classifier-failure", "rule": "recovery error overrides allow policy safely", "scenarios": ["recovery error overrides allow policy safely", "recovery error overrides error policy safely"], "generated": [{"profile": "recovery", "witness": "classifier-error-keeps-error-without-decode"}], "models": ["formal/dialcache-recovery-conformance.qnt:classifierErrorPreservesSourceWithoutDecodeTest"], "vectors": [], "contracts": ["C41"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/classifierErrorPreservesSourceWithoutDecodeTest"]}, - {"id": "C42.allow-override", "rule": "recovery allow overrides deny policy safely", "scenarios": ["recovery allow overrides deny policy safely"], "generated": [{"profile": "recovery", "witness": "operation-allow-overrides-instance-denial"}], "models": ["formal/dialcache-recovery-conformance.qnt:operationAllowReplacesInstanceDenialTest"], "vectors": [], "contracts": ["C42"], "quintReplays": ["recovery/operationAllowReplacesInstanceDenialTest"]}, - {"id": "C42.timeout-only-default", "rule": "default classifier rejects ordinary errors", "scenarios": ["default classifier rejects ordinary errors"], "generated": [{"profile": "recovery", "witness": "default-denies-ordinary-error"}], "models": ["formal/dialcache-recovery-conformance.qnt:defaultRejectsOrdinaryFailureTest"], "vectors": [], "contracts": ["C42"], "quintReplays": ["recovery/defaultRejectsOrdinaryFailureTest"]}, - {"id": "C42.propagated-timeout", "rule": "default classifier accepts a timeout propagated by source", "scenarios": ["default classifier accepts a timeout propagated by source"], "generated": [{"profile": "recovery", "witness": "default-recovers-propagated-timeout"}], "models": ["formal/dialcache-recovery-conformance.qnt:defaultRecoversPropagatedTimeoutTest"], "vectors": [], "contracts": ["C42"], "quintReplays": ["recovery/defaultRecoversPropagatedTimeoutTest"]}, - {"id": "C42.explicit-denial", "rule": "explicit denial replaces default timeout recovery", "scenarios": ["explicit denial replaces default timeout recovery"], "generated": [{"profile": "recovery", "witness": "explicit-denial-overrides-timeout"}], "models": ["formal/dialcache-recovery-conformance.qnt:explicitDenialReplacesDefaultTest", "formal/dialcache-recovery-conformance.qnt:instanceDenialReplacesTimeoutOnlyDefaultTest"], "vectors": [], "contracts": ["C42"], "quintReplays": ["recovery/explicitDenialReplacesDefaultTest", "recovery/instanceDenialReplacesTimeoutOnlyDefaultTest"]}, - {"id": "C43.coalesced-once", "rule": "coalesced recovery classifies and decodes once", "scenarios": ["coalesced recovery classifies and decodes once"], "generated": [{"profile": "recovery", "witness": "coalesced-recovery"}], "models": ["formal/dialcache-recovery-conformance.qnt:coalescedRecoveryClassifiesAndDecodesOnceTest"], "vectors": [], "contracts": ["C43"], "quintReplays": ["recovery/coalescedRecoveryClassifiesAndDecodesOnceTest"]}, - {"id": "C43.request-memo", "rule": "recovered value memoizes only in its request scope", "scenarios": ["recovered value memoizes only in its request scope"], "generated": [{"profile": "recovery", "witness": "recovered-value-request-hit"}, {"profile": "recovery", "witness": "recovery-memoizes-both-requests"}, {"profile": "recovery-read", "witness": "tracked-compressed-recovery-is-request-only"}], "models": ["formal/dialcache-recovery-conformance.qnt:closedScopesHaveNoMemo", "formal/dialcache-recovery-conformance.qnt:recoveredValueMemoizesOnlyInAttachedRequestTest", "formal/dialcache-recovery-conformance.qnt:closedRequestCannotReceiveLateRecoveryMemoTest", "formal/dialcache-stale-recovery.qnt:recoveredStaleHasNoSharedPublication", "formal/dialcache-recovery-read-conformance.qnt:recoveredResultsNeverPublishShared", "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryMemoizesWithoutLocalPublicationTest", "formal/dialcache-legacy-recovery-connection.qnt:flightRecoveryMatchesContract", "formal/dialcache-recovery-conformance.qnt:recoveredFlightMemoIsReusedByBothRequestsTest"], "vectors": [], "contracts": ["C43"], "quintReplays": ["recovery-read/compressedRecoveryMemoizesWithoutLocalPublicationTest", "recovery/recoveredValueMemoizesOnlyInAttachedRequestTest", "recovery/closedRequestCannotReceiveLateRecoveryMemoTest", "recovery/recoveredFlightMemoIsReusedByBothRequestsTest"]}, - {"id": "C43.independent-values", "rule": "uncoalesced recovery preserves each caller's independently acquired bytes", "scenarios": ["uncoalesced recovery preserves each caller's independently acquired bytes"], "generated": [{"profile": "independent", "witness": "distinct-retained-recovery-values"}, {"profile": "independent", "witness": "independent-source-error-identities"}], "models": ["formal/dialcache-independent-conformance.qnt:independentRecoveryKeepsDistinctSnapshotsTest", "formal/dialcache-independent-conformance.qnt:independentRecoveriesServeDistinctAcquiredSnapshotsTest"], "vectors": [], "contracts": ["C43"], "quintReplays": ["independent/independentRecoveriesServeDistinctAcquiredSnapshotsTest"]}, - {"id": "C44.retained-invalidation", "rule": "recovery uses acquired snapshot after invalidation and replacement", "scenarios": ["recovery uses acquired snapshot after invalidation and replacement"], "generated": [{"profile": "recovery", "witness": "retained-across-invalidation"}, {"profile": "recovery", "witness": "replacement-cannot-change-recovered-value"}, {"profile": "recovery-read", "witness": "retained-compressed-recovery-survives-fence-new-request-misses"}], "models": ["formal/dialcache-independent-conformance.qnt:independentRecoveryKeepsDistinctSnapshotsTest", "formal/dialcache-recovery-conformance.qnt:replacementDoesNotChangeRetainedRecoveryTest", "formal/dialcache-stale-recovery.qnt:retainedBytesSurviveRedisDeletionAndFenceTest", "formal/dialcache-recovery-read-conformance.qnt:retainedCompressedRecoverySurvivesInvalidationTest", "formal/dialcache-recovery-connection.qnt:retainedSnapshotMatchesAcquisition", "formal/dialcache-legacy-recovery-connection.qnt:flightKeepsAcquiredSnapshot"], "vectors": [], "contracts": ["C44"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery-read/retainedCompressedRecoverySurvivesInvalidationTest", "recovery/replacementDoesNotChangeRetainedRecoveryTest"]}, - {"id": "C44.retained-expiry", "rule": "expired remote storage cannot revoke retained stale snapshot", "scenarios": ["expired remote storage cannot revoke retained stale snapshot"], "generated": [{"profile": "recovery-read", "witness": "retained-snapshot-survives-physical-expiry-new-read-misses"}], "models": ["formal/dialcache-recovery-read-conformance.qnt:retainedSnapshotSurvivesPhysicalExpiryTest"], "vectors": [], "contracts": ["C44"], "quintReplays": ["recovery-read/retainedSnapshotSurvivesPhysicalExpiryTest"]}, - {"id": "C44.no-reread", "rule": "read failure never causes a recovery reread", "scenarios": ["read failure never causes a recovery reread"], "generated": [{"profile": "recovery", "witness": "failed-initial-read-skips-recovery"}], "models": ["formal/dialcache-stale-recovery.qnt:recoveryUsesSingleRedisRead", "formal/dialcache-stale-recovery.qnt:readFailureNeverRetains", "formal/dialcache-stale-recovery.qnt:readFailureNeverAttemptsRecovery", "formal/dialcache-stale-recovery.qnt:failedReadSkipsRecoveryTest", "formal/dialcache-recovery-conformance.qnt:initialReadFailureSkipsRecoveryClassificationTest"], "vectors": [], "contracts": ["C44"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/initialReadFailureSkipsRecoveryClassificationTest"]}, - {"id": "C45.maximum-age-exclusive", "rule": "After asynchronous decoding, age exactly M preserves the source error", "scenarios": ["stale candidate crossing M during decoding preserves source error"], "generated": [{"profile": "recovery", "witness": "exact-maximum-after-decode-rejects"}], "models": ["formal/dialcache-stale-recovery.qnt:servedStaleIsStrictlyWithinMaxAge", "formal/dialcache-stale-recovery.qnt:decodingAtMaxAgeRejectsTest", "formal/dialcache-recovery-conformance.qnt:maximumAgeAfterDecodePreservesSourceTest", "formal/dialcache-recovery-conformance.qnt:recoveredValueWasWithinAcceptedAge", "formal/dialcache-rule-checks.qnt:recoveryBoundaryIsExclusive"], "vectors": [], "contracts": ["C45"], "evidenceNotes": ["Distinguish equality after decode from greater-than-M; do not count the same fixed scenario twice as independent evidence."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/maximumAgeAfterDecodePreservesSourceTest"]}, - {"id": "C45.recheck-after-decode", "rule": "stale candidate crossing M during decoding preserves source error", "scenarios": ["stale candidate crossing M during decoding preserves source error"], "generated": [{"profile": "recovery", "witness": "expired-during-decode"}], "models": ["formal/dialcache-stale-recovery.qnt:servedStaleIsStrictlyWithinMaxAge", "formal/dialcache-stale-recovery.qnt:decodingAtMaxAgeRejectsTest"], "vectors": [], "contracts": ["C45"]}, - {"id": "C45.captured-policy", "rule": "pending recovery keeps its age snapshot while later calls use new policy", "scenarios": ["pending recovery keeps its age snapshot while later calls use new policy"], "generated": [{"profile": "independent", "witness": "independent-recovery-age-boundary"}], "models": ["formal/dialcache-independent-conformance.qnt:recoveryPolicyIsCapturedPerCallerTest", "formal/dialcache-recovery-connection.qnt:recoveryReturnMatchesAcquiredContract", "formal/dialcache-independent-connection.qnt:independentRecoveryMatchesContract", "formal/dialcache-independent-conformance.qnt:independentRecoveryAtCapturedAgeBoundaryTest"], "vectors": [], "contracts": ["C45"], "quintReplays": ["independent/independentRecoveryAtCapturedAgeBoundaryTest"]}, - {"id": "C45.preserve-source-error", "rule": "recovery deserialization failure preserves original error", "scenarios": ["recovery deserialization failure preserves original error"], "generated": [{"profile": "independent", "witness": "failed-recovery-keeps-source-error"}], "models": ["formal/dialcache-recovery-conformance.qnt:failedRecoveryPreservesDeadlineErrorTest", "formal/dialcache-stale-recovery.qnt:recoveryDecodeFailureKeepsSourceOutcomeTest"], "vectors": [], "contracts": ["C45"], "evidenceNotes": ["Verification outcome enum checks source-vs-recovery error category; portable fixed driver/native errors carry exact original identity."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/failedRecoveryPreservesDeadlineErrorTest"]}, - {"id": "C45.rollback-future", "rule": "wall rollback during recovery decode rejects a now future snapshot", "scenarios": ["wall rollback during recovery decode rejects a now future snapshot"], "generated": [{"profile": "recovery", "witness": "rollback-rejects-retained-future"}], "models": ["formal/dialcache-recovery-conformance.qnt:rollbackDuringRetainedDecodeRejectsFutureSnapshotTest", "formal/dialcache-stale-recovery.qnt:rollbackToFutureCandidateRejectsTest"], "vectors": [], "contracts": ["C45"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/rollbackDuringRetainedDecodeRejectsFutureSnapshotTest"]}, - {"id": "C45.failed-fresh-not-stale", "rule": "failed fresh deserialization is never retried as stale recovery", "scenarios": ["failed fresh deserialization is never retried as stale recovery"], "generated": [{"profile": "recovery", "witness": "failed-fresh-decode-is-not-recovery"}], "models": ["formal/dialcache-recovery-conformance.qnt:freshDecodeFailureCannotBeRetriedAsRecoveryTest"], "vectors": [], "contracts": ["C45"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/freshDecodeFailureCannotBeRetriedAsRecoveryTest"]}, - {"id": "C46.ignore-late-source", "rule": "default timeout recovery ignores late successful loader", "scenarios": ["default timeout recovery ignores late successful loader"], "generated": [{"profile": "recovery", "witness": "recovery-abandoned-overlap"}, {"profile": "recovery", "witness": "recovery-late-source-settles"}], "models": ["formal/dialcache-recovery-conformance.qnt:lateSuccessCannotReplaceRecoveredValueTest"], "vectors": [], "contracts": ["C46"], "quintReplays": ["recovery/lateSuccessCannotReplaceRecoveredValueTest"]}, - {"id": "C47.requires-hook", "rule": "shadow requires an outcome observer", "scenarios": ["shadow requires an outcome observer"], "generated": [{"profile": "shadow", "witness": "missing-hook-skips-job"}], "models": ["formal/dialcache-shadow-conformance.qnt:missingHookHasNoShadowEffects", "formal/dialcache-shadow-conformance.qnt:missingHookSkipsDarkJobTest"], "vectors": [], "contracts": ["C47"]}, - {"id": "C47.requires-capacity", "rule": "shadow global capacity drops another key instead of queueing", "scenarios": ["shadow global capacity drops another key instead of queueing"], "generated": [{"profile": "admission", "witness": "full-capacity-drop"}, {"profile": "shadow-layers", "witness": "mixed-shadow-capacity-retains-only-owned-source"}], "models": ["formal/dialcache-admission-conformance.qnt:capacityIsPerInstance", "formal/dialcache-admission-conformance.qnt:fullInstanceDoesNotBlockOtherInstanceTest", "formal/dialcache-shadow-validation.qnt:droppedShadowStillAllowsCallerResultTest", "formal/dialcache-shadow-layers-conformance.qnt:servedAndDarkJobsShareCapacityButNotSourceOwnershipTest"], "vectors": [], "contracts": ["C47"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "quintReplays": ["shadow-layers/servedAndDarkJobsShareCapacityButNotSourceOwnershipTest", "admission/fullInstanceDoesNotBlockOtherInstanceTest"]}, - {"id": "C47.requires-cohort", "rule": "shadow cohort excludes equality and admits just above its exact sample", "scenarios": ["shadow cohort excludes equality and admits just above its exact sample"], "generated": [{"profile": "shadow-layers", "witness": "shadow-cohort-below-does-not-admit"}, {"profile": "shadow-layers", "witness": "shadow-cohort-equality-does-not-admit"}, {"profile": "shadow-layers", "witness": "shadow-cohort-above-admits"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:shadowCohortBelowDoesNotAdmitTest", "formal/dialcache-shadow-layers-conformance.qnt:shadowCohortEqualityDoesNotAdmitTest", "formal/dialcache-shadow-layers-conformance.qnt:shadowCohortAboveAdmitsTest"], "vectors": [], "contracts": ["C47"], "quintReplays": ["shadow-layers/shadowCohortBelowDoesNotAdmitTest", "shadow-layers/shadowCohortEqualityDoesNotAdmitTest", "shadow-layers/shadowCohortAboveAdmitsTest"]}, - {"id": "C48.source-disabled", "rule": "shadow source observes disabled caching scope", "scenarios": ["shadow source observes disabled caching scope"], "generated": [{"profile": "admission", "witness": "coalesced-hit-one-job"}], "models": ["formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic"], "vectors": [], "contracts": ["C48"]}, - {"id": "C48.ordinary-miss", "rule": "ordinary remote miss does not schedule shadow source", "scenarios": ["ordinary remote miss does not schedule shadow source"], "generated": [{"profile": "shadow-layers", "witness": "ordinary-serving-miss-has-no-diagnostic-source"}], "models": ["formal/dialcache-shadow-validation.qnt:ordinaryRemoteMissHasNoShadowJob", "formal/dialcache-shadow-layers-conformance.qnt:ordinaryServingMissDoesNotAdmitDiagnosticSourceTest"], "vectors": [], "contracts": ["C48"], "quintReplays": ["shadow-layers/ordinaryServingMissDoesNotAdmitDiagnosticSourceTest"]}, - {"id": "C49.dark-source-reuse", "rule": "ramped down shadow fills from the same caller source", "scenarios": ["ramped down shadow fills from the same caller source"], "generated": [{"profile": "shadow", "witness": "outcome:filled"}], "models": ["formal/dialcache-shadow-validation.qnt:rampedDownDoesNotDuplicateSource", "formal/dialcache-shadow-validation.qnt:comparisonAndFillWaitForSource", "formal/dialcache-shadow-validation.qnt:darkReadCanPrecedeCallerResultTest"], "vectors": [], "contracts": ["C49"]}, - {"id": "C49.dark-no-delay", "rule": "dark read does not delay caller source result", "scenarios": ["dark read does not delay caller source result"], "generated": [{"profile": "shadow", "witness": "source-before-c0"}], "models": ["formal/dialcache-shadow-validation.qnt:callerResultCanPrecedeDarkReadTest", "formal/dialcache-shadow-validation.qnt:darkReadCanPrecedeCallerResultTest"], "vectors": [], "contracts": ["C49"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C50.custom-equal", "rule": "shadow comparator equal outcome is diagnostic", "scenarios": ["shadow comparator equal outcome is diagnostic"], "generated": [{"profile": "shadow", "witness": "custom-equal-overrides-values"}], "models": ["formal/dialcache-shadow-conformance.qnt:explicitEqualityOverridesValuesTest"], "vectors": [], "contracts": ["C50"]}, - {"id": "C50.custom-unequal", "rule": "shadow comparator unequal outcome is diagnostic", "scenarios": ["shadow comparator unequal outcome is diagnostic"], "generated": [{"profile": "shadow", "witness": "custom-unequal-confirms-equal-values"}], "models": ["formal/dialcache-shadow-conformance.qnt:explicitInequalityRequiresConfirmationTest"], "vectors": [], "contracts": ["C50"]}, - {"id": "C50.comparator-error", "rule": "shadow comparator error outcome is diagnostic", "scenarios": ["shadow comparator error outcome is diagnostic"], "generated": [{"profile": "shadow", "witness": "outcome:comparison_error"}], "models": ["formal/dialcache-shadow-conformance.qnt:comparisonFailureKeepsCallerTest"], "vectors": [], "contracts": ["C50"]}, - {"id": "C51.changed-confirmation", "rule": "served hit shadow superseded remains diagnostic", "scenarios": ["served hit shadow superseded remains diagnostic"], "generated": [{"profile": "shadow", "witness": "different-c1-bytes-supersede"}], "models": ["formal/dialcache-shadow-validation.qnt:verdictsRequireSingleConfirmation", "formal/dialcache-shadow-validation.qnt:mismatchMeansSameC1Bytes", "formal/dialcache-shadow-validation.qnt:missingConfirmationSupersedesWithoutRepairTest", "formal/dialcache-shadow-validation.qnt:changedConfirmationSupersedesWithoutRepairTest", "formal/dialcache-shadow-validation.qnt:identicalConfirmationDiagnosesWithoutRepairTest", "formal/dialcache-shadow-conformance.qnt:sameDecodedValueWithDifferentBytesIsSupersededTest"], "vectors": [], "contracts": ["C51"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}, {"path": "src/dialcache.ts", "lines": [1220], "scope": "Compare C1 payload bytes with original C0 before confirmed mismatch."}], "evidenceNotes": ["The common confirmation rule is checked on the dark generated profile and on served-hit fixed scenarios; this witness does not establish source detachment."]}, - {"id": "C51.confirmation-age", "rule": "shadow confirmation compares payload bytes after C0 freshness expires", "scenarios": ["shadow confirmation compares payload bytes after C0 freshness expires"], "generated": [{"profile": "shadow", "witness": "shadow-confirmation-past-freshness-preserves-payload-and-age"}], "models": ["formal/dialcache-shadow-conformance.qnt:confirmationPastFreshnessKeepsOriginalPayloadAndAgeTest"], "vectors": [], "contracts": ["C51"], "quintReplays": ["shadow/confirmationPastFreshnessKeepsOriginalPayloadAndAgeTest"]}, - {"id": "C51.confirmation-rollback", "rule": "shadow confirmation preserves payload comparison across wall clock rollback", "scenarios": ["shadow confirmation preserves payload comparison across wall clock rollback", "shadow confirmation retains future dated payload for comparison"], "generated": [{"profile": "shadow", "witness": "shadow-confirmation-rollback-keeps-payload-and-reports-offset"}], "models": ["formal/dialcache-shadow-conformance.qnt:confirmationRollbackKeepsPayloadAndClampsAgeTest"], "vectors": [], "contracts": ["C51"], "quintReplays": ["shadow/confirmationRollbackKeepsPayloadAndClampsAgeTest"]}, - {"id": "C51.payload-representation", "rule": "Identical UTF-8 bytes confirm across text and binary representations", "scenarios": [], "generated": [{"profile": "shadow", "witness": "text-to-binary-confirmation"}, {"profile": "shadow", "witness": "binary-to-text-confirmation"}], "models": ["formal/dialcache-shadow-conformance.qnt:identicalTextAndBinaryBytesConfirmMismatchTest"], "vectors": [], "contracts": ["C51"]}, - {"id": "C51.bytes-not-decoded-value", "rule": "Different payload bytes supersede even if they decode to the same value", "scenarios": [], "generated": [{"profile": "shadow", "witness": "different-bytes-same-value-superseded"}], "models": ["formal/dialcache-shadow-conformance.qnt:sameDecodedValueWithDifferentBytesIsSupersededTest"], "vectors": [], "contracts": ["C51"]}, - {"id": "C52.present-not-repaired", "rule": "ramped down present C0 is diagnosed without repair", "scenarios": ["ramped down present C0 is diagnosed without repair"], "generated": [{"profile": "shadow-layers", "witness": "dark-present-c0-never-publishes-local"}], "models": ["formal/dialcache-shadow-validation.qnt:presentC0IsNeverRepaired", "formal/dialcache-shadow-layers-conformance.qnt:darkPresentC0NeverBecomesLocalPublicationTest"], "vectors": [], "contracts": ["C52"], "quintReplays": ["shadow-layers/darkPresentC0NeverBecomesLocalPublicationTest"]}, - {"id": "C52.undecodable-not-repaired", "rule": "dark present undecodable value is never repaired", "scenarios": ["dark present undecodable value is never repaired"], "generated": [{"profile": "shadow", "witness": "outcome:deserialization_error"}, {"profile": "shadow", "witness": "present-undecodable-c0-is-not-repaired"}], "models": ["formal/dialcache-shadow-validation.qnt:presentC0IsNeverRepaired", "formal/dialcache-shadow-validation.qnt:undecodablePresentFrameNeverFillsTest"], "vectors": [], "contracts": ["C52"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C53.fill-fenced", "rule": "ramped down shadow fill respects observed fence", "scenarios": ["ramped down shadow fill respects observed fence"], "generated": [{"profile": "shadow", "witness": "outcome:fill_fenced"}], "models": ["formal/dialcache-shadow-validation.qnt:fillsRequireMiss", "formal/dialcache-shadow-validation.qnt:fencedFillDoesNotWrite"], "vectors": [], "contracts": ["C53"]}, - {"id": "C53.confirmation-fails-open", "rule": "shadow confirmation failure does not repair cache", "scenarios": ["shadow confirmation failure does not repair cache"], "generated": [{"profile": "shadow", "witness": "outcome:confirmation_error"}], "models": ["formal/dialcache-shadow-validation.qnt:presentC0IsNeverRepaired"], "vectors": [], "contracts": ["C53"]}, - {"id": "C54.deduplication", "rule": "shadow admission drops duplicate work", "scenarios": ["shadow admission drops duplicate work"], "generated": [{"profile": "admission", "witness": "duplicate-with-free-capacity"}, {"profile": "shadow-layers", "witness": "dark-job-dedup-preserves-independent-source-values"}], "models": ["formal/dialcache-admission-conformance.qnt:oneJobPerIdentity", "formal/dialcache-admission-conformance.qnt:duplicateDropsBeforeCapacityIsFullTest", "formal/dialcache-shadow-layers-conformance.qnt:deduplicatedJobKeepsIndependentCallerSourcesTest"], "vectors": [], "contracts": ["C54"], "quintReplays": ["shadow-layers/deduplicatedJobKeepsIndependentCallerSourcesTest", "admission/duplicateDropsBeforeCapacityIsFullTest"]}, - {"id": "C54.source-ownership", "rule": "shadow timeout retains capacity until external source settles", "scenarios": ["shadow timeout retains capacity until external source settles"], "generated": [{"profile": "admission", "witness": "source-timeout-keeps-slot"}, {"profile": "shadow-layers", "witness": "mixed-shadow-capacity-retains-only-owned-source"}], "models": ["formal/dialcache-admission-conformance.qnt:timeoutRetainsSourceCapacityTest", "formal/dialcache-shadow-layers-conformance.qnt:servedAndDarkJobsShareCapacityButNotSourceOwnershipTest"], "vectors": [], "contracts": ["C54"], "quintReplays": ["shadow-layers/servedAndDarkJobsShareCapacityButNotSourceOwnershipTest", "admission/timeoutRetainsSourceCapacityTest"]}, - {"id": "C54.decode-ownership", "rule": "served shadow decode retains capacity after timeout until raw load settles", "scenarios": ["served shadow decode retains capacity after timeout until raw load settles"], "generated": [{"profile": "admission", "witness": "decode-timeout-keeps-slot"}, {"profile": "shadow", "witness": "late-shadow-decode-cannot-start-c1"}], "models": ["formal/dialcache-admission-conformance.qnt:timeoutRetainsDecodeCapacityTest", "formal/dialcache-shadow-conformance.qnt:lateDecodeCannotStartConfirmationTest"], "vectors": [], "contracts": ["C54"], "evidenceNotes": ["This witness proves late-effect suppression; existing admission decode-timeout-keeps-slot proves capacity ownership."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "quintReplays": ["admission/timeoutRetainsDecodeCapacityTest"]}, - {"id": "C54.read-ownership", "rule": "shadow confirmation read retains capacity after its separate read deadline", "scenarios": ["shadow confirmation read retains capacity after its separate read deadline"], "generated": [{"profile": "shadow", "witness": "late-c1-cannot-emit-second-verdict"}], "models": ["formal/dialcache-shadow-conformance.qnt:lateConfirmationCannotEmitAnotherVerdictTest"], "vectors": [], "contracts": ["C54"], "evidenceNotes": ["This witness proves late-effect suppression; existing admission confirmation-timeout-keeps-slot and fixed separate-read-deadline scenario cover owned capacity."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C54.comparison-budget", "rule": "Comparison work can exhaust the job deadline before confirmation", "scenarios": [], "generated": [{"profile": "shadow", "witness": "comparison-crosses-deadline:9"}, {"profile": "shadow", "witness": "comparison-crosses-deadline:10"}], "models": ["formal/dialcache-shadow-conformance.qnt:slowComparisonTimesOutBeforeConfirmationTest", "formal/dialcache-shadow-conformance.qnt:slowComparisonFailureStillTimesOutTest"], "vectors": [], "contracts": ["C54"]}, - {"id": "C54.expired-before-start", "rule": "A dark job already expired before deferred work starts must issue no Redis read", "scenarios": ["elapsed source work expires dark shadow before deferred read dispatch"], "generated": [{"profile": "shadow", "witness": "source-work-before-deadline-dispatches-read"}, {"profile": "shadow", "witness": "source-work-exhausts-deferred-job"}, {"profile": "shadow", "witness": "expired-job-source-resolve-keeps-deadline"}, {"profile": "shadow", "witness": "expired-job-source-reject-keeps-deadline"}], "models": ["formal/dialcache-shadow-conformance.qnt:expiredSourceWorkSkipsRedis", "formal/dialcache-shadow-conformance.qnt:sourceWorkBeforeDeadlineStillReadsTest", "formal/dialcache-shadow-conformance.qnt:sourceWorkAtDeadlineSkipsDeferredReadTest", "formal/dialcache-shadow-conformance.qnt:expiredDeferredJobRetainsSourceRejectionDeadlineTest"], "vectors": [], "contracts": ["C54"]}, - {"id": "C55.miss-discriminator", "rule": "adapter miss with stray frame fields preserves only trustworthy miss metadata", "scenarios": ["adapter miss with stray frame fields preserves only trustworthy miss metadata"], "generated": [{"profile": "effects", "witness": "reply:14"}], "models": ["formal/dialcache-effects-conformance.qnt:missDiscriminatorWinsOverFrameFieldsTest"], "vectors": [], "contracts": ["C55"]}, - {"id": "C55.unknown-reason", "rule": "adapter unknown reason with valid fence preserves only trustworthy miss metadata", "scenarios": ["adapter unknown reason with valid fence preserves only trustworthy miss metadata", "adapter missing reason preserves only trustworthy miss metadata", "adapter unknown reason preserves only trustworthy miss metadata"], "generated": [{"profile": "effects", "witness": "reply:7"}], "models": ["formal/dialcache-effects-conformance.qnt:unknownReasonKeepsValidFenceTest"], "vectors": [], "contracts": ["C55"]}, - {"id": "C55.ignore-untracked-fence", "rule": "adapter untracked fence preserves only trustworthy miss metadata", "scenarios": ["adapter untracked fence preserves only trustworthy miss metadata"], "generated": [{"profile": "effects", "witness": "untracked-demotes-fenced-reply"}], "models": ["formal/dialcache-effects-conformance.qnt:untrackedReplyCannotCarryFenceTest", "formal/dialcache-effects-conformance.qnt:untrackedFencedReplyRefillsAndIsReadableTest"], "vectors": [], "contracts": ["C55"], "quintReplays": ["effects/untrackedFencedReplyRefillsAndIsReadableTest"]}, - {"id": "C56.cooperative-cancel", "rule": "read deadline requests cooperative cancellation once for the shared execution", "scenarios": ["read deadline requests cooperative cancellation once for the shared execution"], "generated": [{"profile": "effects", "witness": "read-timeout-starts-source"}], "models": ["formal/dialcache-effects-conformance.qnt:readTimeoutStartsIndependentSourceDeadlineTest"], "vectors": [], "contracts": ["C56"]}, - {"id": "C56.late-read", "rule": "late read fulfillment checks deadline before timer delivery", "scenarios": ["late read fulfillment checks deadline before timer delivery", "late read rejection checks deadline before timer delivery"], "generated": [{"profile": "effects", "witness": "read-late-settlement"}], "models": ["formal/dialcache-effects-conformance.qnt:lateReadCannotBecomeHitTest", "formal/dialcache-effects-conformance.qnt:lateReadRejectionUsesDeadlineCategoryTest"], "vectors": [], "contracts": ["C56"]}, - {"id": "C56.clear-read-timer", "rule": "successful read does not request cancellation after its timer is cleared", "scenarios": ["successful read does not request cancellation after its timer is cleared"], "generated": [{"profile": "effects", "witness": "successful-read-has-no-late-cancel"}], "models": ["formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest", "formal/dialcache-effects-conformance.qnt:successfulReadClearsDeadlineBeforeDecodeTest"], "vectors": [], "contracts": ["C56"]}, - {"id": "C57.recovery-age", "rule": "recovery age is sampled after asynchronous decode and only on served outcome", "scenarios": ["recovery age is sampled after asynchronous decode and only on served outcome", "recovery miss emits no served value age", "recovery deserialization_error emits no served value age"], "generated": [{"profile": "recovery", "witness": "recovery-age-sampled-at-successful-decode"}], "models": ["formal/dialcache-recovery-conformance.qnt:agesRequireRecovery"], "vectors": [], "contracts": ["C57"], "evidenceNotes": ["Witness checks successful decode age against observed diagnostic; existing agesRequireRecovery invariant checks no nonserved age samples."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}]}, - {"id": "C57.shadow-age", "rule": "shadow mismatch samples original frame age at verdict", "scenarios": ["shadow mismatch samples original frame age at verdict", "shadow match samples original frame age at verdict"], "generated": [{"profile": "shadow", "witness": "age-at-verdict"}], "models": ["formal/dialcache-shadow-conformance.qnt:confirmationKeepsOriginalAgeTest"], "vectors": [], "contracts": ["C57"]}, - {"id": "C57.clamp-age", "rule": "shadow verdict age clamps application clock rollback to zero", "scenarios": ["shadow verdict age clamps application clock rollback to zero"], "generated": [{"profile": "shadow", "witness": "age-clamped-after-rollback"}, {"profile": "shadow", "witness": "shadow-confirmation-rollback-keeps-payload-and-reports-offset"}], "models": ["formal/dialcache-shadow-conformance.qnt:ageClampsAfterWallRollbackTest", "formal/dialcache-shadow-conformance.qnt:confirmationRollbackKeepsPayloadAndClampsAgeTest"], "vectors": [], "contracts": ["C57"], "quintReplays": ["shadow/confirmationRollbackKeepsPayloadAndClampsAgeTest"]}, - {"id": "C57.future-offset", "rule": "serving future offset uses the observing layer and positive seconds", "scenarios": ["serving future offset uses the observing layer and positive seconds", "dark future offset uses the observing layer and positive seconds", "confirmation future offset uses the observing layer and positive seconds"], "generated": [{"profile": "effects", "witness": "event:futureOffset"}, {"profile": "effects", "witness": "future-offset-observing-layer-positive-seconds"}, {"profile": "shadow", "witness": "shadow-confirmation-rollback-keeps-payload-and-reports-offset"}, {"profile": "shadow", "witness": "future-dark-c0-reports-offset-and-fills-semantic-miss"}, {"profile": "shadow", "witness": "late-dark-read-reports-offset-without-reviving-job"}], "models": ["formal/dialcache-effects-conformance.qnt:futureFrameReportsPositiveObservingOffsetTest", "formal/dialcache-shadow-conformance.qnt:confirmationRollbackKeepsPayloadAndClampsAgeTest", "formal/dialcache-shadow-conformance.qnt:futureDarkAcquisitionReportsOffsetAndFillsMissTest", "formal/dialcache-shadow-conformance.qnt:futureLateDarkReadKeepsTimeoutAndReportsOffsetTest"], "vectors": [], "contracts": ["C57"], "quintReplays": ["effects/futureFrameReportsPositiveObservingOffsetTest", "shadow/confirmationRollbackKeepsPayloadAndClampsAgeTest", "shadow/futureDarkAcquisitionReportsOffsetAndFillsMissTest", "shadow/futureLateDarkReadKeepsTimeoutAndReportsOffsetTest"]}, - {"id": "C58.shared-trail", "rule": "coalesced remote failure records one leader trail and one follower event", "scenarios": ["coalesced remote failure records one leader trail and one follower event"], "generated": [{"profile": "effects", "witness": "shared-failure-preserves-leader-and-follower-trail"}], "models": ["formal/dialcache-effects-conformance.qnt:coalescedFailureKeepsOneLeaderAndFollowerTrailTest"], "vectors": [], "contracts": ["C58"], "quintReplays": ["effects/coalescedFailureKeepsOneLeaderAndFollowerTrailTest"]}, - {"id": "C58.recovered-failure", "rule": "recovered source failure remains a fallback diagnostic", "scenarios": ["recovered source failure remains a fallback diagnostic"], "generated": [{"profile": "recovery", "witness": "recovery-keeps-source-failure-trail"}], "models": ["formal/dialcache-recovery-conformance.qnt:recoveredValueKeepsOriginalFallbackDiagnosticTest"], "vectors": [], "contracts": ["C58"], "quintReplays": ["recovery/recoveredValueKeepsOriginalFallbackDiagnosticTest"]}, - {"id": "C59.remote-includes-decode", "rule": "remote get duration includes fresh decoding without spending a source budget", "scenarios": ["remote get duration includes fresh decoding without spending a source budget"], "generated": [{"profile": "effects", "witness": "duration:load"}], "models": ["formal/dialcache-effects-conformance.qnt:readDurationIncludesDecodeTest", "formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest"], "vectors": [], "contracts": ["C59"]}, - {"id": "C59.source-excludes-publication", "rule": "accepted publication time is separate from reported source duration", "scenarios": ["accepted publication time is separate from reported source duration"], "generated": [{"profile": "effects", "witness": "duration:dump"}], "models": ["formal/dialcache-effects-conformance.qnt:sourceDurationExcludesPublicationTest", "formal/dialcache-effects-connection.qnt:effectsPublicationMatchesAcceptedSource"], "vectors": [], "contracts": ["C59"]}, - {"id": "C60.logging-default-off", "rule": "Omitting the logging flag leaves mismatch warnings disabled", "scenarios": [], "generated": [{"profile": "shadow", "witness": "omitted-logging-defaults-off"}, {"profile": "shadow", "witness": "omitted-shadow-logging-keeps-mismatch-metrics-only"}], "models": ["formal/dialcache-shadow-conformance.qnt:omittedLoggingKeepsMismatchMetricsOnlyTest"], "vectors": [], "contracts": ["C60"], "quintReplays": ["shadow/omittedLoggingKeepsMismatchMetricsOnlyTest"]}, - {"id": "C60.logging-enabled", "rule": "mismatch warning enabled with mismatch verdict", "scenarios": ["mismatch warning enabled with mismatch verdict"], "generated": [{"profile": "shadow", "witness": "mismatch-logging:true"}], "models": ["formal/dialcache-shadow-conformance.qnt:explicitInequalityRequiresConfirmationTest", "formal/dialcache-shadow-conformance.qnt:acceptedLoggingSurvivesPolicyChangeTest"], "vectors": [], "contracts": ["C60"]}, - {"id": "C60.no-warning-on-match", "rule": "mismatch warning enabled with match verdict", "scenarios": ["mismatch warning enabled with match verdict"], "generated": [{"profile": "shadow", "witness": "enabled-logging-match-has-no-warning"}], "models": ["formal/dialcache-shadow-conformance.qnt:warningsRequireValidCapturedPolicy"], "vectors": [], "contracts": ["C60"]}, - {"id": "C60.no-warning-on-superseded", "rule": "mismatch warning enabled with superseded verdict", "scenarios": ["mismatch warning enabled with superseded verdict"], "generated": [{"profile": "shadow", "witness": "enabled-logging-superseded-has-no-warning"}], "models": ["formal/dialcache-shadow-conformance.qnt:warningsRequireValidCapturedPolicy"], "vectors": [], "contracts": ["C60"]}, - {"id": "C60.invalid-logging-policy", "rule": "Malformed runtime mismatch logging records configuration failure and leaves an eligible job active with logging off", "scenarios": ["malformed runtime mismatch logging keeps comparison and suppresses warnings"], "generated": [{"profile": "shadow", "witness": "invalid-logging-compares-without-warning"}], "models": ["formal/dialcache-shadow-conformance.qnt:invalidLoggingCannotBeCaptured", "formal/dialcache-shadow-conformance.qnt:warningsRequireValidCapturedPolicy", "formal/dialcache-shadow-conformance.qnt:invalidLoggingKeepsComparisonWithoutWarningTest"], "vectors": [], "contracts": ["C60"]}, - {"id": "W01.key-identity", "rule": "Construct interoperable logical, value, and watermark keys", "scenarios": [], "generated": [], "models": ["formal/dialcache-key-protocol.qnt:successfulKeysHaveOneOperationDelimiter", "formal/dialcache-key-protocol.qnt:encodingSeparatesReservedDelimitersTest", "formal/dialcache-key-protocol.qnt:surrogatePairEncodesOneFourByteScalarTest", "formal/dialcache-key-protocol.qnt:trackedArgumentsDoNotChangeWatermarkTest"], "vectors": ["protocol/keyVectors/*"], "contracts": ["W01"], "generatedVectors": [{"artifact": "formal/quint-key-vectors.json", "group": "keyVectors", "name": "*"}]}, - {"id": "W01.invalid-identity", "rule": "Reject unsupported key identities, including tracked component braces, namespace braces and unpaired UTF-16 code units in escaped identities.", "scenarios": [], "generated": [], "models": ["formal/dialcache-key-protocol.qnt:keyAcceptanceRespectsTextAndHashTagDomain", "formal/dialcache-key-protocol.qnt:rejectedKeysExposeNoPartialIdentity", "formal/dialcache-key-protocol.qnt:malformedUtf16RejectsInsteadOfReplacementTest", "formal/dialcache-key-protocol.qnt:bracesDependOnEntityTrackingTest"], "vectors": ["protocol/invalidKeyVectors/*"], "contracts": ["W01"], "generatedVectors": [{"artifact": "formal/quint-key-vectors.json", "group": "invalidKeyVectors", "name": "*"}]}, - {"id": "W02.sorted-arguments", "rule": "Normalize scalar arguments with prescribed UTF-16 name ordering, omission, formatting and escaping; preserve explicitly supplied ordered argument pairs.", "scenarios": [], "generated": [], "models": ["formal/dialcache-key-protocol.qnt:normalizedNamesAreOrderedAndValuesAssociated", "formal/dialcache-key-protocol.qnt:normalizedIntegersRetainExactMagnitude", "formal/dialcache-key-protocol.qnt:normalizedNamesUseUtf16OrderingTest", "formal/dialcache-key-protocol.qnt:normalizedPrimitivesPreserveFalsyAndOmittedValuesTest", "formal/dialcache-key-protocol.qnt:signedBigintsPreserveEveryDecimalDigitTest", "formal/dialcache-key-protocol.qnt:orderedKeyArgumentsRetainDuplicatesTest"], "vectors": ["protocol/normalizeArgsVectors/*"], "contracts": ["W02"], "generatedVectors": [{"artifact": "formal/quint-key-vectors.json", "group": "normalizeArgsVectors", "name": "*"}, {"artifact": "formal/quint-key-vectors.json", "group": "keyVectors", "name": "Quint key 416: ordered duplicate arguments"}, {"artifact": "formal/quint-key-vectors.json", "group": "keyVectors", "name": "Quint key 417: ordered duplicate arguments"}, {"artifact": "formal/quint-key-vectors.json", "group": "keyVectors", "name": "Quint key 418: ordered duplicate arguments"}, {"artifact": "formal/quint-key-vectors.json", "group": "keyVectors", "name": "Quint key 419: ordered duplicate arguments"}]}, - {"id": "W03.cohort-assignment", "rule": "Serving and shadow cohorts use their specified independent deterministic assignment", "scenarios": [], "generated": [], "models": ["formal/dialcache-key-protocol.qnt:cohortNumeratorsAreUnsignedAndBoundariesStrict", "formal/dialcache-key-protocol.qnt:publishedCohortNumeratorsRemainStableTest"], "vectors": ["protocol/rampVectors/*"], "contracts": ["W03"], "generatedVectors": [{"artifact": "formal/quint-key-vectors.json", "group": "rampVectors", "name": "*"}]}, - {"id": "W04.frame-encoding", "rule": "Encode version, timestamp, UTF-8 and binary payloads in interoperable frames", "scenarios": [], "generated": [], "models": ["formal/dialcache-frame-vectors.qnt:encodedFrameKeepsHeaderAndPayload", "formal/dialcache-frame-vectors.qnt:payloadUnpairedSurrogateUsesReplacementTest"], "vectors": ["protocol/frameVectors/*"], "contracts": ["W04"], "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "frameVectors", "name": "*"}]}, - {"id": "W04.tracked-decoder", "rule": "Classify tracked frames and malformed watermarks with specified precedence", "scenarios": [], "generated": [], "models": ["formal/dialcache-redis-protocol.qnt:nilValueIsValueAbsent", "formal/dialcache-redis-protocol.qnt:fenceCanPrecedeEncodingError", "formal/dialcache-redis-protocol.qnt:malformedWatermarkPrecedesEncodingError", "formal/dialcache-redis-protocol.qnt:trackedZeroTimestampIsNotHit", "formal/dialcache-redis-protocol.qnt:encodingErrorRequiresSupportedFrame", "formal/dialcache-redis-protocol.qnt:fencedEncodingTest", "formal/dialcache-redis-protocol.qnt:malformedWatermarkTest", "formal/dialcache-frame-vectors.qnt:trackedHitsStrictlyClearValidFence", "formal/dialcache-frame-vectors.qnt:absentValueKeepsItsOwnClassification", "formal/dialcache-frame-vectors.qnt:trackedFencePrecedesEncodingErrorTest"], "vectors": ["protocol/trackedDecodeVectors/*"], "contracts": ["W04"], "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "trackedDecodeVectors", "name": "*"}]}, - {"id": "W04.untracked-decoder", "rule": "Classify untracked frames without applying watermarks", "scenarios": [], "generated": [], "models": ["formal/dialcache-frame-vectors.qnt:untrackedIgnoresMalformedWatermarkTest", "formal/dialcache-frame-vectors.qnt:decodedTextContainsOnlyScalars"], "vectors": ["protocol/untrackedDecodeVectors/*"], "contracts": ["W04"], "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "untrackedDecodeVectors", "name": "*"}]}, - {"id": "W04.invalid-timestamps", "rule": "Reject unsafe, negative or fractional timestamps before mutation", "scenarios": [], "generated": [], "models": ["formal/dialcache-frame-vectors.qnt:writerRejectsInvalidNumericDomain"], "vectors": ["protocol/invalidTimestampVectors/*"], "contracts": ["W04"], "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "invalidTimestampVectors", "name": "*"}]}, - {"id": "W05.duration-bounds", "rule": "Round native write durations up within the supported positive bound", "scenarios": [], "generated": [], "models": ["formal/dialcache-frame-vectors.qnt:acceptedDurationWithinCeiling", "formal/dialcache-frame-vectors.qnt:physicalDurationRoundsUpWithinBoundTest"], "vectors": ["protocol/durationVectors/*"], "contracts": ["W05"], "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "durationVectors", "name": "*"}]}, - {"id": "W06.envelope-markers", "rule": "Escape raw marker bytes while decoding supported legacy envelopes", "scenarios": [], "generated": [], "models": ["formal/dialcache-envelope-vectors.qnt:rawEscapeIsLossless", "formal/dialcache-envelope-vectors.qnt:escapeConsumesExactlyOnePrefix", "formal/dialcache-envelope-vectors.qnt:unknownZeroPrefixPassesThroughUnchanged", "formal/dialcache-envelope-vectors.qnt:escapedCompressedMarkerRemainsLiteralTest", "formal/dialcache-envelope-vectors.qnt:unknownLegacyZeroPrefixRemainsUntouchedTest", "formal/dialcache-envelope-vectors.qnt:corruptCompressionPreservesMarkedBytesTest"], "vectors": ["protocol/envelopeVectors/*"], "contracts": ["W06"], "generatedVectors": [{"artifact": "formal/quint-envelope-vectors.json", "group": "envelopeVectors", "name": "*"}]}, - {"id": "W06.compressed-decode", "rule": "Decode fixed compressed UTF-8 and binary envelopes", "scenarios": [], "generated": [], "models": ["formal/dialcache-envelope-vectors.qnt:readFailuresPreserveOriginalBinary", "formal/dialcache-envelope-vectors.qnt:successfulReadRespectsMarkerAndLimit", "formal/dialcache-envelope-vectors.qnt:corruptCompressionPreservesMarkedBytesTest", "formal/dialcache-envelope-vectors.qnt:decoderLimitKeepsRawBytesTest"], "vectors": ["protocol/compressedDecodeVectors/*"], "contracts": ["W06"], "generatedVectors": [{"artifact": "formal/quint-envelope-vectors.json", "group": "compressedDecodeVectors", "name": "*"}]}, - {"id": "W07.compression-selection", "rule": "Compress only at the byte threshold and only when stored size shrinks", "scenarios": [], "generated": [], "models": ["formal/dialcache-envelope-vectors.qnt:compressionUsesByteThresholdAndStrictShrink", "formal/dialcache-envelope-vectors.qnt:utf8ThresholdCountsBytesTest", "formal/dialcache-envelope-vectors.qnt:compressionTieKeepsRawRepresentationTest", "formal/dialcache-envelope-vectors.qnt:shrinkComparedWithEscapedRawBytesTest", "formal/dialcache-envelope-vectors.qnt:thresholdPrecedesWriteLimitTest", "formal/dialcache-envelope-vectors.qnt:writeLimitPrecedesCompressionTest"], "vectors": ["protocol/compressionWriteVectors/*"], "contracts": ["W07"], "generatedVectors": [{"artifact": "formal/quint-envelope-vectors.json", "group": "compressionWriteVectors", "name": "*"}]}, - {"id": "W08.legacy-reading", "rule": "Disabling new compression does not disable reading previously compressed values", "scenarios": [], "generated": [{"profile": "recovery-read", "witness": "tracked-compressed-recovery-is-request-only"}], "models": ["formal/dialcache-envelope-vectors.qnt:readDoesNotConsultNewWritePolicy", "formal/dialcache-envelope-vectors.qnt:disabledNewWritesStillReadLegacyCompressionTest", "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryMemoizesWithoutLocalPublicationTest"], "vectors": ["protocol/compressedDecodeVectors/*"], "contracts": ["W08"], "quintReplays": ["recovery-read/compressedRecoveryMemoizesWithoutLocalPublicationTest"], "generatedVectors": [{"artifact": "formal/quint-envelope-vectors.json", "group": "compressedDecodeVectors", "name": "*"}]}, - {"id": "W04.strict-fence", "rule": "Reject a tracked frame equal to its watermark", "scenarios": [], "generated": [], "models": ["formal/dialcache-redis-protocol.qnt:fenceCanPrecedeEncodingError", "formal/dialcache-redis-protocol.qnt:trackedZeroTimestampIsNotHit", "formal/dialcache-tracked-invalidation.qnt:servedSnapshotClearedObservedFence", "formal/dialcache-frame-vectors.qnt:trackedHitsStrictlyClearValidFence", "formal/dialcache-frame-vectors.qnt:trackedFencePrecedesEncodingErrorTest", "formal/dialcache-rule-checks.qnt:fenceBoundaryIsExclusive"], "vectors": ["protocol/trackedDecodeVectors/equal timestamp is fenced"], "contracts": ["W04", "C33"], "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "trackedDecodeVectors", "name": "*"}]}, - {"id": "C38.retention", "contracts": ["C38", "W09"], "rule": "Preserve persistence and longer TTLs while meeting the required retention floor", "scenarios": [], "generated": [], "models": ["formal/dialcache-invalidation-transition.qnt:successfulRetentionMeetsBothFloors", "formal/dialcache-invalidation-transition.qnt:stringsKeepExistingRetention", "formal/dialcache-invalidation-transition.qnt:finiteRetentionIsExact", "formal/dialcache-invalidation-transition.qnt:absentMarkerGetsRetentionFloorTest", "formal/dialcache-invalidation-transition.qnt:longBufferExtendsRequiredRetentionTest"], "vectors": ["invalidation/absent marker gets the two hour floor", "invalidation/large buffer extends retention beyond the floor", "invalidation/existing longer TTL never shrinks", "invalidation/persistent valid marker stays persistent"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 000: zero buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 001: zero buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 003: zero buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 004: zero buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 024: retention above floor / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 025: retention above floor / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 027: retention above floor / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 028: retention above floor / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 036: maximum buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 037: maximum buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 039: maximum buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 040: maximum buffer / valid persistent"}]}, - {"id": "C38.marker-repair", "contracts": ["C38", "W09"], "rule": "Malformed strings preserve their existing retention; unrelated Redis types receive finite repair", "scenarios": [], "generated": [], "models": ["formal/dialcache-invalidation-transition.qnt:stringsKeepExistingRetention", "formal/dialcache-invalidation-transition.qnt:unrelatedTypesReceiveFiniteRepair", "formal/dialcache-invalidation-transition.qnt:persistentMalformedStringStaysPersistentTest", "formal/dialcache-invalidation-transition.qnt:wrongTypeLongTtlIsNotInheritedTest", "formal/dialcache-invalidation-transition.qnt:wrongTypePersistenceIsNotInheritedTest", "formal/dialcache-invalidation-transition.qnt:emptyStringRetentionIsPreservedTest"], "vectors": ["invalidation/malformed finite marker is repaired with longer TTL preserved", "invalidation/malformed persistent marker stays persistent", "invalidation/wrong type persistent marker gets finite repair", "invalidation/wrong type marker does not preserve unrelated TTL"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 005: zero buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 006: zero buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 007: zero buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 008: zero buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 010: zero buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 011: zero buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 017: buffered cutoff / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 018: buffered cutoff / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 019: buffered cutoff / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 020: buffered cutoff / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 022: buffered cutoff / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 023: buffered cutoff / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 029: retention above floor / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 030: retention above floor / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 031: retention above floor / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 032: retention above floor / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 034: retention above floor / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 035: retention above floor / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 041: maximum buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 042: maximum buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 043: maximum buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 044: maximum buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 046: maximum buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 047: maximum buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 053: maximum safe sum / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 054: maximum safe sum / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 055: maximum safe sum / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 056: maximum safe sum / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 058: maximum safe sum / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 059: maximum safe sum / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 065: leading decimal zeros / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 066: leading decimal zeros / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 067: leading decimal zeros / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 068: leading decimal zeros / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 070: leading decimal zeros / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 071: leading decimal zeros / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 245: maximum timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 246: maximum timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 247: maximum timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 248: maximum timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 250: maximum timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 251: maximum timestamp / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 257: zero timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 258: zero timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 259: zero timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 260: zero timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 262: zero timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 263: zero timestamp / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 281: all-zero decimal text / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 282: all-zero decimal text / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 283: all-zero decimal text / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 284: all-zero decimal text / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 286: all-zero decimal text / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 287: all-zero decimal text / empty stored string"}]}, - {"id": "C39.numeric-limits", "contracts": ["C39", "W09"], "rule": "Accept the maximum valid future buffer and safe timestamp sum", "scenarios": [], "generated": [], "models": ["formal/dialcache-invalidation-transition.qnt:argumentValidationIsExact", "formal/dialcache-invalidation-transition.qnt:maximumBufferAndTimestampSumAreAcceptedTest"], "vectors": ["invalidation/maximum future buffer is supported", "invalidation/maximum safe sum is supported"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 036: maximum buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 037: maximum buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 038: maximum buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 039: maximum buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 040: maximum buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 041: maximum buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 042: maximum buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 043: maximum buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 044: maximum buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 045: maximum buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 046: maximum buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 047: maximum buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 048: maximum safe sum / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 049: maximum safe sum / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 050: maximum safe sum / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 051: maximum safe sum / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 052: maximum safe sum / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 053: maximum safe sum / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 054: maximum safe sum / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 055: maximum safe sum / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 056: maximum safe sum / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 057: maximum safe sum / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 058: maximum safe sum / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 059: maximum safe sum / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 240: maximum timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 241: maximum timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 242: maximum timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 243: maximum timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 244: maximum timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 245: maximum timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 246: maximum timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 247: maximum timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 248: maximum timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 249: maximum timestamp / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 250: maximum timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 251: maximum timestamp / empty stored string"}]}, - {"id": "C38.buffer-cutoff", "contracts": ["C38", "W09"], "rule": "Add the requested future buffer to the invalidation timestamp", "scenarios": [], "generated": [], "models": ["formal/dialcache-invalidation-transition.qnt:successfulCutoffIsExactMaximum", "formal/dialcache-invalidation-transition.qnt:longBufferExtendsRequiredRetentionTest"], "vectors": ["invalidation/buffer determines marker cutoff"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 012: buffered cutoff / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 024: retention above floor / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 036: maximum buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 060: leading decimal zeros / absent"}]}, - {"id": "C39.decimal-normalization", "contracts": ["C39", "W09"], "rule": "Normalize accepted leading-zero decimal watermark arguments", "scenarios": [], "generated": [], "models": ["formal/dialcache-invalidation-transition.qnt:outputIsCanonicalDecimalString", "formal/dialcache-invalidation-transition.qnt:decimalZerosAreCanonicalizedTest"], "vectors": ["invalidation/leading decimal zeros are canonicalized"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 060: leading decimal zeros / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 061: leading decimal zeros / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 062: leading decimal zeros / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 063: leading decimal zeros / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 064: leading decimal zeros / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 065: leading decimal zeros / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 066: leading decimal zeros / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 067: leading decimal zeros / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 068: leading decimal zeros / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 069: leading decimal zeros / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 070: leading decimal zeros / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 071: leading decimal zeros / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 276: all-zero decimal text / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 277: all-zero decimal text / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 278: all-zero decimal text / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 279: all-zero decimal text / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 280: all-zero decimal text / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 281: all-zero decimal text / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 282: all-zero decimal text / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 283: all-zero decimal text / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 284: all-zero decimal text / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 285: all-zero decimal text / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 286: all-zero decimal text / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 287: all-zero decimal text / empty stored string"}]}, - {"scenarios": ["null coalesce leaf bypasses caching without replacing retained entries"], "generated": [], "models": ["formal/dialcache-core.qnt:invalidInvocationPolicyNeverTouchesStorage", "formal/dialcache-core.qnt:invalidBooleanOverlayBypassesAndPreservesMemoTest", "formal/dialcache-runtime-boundaries-conformance.qnt:explicitNullCoalesceBypassesWithoutReplacingRemoteTest"], "vectors": [], "id": "C16.explicit-null-leaf", "contracts": ["C16", "C20"], "rule": "Explicit null coalesce is invalid and bypasses existing cached entries without replacing them", "quintReplays": ["runtime-boundaries/explicitNullCoalesceBypassesWithoutReplacingRemoteTest"]}, - {"scenarios": ["tracked local-only calls publish and reuse source values"], "generated": [], "models": ["formal/dialcache-core.qnt:trackedWithoutRemoteStillPublishesLocalTest", "formal/dialcache-layers-conformance.qnt:trackedWithoutRemotePublishesReusableLocalTest"], "vectors": [], "id": "C31.local-only-publication", "contracts": ["C31"], "rule": "Tracked local-only calls retain eligible local source publication", "quintReplays": ["layers/trackedWithoutRemotePublishesReusableLocalTest"]}, - {"scenarios": ["tracked remote ramp zero retains local source publication"], "generated": [{"profile": "layers", "witness": "tracked-remote-disabled-local-hit"}], "models": ["formal/dialcache-core.qnt:trackedWithoutRemoteStillPublishesLocalTest"], "vectors": [], "id": "C31.ramped-down-publication", "contracts": ["C31"], "rule": "Tracked calls excluded from remote serving retain eligible local source publication"}, - {"scenarios": [], "generated": [], "models": ["formal/dialcache-frame-vectors.qnt:decodedTextContainsOnlyScalars", "formal/dialcache-frame-vectors.qnt:maximalSubpartConsumesAcceptedPrefixOnceTest", "formal/dialcache-frame-vectors.qnt:malformedSurrogateBytesRemainSeparateErrorsTest", "formal/dialcache-frame-vectors.qnt:payloadUnpairedSurrogateUsesReplacementTest"], "vectors": ["protocol/trackedDecodeVectors/*", "protocol/untrackedDecodeVectors/*", "protocol/compressedDecodeVectors/*"], "id": "W04.malformed-text", "contracts": ["W04", "W06"], "rule": "Direct and decompressed text use maximal-subpart UTF-8 replacement without BOM removal; binary remains exact", "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "trackedDecodeVectors", "name": "*"}, {"artifact": "formal/quint-frame-vectors.json", "group": "untrackedDecodeVectors", "name": "*"}]}, - {"id": "C27.decode-failure-refill", "rule": "A failed fresh decode falls through to the source and may refill Redis when the read itself granted publication authority.", "contracts": ["C27"], "scenarios": ["deserialization failure refills from source"], "generated": [{"profile": "effects", "witness": "failed-decode-refills"}], "models": ["formal/dialcache-effects-conformance.qnt:decodeFailureMayRefillTest"], "vectors": []}, - {"id": "C33.reject-future-before-decode", "rule": "At initial serving or recovery acquisition, a future-dated frame is rejected before deserialization; later shadow confirmation has a separate payload-identity contract.", "contracts": ["C33"], "scenarios": ["future frame is rejected before deserialization"], "generated": [{"profile": "policy", "witness": "rollback-rejects-future-remote"}], "models": ["formal/dialcache-recovery-conformance.qnt:futureFrameDoesNotCarryMissFenceTest"], "vectors": [], "evidenceNotes": ["The model rejects an acquired future frame and excludes it from recovery; generated rollback evidence exercises future rejection, while fixed scenarios exercise direct future timestamps before deserialization."], "quintReplays": ["recovery/futureFrameDoesNotCarryMissFenceTest"]}, - {"id": "C33.reject-unsafe-before-decode", "rule": "An unsafe frame timestamp is rejected before deserialization or stale-candidate retention.", "contracts": ["C33"], "scenarios": ["unsafe frame is rejected before deserialization"], "generated": [{"profile": "recovery-read", "witness": "unsafe-timestamp-skips-serializer-and-refills"}], "models": ["formal/dialcache-stale-recovery.qnt:invalidFrameNeverBecomesRecoveryCandidateTest", "formal/dialcache-recovery-read-conformance.qnt:unsafeTimestampSkipsSerializerAndAllowsRefillTest"], "vectors": [], "evidenceNotes": ["Verification model abstracts invalid frame structure; wire vectors separately distinguish unsafe timestamps from malformed/version/encoding fields."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "quintReplays": ["recovery-read/unsafeTimestampSkipsSerializerAndAllowsRefillTest"]}, - {"id": "C33.reject-version-before-decode", "rule": "An unsupported frame version is rejected before payload deserialization.", "contracts": ["C33"], "scenarios": ["unsupported version frame is rejected before deserialization"], "generated": [{"profile": "recovery-read", "witness": "unsupported-version-skips-serializer-and-refills"}], "models": ["formal/dialcache-redis-protocol.qnt:unsupportedFramePrecedesEncodingError", "formal/dialcache-recovery-read-conformance.qnt:unsupportedVersionSkipsSerializerAndAllowsRefillTest"], "vectors": [], "evidenceNotes": ["The decoder classifies unsupported frame versions before consulting payload encoding. Fixed cache-path scenarios establish that this miss skips application deserialization."], "quintReplays": ["recovery-read/unsupportedVersionSkipsSerializerAndAllowsRefillTest"]}, - {"id": "C45.recheck-before-decode", "rule": "A retained candidate reaching its exclusive maximum age before source failure is rejected without starting its decode.", "contracts": ["C45"], "scenarios": ["stale candidate crossing M before decoding is rejected"], "generated": [{"profile": "recovery-read", "witness": "maximum-before-decode-preserves-original-error-without-load"}], "models": ["formal/dialcache-recovery-conformance.qnt:maximumAgeBeforeDecodePreservesSourceTest", "formal/dialcache-stale-recovery.qnt:maximumAgeBeforeDecodeSkipsLoadingTest", "formal/dialcache-recovery-read-conformance.qnt:maximumAgeBeforeDecodeKeepsOriginalErrorTest"], "vectors": [], "evidenceNotes": ["The recovery-read profile now exports and requires the maximum-before-decode witness: a retained compressed candidate reaches M before source rejection, preserving the original error without starting decode. The earlier recovery models and fixed scenario remain complementary evidence."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery-read/maximumAgeBeforeDecodeKeepsOriginalErrorTest", "recovery/maximumAgeBeforeDecodePreservesSourceTest"]}, - {"id": "C50.served-match-diagnostic", "rule": "A served-hit shadow match keeps the originally returned value and emits a match without cache repair.", "contracts": ["C50"], "scenarios": ["served hit shadow match remains diagnostic"], "generated": [{"profile": "admission", "witness": "outcome:match"}], "models": ["formal/dialcache-admission-conformance.qnt:callsKeepAcquiredValue", "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic"], "vectors": []}, - {"id": "C50.served-mismatch-diagnostic", "rule": "A confirmed served-hit shadow mismatch keeps the originally returned value and does not repair the cache.", "contracts": ["C50"], "scenarios": ["served hit shadow mismatch remains diagnostic"], "generated": [{"profile": "admission", "witness": "outcome:mismatch"}], "models": ["formal/dialcache-admission-conformance.qnt:callsKeepAcquiredValue", "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic"], "vectors": []}, - {"id": "C53.source-error-keeps-caller", "rule": "A detached shadow source failure reports its diagnostic outcome without replacing the value already served to the caller.", "contracts": ["C53"], "scenarios": ["shadow source error does not replace caller value"], "generated": [{"profile": "admission", "witness": "outcome:source_error"}], "models": ["formal/dialcache-admission-conformance.qnt:callsKeepAcquiredValue", "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic"], "vectors": []}, - {"id": "C20.invalid-coalesce", "rule": "An invalid runtime coalesce leaf bypasses every layer and sharing rather than inheriting or coercing the invalid value.", "contracts": ["C20"], "scenarios": ["invalid runtime coalesce bypasses all cache layers"], "generated": [], "models": ["formal/dialcache-core.qnt:invalidInvocationPolicyNeverTouchesStorage", "formal/dialcache-core.qnt:invalidBooleanOverlayBypassesAndPreservesMemoTest", "formal/dialcache-runtime-boundaries-conformance.qnt:invalidCoalesceBypassesWithoutReplacingRemoteTest", "formal/dialcache-runtime-boundaries-conformance.qnt:invalidBooleanLeavesBypassAllCaching"], "vectors": [], "evidenceNotes": ["The core model abstracts malformed invocation-level leaves as invalid admission and checks bypass plus preserved memo. Fixed scenarios supply the actual malformed coalesce/requestLocal values."], "quintReplays": ["runtime-boundaries/invalidCoalesceBypassesWithoutReplacingRemoteTest"]}, - {"id": "C20.invalid-request-local", "rule": "An invalid runtime requestLocal leaf bypasses every layer rather than disabling only request memoization.", "contracts": ["C20"], "scenarios": ["invalid runtime requestLocal bypasses all cache layers"], "generated": [], "models": ["formal/dialcache-core.qnt:invalidInvocationPolicyNeverTouchesStorage", "formal/dialcache-core.qnt:invalidBooleanOverlayBypassesAndPreservesMemoTest", "formal/dialcache-runtime-boundaries-conformance.qnt:invalidRequestLocalBypassesWithoutReplacingRemoteTest", "formal/dialcache-runtime-boundaries-conformance.qnt:invalidBooleanLeavesBypassAllCaching"], "vectors": [], "evidenceNotes": ["The core model abstracts malformed invocation-level leaves as invalid admission and checks bypass plus preserved memo. Fixed scenarios supply the actual malformed coalesce/requestLocal values."], "quintReplays": ["runtime-boundaries/invalidRequestLocalBypassesWithoutReplacingRemoteTest"]}, - {"id": "C42.operation-denial", "rule": "An operation recovery denial replaces an instance allow predicate and preserves the original source failure.", "contracts": ["C42"], "scenarios": ["recovery deny overrides allow policy safely"], "generated": [{"profile": "recovery", "witness": "operation-denial-overrides-instance-allow"}], "models": ["formal/dialcache-recovery-conformance.qnt:operationDenialReplacesInstanceAllowTest"], "vectors": [], "quintReplays": ["recovery/operationDenialReplacesInstanceAllowTest"]}, - {"id": "C54.dump-ownership", "rule": "A timed-out shadow job retains its capacity while its serialization is unfinished; late serialization cannot initiate a write.", "contracts": ["C54"], "scenarios": ["shadow timeout retains held dump capacity and ignores late completion"], "generated": [{"profile": "shadow", "witness": "late-shadow-dump-cannot-dispatch-write"}], "models": ["formal/dialcache-shadow-conformance.qnt:lateFillSerializationCannotDispatchWriteTest"], "vectors": [], "evidenceNotes": ["This witness proves late-effect suppression only. Fixed capacity probes must remain attached to this case."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C54.write-ownership", "rule": "A timed-out shadow job retains its capacity while a dispatched write is unfinished; late completion cannot produce a second outcome.", "contracts": ["C54"], "scenarios": ["shadow timeout retains held write capacity and ignores late completion"], "generated": [{"profile": "shadow", "witness": "late-shadow-write-cannot-change-caller-or-verdict"}], "models": ["formal/dialcache-shadow-conformance.qnt:lateFillWriteCannotEmitAnotherVerdictTest"], "vectors": [], "evidenceNotes": ["This witness proves post-timeout completion does not alter result/verdict; fixed capacity probe proves retained slot."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C54.dark-read-ownership", "rule": "A timed-out dark read retains capacity until the raw read settles, and its late result cannot initiate decoding or publication.", "contracts": ["C54"], "scenarios": ["shadow read timeout retains raw read capacity"], "generated": [{"profile": "shadow", "witness": "late-c0-cannot-start-new-shadow-work"}], "models": ["formal/dialcache-shadow-conformance.qnt:lateDarkReadCannotStartDecodeOrFillTest"], "vectors": [], "evidenceNotes": ["This witness proves late-effect suppression only. Capacity retention is a separate fixed-scenario observation for the dark read."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C06.absent-distinct-from-text", "rule": "An absent value and the literal string undefined remain distinct cacheable results.", "contracts": ["C06"], "scenarios": ["literal undefined string is distinct from absent result"], "generated": [], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:requestAbsenceAndLiteralTextStayDistinctTest", "formal/dialcache-runtime-boundaries-conformance.qnt:localAbsenceAndLiteralTextStayDistinctTest", "formal/dialcache-runtime-boundaries-conformance.qnt:remoteAbsenceAndLiteralTextStayDistinctTest"], "vectors": [], "quintReplays": ["runtime-boundaries/requestAbsenceAndLiteralTextStayDistinctTest", "runtime-boundaries/localAbsenceAndLiteralTextStayDistinctTest", "runtime-boundaries/remoteAbsenceAndLiteralTextStayDistinctTest"]}, - {"id": "C24.independent-source-budgets", "rule": "Uncoalesced same-key callers each receive their full source budget from their own source start; one timeout does not shorten another budget.", "contracts": ["C24"], "scenarios": ["uncoalesced callers have independent source deadlines"], "generated": [], "models": ["formal/dialcache-flight-deadlines.qnt:independentAcceptanceChecksCapturedDeadline", "formal/dialcache-independent-conformance.qnt:eachSourceKeepsItsFullBudget", "formal/dialcache-independent-conformance.qnt:sourceSettlementsRespectOwnDeadline", "formal/dialcache-independent-conformance.qnt:staggeredSourceStartsKeepIndependentBudgetsTest", "formal/dialcache-independent-conformance.qnt:staggeredSourcesExpireAtTheirOwnDeadlineTest", "formal/dialcache-independent-connection.qnt:independentSourceOriginsMatchContract", "formal/dialcache-independent-connection.qnt:independentSourceMatchesTimerContract"], "vectors": [], "evidenceNotes": ["The independent-source submodel checks each recorded source start and captured budget; the generated independent profile supplies per-call source/read ownership and the fixed scenario isolates different source start times."], "quintReplays": ["independent/staggeredSourceStartsKeepIndependentBudgetsTest", "independent/staggeredSourcesExpireAtTheirOwnDeadlineTest"]}, - {"id": "C23.policy-does-not-spend-source-budget", "rule": "Waiting for runtime policy does not consume the subsequent source budget.", "contracts": ["C23"], "scenarios": ["policy resolution does not spend the source deadline"], "generated": [{"profile": "source-budgets", "witness": "policy-wait-does-not-spend-source-budget"}], "models": ["formal/dialcache-flight-deadlines.qnt:delayedLookupKeepsFullSourceBudgetTest", "formal/dialcache-source-budgets-conformance.qnt:acceptedSourceRespectsItsOwnStart", "formal/dialcache-source-budgets-conformance.qnt:heldPolicyDoesNotSpendSourceBudgetTest", "formal/dialcache-source-connection.qnt:sourceOriginsMatchContract"], "vectors": [], "evidenceNotes": ["The model abstracts pre-source waiting as cache lookup and independently checks a full budget from source start. The fixed policy-delay scenario binds runtime-provider waiting to that rule."], "quintReplays": ["source-budgets/heldPolicyDoesNotSpendSourceBudgetTest"]}, - {"id": "C30.original-source-error", "rule": "Observer failure preserves the identity of the original source rejection.", "contracts": ["C30"], "scenarios": ["observer failures preserve original source rejection"], "generated": [{"profile": "effects", "witness": "observer-failure-source-error"}], "models": ["formal/dialcache-effects-conformance.qnt:observerFailuresCannotReplaceSourceErrorTest"], "vectors": [], "quintReplays": ["effects/observerFailuresCannotReplaceSourceErrorTest"]}, - {"id": "C54.unbounded-source-bounded-shadow", "rule": "Disabling the caller source deadline leaves detached shadow work subject to a finite job deadline.", "contracts": ["C54"], "scenarios": ["shadow remains bounded when source deadline is disabled"], "generated": [{"profile": "shadow-layers", "witness": "unbounded-caller-outlives-released-dark-job"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:unboundedCallerSurvivesDarkJobDeadlineTest"], "vectors": [], "quintReplays": ["shadow-layers/unboundedCallerSurvivesDarkJobDeadlineTest"]}, - {"id": "C54.unowned-caller-releases-slot", "rule": "An expired dark job can release its capacity while an independently owned unbounded caller source continues.", "contracts": ["C54"], "scenarios": ["dark shadow releases capacity while unbounded caller source continues"], "generated": [{"profile": "shadow-layers", "witness": "unbounded-caller-outlives-released-dark-job"}], "models": ["formal/dialcache-shadow-validation.qnt:timedOutShadowStillAllowsCallerResultTest", "formal/dialcache-shadow-layers-conformance.qnt:unboundedCallerSurvivesDarkJobDeadlineTest"], "vectors": [], "evidenceNotes": ["The abstract shadow-validation regression checks independent caller settlement after diagnostic timeout without modeling slot reuse. The shadow-layers profile additionally exports and requires an explicitly unbounded caller schedule: a second same-key dark read proves the expired job released its slot, and the original caller later succeeds without a late fill. Fixed scenarios retain their native budget and capacity probes."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "quintReplays": ["shadow-layers/unboundedCallerSurvivesDarkJobDeadlineTest"]}, - {"id": "C53.dark-propagated-timeout", "rule": "A timeout error returned by the caller source is a dark source failure, distinct from expiration of the shadow job deadline.", "contracts": ["C53"], "scenarios": ["dark shadow distinguishes source timeout from its own deadline"], "generated": [{"profile": "shadow-layers", "witness": "dark-propagated-timeout-is-source-error"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:darkPropagatedTimeoutIsSourceFailureTest"], "vectors": [], "quintReplays": ["shadow-layers/darkPropagatedTimeoutIsSourceFailureTest"]}, - {"id": "C53.served-propagated-timeout", "rule": "A timeout error returned by a detached source is a source-error verdict, distinct from expiration of the shadow job deadline.", "contracts": ["C53"], "scenarios": ["served shadow distinguishes source timeout from its own deadline"], "generated": [{"profile": "shadow-layers", "witness": "served-propagated-timeout-preserves-hit"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:servedPropagatedTimeoutPreservesHitTest"], "vectors": [], "quintReplays": ["shadow-layers/servedPropagatedTimeoutPreservesHitTest"]}, - {"id": "C49.local-publication", "rule": "Dark work never publishes C0 into process-local storage; eligible local publication uses only the caller source result.", "contracts": ["C49"], "scenarios": ["dark shadow publishes only caller source into local cache"], "generated": [{"profile": "shadow-layers", "witness": "dark-present-c0-never-publishes-local"}, {"profile": "shadow-layers", "witness": "dark-local-source-publication-stops-later-shadow"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:darkPresentC0NeverBecomesLocalPublicationTest", "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesLocalBeforeShadowWriteTest"], "vectors": [], "quintReplays": ["shadow-layers/darkSourcePublishesLocalBeforeShadowWriteTest", "shadow-layers/darkPresentC0NeverBecomesLocalPublicationTest"]}, - {"id": "C49.request-publication", "rule": "Dark work never publishes C0 into request memoization; memoization uses only the caller source result.", "contracts": ["C49"], "scenarios": ["dark shadow publishes only caller source into request cache"], "generated": [{"profile": "shadow-layers", "witness": "dark-present-c0-never-publishes-request"}, {"profile": "shadow-layers", "witness": "dark-request-source-publication-is-scope-local"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:darkPresentC0NeverBecomesRequestPublicationTest", "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesRequestBeforeShadowWriteTest"], "vectors": [], "quintReplays": ["shadow-layers/darkSourcePublishesRequestBeforeShadowWriteTest", "shadow-layers/darkPresentC0NeverBecomesRequestPublicationTest"]}, - {"id": "C49.job-dedup-keeps-independent-sources", "rule": "Deduplicating a dark diagnostic job does not coalesce independent ramped-out caller sources.", "contracts": ["C49"], "scenarios": ["dark shadow deduplicates jobs without coalescing caller sources"], "generated": [{"profile": "shadow-layers", "witness": "dark-job-dedup-preserves-independent-source-values"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:deduplicatedJobKeepsIndependentCallerSourcesTest"], "vectors": [], "quintReplays": ["shadow-layers/deduplicatedJobKeepsIndependentCallerSourcesTest"]}, - {"id": "C49.no-stale-recovery", "rule": "A ramped-out caller never serves a dark stale candidate, even when its recovery classifier would allow stale recovery.", "contracts": ["C49"], "scenarios": ["dark serving never recovers stale even when classifier allows"], "generated": [{"profile": "shadow-layers", "witness": "dark-eligible-stale-c0-never-recovers"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:darkFailureDoesNotUseEligibleStaleBytesTest"], "vectors": [], "quintReplays": ["shadow-layers/darkFailureDoesNotUseEligibleStaleBytesTest"]}, - {"id": "C47.recovery-skips-shadow", "rule": "A recovered value, including absence, does not admit served-hit shadow work.", "contracts": ["C47"], "scenarios": ["recovered absent value never starts selected shadow work"], "generated": [{"profile": "recovery-read", "witness": "recovered-absence-skips-selected-shadow-and-memoizes"}, {"profile": "recovery-read", "witness": "recovered-value-skips-selected-shadow-and-memoizes"}], "models": ["formal/dialcache-stale-recovery.qnt:recoveredStaleHasNoSharedPublication", "formal/dialcache-recovery-read-conformance.qnt:recoveredAbsenceSkipsSelectedShadowTest", "formal/dialcache-recovery-read-conformance.qnt:recoveredValueSkipsSelectedShadowTest"], "vectors": [], "evidenceNotes": ["The stale-recovery invariant includes zero shadow jobs after a stale result. The fixed scenario uses explicit absence and selected shadow policy to exercise the otherwise eligible admission path."], "quintReplays": ["recovery-read/recoveredAbsenceSkipsSelectedShadowTest", "recovery-read/recoveredValueSkipsSelectedShadowTest"]}, - {"id": "C47.coalesced-hit-one-job", "rule": "Coalesced callers sharing one remote hit admit only one detached shadow source.", "contracts": ["C47"], "scenarios": ["coalesced remote hits admit only one shadow source"], "generated": [{"profile": "admission", "witness": "coalesced-hit-one-job"}], "models": ["formal/dialcache-admission-conformance.qnt:coalescedHitAdmitsOneJobTest"], "vectors": [], "quintReplays": ["admission/coalescedHitAdmitsOneJobTest"]}, - {"id": "C52.future-miss-may-fill", "rule": "A future C0 is a semantic miss; after caller success a dark job may fill from that source subject to its observed fence.", "contracts": ["C52"], "scenarios": ["dark future C0 is a miss that permits source fill"], "generated": [{"profile": "shadow", "witness": "future-dark-c0-fills-without-decoding"}], "models": ["formal/dialcache-shadow-conformance.qnt:futureDarkBytesFillWithoutDecodingTest"], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C52.expired-miss-may-fill", "rule": "An expired C0 is a semantic miss; a dark job may fill from the accepted caller source.", "contracts": ["C52"], "scenarios": ["dark expired C0 is a miss that permits source fill"], "generated": [{"profile": "shadow-layers", "witness": "expired-c0-miss-fills-source-and-serves-probe"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:expiredC0CanFillAndServeNewValueTest", "formal/dialcache-shadow-conformance.qnt:c0AcquisitionsRespectFreshness", "formal/dialcache-shadow-conformance.qnt:c0AtExactFreshnessBoundaryRefillsTest"], "vectors": [], "quintReplays": ["shadow-layers/expiredC0CanFillAndServeNewValueTest", "shadow/c0AtExactFreshnessBoundaryRefillsTest"]}, - {"id": "C53.acquired-miss-no-reread", "rule": "A dark job uses its acquired C0 miss and observed fence without rereading C0 after an external replacement.", "contracts": ["C53"], "scenarios": ["dark acquired miss survives later Redis replacement without a second C0 read"], "generated": [{"profile": "shadow-layers", "witness": "acquired-c0-miss-does-not-reread-before-fill"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:acquiredMissDoesNotRereadBeforeFillTest"], "vectors": [], "quintReplays": ["shadow-layers/acquiredMissDoesNotRereadBeforeFillTest"]}, - {"id": "C51.retained-candidate-not-reclassified", "rule": "An initially accepted C0 remains a comparison candidate after its freshness expires; confirmation checks payload identity.", "contracts": ["C51"], "scenarios": ["dark C0 retained for comparison is not reclassified after freshness expires"], "generated": [{"profile": "shadow-layers", "witness": "retained-fresh-c0-compares-after-freshness-boundary"}], "models": ["formal/dialcache-shadow-layers-conformance.qnt:retainedFreshC0StillComparesAfterFreshnessBoundaryTest"], "vectors": [], "quintReplays": ["shadow-layers/retainedFreshC0StillComparesAfterFreshnessBoundaryTest"]}, - {"id": "C13.request-last-writer", "rule": "Disabling coalescing preserves request memoization; independent successful completions replace its value in settlement order.", "contracts": ["C13"], "scenarios": ["uncoalesced request calls still memoize the last settled value"], "generated": [{"profile": "scope", "witness": "independent-request-last-completion-probed"}], "models": ["formal/dialcache-scope-conformance.qnt:independentRequestMemoUsesLastCompletionTest", "formal/dialcache-scope-conformance.qnt:memoFollowsLatestSuccessfulSettlement", "formal/dialcache-scope-conformance.qnt:rejectedIndependentSourceKeepsMemoizedValueTest"], "vectors": [], "quintReplays": ["scope/independentRequestMemoUsesLastCompletionTest", "scope/rejectedIndependentSourceKeepsMemoizedValueTest"]}, - {"id": "C16.runtime-enables-coalescing", "rule": "Explicit runtime coalesce true replaces an operation default of false and enables eligible sharing.", "contracts": ["C16"], "scenarios": ["runtime coalescing override enables sharing over a disabled default"], "generated": [], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:runtimeTrueEnablesSharingOverFalseDefaultTest", "formal/dialcache-runtime-boundaries-conformance.qnt:inheritedFalseKeepsIndependentMemoizingSourcesTest", "formal/dialcache-runtime-boundaries-conformance.qnt:inheritedDisabledSharingNeverJoins"], "vectors": [], "quintReplays": ["runtime-boundaries/runtimeTrueEnablesSharingOverFalseDefaultTest", "runtime-boundaries/inheritedFalseKeepsIndependentMemoizingSourcesTest"]}, - {"id": "C03.late-recovery-publication", "rule": "Late stale recovery returns to original callers but cannot populate a closed or replacement request scope.", "contracts": ["C03"], "scenarios": ["late recovery cannot memoize into a closed or replacement request scope"], "generated": [{"profile": "recovery", "witness": "closed-recovery-does-not-memoize-another-scope"}, {"profile": "recovery-read", "witness": "closed-request-recovery-keeps-new-request-cold"}], "models": ["formal/dialcache-recovery-conformance.qnt:closedRequestCannotReceiveLateRecoveryMemoTest", "formal/dialcache-recovery-read-conformance.qnt:closedContextsStayEmpty", "formal/dialcache-recovery-read-conformance.qnt:closedRequestCannotReceiveCompressedRecoveryTest"], "vectors": [], "quintReplays": ["recovery-read/closedRequestCannotReceiveCompressedRecoveryTest", "recovery/closedRequestCannotReceiveLateRecoveryMemoTest"]}, - {"id": "C54.instance-isolation", "rule": "Shadow capacity and job identity deduplication apply within each cache instance independently.", "contracts": ["C54"], "scenarios": ["shadow capacity and job deduplication are isolated per instance"], "generated": [{"profile": "admission", "witness": "per-instance-deduplication"}, {"profile": "admission", "witness": "other-instance-full-admission"}, {"profile": "shadow-layers", "witness": "mixed-shadow-capacity-is-per-instance"}], "models": ["formal/dialcache-admission-conformance.qnt:capacityIsPerInstance", "formal/dialcache-admission-conformance.qnt:fullInstanceDoesNotBlockOtherInstanceTest", "formal/dialcache-shadow-layers-conformance.qnt:fullMixedInstanceDoesNotBlockAnotherInstanceTest"], "vectors": [], "quintReplays": ["shadow-layers/fullMixedInstanceDoesNotBlockAnotherInstanceTest", "admission/fullInstanceDoesNotBlockOtherInstanceTest"]}, - {"id": "C18.captured-shadow-admission", "rule": "Disabling shadow prevents new admission while an already admitted comparison retains its captured policy.", "contracts": ["C18"], "scenarios": ["disabling shadow prevents new jobs but preserves an admitted comparison"], "generated": [{"profile": "shadow", "witness": "admitted-job-keeps-shadow-policy"}, {"profile": "admission", "witness": "accepted-shadow-policy"}], "models": ["formal/dialcache-shadow-conformance.qnt:admittedComparisonSurvivesPolicyDisableTest"], "vectors": []}, - {"id": "C36.independent-invalidation-snapshots", "rule": "Independent tracked reads acquired before and after invalidation keep their own snapshot and fencing outcomes.", "contracts": ["C36"], "scenarios": ["uncoalesced tracked readers on either side of invalidation keep their own snapshots"], "generated": [{"profile": "independent", "witness": "acquired-fresh-decode-survives-invalidation"}], "models": ["formal/dialcache-independent-conformance.qnt:acceptedFreshDecodeSurvivesOtherInvalidationTest", "formal/dialcache-independent-connection.qnt:independentSnapshotsMatchAcquisition"], "vectors": []}, - {"id": "C55.legacy-reply-normalization", "rule": "Null, primitive, legacy, and kindless metadata-only replies that are not valid frames normalize to safe misses without trusting stray watermark metadata.", "contracts": ["C55"], "scenarios": ["adapter legacy null preserves only trustworthy miss metadata", "adapter primitive preserves only trustworthy miss metadata", "adapter legacy watermark shape preserves only trustworthy miss metadata", "adapter kindless metadata preserves only trustworthy miss metadata"], "generated": [{"profile": "effects", "witness": "normalized-reply-allows-refill:1"}, {"profile": "effects", "witness": "normalized-reply-allows-refill:2"}, {"profile": "effects", "witness": "normalized-reply-allows-refill:4"}], "models": ["formal/dialcache-effects-conformance.qnt:nullReplyRefillsAndIsReadableTest", "formal/dialcache-effects-conformance.qnt:primitiveReplyRefillsAndIsReadableTest", "formal/dialcache-effects-conformance.qnt:legacyReplyRefillsAndIsReadableTest", "formal/dialcache-effects-conformance.qnt:kindlessReplyRefillsAndIsReadableTest"], "vectors": [], "evidenceNotes": ["Generated consequences cover representative null, primitive and kindless replies; fixed scenarios additionally bind every listed legacy reply shape. The classifier does not credit mere reply selection."], "quintReplays": ["effects/nullReplyRefillsAndIsReadableTest", "effects/primitiveReplyRefillsAndIsReadableTest", "effects/legacyReplyRefillsAndIsReadableTest", "effects/kindlessReplyRefillsAndIsReadableTest"]}, - {"id": "C55.invalid-fence-discarded", "rule": "Missing, negative, fractional, or unsafe miss watermarks are discarded and cannot authorize fencing metadata.", "contracts": ["C55"], "scenarios": ["adapter fenced reason without fence preserves only trustworthy miss metadata", "adapter negative fence preserves only trustworthy miss metadata", "adapter fractional fence preserves only trustworthy miss metadata", "adapter unsafe fence preserves only trustworthy miss metadata"], "generated": [{"profile": "effects", "witness": "normalized-reply-allows-refill:8"}, {"profile": "effects", "witness": "normalized-reply-allows-refill:9"}, {"profile": "effects", "witness": "normalized-reply-allows-refill:10"}, {"profile": "effects", "witness": "normalized-reply-allows-refill:11"}], "models": ["formal/dialcache-effects-conformance.qnt:missingFenceRefillsAndIsReadableTest", "formal/dialcache-effects-conformance.qnt:negativeFenceRefillsAndIsReadableTest", "formal/dialcache-effects-conformance.qnt:fractionalFenceRefillsAndIsReadableTest", "formal/dialcache-effects-conformance.qnt:unsafeFenceRefillsAndIsReadableTest"], "vectors": [], "evidenceNotes": ["Each invalid fence class must progress to source serialization with no retained fence. Fixed scenarios separately check normalized miss diagnostics."], "quintReplays": ["effects/missingFenceRefillsAndIsReadableTest", "effects/negativeFenceRefillsAndIsReadableTest", "effects/fractionalFenceRefillsAndIsReadableTest", "effects/unsafeFenceRefillsAndIsReadableTest"]}, - {"id": "C55.valid-fence-independent-of-cause", "rule": "A valid tracked watermark survives normalization independently of a recognized miss cause and constrains later publication.", "contracts": ["C55"], "scenarios": ["adapter absent with future fence preserves only trustworthy miss metadata", "adapter expired with zero fence preserves only trustworthy miss metadata"], "generated": [{"profile": "effects", "witness": "normalized-reply-fences-refill:12"}, {"profile": "effects", "witness": "normalized-reply-allows-refill:13"}], "models": ["formal/dialcache-redis-protocol.qnt:validMissWatermarksArePreserved", "formal/dialcache-effects-conformance.qnt:absentReplyWithFutureFenceBlocksRefillTest", "formal/dialcache-effects-conformance.qnt:expiredZeroFenceReplyRefillsAndIsReadableTest"], "vectors": [], "evidenceNotes": ["A valid future fence suppresses serialization despite an absent cause; zero-fence expired metadata permits serialization. Protocol invariants separately require valid metadata retention for semantic misses."], "quintReplays": ["effects/absentReplyWithFutureFenceBlocksRefillTest", "effects/expiredZeroFenceReplyRefillsAndIsReadableTest"]}, - {"id": "C55.frame-ignores-miss-metadata", "rule": "A valid frame without a miss discriminator remains a frame despite stray miss-reason or fence fields.", "contracts": ["C55"], "scenarios": ["frame without miss discriminator ignores stray miss metadata"], "generated": [{"profile": "effects", "witness": "reply:15"}], "models": ["formal/dialcache-effects-conformance.qnt:frameWithoutMissDiscriminatorIgnoresMetadataTest"], "vectors": [], "evidenceNotes": ["The scheduled regression asserts the frame is served without a source. Generated reply15 is an additional required input category, not by itself proof that a frame was served."]}, - {"id": "C19.exact-serving-cohort", "rule": "A serving ramp excludes a key at equality with its cohort sample and includes it just above that sample, independently for each layer.", "contracts": ["C19"], "scenarios": ["local cohort excludes equality and admits just above its exact sample", "remote cohort excludes equality and admits just above its exact sample"], "generated": [], "models": ["formal/dialcache-runtime-boundaries-conformance.qnt:localCohortEqualityBypassesBeforeAboveSampleCachesTest", "formal/dialcache-runtime-boundaries-conformance.qnt:remoteCohortEqualityBypassesBeforeAboveSampleCachesTest", "formal/dialcache-runtime-boundaries-conformance.qnt:equalAndLowerCohortsNeverTraverse"], "vectors": [], "quintReplays": ["runtime-boundaries/localCohortEqualityBypassesBeforeAboveSampleCachesTest", "runtime-boundaries/remoteCohortEqualityBypassesBeforeAboveSampleCachesTest"]}, - {"id": "C45.compressed-candidate", "rule": "Retained compressed bytes follow the same recovery and no-shared-publication rules; decompression failure preserves the source error.", "contracts": ["C45"], "scenarios": ["compressed retained payload follows normal recovery publication rules", "corrupt compressed retained payload follows normal recovery publication rules"], "generated": [{"profile": "recovery-read", "witness": "tracked-compressed-recovery-is-request-only"}, {"profile": "recovery-read", "witness": "corrupt-compressed-recovery-keeps-original-error"}, {"profile": "recovery-read", "witness": "untracked-compressed-recovery-does-not-warm-local"}, {"profile": "recovery-read", "witness": "compressed-recovery-crossing-maximum-keeps-original-error"}], "models": ["formal/dialcache-recovery-read-conformance.qnt:recoveredResultsNeverPublishShared", "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryMemoizesWithoutLocalPublicationTest", "formal/dialcache-recovery-read-conformance.qnt:corruptCompressedRecoveryKeepsOriginalSourceErrorTest", "formal/dialcache-recovery-read-conformance.qnt:untrackedCompressedRecoveryDoesNotWarmLocalTest", "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryRechecksMaximumAfterDecodeTest"], "vectors": [], "quintReplays": ["recovery-read/compressedRecoveryMemoizesWithoutLocalPublicationTest", "recovery-read/corruptCompressedRecoveryKeepsOriginalSourceErrorTest", "recovery-read/untrackedCompressedRecoveryDoesNotWarmLocalTest", "recovery-read/compressedRecoveryRechecksMaximumAfterDecodeTest"]}, - {"id": "C28.encoding-error-suppresses-refill", "rule": "Unsupported payload encoding is a read failure that suppresses Redis refill for both tracked and untracked calls.", "contracts": ["C28"], "scenarios": ["untracked unsupported payload encoding is a read failure that suppresses refill", "tracked unsupported payload encoding is a read failure that suppresses refill"], "generated": [{"profile": "recovery-read", "witness": "tracked-encoding-error-denies-refill-and-local-reuse"}, {"profile": "recovery-read", "witness": "untracked-encoding-error-denies-refill-keeps-local-reuse"}], "models": ["formal/dialcache-recovery-read-conformance.qnt:trackedEncodingFailureSuppressesRefillTest", "formal/dialcache-recovery-read-conformance.qnt:untrackedEncodingFailureStillPublishesLocalTest"], "vectors": [], "quintReplays": ["recovery-read/trackedEncodingFailureSuppressesRefillTest", "recovery-read/untrackedEncodingFailureStillPublishesLocalTest"]}, - {"id": "C22.freshness-after-read", "rule": "Logical remote freshness is evaluated at read settlement, so age accumulated during the bounded read can make a frame stale.", "contracts": ["C22"], "scenarios": ["freshness samples wall time after the bounded Redis read settles"], "generated": [{"profile": "recovery-read", "witness": "read-settlement-crosses-freshness-and-recovers"}, {"profile": "recovery-read", "witness": "read-settlement-before-freshness-hits"}], "models": ["formal/dialcache-recovery-read-conformance.qnt:freshnessUsesReadSettlement", "formal/dialcache-recovery-read-conformance.qnt:freshnessAfterHeldReadTest", "formal/dialcache-recovery-read-conformance.qnt:heldReadJustBeforeFreshnessBoundaryStillHitsTest"], "vectors": [], "quintReplays": ["recovery-read/freshnessAfterHeldReadTest", "recovery-read/heldReadJustBeforeFreshnessBoundaryStillHitsTest"]}, - {"id": "C58.failure-categories", "rule": "Read, policy, load, dump, and write failures retain their stable phase-specific diagnostic classification while their documented fail-open path continues.", "contracts": ["C58"], "scenarios": ["read failure retains its stable diagnostic category", "dump failure retains its stable diagnostic category", "write failure retains its stable diagnostic category", "load failure retains its stable diagnostic category", "policy failure retains its stable diagnostic category"], "generated": [{"profile": "effects", "witness": "error:cache_read"}, {"profile": "effects", "witness": "error:serialization_load"}, {"profile": "effects", "witness": "error:serialization_dump"}, {"profile": "effects", "witness": "error:cache_write"}], "models": ["formal/dialcache-effects-conformance.qnt:readFailureKeepsCategoryAndDeniesRefillTest", "formal/dialcache-effects-conformance.qnt:decodeFailureKeepsCategoryAndAllowsRefillTest", "formal/dialcache-effects-conformance.qnt:dumpFailureKeepsCategoryAndSourceValueTest", "formal/dialcache-effects-conformance.qnt:writeFailureKeepsCategoryAndSourceValueTest"], "vectors": [], "evidenceNotes": ["Each added model regression requires the phase label alongside its source-result and write/no-write consequence. Fixed scenarios additionally check policy-resolution diagnostics."]}, - {"id": "C58.request-follower-trail", "rule": "Request followers report request-local coalescing without repeating lower cache traversal or the leader error trail.", "contracts": ["C58"], "scenarios": ["request followers report request scope without repeating lower traversal"], "generated": [{"profile": "scope", "witness": "one-error-for-request-followers"}], "models": ["formal/dialcache-scope-conformance.qnt:sharedFailureHasOneAttributedErrorTest"], "vectors": [], "quintReplays": ["scope/sharedFailureHasOneAttributedErrorTest"]}, - {"id": "C58.late-rejection-not-recounted", "rule": "A source deadline records one failure; a later rejection of the abandoned loader does not emit another fallback failure.", "contracts": ["C58"], "scenarios": ["source timeout records one failure even after a late rejection"], "generated": [{"profile": "effects", "witness": "late-rejection-does-not-repeat-error"}], "models": ["formal/dialcache-effects-conformance.qnt:lateSourceCannotRepeatFailureMetricTest"], "vectors": []}, - {"id": "C59.compression-read-telemetry", "rule": "Previously compressed reads report decompression success or failure even when new compression writes are disabled.", "contracts": ["C59"], "scenarios": ["compressed read reports compression even when new compression is disabled", "corrupt read reports compression even when new compression is disabled"], "generated": [{"profile": "recovery-read", "witness": "fresh-compressed-hit-reports-decompression"}, {"profile": "recovery-read", "witness": "corrupt-compressed-read-reports-fallback-with-source-result"}], "models": ["formal/dialcache-recovery-read-conformance.qnt:freshCompressedReadReportsDecompressionTest", "formal/dialcache-recovery-read-conformance.qnt:corruptCompressedReadReportsRawFallbackTest"], "vectors": [], "quintReplays": ["recovery-read/freshCompressedReadReportsDecompressionTest", "recovery-read/corruptCompressedReadReportsRawFallbackTest"]}, - {"id": "C60.logging-explicit-off", "rule": "Explicitly disabling mismatch logging suppresses warnings while preserving a confirmed mismatch verdict.", "contracts": ["C60"], "scenarios": ["mismatch warning omitted with mismatch verdict"], "generated": [{"profile": "shadow", "witness": "mismatch-logging:false"}, {"profile": "shadow", "witness": "explicit-false-shadow-logging-overrides-enabled-default"}], "models": ["formal/dialcache-shadow-conformance.qnt:warningsRequireValidCapturedPolicy", "formal/dialcache-shadow-conformance.qnt:explicitFalseLoggingOverridesEnabledDefaultTest"], "vectors": [], "evidenceNotes": ["A confirmed mismatch with an explicitly disabled logging flag has no warning. Omitted/default logging and malformed flags have separate named cases."], "quintReplays": ["shadow/explicitFalseLoggingOverridesEnabledDefaultTest"]}, - {"id": "C40.fenced-candidate", "rule": "A fenced initial value is not retained or decoded for recovery; an allowed failure remains the original source error.", "contracts": ["C40"], "scenarios": [], "generated": [{"profile": "recovery", "witness": "fenced-read-does-not-retain"}], "models": ["formal/dialcache-recovery-conformance.qnt:fencedInitialBytesNeverRecoverTest", "formal/dialcache-stale-recovery.qnt:fencedFrameNeverBecomesRecoveryCandidateTest"], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/fencedInitialBytesNeverRecoverTest"]}, - {"id": "C45.rollback-below-fresh", "rule": "After retaining stale bytes, wall rollback to a nonnegative age below the fresh ceiling still permits recovery; only future age or the exclusive maximum rejects.", "contracts": ["C45"], "scenarios": [], "generated": [{"profile": "recovery", "witness": "rollback-below-fresh-age-still-recovers"}], "models": ["formal/dialcache-recovery-conformance.qnt:rollbackBelowFreshCeilingStillRecoversTest", "formal/dialcache-stale-recovery.qnt:rollbackBelowFreshAgeStillRecoversTest", "formal/dialcache-rule-checks.qnt:rollbackCanRecoverRetainedBytesTest"], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/rollbackBelowFreshCeilingStillRecoversTest"]}, - {"id": "C53.dark-read-error-keeps-caller", "rule": "A failed dark C0 read completes the diagnostic job but an independent caller source can still succeed; no decode or fill follows the failed read.", "contracts": ["C53"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "dark-read-error-still-allows-source-result"}], "models": ["formal/dialcache-shadow-conformance.qnt:darkReadErrorCannotReplaceCallerSourceTest", "formal/dialcache-shadow-validation.qnt:darkReadFailureStillAllowsCallerResultTest"], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C53.dark-source-error", "rule": "A rejected dark caller source is preserved as the caller failure, emits source_error, and never decodes or fills C0.", "contracts": ["C53"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "dark-source-error-never-decodes-or-fills"}], "models": ["formal/dialcache-shadow-conformance.qnt:sourceErrorDoesNotDecodePresentDarkBytesTest", "formal/dialcache-shadow-validation.qnt:sourceFailureNeverFillsTest"], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C52.fenced-miss-may-fill", "rule": "A fenced C0 is a semantic miss; a source-success fill may proceed once its own timestamp clears the observed fence, without decoding C0.", "contracts": ["C52"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "fenced-dark-c0-can-fill-after-cutoff"}], "models": ["formal/dialcache-shadow-conformance.qnt:fencedDarkBytesCanAdmitNewerFillTest"], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C51.fenced-confirmation", "rule": "A watermark-fenced C1 supersedes an unequal C0/source comparison without repair, warning, or value-age verdict.", "contracts": ["C51"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "fenced-c1-supersedes-without-repair"}], "models": ["formal/dialcache-shadow-conformance.qnt:fencedConfirmationNeverRepairsTest"], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C51.future-confirmation", "rule": "A future-dated C1 still participates in payload confirmation after C0 was accepted; identical bytes confirm mismatch without cache repair.", "contracts": ["C51"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "future-c1-confirms-payload-without-repair"}], "models": ["formal/dialcache-shadow-conformance.qnt:futureConfirmationStillComparesBytesTest"], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C50.equal-skips-confirmation", "rule": "A semantic C0/source match emits match without issuing a C1 read or repairing the cache.", "contracts": ["C50"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "equal-comparison-skips-c1"}], "models": ["formal/dialcache-shadow-validation.qnt:equalComparisonSkipsConfirmationTest", "formal/dialcache-shadow-conformance.qnt:binarySnapshotComparesDecodedValueTest"], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C53.fill-serialization-error", "rule": "A dark fill serialization failure emits fill_error without dispatching a Redis write and preserves the accepted caller result.", "contracts": ["C53"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "fill-serialization-error-preserves-caller"}], "models": ["formal/dialcache-shadow-conformance.qnt:fillSerializationFailureNeverDispatchesWriteTest"], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C53.fill-write-error", "rule": "A dispatched dark Redis write failure emits fill_error and preserves the accepted caller result; it does not retry or emit a second verdict.", "contracts": ["C53"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "fill-write-error-preserves-caller"}], "models": ["formal/dialcache-shadow-conformance.qnt:fillWriteFailurePreservesCallerResultTest"], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}]}, - {"id": "C34.observed-fence-snapshot", "rule": "A conditional refill uses the miss-time observed fence; later invalidation can fence a dispatched write on subsequent reads without retroactively rewriting that miss.", "contracts": ["C34"], "scenarios": ["invalidation during source does not replace the acquired miss fence"], "generated": [{"profile": "recovery-read", "witness": "later-invalidation-keeps-captured-miss-fence-new-read-fences-write"}], "models": ["formal/dialcache-tracked-invalidation.qnt:laterInvalidationDoesNotRewriteMissFenceTest", "formal/dialcache-recovery-read-conformance.qnt:laterInvalidationDoesNotRewriteObservedMissFenceTest"], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "quintReplays": ["recovery-read/laterInvalidationDoesNotRewriteObservedMissFenceTest"]}, - {"id": "C38.value-work-does-not-extend-marker", "rule": "Ordinary tracked reads and complete value writes do not create, advance, or extend invalidation watermarks.", "contracts": ["C38"], "scenarios": [], "generated": [{"profile": "recovery-read", "witness": "ordinary-value-work-preserves-absent-marker"}, {"profile": "recovery-read", "witness": "ordinary-value-work-preserves-marker-cutoff-and-expiry"}], "models": ["formal/dialcache-tracked-invalidation.qnt:readsAndValueWritesDoNotMoveWatermarkTest", "formal/dialcache-recovery-read-conformance.qnt:ordinaryValueWorkDoesNotCreateMarkerTest", "formal/dialcache-recovery-read-conformance.qnt:ordinaryValueWorkDoesNotExtendMarkerTest"], "vectors": [], "evidenceNotes": ["The tracked-invalidation regression checks cutoff preservation only. The recovery-read profile additionally exports marker probes that check continued absence or unchanged cutoff and expiry across ordinary reads and value writes. These controlled adapter observations complement real-server protocol integration; they do not prove native Redis internals."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "quintReplays": ["recovery-read/ordinaryValueWorkDoesNotCreateMarkerTest", "recovery-read/ordinaryValueWorkDoesNotExtendMarkerTest"]}, - {"id": "C51.identical-payload-confirmation", "rule": "An unequal C0/source comparison is reported as mismatch only when one successful C1 read returns the same payload bytes, including equivalent text/binary representations; the cache is never repaired.", "contracts": ["C51"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "same-c1-bytes-confirm-mismatch"}], "models": ["formal/dialcache-shadow-conformance.qnt:identicalTextAndBinaryBytesConfirmMismatchTest"], "vectors": [], "evidenceNotes": ["Shared confirmation rule; source detachment and caller-path differences have separate cases."], "provenance": [{"path": "src/dialcache.ts", "lines": [1220], "scope": "Compare C1 payload bytes with original C0 before confirmed mismatch."}]}, - {"id": "C05.request-hit-stops-traversal", "rule": "A request memo hit skips local and remote traversal and source execution", "contracts": ["C05"], "scenarios": [], "generated": [{"profile": "layers", "witness": "request-hit-stops-lower-traversal"}], "models": ["formal/dialcache-core.qnt:firstHitStopsLowerTraversal", "formal/dialcache-core.qnt:untrackedSourcePublishesToAllParticipatingLayersTest"], "vectors": []}, - {"id": "C05.local-hit-stops-traversal", "rule": "A local hit skips remote reads and source execution while warming an eligible request memo", "contracts": ["C05"], "scenarios": [], "generated": [{"profile": "layers", "witness": "local-hit-stops-remote-and-source"}], "models": ["formal/dialcache-core.qnt:firstHitStopsLowerTraversal", "formal/dialcache-core.qnt:localHitWarmsRequestAndSkipsRemoteTest", "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", "formal/dialcache-conformance.qnt:localValueSurvivesSourceChangeTest", "formal/dialcache-conformance.qnt:servedLayerValueMatchesCache"], "vectors": [], "quintReplays": ["runtime-boundaries/runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", "core/localValueSurvivesSourceChangeTest"]}, - {"id": "C16.reenable-default-coalescing", "rule": "Reenabling a shared serving layer over the disabled baseline retains library coalescing when its leaf is omitted", "contracts": ["C16", "C17"], "scenarios": ["runtime ramp up over disabled baseline preserves default coalescing"], "generated": [], "models": ["formal/dialcache-runtime-policy.qnt:reenablingDisabledBaselineKeepsDefaultCoalescingTest", "formal/dialcache-runtime-boundaries-conformance.qnt:disabledBaselineRampedUpKeepsDefaultSharingTest"], "vectors": [], "provenance": ["test/dialcache-coalescing.test.ts:coalesces a disabled() baseline ramped up by an overlay that omits coalesce"], "quintReplays": ["runtime-boundaries/disabledBaselineRampedUpKeepsDefaultSharingTest"]}, - {"id": "C17.explicit-feature-kill-switch", "rule": "Explicit zero or false runtime feature leaves replace inherited request, recovery, and shadow enablement while preserving omitted coalescing policy", "contracts": ["C16", "C17"], "scenarios": ["explicit feature kill switches bypass and preserve request memo for reenablement"], "generated": [], "models": ["formal/dialcache-runtime-policy.qnt:explicitOffReplacesInheritedFeaturesTest", "formal/dialcache-runtime-boundaries-conformance.qnt:fullFeatureKillSwitchKeepsOmittedSharingAndRetainedMemoTest"], "vectors": [], "provenance": ["src/config.ts:DialCacheKeyConfig.disabled", "test/dialcache-config-ramp.test.ts:returns the explicit kill-switch overlay from DialCacheKeyConfig.disabled()"], "quintReplays": ["runtime-boundaries/fullFeatureKillSwitchKeepsOmittedSharingAndRetainedMemoTest"]}, - {"id": "C21.invalid-remote-ttl", "rule": "Invalid remote TTL preserves valid local serving", "contracts": ["C21"], "scenarios": [], "generated": [{"profile": "policy", "witness": "invalid-remote-ttl-preserves-local-hit"}], "models": ["formal/dialcache-policy-conformance.qnt:invalidRemoteTtlPreservesLocalServingTest"], "vectors": [], "provenance": ["test/dialcache-config-ramp.test.ts:rejects unsupported runtime TTLs before cache or serialization work"], "evidenceNotes": ["The required generated witness isolates invalid remote TTL while a valid local entry remains usable."], "quintReplays": ["policy/invalidRemoteTtlPreservesLocalServingTest"]}, - {"id": "C21.invalid-local-ramp", "rule": "Invalid local ramps suppress local caching while a valid remote layer remains usable", "contracts": ["C21"], "scenarios": ["invalid runtime ramp fails open"], "generated": [{"profile": "policy", "witness": "invalid-local-ramp-preserves-remote-hit"}], "models": ["formal/dialcache-policy-conformance.qnt:invalidLocalRampPreservesRemoteTest"], "vectors": [], "provenance": ["test/dialcache-config-ramp.test.ts:rejects runtime ramps outside the inclusive 0-100 domain"], "evidenceNotes": ["The fixed scenario checks local bypass and no retention after an invalid local ramp. The required generated witness and scoped Quint regression separately check preservation of a valid remote hit."], "quintReplays": ["policy/invalidLocalRampPreservesRemoteTest"]}, - {"id": "C21.invalid-remote-ramp", "rule": "Invalid remote ramp preserves valid local hits", "contracts": ["C21"], "scenarios": [], "generated": [{"profile": "policy", "witness": "invalid-remote-ramp-preserves-local-hit"}], "models": ["formal/dialcache-policy-conformance.qnt:invalidRemoteRampPreservesLocalTest"], "vectors": [], "provenance": ["test/dialcache-config-ramp.test.ts:rejects runtime ramps outside the inclusive 0-100 domain"], "quintReplays": ["policy/invalidRemoteRampPreservesLocalTest"]}, - {"id": "C27.source-error-no-publication", "rule": "A rejected source preserves its failure and publishes no successful value to participating cache layers", "contracts": ["C15", "C27"], "scenarios": ["source rejection publishes to none of the participating layers"], "generated": [{"profile": "local-failure", "witness": "rejected-source-preserves-previous-local-publication"}], "models": ["formal/dialcache-core.qnt:sourceFailureNeverPublishes", "formal/dialcache-core.qnt:rejectedSourceNeverPublishesTest", "formal/dialcache-local-failure-conformance.qnt:sourceErrorsNeverReplaceLocalValue", "formal/dialcache-local-failure-conformance.qnt:sourceFailureKeepsPreviouslyAcceptedStorageTest"], "vectors": [], "provenance": ["test/dialcache-request-local.test.ts:removes a rejected request-local in-flight entry so the same scope can retry"], "quintReplays": ["local-failure/sourceFailureKeepsPreviouslyAcceptedStorageTest"]}, - {"id": "C09.fractional-clock-grid", "rule": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.", "contracts": ["C09"], "scenarios": [], "generated": [{"profile": "local-clock", "witness": "fractional-insertion-expiry"}, {"profile": "local-clock", "witness": "shared-instance-grid"}], "models": ["formal/dialcache-local-clock-conformance.qnt:fractionalInsertionExpiresAtWholeMillisecondTest", "formal/dialcache-local-clock-conformance.qnt:fractionalConstructionKeepsCommonInstanceGridTest", "formal/dialcache-local-clock-conformance.qnt:nonzeroOriginKeepsWholeMillisecondBoundaryTest", "formal/dialcache-local-clock-conformance.qnt:integerInsertionRetainsFullTtlTest", "formal/dialcache-local-clock-conformance.qnt:localReadsUseCommonWholeMilliseconds", "formal/dialcache-local-clock-conformance.qnt:readsNeverRenewLocalInsertion", "formal/dialcache-local-clock-conformance.qnt:publicCallsPreserveProbeResults"], "vectors": [], "evidenceNotes": ["The fixture advances native time in microseconds and constructs real default cache instances. It does not replace either local clock with the shared integer behavior clock. Precise source, read and shadow deadlines remain separately bound."], "quintReplays": ["local-clock/fractionalInsertionExpiresAtWholeMillisecondTest", "local-clock/fractionalConstructionKeepsCommonInstanceGridTest", "local-clock/nonzeroOriginKeepsWholeMillisecondBoundaryTest", "local-clock/integerInsertionRetainsFullTtlTest"]} + {"id": "C01.no-cache-plumbing", "rule": "disabled calls bypass policy and caches", "scenarios": ["disabled calls bypass policy and caches"], "generated": [{"profile": "scope", "witness": "disabled-bypass"}], "vectors": [], "contracts": ["C01"], "quintReplays": ["core/disabledAndRequestCallsKeepTheirOwnLifetimesTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:passThroughSkipsCacheMachinery", "scope": "Disabled/outside/closed calls make zero policy, key, cache read, or cache write operations in the presence-bit model; no clock claim."}, + {"ref": "formal/dialcache-conformance.qnt:disabledAndRequestCallsKeepTheirOwnLifetimesTest", "scope": "The introductory profile alternates disabled calls and separate request-local pairs across a source change; results and source/read/write counts establish those lifetimes. This does not separately observe key construction or runtime policy."}]}, + {"id": "C01.no-deadline", "rule": "outside calls have no fallback deadline or sharing", "scenarios": ["outside calls have no fallback deadline or sharing"], "generated": [{"profile": "source-budgets", "witness": "outside-calls-skip-source-deadlines-sharing-and-publication"}], "vectors": [], "contracts": ["C01"], "provenance": ["test/dialcache-liveness.test.ts:keeps initially disabled calls as true pass-through", "src/dialcache.ts:executeCacheOperation"], "quintReplays": ["source-budgets/outsideAndInvalidOutsideCallsIgnoreDeadlineAndSharingTest"], "models": [ + {"ref": "formal/dialcache-source-budgets-conformance.qnt:outsideSourcesHaveNoDeadline", "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim."}, + {"ref": "formal/dialcache-source-budgets-conformance.qnt:outsideAndInvalidOutsideCallsIgnoreDeadlineAndSharingTest", "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim."}]}, + {"id": "C02.nested-memo", "rule": "nested enable and disable preserve outer memo", "scenarios": ["nested enable and disable preserve outer memo"], "generated": [{"profile": "scope", "witness": "nested-memo-hit"}], "vectors": [], "contracts": ["C02"], "models": [ + {"ref": "formal/dialcache-core.qnt:nestedDisablePreservesMemoTest", "scope": "Nested enable/disable leaves the outer memo available on reenable."}]}, + {"id": "C02.reenabled-memo", "rule": "reenabling inside disabled scope reuses memo and preserves siblings", "scenarios": ["reenabling inside disabled scope reuses memo and preserves siblings"], "generated": [{"profile": "scope", "witness": "reenabled-memo-hit"}], "vectors": [], "contracts": ["C02"], "quintReplays": ["scope/nestedCloseAndDisabledBypassKeepOuterMemoTest"], "models": [ + {"ref": "formal/dialcache-scope-conformance.qnt:nestedCloseAndDisabledBypassKeepOuterMemoTest", "scope": "One nested enabled, disabled, and reenabled history preserves the root value; other sibling histories remain generated replay evidence."}]}, + {"id": "C03.late-publication", "rule": "late old-scope value cannot enter a replacement scope", "scenarios": ["late old-scope value cannot enter a replacement scope", "closed scope cannot be repopulated by late work"], "generated": [{"profile": "scope", "witness": "replacement-miss-after-late-source"}], "vectors": [], "contracts": ["C03"], "quintReplays": ["scope/lateSourceCannotPopulateReplacementTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:requestValueBelongsToCurrentScope", "scope": "A memo value belongs to the currently open scope; replacement scope receives no late old value."}, + {"ref": "formal/dialcache-core.qnt:lateResultCannotEnterReplacementScopeTest", "scope": "A memo value belongs to the currently open scope; replacement scope receives no late old value."}, + {"ref": "formal/dialcache-scope-conformance.qnt:closedScopesHaveNoMemo", "scope": "Closed slots contain no memo/flight, and a replacement probe starts new source work after the old source settles."}, + {"ref": "formal/dialcache-scope-conformance.qnt:lateSourceCannotPopulateReplacementTest", "scope": "Closed slots contain no memo/flight, and a replacement probe starts new source work after the old source settles."}]}, + {"id": "C03.detached-bypass", "rule": "Calls using a closed outer context bypass caching", "scenarios": [], "generated": [{"profile": "scope", "witness": "detached-bypass"}], "vectors": [], "contracts": ["C03"], "models": [ + {"ref": "formal/dialcache-core.qnt:passThroughSkipsCacheMachinery", "scope": "Outside/closed calls have no key, policy, or cache effects in the presence-bit model; source deadlines are not modeled here."}]}, + {"id": "C04.pending-policy", "rule": "policy resolution after scope closure is pass-through", "scenarios": ["policy resolution after scope closure is pass-through"], "generated": [{"profile": "scope", "witness": "policy-reply-after-close"}], "vectors": [], "contracts": ["C04"], "quintReplays": ["scope/policyReplyAfterCloseBypassesRequestTest"], "models": [ + {"ref": "formal/dialcache-scope-conformance.qnt:policyReplyAfterCloseBypassesRequestTest", "scope": "A provider released after root closure invokes source outside caching and writes no memo."}]}, + {"id": "C05.participating-publication", "rule": "untracked source fills remote local and request layers", "scenarios": ["untracked source fills remote local and request layers"], "generated": [{"profile": "layers", "witness": "source-publication-probed-in-all-three-layers"}], "vectors": [], "contracts": ["C05"], "provenance": ["src/dialcache.ts:getThroughRequestLocal/getThroughLocal/getThroughRemote"], "quintReplays": ["layers/untrackedSourcePublicationIsProbedInAllThreeLayersTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:untrackedSourcePublishesToAllParticipatingLayersTest", "scope": "untracked source fills remote local and request layers. This check covers the bounded model clause: untrackedSourcePublishesToAllParticipatingLayersTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-layers-conformance.qnt:untrackedSourcePublicationIsProbedInAllThreeLayersTest", "scope": "One untracked source fills the request memo, the local layer and Redis; a same-scope memo hit, a fresh-context local hit and an other-instance remote hit each return the published value with no second source. Tracked validation and detached scopes retain separate evidence."}], "definitions": [ + {"ref": "formal/dialcache-core.qnt:loaderSuccessAfterSemanticMiss", "scope": "An untracked semantic miss followed by accepted source and remote publication can fill all participating remote/local/live-request layers; health flags and scope lifetime gate publication."}, + {"ref": "formal/dialcache-core.qnt:finishRemotePublication", "scope": "An untracked semantic miss followed by accepted source and remote publication can fill all participating remote/local/live-request layers; health flags and scope lifetime gate publication."}]}, + {"id": "C05.first-hit", "rule": "local hit stops new shadow work", "scenarios": ["local hit stops new shadow work"], "generated": [{"profile": "shadow-layers", "witness": "dark-local-source-publication-stops-later-shadow"}, {"profile": "shadow-layers", "witness": "dark-request-source-publication-is-scope-local"}, {"profile": "shadow-layers", "witness": "validated-remote-hit-warms-local-and-stops-shadow"}, {"profile": "shadow-layers", "witness": "served-diagnostic-source-never-publishes-local"}], "vectors": [], "contracts": ["C05"], "quintReplays": ["shadow-layers/darkSourcePublishesLocalBeforeShadowWriteTest", "shadow-layers/darkSourcePublishesRequestBeforeShadowWriteTest", "shadow-layers/servedDiagnosticSourceDoesNotPopulateLocalTest", "shadow-layers/validatedRemoteHitStopsFurtherShadowTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesLocalBeforeShadowWriteTest", "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesRequestBeforeShadowWriteTest", "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:validatedRemoteHitStopsFurtherShadowTest", "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:servedDiagnosticSourceDoesNotPopulateLocalTest", "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:begin", "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold."}, + {"ref": "formal/kernel/serving.qnt:warm", "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold."}, + {"ref": "formal/kernel/serving.qnt:publish", "scope": "A later request/local hit bypasses remote reads and new shadow admission. Foreground validated remote bytes may warm local storage, but the detached diagnostic source never does: a differing diagnostic value preserves the served/local value or leaves an unpopulated local layer cold."}]}, + {"id": "C06.null-request", "rule": "null remains a value in request cache", "scenarios": ["null remains a value in request cache"], "generated": [{"profile": "scope", "witness": "memo-value:6"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/requestFalsyValuesRemainDistinctAndReusableTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest", "scope": "null remains a value in request cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/dialcache-scope-conformance.qnt:resolveLoader", "scope": "Positive value codes preserve this falsy native value across source settlement, memo publication, and a later memo hit; the value code/native mapping is specified by the profile."}, + {"ref": "formal/kernel/serving.qnt:finish", "scope": "Settlement completes every owning caller and memoizes a success into each owner's still-open row; positive value codes, including the falsy natives and absence, are memoized and served alike."}, + {"ref": "formal/kernel/serving.qnt:releaseRequest", "scope": "The request-only release joins the pending request flight of the caller's own row when the call coalesces, else serves the memo row, else starts a source; the row is the caller's memo slot, decided with the state current at release."}]}, + {"id": "C06.null-local", "rule": "null remains a value in local cache", "scenarios": ["null remains a value in local cache"], "generated": [{"profile": "policy", "witness": "local-value:6"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/localFalsyValuesRemainDistinctAndReusableTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest", "scope": "null remains a value in local cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:resolveLoader", "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code."}, + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code."}]}, + {"id": "C06.null-remote", "rule": "null remains a value in remote cache", "scenarios": ["null remains a value in remote cache"], "generated": [{"profile": "policy", "witness": "remote-value:6"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/remoteFalsyValuesRemainDistinctAndReusableTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", "scope": "null remains a value in remote cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:resolveLoader", "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass."}, + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass."}]}, + {"id": "C06.false-request", "rule": "false remains a value in request cache", "scenarios": ["false remains a value in request cache"], "generated": [{"profile": "scope", "witness": "memo-value:7"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/requestFalsyValuesRemainDistinctAndReusableTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest", "scope": "false remains a value in request cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/dialcache-scope-conformance.qnt:resolveLoader", "scope": "Positive value codes preserve this falsy native value across source settlement, memo publication, and a later memo hit; the value code/native mapping is specified by the profile."}, + {"ref": "formal/kernel/serving.qnt:finish", "scope": "Settlement completes every owning caller and memoizes a success into each owner's still-open row; positive value codes, including the falsy natives and absence, are memoized and served alike."}, + {"ref": "formal/kernel/serving.qnt:releaseRequest", "scope": "The request-only release joins the pending request flight of the caller's own row when the call coalesces, else serves the memo row, else starts a source; the row is the caller's memo slot, decided with the state current at release."}]}, + {"id": "C06.false-local", "rule": "false remains a value in local cache", "scenarios": ["false remains a value in local cache"], "generated": [{"profile": "policy", "witness": "local-value:7"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/localFalsyValuesRemainDistinctAndReusableTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest", "scope": "false remains a value in local cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:resolveLoader", "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code."}, + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code."}]}, + {"id": "C06.false-remote", "rule": "false remains a value in remote cache", "scenarios": ["false remains a value in remote cache"], "generated": [{"profile": "policy", "witness": "remote-value:7"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/remoteFalsyValuesRemainDistinctAndReusableTest", "policy/falsyRemoteValuesAreServedFromRemoteTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", "scope": "false remains a value in remote cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-policy-conformance.qnt:falsyRemoteValuesAreServedFromRemoteTest", "scope": "With the local layer disabled, a false source result is written to Redis and the next same-key call is a remote hit returning false. The zero and empty-string results share this schedule; host encodings remain fixed-scenario evidence."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:resolveLoader", "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass."}, + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass."}]}, + {"id": "C06.zero-request", "rule": "zero remains a value in request cache", "scenarios": ["zero remains a value in request cache"], "generated": [{"profile": "scope", "witness": "memo-value:8"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/requestFalsyValuesRemainDistinctAndReusableTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest", "scope": "zero remains a value in request cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/dialcache-scope-conformance.qnt:resolveLoader", "scope": "Positive value codes preserve this falsy native value across source settlement, memo publication, and a later memo hit; the value code/native mapping is specified by the profile."}, + {"ref": "formal/kernel/serving.qnt:finish", "scope": "Settlement completes every owning caller and memoizes a success into each owner's still-open row; positive value codes, including the falsy natives and absence, are memoized and served alike."}, + {"ref": "formal/kernel/serving.qnt:releaseRequest", "scope": "The request-only release joins the pending request flight of the caller's own row when the call coalesces, else serves the memo row, else starts a source; the row is the caller's memo slot, decided with the state current at release."}]}, + {"id": "C06.zero-local", "rule": "zero remains a value in local cache", "scenarios": ["zero remains a value in local cache"], "generated": [{"profile": "policy", "witness": "local-value:8"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/localFalsyValuesRemainDistinctAndReusableTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest", "scope": "zero remains a value in local cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:resolveLoader", "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code."}, + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code."}]}, + {"id": "C06.zero-remote", "rule": "zero remains a value in remote cache", "scenarios": ["zero remains a value in remote cache"], "generated": [{"profile": "policy", "witness": "remote-value:8"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/remoteFalsyValuesRemainDistinctAndReusableTest", "policy/falsyRemoteValuesAreServedFromRemoteTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", "scope": "zero remains a value in remote cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-policy-conformance.qnt:falsyRemoteValuesAreServedFromRemoteTest", "scope": "With the local layer disabled, a zero source result is written to Redis and the next same-key call is a remote hit returning zero. The false and empty-string results share this schedule; host encodings remain fixed-scenario evidence."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:resolveLoader", "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass."}, + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass."}]}, + {"id": "C06.empty-string-request", "rule": "empty string remains a value in request cache", "scenarios": ["empty string remains a value in request cache"], "generated": [{"profile": "scope", "witness": "memo-value:9"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/requestFalsyValuesRemainDistinctAndReusableTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:requestFalsyValuesRemainDistinctAndReusableTest", "scope": "empty string remains a value in request cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/dialcache-scope-conformance.qnt:resolveLoader", "scope": "Positive value codes preserve this falsy native value across source settlement, memo publication, and a later memo hit; the value code/native mapping is specified by the profile."}, + {"ref": "formal/kernel/serving.qnt:finish", "scope": "Settlement completes every owning caller and memoizes a success into each owner's still-open row; positive value codes, including the falsy natives and absence, are memoized and served alike."}, + {"ref": "formal/kernel/serving.qnt:releaseRequest", "scope": "The request-only release joins the pending request flight of the caller's own row when the call coalesces, else serves the memo row, else starts a source; the row is the caller's memo slot, decided with the state current at release."}]}, + {"id": "C06.empty-string-local", "rule": "empty string remains a value in local cache", "scenarios": ["empty string remains a value in local cache"], "generated": [{"profile": "policy", "witness": "local-value:9"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/localFalsyValuesRemainDistinctAndReusableTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:localFalsyValuesRemainDistinctAndReusableTest", "scope": "empty string remains a value in local cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:resolveLoader", "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code."}, + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "The source value code is stored without a truthiness test on the native value; later local lookup returns the same code."}]}, + {"id": "C06.empty-string-remote", "rule": "empty string remains a value in remote cache", "scenarios": ["empty string remains a value in remote cache"], "generated": [{"profile": "policy", "witness": "remote-value:9"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/remoteFalsyValuesRemainDistinctAndReusableTest", "policy/falsyRemoteValuesAreServedFromRemoteTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteFalsyValuesRemainDistinctAndReusableTest", "scope": "empty string remains a value in remote cache. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-policy-conformance.qnt:falsyRemoteValuesAreServedFromRemoteTest", "scope": "After the earlier key reaches its fresh boundary, an empty-string source result refills Redis and the next same-key call is a remote hit returning the empty string. The false and zero results share this schedule; host encodings remain fixed-scenario evidence."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:resolveLoader", "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass."}, + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "The source value code is stored remotely; remote lookup uses the sentinel/presence distinction and returns the code after local eviction or bypass."}]}, + {"id": "C06.absent-request", "rule": "undefined is a memoized value", "scenarios": ["undefined is a memoized value"], "generated": [{"profile": "scope", "witness": "memo-value:5"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["scope/absentValueIsMemoizedTest"], "models": [ + {"ref": "formal/dialcache-scope-conformance.qnt:absentValueIsMemoizedTest", "scope": "The explicit absent value code is memoized and reused without a second source."}]}, + {"id": "C06.absent-local", "rule": "absent result remains cacheable in local storage", "scenarios": ["absent result remains cacheable in local storage"], "generated": [{"profile": "policy", "witness": "local-value:5"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["policy/absentValueIsStoredAndReusedTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:absentValueIsStoredAndReusedTest", "scope": "A source absent value is published and the subsequent local hit reuses it; this regression does not probe remote-only reuse."}]}, + {"id": "C06.absent-remote", "rule": "absent result remains cacheable in remote storage", "scenarios": ["absent result remains cacheable in remote storage"], "generated": [{"profile": "policy", "witness": "remote-value:5"}], "vectors": [], "contracts": ["C06"], "quintReplays": ["runtime-boundaries/remoteAbsenceAndLiteralTextStayDistinctTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteAbsenceAndLiteralTextStayDistinctTest", "scope": "absent result remains cacheable in remote storage. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:resolveLoader", "scope": "Explicit absent code remains present in remote storage and reusable; the existing absent regression only probes local reuse."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "Explicit absent code remains present in remote storage and reusable; the existing absent regression only probes local reuse."}, + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "Explicit absent code remains present in remote storage and reusable; the existing absent regression only probes local reuse."}]}, + {"id": "C07.scope-isolation", "rule": "concurrent outer request scopes retain independent flights and memo", "scenarios": ["concurrent outer request scopes retain independent flights and memo", "outer scopes isolate request memo"], "generated": [{"profile": "scope", "witness": "independent-scope-overlap"}], "vectors": [], "contracts": ["C07"], "quintReplays": ["layers/separateRequestRootsRetainIndependentValuesTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:separateRequestRootsRetainIndependentValuesTest", "scope": "concurrent outer request scopes retain independent flights and memo. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/dialcache-scope-conformance.qnt:holder", "scope": "Per-root slots index memo and flight ownership; source settlement updates only its own slot. This bounded profile has two independent root slots."}, + {"ref": "formal/kernel/serving.qnt:startRequestSource", "scope": "A request-only source records only its outcome and process sharing; the row it fills is the memo slot attached to the caller that started it, so settlement updates one row."}, + {"ref": "formal/kernel/serving.qnt:releaseRequest", "scope": "The request-only release joins the pending request flight of the caller's own row when the call coalesces, else serves the memo row, else starts a source; the row is the caller's memo slot, decided with the state current at release."}, + {"ref": "formal/kernel/serving.qnt:finish", "scope": "Settlement completes every owning caller and memoizes a success into each owner's still-open row; positive value codes, including the falsy natives and absence, are memoized and served alike."}]}, + {"id": "C07.no-capacity-limit", "rule": "request memo has no process local capacity cap", "scenarios": ["request memo has no process local capacity cap"], "generated": [{"profile": "layers", "witness": "request-memo-exceeds-local-capacity"}], "vectors": [], "contracts": ["C07"], "quintReplays": ["layers/requestMemoExceedsLocalCapacityTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:requestMemoExceedsLocalCapacityTest", "scope": "Three request identities remain memoized with zero process-local capacity; a bounded independence check, not an unbounded allocation claim."}]}, + {"id": "C08.shared-capacity", "rule": "shared local capacity spans operation identities", "scenarios": ["shared local capacity spans operation identities", "local capacity evicts the least recently used key"], "generated": [{"profile": "layers", "witness": "lru-eviction-probed"}], "vectors": [], "contracts": ["C08"], "quintReplays": ["layers/localReadPromotesBeforeEvictionTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:capacityIsPerInstance", "scope": "Capacity applies across operation identities within each instance, with a concrete eviction probe after recency promotion."}, + {"ref": "formal/dialcache-layers-conformance.qnt:localReadPromotesBeforeEvictionTest", "scope": "Capacity applies across operation identities within each instance, with a concrete eviction probe after recency promotion."}]}, + {"id": "C08.instance-capacity", "rule": "instances isolate local storage and registered flights", "scenarios": ["instances isolate local storage and registered flights"], "generated": [{"profile": "layers", "witness": "capacity-is-per-instance"}, {"profile": "layers", "witness": "different-instances-own-distinct-flights"}], "vectors": [], "contracts": ["C08"], "provenance": ["test/dialcache-coalescing.test.ts:does not coalesce shared-layer work across DialCache instances"], "quintReplays": ["layers/oneInstanceEvictionCannotEvictAnotherInstanceTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:oneInstanceEvictionCannotEvictAnotherInstanceTest", "scope": "instances isolate local storage and registered flights. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-layers-conformance.qnt:sourceOwnershipNeverCrossesKeyOrInstance", "scope": "instances isolate local storage and registered flights. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/kernel/local-storage.qnt:putLocal", "scope": "Instance indexes partition local entries, LRU order, and process flights. Remote storage is intentionally shared, not partitioned by process instance."}, + {"ref": "formal/kernel/flights.qnt:registerSource", "scope": "Instance indexes partition local entries, LRU order, and process flights. Remote storage is intentionally shared, not partitioned by process instance."}, + {"ref": "formal/kernel/serving.qnt:identity", "scope": "The process identity a call serves is its instance's row of keys: local entries, LRU order and process flights are partitioned by instance; remote storage is intentionally shared, not partitioned by process instance."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "Instance indexes partition local entries, LRU order, and process flights. Remote storage is intentionally shared, not partitioned by process instance."}]}, + {"id": "C08.read-promotes", "rule": "Reading an entry promotes it before a later LRU eviction", "scenarios": [], "generated": [{"profile": "layers", "witness": "lru-read-promotes"}, {"profile": "layers", "witness": "promoted-value-survives-eviction"}], "vectors": [], "contracts": ["C08"], "quintReplays": ["layers/localReadPromotesBeforeEvictionTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:localReadPromotesBeforeEvictionTest", "scope": "A middle local hit promotes recency, and subsequent probes distinguish which operation identity was evicted."}]}, + {"id": "C09.fixed-local-ttl", "rule": "Local hits preserve insertion expiry; the exact TTL boundary expires", "scenarios": ["local exact TTL boundary expires"], "generated": [{"profile": "policy", "witness": "local-hit-preserves-insertion-expiry"}], "vectors": [], "contracts": ["C09"], "quintReplays": ["policy/localHitDoesNotRenewInsertionTtlTest", "source-budgets/localEntryExpiresAfterItsTtlTest", "recovery-read/localEntryExpiresAtItsInsertionTtlTest", "shadow-layers/localEntryExpiresAtItsInsertionTtlTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:localHitDoesNotRenewInsertionTtlTest", "scope": "A hit at 500ms leaves the original 1000ms insertion deadline; the exact-boundary probe starts a new source."}, + {"ref": "formal/dialcache-policy-conformance.qnt:localHitsRespectInsertionExpiry", "scope": "Independent local-hit receipts retain observation time and insertion expiry; each recorded hit occurred strictly before that fixed expiry."}, + {"ref": "formal/dialcache-rule-checks.qnt:localBoundaryIsExclusive", "scope": "Finite symbolic cases compare the canonical local-expiry judgment with the independently stated strict observation-before-expiry inequality."}, + {"ref": "formal/dialcache-rule-checks.qnt:localGridUsesWholeMilliseconds", "scope": "Finite submillisecond examples independently check flooring insertion and observation times before local age comparison; this is the grid decision, not an entire native clock implementation."}, + {"ref": "formal/dialcache-source-budgets-conformance.qnt:localEntryExpiresAfterItsTtlTest", "scope": "In the composed source-budgets profile a local entry published at settlement is served to a same-key enabled call one millisecond before its 1000ms insertion expiry and no longer at the exact boundary, where the next call starts a source; the deterministic regression pins the public result and loader count at both instants."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:localEntryExpiresAtItsInsertionTtlTest", "scope": "An untracked source warms the local slot for its 1 s insertion TTL; the transient caller hits at 999 ms and reads again at exactly 1000 ms, so the boundary is exclusive."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:localEntryExpiresAtItsInsertionTtlTest", "scope": "A dark-invalid-shadow caller's source settles and warms the local slot for 60 s; the hit at that insertion and the miss at exactly 60 000 ms after it (the drivers' 60 s advance) make the boundary exclusive."}]}, + {"id": "C09.wall-rollback", "rule": "local expiry uses monotonic time across application wall rollback", "scenarios": ["local expiry uses monotonic time across application wall rollback"], "generated": [{"profile": "policy", "witness": "rollback-preserves-live-local"}, {"profile": "policy", "witness": "rollback-does-not-extend-local-ttl"}], "vectors": [], "contracts": ["C09"], "quintReplays": ["policy/wallRollbackDoesNotExtendLocalTtlTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:wallRollbackDoesNotExtendLocalTtlTest", "scope": "Local expiry advances on elapsed time despite wall-clock rollback."}]}, + {"id": "C09.insertion-age", "rule": "nearly expired remote hit warms local for its full insertion TTL", "scenarios": ["nearly expired remote hit warms local for its full insertion TTL"], "generated": [{"profile": "policy", "witness": "remote-hit-local-ttl-outlives-remote-freshness"}], "vectors": [], "contracts": ["C09"], "quintReplays": ["policy/remoteHitStartsFullLocalInsertionTtlTest", "policy/remoteHitWarmsLocalForTheReplysLocalTtlTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:remoteHitStartsFullLocalInsertionTtlTest", "scope": "nearly expired remote hit warms local for its full insertion TTL. This check covers the bounded model clause: remoteHitStartsFullLocalInsertionTtlTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-policy-conformance.qnt:remoteHitWarmsLocalForTheReplysLocalTtlTest", "scope": "A remote hit warms local storage for the reply's local TTL (2 s), not for the frame's remaining freshness (1 s): the entry still serves locally after the freshness has passed. This check covers the bounded model clause: remoteHitWarmsLocalForTheReplysLocalTtlTest."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "A remote hit stores localExpires=now+current localTTL, independent of remaining remote freshness. Current fixed case remains the explicit narrow boundary evidence."}]}, + {"id": "C10.zero-capacity", "rule": "zero local capacity retains coalescing but no settled value", "scenarios": ["zero local capacity retains coalescing but no settled value"], "generated": [{"profile": "layers", "witness": "zero-capacity-still-shares"}, {"profile": "layers", "witness": "zero-capacity-reloads"}], "vectors": [], "contracts": ["C10"], "quintReplays": ["layers/zeroCapacityKeepsSharingWithoutStorageTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:zeroCapacityHasNoLocalValues", "scope": "Zero capacity stores no local values, shares concurrent work, and starts a new source after settlement."}, + {"ref": "formal/dialcache-layers-conformance.qnt:zeroCapacityKeepsSharingWithoutStorageTest", "scope": "Zero capacity stores no local values, shares concurrent work, and starts a new source after settlement."}]}, + {"id": "C11.distinct-keys", "rule": "different keys own independent flights", "scenarios": ["different keys own independent flights"], "generated": [{"profile": "policy", "witness": "cross-key-overlap"}], "vectors": [], "contracts": ["C11"], "quintReplays": ["layers/pendingSourcesKeepEntityAndOperationIdentityTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:pendingSourcesKeepEntityAndOperationIdentityTest", "scope": "different keys own independent flights. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-layers-conformance.qnt:sourceOwnershipNeverCrossesKeyOrInstance", "scope": "different keys own independent flights. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "Registration is indexed by key; settlement removes only the matching source ownership and publishes to that source key."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "Registration is indexed by key; settlement removes only the matching source ownership and publishes to that source key."}]}, + {"id": "C11.one-registered-flight", "rule": "Eligible concurrent same-key calls share one registered source", "scenarios": [], "generated": [{"profile": "policy", "witness": "coalesced-result"}], "vectors": [], "contracts": ["C11"], "quintReplays": ["runtime-boundaries/runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest", "core/coalescedPairPublishesOneReusableValueTest", "scope/pendingRequestFlightIsJoinedBeforeMemoReadTest", "layers/coalescingCallerJoinsPendingFlightBeforeSeededFrameTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:oneRegisteredSource", "scope": "At most one source has registered ownership in the one-key effects profile. Abandoned external work is distinct."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest", "scope": "The newly enabled local layer makes two pending same-key calls share one source, and retains its Absent result for a later local hit without any Redis read/write."}, + {"ref": "formal/dialcache-conformance.qnt:coalescedPairPublishesOneReusableValueTest", "scope": "Two controlled same-key call pairs, separated by an external source change, share one initial source and reuse its published local value."}, + {"ref": "formal/dialcache-scope-conformance.qnt:pendingRequestFlightIsJoinedBeforeMemoReadTest", "scope": "A coalescing caller joins the request flight registered under its row before the memo is read, although an independent source has since memoized a value into that row; the joined caller completes with the flight's value."}, + {"ref": "formal/dialcache-layers-conformance.qnt:coalescingCallerJoinsPendingFlightBeforeSeededFrameTest", "scope": "A coalescing caller joins the flight registered for its identity before reading the remote layer; a frame seeded while the flight is pending does not serve it. This check covers the bounded model clause: coalescingCallerJoinsPendingFlightBeforeSeededFrameTest."}]}, + {"id": "C12.separate-request-memos", "rule": "request misses join one process flight then memoize separately", "scenarios": ["request misses join one process flight then memoize separately"], "generated": [{"profile": "layers", "witness": "request-misses-share-process-flight"}], "vectors": [], "contracts": ["C12"], "quintReplays": ["layers/requestMissesShareProcessAndMemoizeSeparatelyTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:requestMissesShareProcessAndMemoizeSeparatelyTest", "scope": "Two request scopes join one process source and both reuse their separate memos after shared settlement."}]}, + {"id": "C13.uncoalesced-caching", "rule": "coalescing off keeps settled caching", "scenarios": ["coalescing off keeps settled caching"], "generated": [{"profile": "policy", "witness": "uncoalesced-local-settled-hit"}, {"profile": "policy", "witness": "uncoalesced-remote-settled-hit"}, {"profile": "scope", "witness": "uncoalesced-request-settled-hit"}], "vectors": [], "contracts": ["C13"], "provenance": ["test/dialcache-coalescing.test.ts:performs independent Redis reads and writes when coalescing is disabled", "test/dialcache-coalescing.test.ts:memoizes sequential request-local reads without coalescing concurrent ones when coalescing is disabled"], "quintReplays": ["policy/independentLocalCallsStillReuseSettledValueTest", "runtime-boundaries/disabledSharingDoesNotJoinRegisteredFlightTest", "scope/independentSourceIsNotRegisteredForLaterSharingTest", "runtime-boundaries/defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest", "admission/uncoalescedCallerReadsAloneTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:independentLocalCallsStillReuseSettledValueTest", "scope": "coalescing off keeps settled caching. This check covers the bounded model clause: independentLocalCallsStillReuseSettledValueTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:disabledSharingDoesNotJoinRegisteredFlightTest", "scope": "Once a runtime reply disables sharing, a caller does not join the request flight an earlier shared caller registered under the same memo slot; its independent source memoizes, and the memo keeps the last settled value."}, + {"ref": "formal/dialcache-scope-conformance.qnt:independentSourceIsNotRegisteredForLaterSharingTest", "scope": "A source started with coalescing off is registered under no memo row, so a later caller whose reply coalesces starts its own source instead of joining it."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest", "scope": "A reply that disables sharing starts its own source beside the registered leader; once its value has warmed local storage, a reply that shares again joins the leader rather than hitting the entry. This check covers the bounded model clause: defaultSharingJoinsRegisteredLeaderOverWarmedLocalTest."}, + {"ref": "formal/dialcache-admission-conformance.qnt:uncoalescedCallerReadsAloneTest", "scope": "A caller whose reply disables coalescing dispatches its own remote read beside the registered shared leader for the same identity; its hit is judged first and admits the job, and the leader's later hit drops as a duplicate."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "Independent-policy fixture disables registration but still captures publication TTLs and replaces local/remote values on accepted source completion. No independent property asserts general last-writer behavior."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "Independent-policy fixture disables registration but still captures publication TTLs and replaces local/remote values on accepted source completion. No independent property asserts general last-writer behavior."}]}, + {"id": "C13.local-last-writer", "rule": "independent local publication is last writer wins", "scenarios": ["independent local publication is last writer wins"], "generated": [{"profile": "policy", "witness": "independent-local-last-completion-probed"}], "vectors": [], "contracts": ["C13"], "quintReplays": ["policy/independentLocalPublicationUsesLastCompletionTest", "policy/independentFailureKeepsSettledLocalValueTest", "source-budgets/rejectedSourceLeavesPublishedLocalEntryTest", "source-budgets/republishedEqualValueRestampsLocalExpiryTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:independentLocalPublicationUsesLastCompletionTest", "scope": "independent local publication is last writer wins. This check covers the bounded model clause: independentLocalPublicationUsesLastCompletionTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-policy-conformance.qnt:independentFailureKeepsSettledLocalValueTest", "scope": "In the policy profile with coalescing off and no remote layer, two callers on one key start their own sources; the first completes and publishes locally, the second settles with the source error and is not a local writer: the third call is served the entry the earlier completed source published, without a third source. No remote or memo claim."}, + {"ref": "formal/dialcache-source-budgets-conformance.qnt:rejectedSourceLeavesPublishedLocalEntryTest", "scope": "In the composed source-budgets profile a source that settles with the source error completes its caller with that error and leaves the local entry an earlier accepted source published: the next enabled call is served locally without a third source. The rejected source is a bypass (outside) one, since a source that may warm local starts only while no live entry exists; no remote or memo claim."}, + {"ref": "formal/dialcache-source-budgets-conformance.qnt:republishedEqualValueRestampsLocalExpiryTest", "scope": "In the composed source-budgets profile the source started at the exact 1000ms expiry of a local entry republishes the same value and stamps a new insertion expiry: an enabled call one millisecond before the second boundary is served locally without a third source. Distinguishes a publication that skips an equal value from one that replaces it; no remote or memo claim."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "Independent-policy fixture disables registration but still captures publication TTLs and replaces local/remote values on accepted source completion. No independent property asserts general last-writer behavior."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "Independent-policy fixture disables registration but still captures publication TTLs and replaces local/remote values on accepted source completion. No independent property asserts general last-writer behavior."}]}, + {"id": "C13.remote-last-writer", "rule": "independent remote publication is last writer wins", "scenarios": ["independent remote publication is last writer wins"], "generated": [{"profile": "policy", "witness": "independent-remote-last-completion-probed"}], "vectors": [], "contracts": ["C13"], "quintReplays": ["policy/independentRemotePublicationUsesLastCompletionTest", "runtime-boundaries/remoteHitPromotesIntoNewlyEnabledLocalLayerTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:independentRemotePublicationUsesLastCompletionTest", "scope": "independent remote publication is last writer wins. This check covers the bounded model clause: independentRemotePublicationUsesLastCompletionTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteHitPromotesIntoNewlyEnabledLocalLayerTest", "scope": "A remote hit warms the newly enabled local layer; another already-running remote-only source then replaces Redis while the captured local value remains unchanged, distinguished by later local-enabled and remote-only reads."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "Independent-policy fixture disables registration but still captures publication TTLs and replaces local/remote values on accepted source completion. No independent property asserts general last-writer behavior."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "Settlement publishes independently to the remote layer (when the flight read it and its fence still allows) and to local storage (when the flight may warm it), with the permissions fixed when the source started."}]}, + {"id": "C14.inactive-layers", "rule": "inactive serving layers do not coalesce", "scenarios": ["inactive serving layers do not coalesce"], "generated": [{"profile": "policy", "witness": "inactive-layers-independent-sources"}], "vectors": [], "contracts": ["C14"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:inheritedDisabledSharingNeverJoins", "scope": "A caller released under inherited-disabled sharing never joins a flight: with no active serving layer it starts its own source, whatever flight is pending."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:inheritedFalseKeepsIndependentMemoizingSourcesTest", "scope": "Two concurrent callers under inherited false sharing start two sources (s.o.loaders == 2): inactive serving layers do not coalesce."}]}, + {"id": "C15.shared-error-retry", "rule": "rejected request flight is shared then removed for retry", "scenarios": ["rejected request flight is shared then removed for retry"], "generated": [{"profile": "scope", "witness": "shared-rejection"}, {"profile": "scope", "witness": "rejected-flight-retry"}], "vectors": [], "contracts": ["C15"], "quintReplays": ["scope/rejectedFlightAllowsRetryTest"], "models": [ + {"ref": "formal/dialcache-scope-conformance.qnt:rejectedFlightAllowsRetryTest", "scope": "One rejected source supplies both request followers, then a later call starts another source."}]}, + {"id": "C16.null-inherits", "rule": "null provider inherits operation defaults", "scenarios": ["null provider inherits operation defaults"], "generated": [{"profile": "runtime-boundaries", "witness": "null-provider-inherits-serving-and-sharing"}], "vectors": [], "contracts": ["C16"], "quintReplays": ["runtime-boundaries/nullProviderInheritsConfiguredServingAndDefaultSharingTest"], "models": [ + {"ref": "formal/dialcache-runtime-policy.qnt:nullProviderRetainsEveryBaselineLeafTest", "scope": "The omitted overlay representation preserves every baseline leaf. Literal null-to-omission normalization is exercised by the portable fixed scenario, not this abstract valid-policy model."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:nullProviderInheritsConfiguredServingAndDefaultSharingTest", "scope": "Actual null provider response preserves configured remoteTTL/full omitted ramp/default sharing; existing runtime-policy leafwise invariant covers other leaves."}]}, + {"id": "C16.sparse-leaves", "rule": "Runtime overlays replace only supplied leaves", "scenarios": ["sparse TTL overlay retains the remote TTL and replaces local insertion TTL", "sparse ramp overlay preserves the disabled sibling layer"], "generated": [{"profile": "policy", "witness": "sparse-empty-provider-inherits-local-hit"}, {"profile": "policy", "witness": "sparse-empty-provider-inherits-remote-hit"}], "vectors": [], "contracts": ["C16"], "provenance": ["test/dialcache-config-ramp.test.ts:inherits defaults per field when the runtime config is sparse"], "evidenceNotes": ["C16.sparse-leaves uses runtimeOverlayIsLeafWise, which calls the same resolve helper as capture; retain its snapshot-consistency claim without presenting it as an independent leaf-merge derivation."], "models": [ + {"ref": "formal/dialcache-runtime-policy.qnt:runtimeOverlayIsLeafWise", "scope": "Independently checks all eight captured leaves against runtime/base precedence without calling the transition resolve helper. This valid-overlay abstraction does not classify malformed host values."}, + {"ref": "formal/dialcache-runtime-policy.qnt:sparseLocalOverridePreservesRemoteAndFeaturesTest", "scope": "Runtime overlays replace only supplied leaves. This check covers the bounded model clause: sparseLocalOverridePreservesRemoteAndFeaturesTest. Host representations and other feature combinations retain separate fixed/native evidence."}]}, + {"id": "C16.ttl-implies-ramp", "rule": "A configured TTL with omitted ramp enables the layer fully", "scenarios": ["runtime TTLs without ramps enable both serving layers"], "generated": [{"profile": "runtime-boundaries", "witness": "runtime-ttl-implies-ramp:local"}, {"profile": "runtime-boundaries", "witness": "runtime-ttl-implies-ramp:remote"}], "vectors": [], "contracts": ["C16"], "quintReplays": ["runtime-boundaries/runtimeLocalTtlWithoutRampActivatesLayerTest", "runtime-boundaries/runtimeRemoteTtlWithoutRampActivatesLayerTest", "runtime-boundaries/runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", "runtime-boundaries/runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest"], "models": [ + {"ref": "formal/dialcache-runtime-policy.qnt:configuredTtlImpliesDefaultFullRamp", "scope": "When both runtime and static ramps are omitted and resolved TTL is positive, independently require a full ramp."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlWithoutRampActivatesLayerTest", "scope": "A configured TTL with omitted ramp enables the layer fully. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeRemoteTtlWithoutRampActivatesLayerTest", "scope": "A configured TTL with omitted ramp enables the layer fully. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", "scope": "A runtime local TTL adds a full-ramp local layer to an initially remote-only operation, capturing source publication into both layers; a source completion while a later policy reply is held is retained and served locally without another Redis read."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlEnablesSharingWithoutRemoteTtlTest", "scope": "Runtime local TTL activates local caching and default sharing even when the remote client exists but no remote TTL is configured."}], "definitions": [ + {"ref": "formal/kernel/runtime-policy.qnt:resolve", "scope": "A runtime local TTL (code 18, or the ramp-up code 20 over a disabled baseline) configures the local layer at the default full ramp for any baseline, and a runtime remote TTL (code 19) configures the remote layer only where a Redis client exists; a disabled baseline stays disabled until code 20."}, + {"ref": "formal/kernel/serving.qnt:release", "scope": "Sharing (a request or process flight) precedes the local and remote reads; a remote hit warms only a local layer the resolution enables for this release."}]}, + {"id": "C17.library-defaults", "rule": "Request memoization, recovery, and shadow default off; coalescing defaults on", "scenarios": ["library defaults disable request memo recovery and shadow while sharing active work"], "generated": [{"profile": "runtime-boundaries", "witness": "default-ramp-and-sharing"}], "vectors": [], "contracts": ["C17"], "quintReplays": ["runtime-boundaries/omittedRampAndSharingUseLibraryDefaultsTest"], "models": [ + {"ref": "formal/dialcache-runtime-policy.qnt:featureLibraryDefaults", "scope": "When both layers of policy omit each feature, independently require request/recovery/shadow off and coalescing on."}, + {"ref": "formal/dialcache-runtime-policy.qnt:omittedPolicyUsesLibraryDefaultsTest", "scope": "Request memoization, recovery, and shadow default off; coalescing defaults on. This check covers the bounded model clause: omittedPolicyUsesLibraryDefaultsTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:omittedRampAndSharingUseLibraryDefaultsTest", "scope": "Request memoization, recovery, and shadow default off; coalescing defaults on. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}]}, + {"id": "C17.disable-keeps-entry", "rule": "runtime ramp changes preserve existing entries", "scenarios": ["runtime ramp changes preserve existing entries"], "generated": [{"profile": "policy", "witness": "serving-disabled-preserves-existing-local"}], "vectors": [], "contracts": ["C17"], "quintReplays": ["policy/disablingServingKeepsExistingLocalForReenablementTest"], "models": [ + {"ref": "formal/dialcache-runtime-policy.qnt:disablingPolicyDoesNotEvictInsertedEntriesTest", "scope": "runtime ramp changes preserve existing entries. This check covers the bounded model clause: disablingPolicyDoesNotEvictInsertedEntriesTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-policy-conformance.qnt:disablingServingKeepsExistingLocalForReenablementTest", "scope": "runtime ramp changes preserve existing entries. This check covers the bounded model clause: disablingServingKeepsExistingLocalForReenablementTest. Host representations and other feature combinations retain separate fixed/native evidence."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:policy", "scope": "Changing the overlay does not remove storage; a disabled layer skips serving and can serve its remaining-valid entry after reenable."}, + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "Changing the overlay does not remove storage; a disabled layer skips serving and can serve its remaining-valid entry after reenable."}]}, + {"id": "C18.captured-insertion", "rule": "pending invocation keeps insertion TTL snapshot", "scenarios": ["pending invocation keeps insertion TTL snapshot"], "generated": [{"profile": "policy", "witness": "publication-after-policy-change"}], "vectors": [], "contracts": ["C18"], "models": [ + {"ref": "formal/dialcache-runtime-policy.qnt:existingLocalEntryKeepsInsertionTtl", "scope": "An invocation captures its TTL before later overlay changes; the installed local TTL remains the insertion value."}, + {"ref": "formal/dialcache-runtime-policy.qnt:policyChangeDuringInvocationTest", "scope": "An invocation captures its TTL before later overlay changes; the installed local TTL remains the insertion value."}]}, + {"id": "C18.captured-shadow-fill", "rule": "dark fill preserves accepted runtime TTL and retention after policy changes", "scenarios": ["dark fill preserves accepted runtime TTL and retention after policy changes"], "generated": [{"profile": "shadow-layers", "witness": "dark-fill-policy-snapshot-controls-physical-expiry"}], "vectors": [], "contracts": ["C18"], "quintReplays": ["shadow-layers/darkFillRetainsPolicyThroughSerializationTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:darkFillRetainsPolicyThroughSerializationTest", "scope": "The job captures fresh60s/retention120s. Runtime policy changes to fresh120s/retention180s while its caller source and then serialization are held; dispatched write TTL remains120000ms. At that physical expiry a serving probe under the newer logical policy rejects its source and reports recovery miss, proving the old value was not retained for180s."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:admitJobs", "scope": "The job captures fresh60s/retention120s. Runtime policy changes to fresh120s/retention180s while its caller source and then serialization are held; dispatched write TTL remains120000ms. At that physical expiry a serving probe under the newer logical policy rejects its source and reports recovery miss, proving the old value was not retained for180s."}, + {"ref": "formal/kernel/remote-writes.qnt:holdDump", "scope": "The job captures fresh60s/retention120s. Runtime policy changes to fresh120s/retention180s while its caller source and then serialization are held; dispatched write TTL remains120000ms. At that physical expiry a serving probe under the newer logical policy rejects its source and reports recovery miss, proving the old value was not retained for180s."}, + {"ref": "formal/kernel/shadow.qnt:releaseDump", "scope": "The job captures fresh60s/retention120s. Runtime policy changes to fresh120s/retention180s while its caller source and then serialization are held; dispatched write TTL remains120000ms. At that physical expiry a serving probe under the newer logical policy rejects its source and reports recovery miss, proving the old value was not retained for180s."}, + {"ref": "formal/kernel/shadow.qnt:releaseWrite", "scope": "The job captures fresh60s/retention120s. Runtime policy changes to fresh120s/retention180s while its caller source and then serialization are held; dispatched write TTL remains120000ms. At that physical expiry a serving probe under the newer logical policy rejects its source and reports recovery miss, proving the old value was not retained for180s."}]}, + {"id": "C18.existing-leader", "rule": "runtime reenabling joins the registered flight before a newer local hit", "scenarios": ["runtime reenabling joins the registered flight before a newer local hit"], "generated": [{"profile": "policy", "witness": "join-after-policy-change"}], "vectors": [], "contracts": ["C18"], "quintReplays": ["policy/independentCompletionKeepsRegisteredLeaderTest", "policy/independentFailureKeepsRegisteredLeaderTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:sharedSourcesKeepRegistration", "scope": "Independent completion/failure cannot remove the shared leader registration; a reenabled caller joins that leader before a newer local hit."}, + {"ref": "formal/dialcache-policy-conformance.qnt:independentCompletionKeepsRegisteredLeaderTest", "scope": "Independent completion/failure cannot remove the shared leader registration; a reenabled caller joins that leader before a newer local hit."}, + {"ref": "formal/dialcache-policy-conformance.qnt:independentFailureKeepsRegisteredLeaderTest", "scope": "Independent completion/failure cannot remove the shared leader registration; a reenabled caller joins that leader before a newer local hit."}]}, + {"id": "C19.memo-bypass", "rule": "request policy bypass retains memo for later reenabling", "scenarios": ["request policy bypass retains memo for later reenabling"], "generated": [{"profile": "scope", "witness": "memo-after-policy-bypass"}], "vectors": [], "contracts": ["C19"], "quintReplays": ["runtime-boundaries/falseRequestLeafPreservesMemoForReenablementTest", "scope/bypassedRequestFailureIsAttributedToLocalTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:falseRequestLeafPreservesMemoForReenablementTest", "scope": "request policy bypass retains memo for later reenabling. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-scope-conformance.qnt:bypassedRequestFailureIsAttributedToLocalTest", "scope": "A call whose reply disables the request layer starts its source inside the cache (its scope is open) but memoizes nothing: its failure is attributed to the shared layers' fallback and both memo rows stay untouched."}], "definitions": [ + {"ref": "formal/kernel/serving.qnt:releaseRequest", "scope": "POLICY_NO_REQUEST resolves to no request layer, so the release decides with no memo slot: it neither reads nor writes the row, joins no request flight and registers none, and the stored memo stays intact for a later call whose reply re-enables request caching."}, + {"ref": "formal/dialcache-scope-conformance.qnt:policy", "scope": "POLICY_NO_REQUEST uses no memo slot; the policy transition leaves stored memo intact for later reenable."}]}, + {"id": "C20.provider-failure", "rule": "provider failure fails open without caching", "scenarios": ["provider failure fails open without caching"], "generated": [{"profile": "policy", "witness": "provider-failure-preserves-existing-local"}], "vectors": [], "contracts": ["C20"], "quintReplays": ["policy/providerFailureBypassesAndPreservesExistingLocalTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:providerFailureBypassesAndPreservesExistingLocalTest", "scope": "provider failure fails open without caching. This check covers the bounded model clause: providerFailureBypassesAndPreservesExistingLocalTest. Host representations and other feature combinations retain separate fixed/native evidence."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:providerFault", "scope": "Provider failure makes both serving TTLs zero and prevents shared registration/publication. It does not model every provider failure representation."}, + {"ref": "formal/kernel/policy-overlay.qnt:localTtl", "scope": "Provider failure makes both serving TTLs zero and prevents shared registration/publication. It does not model every provider failure representation."}, + {"ref": "formal/kernel/policy-overlay.qnt:remoteTtl", "scope": "Provider failure makes both serving TTLs zero and prevents shared registration/publication. It does not model every provider failure representation."}, + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "Provider failure makes both serving TTLs zero and prevents shared registration/publication. It does not model every provider failure representation."}]}, + {"id": "C20.invalid-invocation-policy", "rule": "invalid runtime remoteReadTimeoutMs bypasses all cache layers", "scenarios": ["invalid runtime remoteReadTimeoutMs bypasses all cache layers"], "generated": [{"profile": "policy", "witness": "invalid-read-budget-bypasses-caching"}], "vectors": [], "contracts": ["C20"], "quintReplays": ["policy/invalidReadBudgetBypassesAllCachingTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:invalidReadBudgetBypassesAllCachingTest", "scope": "An invalid read budget causes two separate sources and no reads, local storage, or remote publication."}]}, + {"id": "C21.invalid-layer", "rule": "invalid local TTL leaves valid remote serving available", "scenarios": ["invalid local TTL leaves valid remote serving available"], "generated": [{"profile": "policy", "witness": "invalid-local-ttl-preserves-remote-hit"}], "vectors": [], "contracts": ["C21"], "quintReplays": ["policy/invalidLocalTtlStillServesFreshRemoteTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:invalidLocalTtlStillServesFreshRemoteTest", "scope": "invalid local TTL leaves valid remote serving available. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/kernel/policy-overlay.qnt:localTtl", "scope": "An invalid local TTL selects zero only for the local layer, preserving valid remote traversal."}, + {"ref": "formal/kernel/policy-overlay.qnt:remoteTtl", "scope": "An invalid local TTL selects zero only for the local layer, preserving valid remote traversal."}, + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "An invalid local TTL selects zero only for the local layer, preserving valid remote traversal."}]}, + {"id": "C21.invalid-recovery", "rule": "invalid optional staleOnErrorMaxAgeSec preserves fresh remote serving", "scenarios": ["invalid optional staleOnErrorMaxAgeSec preserves fresh remote serving"], "generated": [{"profile": "policy", "witness": "invalid-recovery-retention:23"}, {"profile": "policy", "witness": "invalid-recovery-retention:24"}], "vectors": [], "contracts": ["C21"], "quintReplays": ["policy/recoveryAgeEqualToFreshTtlStillServesFreshRemoteTest", "policy/negativeRecoveryAgeStillServesFreshRemoteTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:recoveryAgeEqualToFreshTtlStillServesFreshRemoteTest", "scope": "invalid optional staleOnErrorMaxAgeSec preserves fresh remote serving. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-policy-conformance.qnt:negativeRecoveryAgeStillServesFreshRemoteTest", "scope": "invalid optional staleOnErrorMaxAgeSec preserves fresh remote serving. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/kernel/policy-overlay.qnt:retention", "scope": "Invalid optional recovery selects ordinary retention but leaves normal remote TTL/hit traversal active. The existing retention regression does not itself probe a later fresh hit."}, + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "Invalid optional recovery selects ordinary retention but leaves normal remote TTL/hit traversal active. The existing retention regression does not itself probe a later fresh hit."}]}, + {"id": "C21.invalid-shadow", "rule": "invalid optional shadow preserves fresh remote serving", "scenarios": ["invalid optional shadow preserves fresh remote serving"], "generated": [{"profile": "policy", "witness": "invalid-shadow-preserves-serving"}], "vectors": [], "contracts": ["C21"], "quintReplays": ["policy/invalidShadowPreservesNormalServingTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:invalidShadowPreservesNormalServingTest", "scope": "Invalid shadow ramp leaves normal source publication and subsequent remote serving available, with no shadow outcome."}]}, + {"id": "C21.invalid-dark-shadow", "rule": "invalid optional shadow disables dark reads while retaining local publication", "scenarios": ["invalid optional shadow disables dark reads while retaining local publication"], "generated": [{"profile": "shadow-layers", "witness": "invalid-dark-shadow-preserves-local-source-publication"}], "vectors": [], "contracts": ["C21"], "quintReplays": ["shadow-layers/invalidShadowKeepsLocalPublicationTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:invalidShadowKeepsLocalPublicationTest", "scope": "Shadow ramp101 disables optional dark work while valid local policy remains active; source success is reusable locally by a later serving-enabled invocation, with zero Redis reads/writes or diagnostic jobs."}], "definitions": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:shadowFor", "scope": "Shadow ramp101 disables optional dark work while valid local policy remains active; source success is reusable locally by a later serving-enabled invocation, with zero Redis reads/writes or diagnostic jobs."}, + {"ref": "formal/kernel/shadow.qnt:admitJobs", "scope": "Shadow ramp101 disables optional dark work while valid local policy remains active; source success is reusable locally by a later serving-enabled invocation, with zero Redis reads/writes or diagnostic jobs."}, + {"ref": "formal/kernel/serving.qnt:publish", "scope": "Shadow ramp101 disables optional dark work while valid local policy remains active; source success is reusable locally by a later serving-enabled invocation, with zero Redis reads/writes or diagnostic jobs."}]}, + {"id": "C22.freshness-boundary", "rule": "remote exact fresh TTL expires", "scenarios": ["remote exact fresh TTL expires"], "generated": [{"profile": "recovery", "witness": "fresh-zero-age-skips-source"}, {"profile": "recovery", "witness": "last-fresh-age-skips-source"}, {"profile": "policy", "witness": "remote-exact-fresh-boundary-miss"}], "vectors": [], "contracts": ["C22"], "evidenceNotes": ["Zero-age evidence also closes fresh-side boundary; exact F continues to use independent tests."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "quintReplays": ["policy/exactRemoteFreshBoundaryStartsSourceTest", "recovery/lastFreshReadDoesNotInvokeSourceTest", "policy/remoteHitBeforeBoundaryDoesNotRenewFreshnessTest"], "models": [ + {"ref": "formal/dialcache-stale-recovery.qnt:lastFreshAgeSkipsSourceTest", "scope": "Zero-age evidence also closes fresh-side boundary; exact F continues to use independent tests."}, + {"ref": "formal/dialcache-recovery-conformance.qnt:lastFreshReadDoesNotInvokeSourceTest", "scope": "remote exact fresh TTL expires"}, + {"ref": "formal/dialcache-policy-conformance.qnt:exactRemoteFreshBoundaryStartsSourceTest", "scope": "remote exact fresh TTL expires. This check covers the bounded model clause: exactRemoteFreshBoundaryStartsSourceTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-rule-checks.qnt:freshBoundaryIsExclusive", "scope": "Finite symbolic timestamp and TTL domains independently characterize nonnegative fresh age strictly below the fresh ceiling."}, + {"ref": "formal/dialcache-policy-conformance.qnt:remoteHitsRespectAcquiredFreshness", "scope": "For each policy-profile read receipt, a remote hit requires eligible physically retained storage and nonnegative acquired wall-clock age strictly below the captured fresh TTL. The assertion states the age inequalities independently of the transition helper; it does not cover tracked frame decoding or shadow admission."}, + {"ref": "formal/dialcache-policy-conformance.qnt:remoteHitBeforeBoundaryDoesNotRenewFreshnessTest", "scope": "A public untracked remote read hits at age 500 ms, then the same retained frame misses at exact age 1000 ms without renewal from the first hit. One source refills with a distinct value and a later read reuses it; local caching is disabled."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "Remote hit requires logical age strictly below captured remote TTL and physical expiry strictly after elapsed now."}]}, + {"id": "C22.physical-vs-logical", "rule": "runtime changes preserve in-flight physical TTL and affect later freshness", "scenarios": ["runtime changes preserve in-flight physical TTL and affect later freshness"], "generated": [{"profile": "policy", "witness": "increased-fresh-ttl-reuses-retained-frame"}, {"profile": "policy", "witness": "increased-fresh-ttl-cannot-resurrect-expired-storage"}], "vectors": [], "contracts": ["C22"], "quintReplays": ["policy/increasedFreshTtlCanReusePhysicallyRetainedValueTest", "policy/increasedFreshTtlCannotResurrectExpiredStorageTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:increasedFreshTtlCanReusePhysicallyRetainedValueTest", "scope": "runtime changes preserve in-flight physical TTL and affect later freshness. This check covers the bounded model clause: increasedFreshTtlCanReusePhysicallyRetainedValueTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-policy-conformance.qnt:increasedFreshTtlCannotResurrectExpiredStorageTest", "scope": "runtime changes preserve in-flight physical TTL and affect later freshness. This check covers the bounded model clause: increasedFreshTtlCannotResurrectExpiredStorageTest. Host representations and other feature combinations retain separate fixed/native evidence."}], "definitions": [ + {"ref": "formal/dialcache-policy-conformance.qnt:releasePolicy", "scope": "Invocation captures publication TTL/retention; later calls evaluate current logical freshness without rewriting existing physical expiry."}, + {"ref": "formal/kernel/serving.qnt:settle", "scope": "Invocation captures publication TTL/retention; later calls evaluate current logical freshness without rewriting existing physical expiry."}]}, + {"id": "C23.library-read-budget", "rule": "library read deadline precedence", "scenarios": ["library read deadline precedence"], "generated": [{"profile": "effects", "witness": "initial-budget:0"}], "vectors": [], "contracts": ["C23"], "quintReplays": ["effects/libraryReadBudgetIsFiftyMillisecondsTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:libraryReadBudgetIsFiftyMillisecondsTest", "scope": "Default read remains pending before 50ms and starts a fresh 10ms source budget at exactly 50ms."}], "definitions": [ + {"ref": "formal/dialcache-effects-conformance.qnt:initial", "scope": "Omitted read budgets preserve library50: no source at40, timeout starts source at50."}]}, + {"id": "C23.instance-read-budget", "rule": "instance read deadline precedence", "scenarios": ["instance read deadline precedence"], "generated": [{"profile": "effects", "witness": "initial-budget:1"}], "vectors": [], "contracts": ["C23"], "quintReplays": ["effects/instanceReadBudgetOverridesLibraryTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:instanceReadBudgetOverridesLibraryTest", "scope": "Initial instance read budget20 overrides library50; no source at10, read timeout and full source starts at20, source value survives without refill."}], "definitions": [ + {"ref": "formal/dialcache-effects-conformance.qnt:initial", "scope": "Finite fixture modes provide distinct instance/operation/runtime accepted budgets; beginCall captures the read budget. The binding supplies the corresponding precedence inputs; this is not a general policy resolver proof."}, + {"ref": "formal/dialcache-effects-conformance.qnt:beginCall", "scope": "Finite fixture modes provide distinct instance/operation/runtime accepted budgets; beginCall captures the read budget. The binding supplies the corresponding precedence inputs; this is not a general policy resolver proof."}]}, + {"id": "C23.operation-read-budget", "rule": "operation read deadline precedence", "scenarios": ["operation read deadline precedence"], "generated": [{"profile": "effects", "witness": "initial-budget:2"}], "vectors": [], "contracts": ["C23"], "quintReplays": ["effects/operationReadBudgetOverridesInstanceTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:operationReadBudgetOverridesInstanceTest", "scope": "Initial operation read budget10 overrides instance20; read timeout starts source at10 and source value survives without refill."}], "definitions": [ + {"ref": "formal/dialcache-effects-conformance.qnt:initial", "scope": "Finite fixture modes provide distinct instance/operation/runtime accepted budgets; beginCall captures the read budget. The binding supplies the corresponding precedence inputs; this is not a general policy resolver proof."}, + {"ref": "formal/dialcache-effects-conformance.qnt:beginCall", "scope": "Finite fixture modes provide distinct instance/operation/runtime accepted budgets; beginCall captures the read budget. The binding supplies the corresponding precedence inputs; this is not a general policy resolver proof."}]}, + {"id": "C23.runtime-read-budget", "rule": "runtime read deadline precedence", "scenarios": ["runtime read deadline precedence"], "generated": [{"profile": "effects", "witness": "initial-budget:3"}], "vectors": [], "contracts": ["C23"], "quintReplays": ["effects/runtimeReadBudgetOverridesOperationTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:runtimeReadBudgetOverridesOperationTest", "scope": "Initial runtime read budget30 overrides operation10 and instance20; no source at20, timeout starts source at30."}], "definitions": [ + {"ref": "formal/dialcache-effects-conformance.qnt:initial", "scope": "Finite fixture modes provide distinct instance/operation/runtime accepted budgets; beginCall captures the read budget. The binding supplies the corresponding precedence inputs; this is not a general policy resolver proof."}, + {"ref": "formal/dialcache-effects-conformance.qnt:beginCall", "scope": "Finite fixture modes provide distinct instance/operation/runtime accepted budgets; beginCall captures the read budget. The binding supplies the corresponding precedence inputs; this is not a general policy resolver proof."}]}, + {"id": "C23.source-start", "rule": "fallback deadline starts after remote read completes", "scenarios": ["fallback deadline starts after remote read completes"], "generated": [{"profile": "effects", "witness": "read-timeout-starts-source"}], "vectors": [], "contracts": ["C23"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:readTimeoutStartsIndependentSourceDeadlineTest", "scope": "Two shared callers consume one read timeout, then get the full source budget and no remote refill."}]}, + {"id": "C23.default-source-budget", "rule": "library source deadline defaults to sixty seconds", "scenarios": ["library source deadline defaults to sixty seconds"], "generated": [{"profile": "source-budgets", "witness": "default-source-budget-expires-at-sixty-seconds"}], "vectors": [], "contracts": ["C23"], "quintReplays": ["source-budgets/defaultSourceBudgetExpiresAtSixtySecondsTest"], "models": [ + {"ref": "formal/dialcache-source-budgets-conformance.qnt:defaultSourceBudgetExpiresAtSixtySecondsTest", "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim."}]}, + {"id": "C24.follower-read", "rule": "late follower inherits remaining read deadline", "scenarios": ["late follower inherits remaining read deadline"], "generated": [{"profile": "effects", "witness": "follower-keeps-read-budget"}], "vectors": [], "contracts": ["C24"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:followerKeepsAcceptedReadBudgetTest", "scope": "A later runtime budget change and follower do not replace the leader read's accepted 30ms budget."}]}, + {"id": "C24.follower-source", "rule": "late follower inherits remaining fallback deadline", "scenarios": ["late follower inherits remaining fallback deadline"], "generated": [{"profile": "source-budgets", "witness": "late-follower-keeps-leaders-remaining-source-budget"}], "vectors": [], "contracts": ["C24"], "quintReplays": ["source-budgets/lateFollowerUsesLeadersRemainingBudgetTest"], "models": [ + {"ref": "formal/dialcache-source-budgets-conformance.qnt:followersKeepTheirOwnersOutcome", "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim."}, + {"ref": "formal/dialcache-source-budgets-conformance.qnt:lateFollowerUsesLeadersRemainingBudgetTest", "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim."}, + {"ref": "formal/dialcache-source-connection.qnt:sourceOwnersMatchContract", "scope": "Each source-budgets source is owned by the call selected at beginCall or policy release, as reconstructed from the preceding public event rather than source ownership fields."}, + {"ref": "formal/dialcache-source-connection.qnt:followerKeepsAcquiredOwner", "scope": "A policy release while a registered source exists maps the released caller to that previously registered owner, preserving the leader execution."}], "definitions": [ + {"ref": "formal/kernel/serving.qnt:decide", "scope": "The traversal decision joins the pending process flight (JoinsProcess) instead of starting a source, so the follower shares the leader's source and no second deadline is registered for it."}]}, + {"id": "C24.independent-reads", "rule": "uncoalesced remote reads own independent remaining budgets", "scenarios": ["uncoalesced remote reads own independent remaining budgets"], "generated": [{"profile": "independent", "witness": "independent-read-budgets"}, {"profile": "independent", "witness": "one-read-times-out-before-another"}], "vectors": [], "contracts": ["C24"], "models": [ + {"ref": "formal/dialcache-independent-conformance.qnt:independentReadDeadlinesStartSeparateSourcesTest", "scope": "Two uncoalesced reads started 1ms apart expire separately and start separate sources."}]}, + {"id": "C25.late-source-rejected", "rule": "late resolve loses to deadline before timer delivery", "scenarios": ["late resolve loses to deadline before timer delivery"], "generated": [{"profile": "effects", "witness": "late-resolve"}], "vectors": [], "contracts": ["C25"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:lateSourceResultIsADeadlineErrorTest", "scope": "A resolve arriving after its deadline was reached undelivered completes the caller with a deadline error, holds no dump and reports one fallback error with the 10 ms duration."}, + {"ref": "formal/dialcache-effects-conformance.qnt:acceptedSourcesSettledBeforeTheirDeadline", "scope": "A resolve that accepts reports a fallback duration below the source budget: acceptance is strictly before the deadline, one step over the input and the latest event."}, + {"ref": "formal/dialcache-rule-checks.qnt:sourceBoundaryIsExclusive", "scope": "Finite symbolic elapsed-time/budget domains independently characterize finite acceptance strictly before the deadline and the negative unbounded sentinel; monotonic source ordering is checked by connection records."}, + {"ref": "formal/dialcache-source-connection.qnt:acceptedSourcesMatchContract", "scope": "Successful values in the source-budgets profile satisfy the separately captured source owner, start and budget, including the outside-call unbounded sentinel."}]}, + {"id": "C25.late-rejection", "rule": "late reject loses to deadline before timer delivery", "scenarios": ["late reject loses to deadline before timer delivery"], "generated": [{"profile": "effects", "witness": "late-reject"}], "vectors": [], "contracts": ["C25"], "quintReplays": ["effects/lateSourceResultIsADeadlineErrorTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:lateSourceResultIsADeadlineErrorTest", "scope": "A source result arriving after its deadline was reached undelivered is a deadline error: DEADLINE_ERROR on the caller, no dump, one fallback error and a 10 ms fallback duration. deadlines::arrival is one arm for a resolve and a reject; the reject side is pinned at the read by lateReadRejectionUsesDeadlineCategoryTest and by the late-reject witness."}]}, + {"id": "C25.abandoned-overlap", "rule": "timeout releases flight while old loader continues", "scenarios": ["timeout releases flight while old loader continues"], "generated": [{"profile": "effects", "witness": "abandoned-overlap"}, {"profile": "source-budgets", "witness": "abandoned-source-cannot-replace-successful-retry"}], "vectors": [], "contracts": ["C25"], "quintReplays": ["source-budgets/abandonedSourceCannotReplaceSuccessfulRetryTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:timedOutLoaderOverlapsNewFlightTest", "scope": "A timeout caller and pending new caller coexist with one abandoned and one registered source."}, + {"ref": "formal/dialcache-source-budgets-conformance.qnt:abandonedSourceCannotReplaceSuccessfulRetryTest", "scope": "First source times out, retry source2 succeeds and publishes, then abandoned source1 settles. Both original timeout and retry result remain unchanged and a later local probe returns2 without a third source."}]}, + {"id": "C26.unbounded-source", "rule": "disabled fallback deadline accepts later source settlement", "scenarios": ["disabled fallback deadline accepts later source settlement"], "generated": [{"profile": "source-budgets", "witness": "unbounded-enabled-source-publishes-after-sixty-seconds"}], "vectors": [], "contracts": ["C26"], "quintReplays": ["source-budgets/unboundedEnabledSourcePublishesAfterSixtySecondsTest"], "models": [ + {"ref": "formal/dialcache-source-budgets-conformance.qnt:unboundedEnabledSourcePublishesAfterSixtySecondsTest", "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim."}]}, + {"id": "C26.publication-ownership", "rule": "accepted serialization and write outlive fallback deadline", "scenarios": ["accepted serialization and write outlive fallback deadline"], "generated": [{"profile": "effects", "witness": "serialize-outlives-deadline"}, {"profile": "effects", "witness": "publication-after-deadline"}], "vectors": [], "contracts": ["C26"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:acceptedSourcesSettledBeforeTheirDeadline", "scope": "Every accepted result was settled strictly before its deadline, so a held dump or write always belongs to a source accepted in time; the publication then outlives the deadline."}, + {"ref": "formal/dialcache-effects-conformance.qnt:writeRequiresAcceptedSource", "scope": "Accepted serialization and dispatched write may remain pending beyond source deadline, then return the source value."}, + {"ref": "formal/dialcache-effects-conformance.qnt:acceptedWriteOutlivesDeadlineTest", "scope": "Accepted serialization and dispatched write may remain pending beyond source deadline, then return the source value."}]}, + {"id": "C26.decode-ownership", "rule": "fresh decoding is outside the source deadline", "scenarios": ["fresh decoding is outside the source deadline"], "generated": [{"profile": "effects", "witness": "decode-outlives-deadline"}], "vectors": [], "contracts": ["C26"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest", "scope": "Accepted fresh decode survives later invalidation and elapsed read/source-sized budget without starting source or cancelling the acquired read."}]}, + {"id": "C27.key-failure", "rule": "key construction failure runs source with its enabled deadline", "scenarios": ["key construction failure runs source with its enabled deadline"], "generated": [{"profile": "source-budgets", "witness": "invalid-enabled-key-preserves-source-deadline"}], "vectors": [], "contracts": ["C27"], "quintReplays": ["source-budgets/invalidKeyStillKeepsEnabledSourceDeadlineTest"], "models": [ + {"ref": "formal/dialcache-source-budgets-conformance.qnt:onlyEnabledValidCallsResolvePolicy", "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim."}, + {"ref": "formal/dialcache-source-budgets-conformance.qnt:invalidKeyStillKeepsEnabledSourceDeadlineTest", "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim."}]}, + {"id": "C27.dump-failure", "rule": "dump failure returns source and does not retain value", "scenarios": ["dump failure returns source and does not retain value"], "generated": [{"profile": "effects", "witness": "dump-failure-preserves-value"}], "vectors": [], "contracts": ["C27"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:dumpFailurePreservesSourceTest", "scope": "Serialization failure returns source value and dispatches no write."}]}, + {"id": "C27.write-failure", "rule": "write failure returns source and does not retain value", "scenarios": ["write failure returns source and does not retain value"], "generated": [{"profile": "effects", "witness": "write-failure-preserves-value"}], "vectors": [], "contracts": ["C27"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:writeFailurePreservesSourceTest", "scope": "Failed write preserves the source value and does not commit remote storage in this adapter fixture."}]}, + {"id": "C27.local-read-failure", "rule": "Failed local reads skip reuse and local publication", "scenarios": [], "generated": [{"profile": "local-failure", "witness": "failed-local-read-preserves-old-value-and-memoizes-remote"}, {"profile": "local-failure", "witness": "failed-local-read-suppresses-later-source-publication"}], "vectors": [], "contracts": ["C27"], "quintReplays": ["local-failure/localReadFailureFallsThroughAndPreservesOldLocalTest", "local-failure/localReadFailureSkipsSourcePublicationButMemoizesTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:failedLocalReadSkipsReuseAndPublication", "scope": "A local read failure forbids local reuse and publication; local failures are modeled as injected environment health, without a real public fault-injection replay."}, + {"ref": "formal/dialcache-core.qnt:localReadFailureContinuesToRemoteTest", "scope": "Failed local reads skip reuse and local publication. This check covers the bounded model clause: localReadFailureContinuesToRemoteTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-core.qnt:localReadFailureSuppressesSourcePublicationTest", "scope": "Failed local reads skip reuse and local publication. This check covers the bounded model clause: localReadFailureSuppressesSourcePublicationTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-local-failure-conformance.qnt:faultedReadNeverUsesLocal", "scope": "One-step statement over the library records: a call admitted under an armed fault is served from its scope's memo or from the remote frame, or owns a source whose captured local TTL is 0, so no later settlement of that source publishes locally even after the fault clears. The no-warm half of the rule (a faulted remote hit leaves local storage as it was) is a written equivalence pinned by localReadFailureFallsThroughAndPreservesOldLocalTest, not by this invariant. Real local storage remains behind a native exception/clock-failure injection seam; no elapsed-time or concurrent-source claim."}, + {"ref": "formal/dialcache-local-failure-conformance.qnt:localReadFailureFallsThroughAndPreservesOldLocalTest", "scope": "Real local storage remains behind a native exception/clock-failure injection seam. Distinct request and transient public probes check the old local value, accepted caller result and request-only memo; read failure remains publication-ineligible after the injected fault is cleared. No elapsed-time or concurrent-source claim."}, + {"ref": "formal/dialcache-local-failure-conformance.qnt:localReadFailureSkipsSourcePublicationButMemoizesTest", "scope": "Real local storage remains behind a native exception/clock-failure injection seam. Distinct request and transient public probes check the old local value, accepted caller result and request-only memo; read failure remains publication-ineligible after the injected fault is cleared. No elapsed-time or concurrent-source claim."}], "definitions": [ + {"ref": "formal/kernel/local-faults.qnt:begin", "scope": "Admission under an armed fault judges the layered release with the fault as its argument (serving.judgeReleaseUnder) and applies it (serving.releaseJudged): the traversal reads nothing from local storage, a remote hit warms nothing and the source it starts captures no local TTL (publication-ineligible whatever the switch says at settlement), while the layers and the coalescing stay as the reply resolved them."}]}, + {"id": "C27.local-write-failure", "rule": "A failed local write preserves the accepted source result", "scenarios": [], "generated": [{"profile": "local-failure", "witness": "failed-local-write-keeps-result-and-request-memo"}], "vectors": [], "contracts": ["C27"], "quintReplays": ["local-failure/localWriteFailureKeepsSourceAndRequestMemoTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:failedLocalWritePreservesAcceptedResult", "scope": "A local write failure preserves the accepted result; local failures are modeled as injected environment health, without a real public fault-injection replay."}, + {"ref": "formal/dialcache-core.qnt:localWriteFailurePreservesSourceAndMemoTest", "scope": "A failed local write preserves the accepted source result. This check covers the bounded model clause: localWriteFailurePreservesSourceAndMemoTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-core.qnt:localWriteFailurePreservesRemoteHitTest", "scope": "A failed local write preserves the accepted source result. This check covers the bounded model clause: localWriteFailurePreservesRemoteHitTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-local-failure-conformance.qnt:faultedSettlementPublishesNothingLocally", "scope": "One-step statement over the library records: the source a settlement names carries no local TTL under an armed fault, so the publication warms nothing while the callers receive the result and the request memo and remote refill proceed. Real local storage remains behind a native exception/clock-failure injection seam; no elapsed-time or concurrent-source claim."}, + {"ref": "formal/dialcache-local-failure-conformance.qnt:callsKeepSourceOutcome", "scope": "Every owned caller's value is its source's recorded result, so a withdrawn local write never changes an accepted caller result; the surviving request memo and the remote refill are asserted by the regression. Real local storage remains behind a native exception/clock-failure injection seam; no elapsed-time or concurrent-source claim."}, + {"ref": "formal/dialcache-local-failure-conformance.qnt:localWriteFailureKeepsSourceAndRequestMemoTest", "scope": "Real local storage remains behind a native exception/clock-failure injection seam. Distinct request and transient public probes check the old local value, accepted caller result and request-only memo; read failure remains publication-ineligible after the injected fault is cleared. No elapsed-time or concurrent-source claim."}], "definitions": [ + {"ref": "formal/kernel/local-faults.qnt:settle", "scope": "Settlement under an armed fault withdraws the source's captured local TTL, so serving.publish warms nothing while the callers complete with the accepted result, the request memo is written and the remote refill proceeds."}]}, + {"id": "C28.no-refill-after-read-failure", "rule": "remote read timeout suppresses refill and late read", "scenarios": ["remote read timeout suppresses refill and late read", "read failure returns source and does not retain value"], "generated": [{"profile": "effects", "witness": "failed-read-no-refill"}, {"profile": "effects", "witness": "abandoned-read-settles"}], "vectors": [], "contracts": ["C28"], "quintReplays": ["core/failedReadPreservesPreviouslyStoredBytesTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:remoteFailureNeverRefills", "scope": "Remote read failure prevents refill in the layer presence abstraction."}, + {"ref": "formal/dialcache-effects-conformance.qnt:readTimeoutStartsIndependentSourceDeadlineTest", "scope": "Timeout suppresses refill; a late read accepted only after elapsed budget starts source and cannot be decoded into a hit."}, + {"ref": "formal/dialcache-effects-conformance.qnt:lateReadCannotBecomeHitTest", "scope": "Timeout suppresses refill; a late read accepted only after elapsed budget starts source and cannot be decoded into a hit."}, + {"ref": "formal/dialcache-conformance.qnt:failedReadPreservesPreviouslyStoredBytesTest", "scope": "After a tracked value is stored, an injected read failure returns the changed source without another write; a later healthy read returns the original stored value. This is a read-error example, not a timeout/late-read schedule."}]}, + {"id": "C28.untracked-local-publication", "rule": "untracked read failure still permits active local publication", "scenarios": ["untracked read failure still permits active local publication"], "generated": [{"profile": "policy", "witness": "failed-untracked-read-still-warms-local"}], "vectors": [], "contracts": ["C28"], "quintReplays": ["policy/untrackedReadFailureStillWarmsActiveLocalTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:remoteReadFailureStillPublishesUntrackedLocalAndRequestTest", "scope": "untracked read failure still permits active local publication. This check covers the bounded model clause: remoteReadFailureStillPublishesUntrackedLocalAndRequestTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-policy-conformance.qnt:untrackedReadFailureStillWarmsActiveLocalTest", "scope": "untracked read failure still permits active local publication. This check covers the bounded model clause: untrackedReadFailureStillWarmsActiveLocalTest. Host representations and other feature combinations retain separate fixed/native evidence."}], "definitions": [ + {"ref": "formal/dialcache-core.qnt:loaderSuccessAfterRemoteFailure", "scope": "Untracked source after remote read failure can publish to healthy active local storage without refilling remote."}]}, + {"id": "C29.missing-redis-local", "rule": "missing remote adapter leaves valid local serving available", "scenarios": ["missing remote adapter leaves valid local serving available"], "generated": [{"profile": "layers", "witness": "absent-remote-preserves-local-reuse"}], "vectors": [], "contracts": ["C29"], "quintReplays": ["layers/absentRemotePreservesLocalReuseTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:absentRemoteHasNoAdapterEffects", "scope": "Missing adapter creates no remote effects; valid local storage is still filled and reused."}, + {"ref": "formal/dialcache-layers-conformance.qnt:absentRemotePreservesLocalReuseTest", "scope": "Missing adapter creates no remote effects; valid local storage is still filled and reused."}]}, + {"id": "C29.missing-redis-maintenance", "rule": "Missing Redis surfaces a maintenance error while local reuse remains valid", "scenarios": [], "generated": [{"profile": "layers", "witness": "absent-remote-maintenance-preserves-local"}], "vectors": [], "contracts": ["C29"], "quintReplays": ["layers/absentRemoteMaintenancePreservesLocalReuseTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:absentRemoteMaintenancePreservesLocalReuseTest", "scope": "Missing-remote maintenance returns its distinct error, invokes no remote adapter, and preserves a later local hit."}]}, + {"id": "C29.maintenance-failure", "rule": "explicit invalidation surfaces mutation failure", "scenarios": ["explicit invalidation surfaces mutation failure"], "generated": [{"profile": "recovery-read", "witness": "failed-maintenance-preserves-existing-marker"}, {"profile": "recovery-read", "witness": "failed-maintenance-preserves-absent-marker"}], "vectors": [], "contracts": ["C29"], "quintReplays": ["recovery-read/failedInvalidationPreservesExistingMarkerTest", "recovery-read/failedInvalidationDoesNotCreateMarkerTest"], "models": [ + {"ref": "formal/dialcache-recovery-read-conformance.qnt:failedInvalidationPreservesExistingMarkerTest", "scope": "An explicit invalidation failure returns mutation_error while external marker probes preserve absence or prior cutoff and remaining lifetime."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:failedInvalidationDoesNotCreateMarkerTest", "scope": "An explicit invalidation failure returns mutation_error while external marker probes preserve absence or prior cutoff and remaining lifetime."}], "definitions": [ + {"ref": "formal/kernel/markers.qnt:invalidate", "scope": "An explicit invalidation failure returns mutation_error while external marker probes preserve absence or prior cutoff and remaining lifetime."}]}, + {"id": "C30.observer-isolation", "rule": "observer failures cannot change cache or source outcomes", "scenarios": ["observer failures cannot change cache or source outcomes"], "generated": [{"profile": "effects", "witness": "observer-failure-hit"}, {"profile": "effects", "witness": "observer-failure-publication"}, {"profile": "effects", "witness": "observer-failure-source-error"}], "vectors": [], "contracts": ["C30"], "quintReplays": ["effects/observerFailuresCannotPreventCacheHitTest", "effects/observerFailuresCannotPreventPublicationTest", "effects/observerFailuresCannotReplaceSourceErrorTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:observerFailuresCannotPreventCacheHitTest", "scope": "Observer callback failure preserves cached value, accepted source publication and original source error. Model abstracts contained callback failure; existing witness conditions need final-public-consequence tightening (reported root)."}, + {"ref": "formal/dialcache-effects-conformance.qnt:observerFailuresCannotPreventPublicationTest", "scope": "Observer callback failure preserves cached value, accepted source publication and original source error. Model abstracts contained callback failure; existing witness conditions need final-public-consequence tightening (reported root)."}, + {"ref": "formal/dialcache-effects-conformance.qnt:observerFailuresCannotReplaceSourceErrorTest", "scope": "Observer callback failure preserves cached value, accepted source publication and original source error. Model abstracts contained callback failure; existing witness conditions need final-public-consequence tightening (reported root)."}], "definitions": [ + {"ref": "formal/dialcache-effects-conformance.qnt:observerFault", "scope": "Observer-failure fixture changes exporter behavior but no cache/source transition branch. The generated actual-API replay checks consequences; the model does not execute exporter code."}, + {"ref": "formal/kernel/metrics.qnt:event", "scope": "Observer-failure fixture changes exporter behavior but no cache/source transition branch. The generated actual-API replay checks consequences; the model does not execute exporter code."}, + {"ref": "formal/kernel/metrics.qnt:settleRead", "scope": "Observer-failure fixture changes exporter behavior but no cache/source transition branch. The generated actual-API replay checks consequences; the model does not execute exporter code."}, + {"ref": "formal/kernel/remote-writes.qnt:settleLoader", "scope": "Observer-failure fixture changes exporter behavior but no cache/source transition branch. The generated actual-API replay checks consequences; the model does not execute exporter code."}]}, + {"id": "C31.tracked-no-local-fill", "rule": "tracked refill suppresses local until a Redis hit warms it", "scenarios": ["tracked refill suppresses local until a Redis hit warms it"], "generated": [{"profile": "layers", "witness": "tracked-refill-needs-remote-validation"}, {"profile": "layers", "witness": "validated-tracked-hit-warms-local"}, {"profile": "recovery-read", "witness": "tracked-source-requires-validation-before-local-reuse"}], "vectors": [], "contracts": ["C31"], "quintReplays": ["recovery-read/trackedSourceNeedsRemoteValidationBeforeLocalReuseTest", "layers/trackedSourceWaitsForValidatedReadToWarmLocalTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:trackedRemoteFallbackSuppressesLocalPublication", "scope": "Tracked source after semantic remote miss cannot publish to local storage."}, + {"ref": "formal/dialcache-layers-conformance.qnt:trackedSourceWaitsForValidatedReadToWarmLocalTest", "scope": "Tracked source leaves local empty; a later validated remote hit warms it and the next local hit avoids remote."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:trackedSourceNeedsRemoteValidationBeforeLocalReuseTest", "scope": "Tracked source success memoizes in its request but requires remote read/decode before another scope can warm local; the subsequent transient caller reuses local."}], "definitions": [ + {"ref": "formal/kernel/remote-io.qnt:settleLoader", "scope": "Tracked source success memoizes in its request but requires remote read/decode before another scope can warm local; the subsequent transient caller reuses local."}]}, + {"id": "C32.grouped-invalidation", "rule": "one invalidation fences all tracked operation variants only for its entity", "scenarios": ["one invalidation fences all tracked operation variants only for its entity"], "generated": [{"profile": "layers", "witness": "invalidation-fences-both-operations"}], "vectors": [], "contracts": ["C32"], "quintReplays": ["layers/invalidationGroupsOperationsButPreservesAcquiredCachesTest", "core/invalidationRefillsFromCurrentSourceTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:invalidationGroupsOperationsButPreservesAcquiredCachesTest", "scope": "one invalidation fences all tracked operation variants only for its entity. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-conformance.qnt:invalidationRefillsFromCurrentSourceTest", "scope": "For one tracked entity/operation, a public invalidation separates a prior cache hit from a refill with the updated source. Multi-operation grouping remains covered by the other case evidence."}], "definitions": [ + {"ref": "formal/dialcache-layers-conformance.qnt:invalidate", "scope": "Invalidation chooses an entity watermark; tracked reads index it by key/operations-per-entity, covering two operation variants without fencing the other entity."}, + {"ref": "formal/kernel/remote-frames.qnt:observe", "scope": "Invalidation chooses an entity watermark; tracked reads index it by key/operations-per-entity, covering two operation variants without fencing the other entity."}]}, + {"id": "C32.untracked-unaffected", "rule": "untracked Redis values ignore invalidation markers", "scenarios": ["untracked Redis values ignore invalidation markers"], "generated": [{"profile": "layers", "witness": "untracked-ignores-watermark"}], "vectors": [], "contracts": ["C32"], "quintReplays": ["layers/untrackedReadsIgnoreGroupedInvalidationTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:untrackedReadsIgnoreGroupedInvalidationTest", "scope": "untracked Redis values ignore invalidation markers. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/kernel/remote-frames.qnt:observe", "scope": "Untracked reads omit the watermark comparison while retaining ordinary cache presence checks."}]}, + {"id": "C34.first-fence", "rule": "observed future fence suppresses serialization and refill", "scenarios": ["observed future fence suppresses serialization and refill"], "generated": [{"profile": "effects", "witness": "normalized-fence-blocks-publication"}], "vectors": [], "contracts": ["C34"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "quintReplays": ["effects/absentReplyWithFutureFenceBlocksRefillTest"], "models": [ + {"ref": "formal/dialcache-tracked-invalidation.qnt:observedFutureFenceSkipsRefillTest", "scope": "observed future fence suppresses serialization and refill"}, + {"ref": "formal/dialcache-tracked-invalidation.qnt:refillAtFenceEqualitySkipsWriteTest", "scope": "observed future fence suppresses serialization and refill"}, + {"ref": "formal/dialcache-effects-conformance.qnt:absentReplyWithFutureFenceBlocksRefillTest", "scope": "An observed future fence carried by a normalized adapter reply suppresses serialization and refill of the accepted source; the following read finds no stored value. Fence equality and invalidation-issued fences keep their tracked-invalidation regressions."}], "definitions": [ + {"ref": "formal/kernel/remote-writes.qnt:settleLoader", "scope": "A successful source settled at or behind its observed fence records its value and holds no dump (serving::refills, the first fence check); the callers complete at once."}]}, + {"id": "C34.second-fence", "rule": "tracked refill rechecks clock after serialization", "scenarios": ["tracked refill rechecks clock after serialization"], "generated": [{"profile": "effects", "witness": "dump-rechecks-fence-after-rollback"}], "vectors": [], "contracts": ["C34"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:rollbackDuringDumpRechecksObservedFenceTest", "scope": "Rollback during serialization makes the second observed-fence check skip native write while preserving source result."}]}, + {"id": "C34.write-timestamp", "rule": "admitted tracked refill timestamps after serialization", "scenarios": ["admitted tracked refill timestamps after serialization"], "generated": [{"profile": "effects", "witness": "write-stamp-after-serialization"}], "vectors": [], "contracts": ["C34"], "quintReplays": ["effects/writeStampAfterSerializationClearsInterveningFenceTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:writeStampAfterSerializationClearsInterveningFenceTest", "scope": "Serialization is held across invalidation and a wall-clock advance; native write stamp must clear the intervening watermark, verified by a subsequent public cache hit."}], "definitions": [ + {"ref": "formal/dialcache-effects-conformance.qnt:releaseDump", "scope": "Native dispatch captures current writer wall clock after serialization; later completion commits that captured timestamp."}, + {"ref": "formal/dialcache-effects-conformance.qnt:releaseWrite", "scope": "Native dispatch captures current writer wall clock after serialization; later completion commits that captured timestamp."}]}, + {"id": "C35.delayed-old-write", "rule": "delayed old write is fenced after invalidation", "scenarios": ["delayed old write is fenced after invalidation"], "generated": [{"profile": "effects", "witness": "delayed-fenced-write"}], "vectors": [], "contracts": ["C35"], "evidenceNotes": ["Stale-write guarantee requires documented buffer >= stale work delay + writer clock lead; regression is conditional on those model bounds."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "models": [ + {"ref": "formal/dialcache-tracked-invalidation.qnt:staleValueAfterInvalidationIsFenced", "scope": "Safety is conditional on the explicit future-buffer, stale-write-delay, and writer-lead bounds in the model."}, + {"ref": "formal/dialcache-tracked-invalidation.qnt:acquiredAfterInvalidationDoesNotServeStale", "scope": "Safety is conditional on the explicit future-buffer, stale-write-delay, and writer-lead bounds in the model."}, + {"ref": "formal/dialcache-effects-conformance.qnt:delayedWriteRemainsFencedTest", "scope": "A dispatched old write completing after invalidation does not become a readable tracked hit on the next call."}, + {"ref": "formal/dialcache-tracked-invalidation.qnt:acquisitionAfterInvalidationRejectsOldBytesTest", "scope": "Stale-write guarantee requires documented buffer >= stale work delay + writer clock lead; regression is conditional on those model bounds."}, + {"ref": "formal/dialcache-tracked-invalidation.qnt:staleWriteAtCoveredDelayEqualityRemainsFencedTest", "scope": "Stale-write guarantee requires documented buffer >= stale work delay + writer clock lead; regression is conditional on those model bounds."}, + {"ref": "formal/dialcache-tracked-invalidation.qnt:freshWriteBeyondBufferBecomesReadableTest", "scope": "Stale-write guarantee requires documented buffer >= stale work delay + writer clock lead; regression is conditional on those model bounds."}]}, + {"id": "C36.acquired-fresh", "rule": "acquired tracked snapshot survives later invalidation", "scenarios": ["acquired tracked snapshot survives later invalidation"], "generated": [{"profile": "independent", "witness": "acquired-fresh-decode-survives-invalidation"}], "vectors": [], "contracts": ["C36"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest", "scope": "The acquired fresh snapshot survives a later invalidation before asynchronous decode returns."}, + {"ref": "formal/dialcache-independent-conformance.qnt:acceptedFreshDecodeSurvivesOtherInvalidationTest", "scope": "An already acquired snapshot still returns while a later independent call observes invalidation and starts source."}, + {"ref": "formal/dialcache-tracked-invalidation.qnt:acquiredSnapshotSurvivesLaterInvalidationTest", "scope": "acquired tracked snapshot survives later invalidation"}]}, + {"id": "C36.acquired-local", "rule": "invalidation preserves acquired local value", "scenarios": ["invalidation preserves acquired local value"], "generated": [{"profile": "layers", "witness": "invalidation-preserves-local-hit"}], "vectors": [], "contracts": ["C36"], "quintReplays": ["layers/invalidationGroupsOperationsButPreservesAcquiredCachesTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:invalidationGroupsOperationsButPreservesAcquiredCachesTest", "scope": "A remote watermark change fences later remote reads while earlier local and request values remain reusable."}]}, + {"id": "C36.acquired-request", "rule": "invalidation preserves acquired request value", "scenarios": ["invalidation preserves acquired request value"], "generated": [{"profile": "layers", "witness": "invalidation-preserves-request-hit"}], "vectors": [], "contracts": ["C36"], "quintReplays": ["layers/invalidationGroupsOperationsButPreservesAcquiredCachesTest"], "models": [ + {"ref": "formal/dialcache-layers-conformance.qnt:invalidationGroupsOperationsButPreservesAcquiredCachesTest", "scope": "A remote watermark change fences later remote reads while earlier local and request values remain reusable."}]}, + {"id": "C37.physical-cap", "rule": "tracked retention has a one hour physical cap", "scenarios": ["tracked retention has a one hour physical cap"], "generated": [{"profile": "recovery-read", "witness": "tracked-physical-cap-expires-before-logical-freshness"}], "vectors": [], "contracts": ["C37"], "quintReplays": ["recovery-read/trackedPhysicalRetentionExpiresAtCapTest", "recovery-read/untrackedRetentionIsNotCappedTest"], "models": [ + {"ref": "formal/dialcache-recovery-read-conformance.qnt:trackedWritesRespectPhysicalCap", "scope": "Native write TTL is capped at 3600000ms, and a public read at that physical deadline starts another source even with longer logical freshness."}, + {"ref": "formal/dialcache-recovery-read-connection.qnt:sourcesCarryCappedAdmittedRetention", "scope": "Every pending source captured either no retention or the maximum admitted before its caller's admission, capped at 3600000ms for a tracked entity: the per-write pairing with the admitted maximum that the profile's write-TTL invariant cannot state once the authority caps it."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:trackedPhysicalRetentionExpiresAtCapTest", "scope": "Native write TTL is capped at 3600000ms, and a public read at that physical deadline starts another source even with longer logical freshness."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:untrackedRetentionIsNotCappedTest", "scope": "The untracked twin of the cap: a 4 h policy retention is written in full, so the one-hour cap is a tracked-storage rule, not a write ceiling."}], "definitions": [ + {"ref": "formal/kernel/remote-io.qnt:settleLoader", "scope": "Native write TTL is capped at 3600000ms, and a public read at that physical deadline starts another source even with longer logical freshness."}]}, + {"id": "C37.logical-age-unclamped", "rule": "tracked stale retention cap does not clamp logical recovery age", "scenarios": ["tracked stale retention cap does not clamp logical recovery age"], "generated": [{"profile": "recovery-read", "witness": "logical-recovery-age-exceeds-physical-cap"}], "vectors": [], "contracts": ["C37"], "quintReplays": ["recovery-read/physicalCapDoesNotClampLogicalRecoveryTest"], "models": [ + {"ref": "formal/dialcache-recovery-read-connection.qnt:recoveryReturnMatchesAcquiredContract", "scope": "An externally retained candidate older than the physical cap but younger than the captured logical maximum is served after source failure; no new write is credited."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:physicalCapDoesNotClampLogicalRecoveryTest", "scope": "An externally retained candidate older than the physical cap but younger than the captured logical maximum is served after source failure; no new write is credited."}], "definitions": [ + {"ref": "formal/kernel/recovery.qnt:validCandidate", "scope": "An externally retained candidate older than the physical cap but younger than the captured logical maximum is served after source failure; no new write is credited."}]}, + {"id": "C38.marker-transition", "rule": "A watermark cutoff never moves backwards", "scenarios": [], "generated": [], "vectors": ["invalidation/existing future cutoff never moves backwards"], "contracts": ["C38", "W09"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 002: zero buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 014: buffered cutoff / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 026: retention above floor / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 038: maximum buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 050: maximum safe sum / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 062: leading decimal zeros / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 242: maximum timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 254: zero timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 278: all-zero decimal text / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 009: zero buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 013: buffered cutoff / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 015: buffered cutoff / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 016: buffered cutoff / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 021: buffered cutoff / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 033: retention above floor / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 252: zero timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 253: zero timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 255: zero timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 256: zero timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 261: zero timestamp / leading-zero stored decimal"}], "quintReplays": ["recovery/rollbackCannotLowerInvalidationWatermarkTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:rollbackCannotLowerInvalidationWatermarkTest", "scope": "A second invalidation after wall rollback does not lower the existing watermark; exact Redis retention remains vector/integration evidence."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:successfulCutoffIsExactMaximum", "scope": "Successful invalidation keeps the larger prior valid cutoff or newly proposed buffered cutoff; selected prior future markers are verified on real servers."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:futureCutoffDoesNotMoveBackwardsTest", "scope": "Successful invalidation keeps the larger prior valid cutoff or newly proposed buffered cutoff; selected prior future markers are verified on real servers."}], "definitions": [ + {"ref": "formal/dialcache-invalidation-transition.qnt:invalidated", "scope": "Successful invalidation keeps the larger prior valid cutoff or newly proposed buffered cutoff; selected prior future markers are verified on real servers."}]}, + {"id": "C39.reject-before-mutation", "rule": "Invalid watermark arguments reject before mutation", "scenarios": [], "generated": [], "vectors": ["invalidation/negative buffer rejects before mutation", "invalidation/fractional buffer rejects before mutation", "invalidation/over-limit buffer rejects before mutation", "invalidation/exponent timestamp rejects before mutation", "invalidation/negative timestamp rejects before mutation", "invalidation/unsafe sum rejects before mutation", "invalidation/negative buffer preserves absent state", "invalidation/negative buffer preserves malformed finite string", "invalidation/negative buffer preserves malformed persistent string", "invalidation/negative buffer preserves finite list contents", "invalidation/negative buffer preserves persistent list contents", "invalidation/fractional buffer preserves absent state", "invalidation/fractional buffer preserves malformed finite string", "invalidation/fractional buffer preserves malformed persistent string", "invalidation/fractional buffer preserves finite list contents", "invalidation/fractional buffer preserves persistent list contents", "invalidation/over-limit buffer preserves absent state", "invalidation/over-limit buffer preserves malformed finite string", "invalidation/over-limit buffer preserves malformed persistent string", "invalidation/over-limit buffer preserves finite list contents", "invalidation/over-limit buffer preserves persistent list contents", "invalidation/exponent timestamp preserves absent state", "invalidation/exponent timestamp preserves malformed finite string", "invalidation/exponent timestamp preserves malformed persistent string", "invalidation/exponent timestamp preserves finite list contents", "invalidation/exponent timestamp preserves persistent list contents", "invalidation/negative timestamp preserves absent state", "invalidation/negative timestamp preserves malformed finite string", "invalidation/negative timestamp preserves malformed persistent string", "invalidation/negative timestamp preserves finite list contents", "invalidation/negative timestamp preserves persistent list contents", "invalidation/unsafe sum preserves absent state", "invalidation/unsafe sum preserves malformed finite string", "invalidation/unsafe sum preserves malformed persistent string", "invalidation/unsafe sum preserves finite list contents", "invalidation/unsafe sum preserves persistent list contents"], "contracts": ["C39", "W09"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 072: negative buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 073: negative buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 074: negative buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 075: negative buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 076: negative buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 077: negative buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 078: negative buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 079: negative buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 080: negative buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 081: negative buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 082: negative buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 083: negative buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 084: fractional buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 085: fractional buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 086: fractional buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 087: fractional buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 088: fractional buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 089: fractional buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 090: fractional buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 091: fractional buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 092: fractional buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 093: fractional buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 094: fractional buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 095: fractional buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 096: over-limit buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 097: over-limit buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 098: over-limit buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 099: over-limit buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 100: over-limit buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 101: over-limit buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 102: over-limit buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 103: over-limit buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 104: over-limit buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 105: over-limit buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 106: over-limit buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 107: over-limit buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 108: unsafe buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 109: unsafe buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 110: unsafe buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 111: unsafe buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 112: unsafe buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 113: unsafe buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 114: unsafe buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 115: unsafe buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 116: unsafe buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 117: unsafe buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 118: unsafe buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 119: unsafe buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 120: exponent timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 121: exponent timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 122: exponent timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 123: exponent timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 124: exponent timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 125: exponent timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 126: exponent timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 127: exponent timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 128: exponent timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 129: exponent timestamp / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 130: exponent timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 131: exponent timestamp / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 132: negative timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 133: negative timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 134: negative timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 135: negative timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 136: negative timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 137: negative timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 138: negative timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 139: negative timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 140: negative timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 141: negative timestamp / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 142: negative timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 143: negative timestamp / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 144: unsafe sum / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 145: unsafe sum / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 146: unsafe sum / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 147: unsafe sum / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 148: unsafe sum / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 149: unsafe sum / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 150: unsafe sum / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 151: unsafe sum / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 152: unsafe sum / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 153: unsafe sum / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 154: unsafe sum / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 155: unsafe sum / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 156: empty buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 157: empty buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 158: empty buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 159: empty buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 160: empty buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 161: empty buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 162: empty buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 163: empty buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 164: empty buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 165: empty buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 166: empty buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 167: empty buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 168: explicit plus buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 169: explicit plus buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 170: explicit plus buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 171: explicit plus buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 172: explicit plus buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 173: explicit plus buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 174: explicit plus buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 175: explicit plus buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 176: explicit plus buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 177: explicit plus buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 178: explicit plus buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 179: explicit plus buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 180: space-prefixed buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 181: space-prefixed buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 182: space-prefixed buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 183: space-prefixed buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 184: space-prefixed buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 185: space-prefixed buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 186: space-prefixed buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 187: space-prefixed buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 188: space-prefixed buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 189: space-prefixed buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 190: space-prefixed buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 191: space-prefixed buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 192: hexadecimal buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 193: hexadecimal buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 194: hexadecimal buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 195: hexadecimal buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 196: hexadecimal buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 197: hexadecimal buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 198: hexadecimal buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 199: hexadecimal buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 200: hexadecimal buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 201: hexadecimal buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 202: hexadecimal buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 203: hexadecimal buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 204: newline-suffixed buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 205: newline-suffixed buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 206: newline-suffixed buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 207: newline-suffixed buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 208: newline-suffixed buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 209: newline-suffixed buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 210: newline-suffixed buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 211: newline-suffixed buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 212: newline-suffixed buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 213: newline-suffixed buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 214: newline-suffixed buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 215: newline-suffixed buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 216: fractional timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 217: fractional timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 218: fractional timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 219: fractional timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 220: fractional timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 221: fractional timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 222: fractional timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 223: fractional timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 224: fractional timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 225: fractional timestamp / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 226: fractional timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 227: fractional timestamp / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 228: unsafe timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 229: unsafe timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 230: unsafe timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 231: unsafe timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 232: unsafe timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 233: unsafe timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 234: unsafe timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 235: unsafe timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 236: unsafe timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 237: unsafe timestamp / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 238: unsafe timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 239: unsafe timestamp / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 264: empty timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 265: empty timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 266: empty timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 267: empty timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 268: empty timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 269: empty timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 270: empty timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 271: empty timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 272: empty timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 273: empty timestamp / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 274: empty timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 275: empty timestamp / empty stored string"}], "models": [ + {"ref": "formal/dialcache-invalidation-transition.qnt:argumentValidationIsExact", "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:rejectedInputPreservesEntireRedisState", "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:rejectedFractionPreservesOrderedListTest", "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:rejectedUnsafeSumPreservesPersistentMalformedTextTest", "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:newlineAndPlusAreNotDecimalGrammarTest", "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input."}], "definitions": [ + {"ref": "formal/dialcache-invalidation-transition.qnt:parseSafeDecimal", "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:invalidated", "scope": "All15 selected invalid raw argument forms preserve all12 complete input Redis states. Absence, malformed and valid strings, ordered list content, finite TTL and persistence are asserted; no repair occurs after invalid input."}]}, + {"id": "C40.first-stale", "rule": "first stale age is recoverable without shared publication", "scenarios": ["first stale age is recoverable without shared publication"], "generated": [{"profile": "recovery", "witness": "first-stale-age-recovers-without-publication"}], "vectors": [], "contracts": ["C40"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "models": [ + {"ref": "formal/dialcache-stale-recovery.qnt:recoveredStaleHasNoSharedPublication", "scope": "At exact fresh boundary F=2, authorized failure returns stale with no remote/local/shadow publication; later age does not revoke the returned value."}, + {"ref": "formal/dialcache-stale-recovery.qnt:servedValueCanAgeTest", "scope": "At exact fresh boundary F=2, authorized failure returns stale with no remote/local/shadow publication; later age does not revoke the returned value."}, + {"ref": "formal/dialcache-stale-recovery.qnt:firstStaleAgeRetainsWithoutDecodingTest", "scope": "first stale age is recoverable without shared publication"}, + {"ref": "formal/dialcache-rule-checks.qnt:retentionStartsAtFreshBoundary", "scope": "Finite symbolic domains independently characterize initial stale retention as fresh ceiling <= age < maximum; frame/fence validity remains a profile responsibility."}]}, + {"id": "C40.last-stale", "rule": "last millisecond before M is recoverable", "scenarios": ["last millisecond before M is recoverable"], "generated": [{"profile": "recovery", "witness": "last-recovery-age-serves"}], "vectors": [], "contracts": ["C40"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/lastRecoveryMillisecondIsServedTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:lastRecoveryMillisecondIsServedTest", "scope": "last millisecond before M is recoverable"}, + {"ref": "formal/dialcache-stale-recovery.qnt:lastRecoveryAgeStillServesTest", "scope": "last millisecond before M is recoverable"}], "definitions": [ + {"ref": "formal/dialcache-stale-recovery.qnt:performInitialRead", "scope": "Eligibility and both decode checks accept age < M; the model uses integer F=2/M=5 units, not every native millisecond value."}, + {"ref": "formal/dialcache-stale-recovery.qnt:checkCandidate", "scope": "Eligibility and both decode checks accept age < M; the model uses integer F=2/M=5 units, not every native millisecond value."}, + {"ref": "formal/dialcache-stale-recovery.qnt:candidateLoadSucceeds", "scope": "Eligibility and both decode checks accept age < M; the model uses integer F=2/M=5 units, not every native millisecond value."}]}, + {"id": "C40.maximum-age", "rule": "maximum age is not retained for recovery", "scenarios": ["maximum age is not retained for recovery", "initially too-old bytes cannot recover after wall rollback"], "generated": [{"profile": "recovery", "witness": "maximum-age-read-preserves-source-error"}], "vectors": [], "contracts": ["C40"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/maximumAgeAtReadDoesNotDecodeTest"], "models": [ + {"ref": "formal/dialcache-stale-recovery.qnt:retainedCandidateWasEligible", "scope": "Every retained candidate has initial age strictly below M; therefore age exactly M cannot be retained."}, + {"ref": "formal/dialcache-recovery-conformance.qnt:maximumAgeAtReadDoesNotDecodeTest", "scope": "maximum age is not retained for recovery"}, + {"ref": "formal/dialcache-stale-recovery.qnt:exactMaximumAgeDoesNotRetainTest", "scope": "maximum age is not retained for recovery"}, + {"ref": "formal/dialcache-stale-recovery.qnt:initiallyTooOldCannotRecoverAfterRollbackTest", "scope": "Initial rejected bytes stay unavailable after the clock makes their age eligible before authorized source failure. The final error, no decode, and single initial read distinguish initial retention from failure-time age checking alone."}]}, + {"id": "C40.future-rejected", "rule": "future age is not retained for recovery", "scenarios": ["future age is not retained for recovery", "initially future bytes cannot recover after wall clock catches up"], "generated": [{"profile": "recovery", "witness": "future-read-preserves-source-error"}], "vectors": [], "contracts": ["C40"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "models": [ + {"ref": "formal/dialcache-stale-recovery.qnt:retainedCandidateWasEligible", "scope": "Retained candidates have nonnegative stale age; a directly seeded future frame takes a plain miss without retention."}, + {"ref": "formal/dialcache-stale-recovery.qnt:futureFrameIsNotRetainedTest", "scope": "Retained candidates have nonnegative stale age; a directly seeded future frame takes a plain miss without retention."}, + {"ref": "formal/dialcache-stale-recovery.qnt:initiallyFutureCannotRecoverAfterClockAdvanceTest", "scope": "Initial rejected bytes stay unavailable after the clock makes their age eligible before authorized source failure. The final error, no decode, and single initial read distinguish initial retention from failure-time age checking alone."}, + {"ref": "formal/dialcache-stale-recovery.qnt:futureFrameIsNeverFreshOrRetained", "scope": "Receipt of the initial read: the frame stamp and the observing clock are recorded at the read, and a frame stamped after that clock is classified neither fresh nor retained, with the inequality restated on the recorded pair. The model keeps no future check of its own on this path, so the receipt is what catches a shared age rule that stops rejecting future stamps."}]}, + {"id": "C41.success-skips-decode", "rule": "source success skips retained candidate decoding", "scenarios": ["source success skips retained candidate decoding"], "generated": [{"profile": "recovery", "witness": "source-success-skips-stale-decode"}], "vectors": [], "contracts": ["C41"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "models": [ + {"ref": "formal/dialcache-stale-recovery.qnt:sourceSuccessDoesNotDecodeCandidate", "scope": "Source success precludes any candidate decoding."}, + {"ref": "formal/dialcache-stale-recovery.qnt:acceptedSourceNeverDecodesRetainedBytesTest", "scope": "source success skips retained candidate decoding"}]}, + {"id": "C41.denial-keeps-error", "rule": "denied recovery preserves source error without decoding", "scenarios": ["denied recovery preserves source error without decoding"], "generated": [{"profile": "recovery", "witness": "operation-denial-overrides-instance-allow"}], "vectors": [], "contracts": ["C41"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/operationDenialReplacesInstanceAllowTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:operationDenialReplacesInstanceAllowTest", "scope": "An operation denial over instance allow preserves ordinary source error and does not start candidate decode."}, + {"ref": "formal/dialcache-stale-recovery.qnt:deniedRecoveryNeverDecodesRetainedBytesTest", "scope": "denied recovery preserves source error without decoding"}]}, + {"id": "C41.classifier-failure", "rule": "recovery error overrides allow policy safely", "scenarios": ["recovery error overrides allow policy safely", "recovery error overrides error policy safely"], "generated": [{"profile": "recovery", "witness": "classifier-error-keeps-error-without-decode"}], "vectors": [], "contracts": ["C41"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/classifierErrorPreservesSourceWithoutDecodeTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:classifierErrorPreservesSourceWithoutDecodeTest", "scope": "A failing recovery classifier preserves the source error without decoding retained bytes or publishing them."}]}, + {"id": "C42.allow-override", "rule": "recovery allow overrides deny policy safely", "scenarios": ["recovery allow overrides deny policy safely"], "generated": [{"profile": "recovery", "witness": "operation-allow-overrides-instance-denial"}], "vectors": [], "contracts": ["C42"], "quintReplays": ["recovery/operationAllowReplacesInstanceDenialTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:operationAllowReplacesInstanceDenialTest", "scope": "An operation allow classifier overrides instance denial for an ordinary source error and produces one successful retained recovery."}], "definitions": [ + {"ref": "formal/kernel/diagnostics.qnt:beginRead", "scope": "Operation classifier replaces inherited instance classifier; an explicit allow admits a valid retained candidate after source error."}, + {"ref": "formal/kernel/recovery.qnt:retain", "scope": "Operation classifier replaces inherited instance classifier; an explicit allow admits a valid retained candidate after source error."}, + {"ref": "formal/kernel/recovery.qnt:failure", "scope": "Operation classifier replaces inherited instance classifier; an explicit allow admits a valid retained candidate after source error."}]}, + {"id": "C42.timeout-only-default", "rule": "default classifier rejects ordinary errors", "scenarios": ["default classifier rejects ordinary errors"], "generated": [{"profile": "recovery", "witness": "default-denies-ordinary-error"}], "vectors": [], "contracts": ["C42"], "quintReplays": ["recovery/defaultRejectsOrdinaryFailureTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:defaultRejectsOrdinaryFailureTest", "scope": "The inherited timeout-only classifier preserves ordinary source error without custom classification or decode."}]}, + {"id": "C42.propagated-timeout", "rule": "default classifier accepts a timeout propagated by source", "scenarios": ["default classifier accepts a timeout propagated by source"], "generated": [{"profile": "recovery", "witness": "default-recovers-propagated-timeout"}], "vectors": [], "contracts": ["C42"], "quintReplays": ["recovery/defaultRecoversPropagatedTimeoutTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:defaultRecoversPropagatedTimeoutTest", "scope": "A timeout error propagated by source is recovered by the default classifier without invoking a custom classifier."}]}, + {"id": "C42.explicit-denial", "rule": "explicit denial replaces default timeout recovery", "scenarios": ["explicit denial replaces default timeout recovery"], "generated": [{"profile": "recovery", "witness": "explicit-denial-overrides-timeout"}], "vectors": [], "contracts": ["C42"], "quintReplays": ["recovery/explicitDenialReplacesDefaultTest", "recovery/instanceDenialReplacesTimeoutOnlyDefaultTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:explicitDenialReplacesDefaultTest", "scope": "Explicit operation or instance denial preserves timeout and avoids decode."}, + {"ref": "formal/dialcache-recovery-conformance.qnt:instanceDenialReplacesTimeoutOnlyDefaultTest", "scope": "Explicit operation or instance denial preserves timeout and avoids decode."}]}, + {"id": "C43.coalesced-once", "rule": "coalesced recovery classifies and decodes once", "scenarios": ["coalesced recovery classifies and decodes once"], "generated": [{"profile": "recovery", "witness": "coalesced-recovery"}], "vectors": [], "contracts": ["C43"], "quintReplays": ["recovery/coalescedRecoveryClassifiesAndDecodesOnceTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:coalescedRecoveryClassifiesAndDecodesOnceTest", "scope": "Three callers across two request scopes share one read, source, classifier decision and decode; all receive the recovered value with one served diagnostic and no remote write."}], "definitions": [ + {"ref": "formal/kernel/serving.qnt:decide", "scope": "Followers attach to the current execution; one source rejection classifies once and starts one candidate decode, whose result completes all pending callers."}, + {"ref": "formal/kernel/recovery.qnt:failure", "scope": "Followers attach to the current execution; one source rejection classifies once and starts one candidate decode, whose result completes all pending callers."}, + {"ref": "formal/dialcache-recovery-conformance.qnt:releaseLoad", "scope": "Followers attach to the current execution; one source rejection classifies once and starts one candidate decode, whose result completes all pending callers."}]}, + {"id": "C43.request-memo", "rule": "recovered value memoizes only in its request scope", "scenarios": ["recovered value memoizes only in its request scope"], "generated": [{"profile": "recovery", "witness": "recovered-value-request-hit"}, {"profile": "recovery", "witness": "recovery-memoizes-both-requests"}, {"profile": "recovery-read", "witness": "tracked-compressed-recovery-is-request-only"}], "vectors": [], "contracts": ["C43"], "quintReplays": ["recovery-read/compressedRecoveryMemoizesWithoutLocalPublicationTest", "recovery-read/closingAnotherScopeKeepsThisScopesMemoTest", "recovery/recoveredValueMemoizesOnlyInAttachedRequestTest", "recovery/closedRequestCannotReceiveLateRecoveryMemoTest", "recovery/recoveredFlightMemoIsReusedByBothRequestsTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:closedScopesHaveNoMemo", "scope": "Recovered value is reusable only in attached live request scope; closure prevents late memo publication."}, + {"ref": "formal/dialcache-recovery-conformance.qnt:recoveredValueMemoizesOnlyInAttachedRequestTest", "scope": "Recovered value is reusable only in attached live request scope; closure prevents late memo publication."}, + {"ref": "formal/dialcache-recovery-conformance.qnt:closedRequestCannotReceiveLateRecoveryMemoTest", "scope": "Recovered value is reusable only in attached live request scope; closure prevents late memo publication."}, + {"ref": "formal/dialcache-stale-recovery.qnt:recoveredStaleHasNoSharedPublication", "scope": "Recovered stale results do not publish into shared local or remote caches or schedule shadow work."}, + {"ref": "formal/dialcache-recovery-read-connection.qnt:recoveredResultsNeverPublishShared", "scope": "A same-scope public probe reuses recovered value; another scope performs remote work, distinguishing request memo from local publication."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryMemoizesWithoutLocalPublicationTest", "scope": "A same-scope public probe reuses recovered value; another scope performs remote work, distinguishing request memo from local publication."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:closingAnotherScopeKeepsThisScopesMemoTest", "scope": "A memo row belongs to its scope: closing another scope leaves this scope's memoized value, which a same-scope caller reuses without a read; the request-only publication of a recovered value rests on rows being per scope."}, + {"ref": "formal/dialcache-recovery-connection.qnt:recoveredFlightCompletesEveryOwner", "scope": "After a served recovery decode, every caller the flight owned that was pending receives the value its retained candidate decodes to and every other caller keeps its outcome. This establishes shared caller results; request-memo publication remains covered by the case's other evidence."}, + {"ref": "formal/dialcache-recovery-conformance.qnt:recoveredFlightMemoIsReusedByBothRequestsTest", "scope": "Two request scopes sharing recovery each reuse the recovered result in a subsequent public call, with one read/source/decode and no shared writes."}], "definitions": [ + {"ref": "formal/kernel/remote-io.qnt:complete", "scope": "A same-scope public probe reuses recovered value; another scope performs remote work, distinguishing request memo from local publication."}]}, + {"id": "C43.independent-values", "rule": "uncoalesced recovery preserves each caller's independently acquired bytes", "scenarios": ["uncoalesced recovery preserves each caller's independently acquired bytes"], "generated": [{"profile": "independent", "witness": "distinct-retained-recovery-values"}, {"profile": "independent", "witness": "independent-source-error-identities"}], "vectors": [], "contracts": ["C43"], "quintReplays": ["independent/independentRecoveriesServeDistinctAcquiredSnapshotsTest"], "models": [ + {"ref": "formal/dialcache-independent-conformance.qnt:independentRecoveryKeepsDistinctSnapshotsTest", "scope": "Two independent callers retain different values and return those exact values despite invalidation and reverse decode completion."}, + {"ref": "formal/dialcache-independent-conformance.qnt:independentRecoveriesServeDistinctAcquiredSnapshotsTest", "scope": "Two uncoalesced callers acquire different stale frames before their sources fail; after invalidation each recovery serves the bytes its own read retained, with two reads, two sources, two decodes and no writes."}]}, + {"id": "C44.retained-invalidation", "rule": "recovery uses acquired snapshot after invalidation and replacement", "scenarios": ["recovery uses acquired snapshot after invalidation and replacement"], "generated": [{"profile": "recovery", "witness": "retained-across-invalidation"}, {"profile": "recovery", "witness": "replacement-cannot-change-recovered-value"}, {"profile": "recovery-read", "witness": "retained-compressed-recovery-survives-fence-new-request-misses"}], "vectors": [], "contracts": ["C44"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery-read/retainedCompressedRecoverySurvivesInvalidationTest", "recovery/replacementDoesNotChangeRetainedRecoveryTest"], "models": [ + {"ref": "formal/dialcache-independent-conformance.qnt:independentRecoveryKeepsDistinctSnapshotsTest", "scope": "Retained acquired bytes survive replacement for another caller and later invalidation; each caller still returns its own snapshot."}, + {"ref": "formal/dialcache-recovery-conformance.qnt:replacementDoesNotChangeRetainedRecoveryTest", "scope": "recovery uses acquired snapshot after invalidation and replacement"}, + {"ref": "formal/dialcache-stale-recovery.qnt:retainedBytesSurviveRedisDeletionAndFenceTest", "scope": "recovery uses acquired snapshot after invalidation and replacement"}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:retainedCompressedRecoverySurvivesInvalidationTest", "scope": "A candidate acquired before invalidation recovers and memoizes in its request, while a new request must observe the fence and preserve its different source error."}, + {"ref": "formal/dialcache-recovery-read-connection.qnt:retainedSnapshotMatchesAcquisition", "scope": "The recovery-read profile captures maximum age from pre-admission policy, then projects read settlement into a retained owner, modeled payload identity and timestamp. Accepted policy and later retained candidates must match those independent records. Raw/compressed encoding identity is abstracted."}, + {"ref": "formal/dialcache-recovery-connection.qnt:retainedSnapshotMatchesAcquisition", "scope": "At a step that dispatches a read in the recovery profile, the new flight's retained snapshot carries the pre-step frame's stamp, its code or none, and the pre-step policy's retention as its maximum; later invalidation and replacement leave the snapshot alone."}], "definitions": [ + {"ref": "formal/kernel/recovery.qnt:validCandidate", "scope": "A candidate acquired before invalidation recovers and memoizes in its request, while a new request must observe the fence and preserve its different source error."}]}, + {"id": "C44.retained-expiry", "rule": "expired remote storage cannot revoke retained stale snapshot", "scenarios": ["expired remote storage cannot revoke retained stale snapshot"], "generated": [{"profile": "recovery-read", "witness": "retained-snapshot-survives-physical-expiry-new-read-misses"}], "vectors": [], "contracts": ["C44"], "quintReplays": ["recovery-read/retainedSnapshotSurvivesPhysicalExpiryTest"], "models": [ + {"ref": "formal/dialcache-recovery-read-conformance.qnt:retainedSnapshotSurvivesPhysicalExpiryTest", "scope": "A call retains otherwise eligible bytes before their physical expiration; its recovery succeeds afterward, while a new request observes absence and preserves its own source error."}], "definitions": [ + {"ref": "formal/dialcache-stale-recovery.qnt:mutateRedisAfterRetention", "scope": "Later storage mutation cannot replace retained candidate bytes; the model does not model Redis expiry timers themselves."}, + {"ref": "formal/dialcache-stale-recovery.qnt:candidateLoadSucceeds", "scope": "Later storage mutation cannot replace retained candidate bytes; the model does not model Redis expiry timers themselves."}, + {"ref": "formal/kernel/recovery.qnt:validCandidate", "scope": "A call retains otherwise eligible bytes before their physical expiration; its recovery succeeds afterward, while a new request observes absence and preserves its own source error."}]}, + {"id": "C44.no-reread", "rule": "read failure never causes a recovery reread", "scenarios": ["read failure never causes a recovery reread"], "generated": [{"profile": "recovery", "witness": "failed-initial-read-skips-recovery"}], "vectors": [], "contracts": ["C44"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/initialReadFailureSkipsRecoveryClassificationTest"], "models": [ + {"ref": "formal/dialcache-stale-recovery.qnt:recoveryUsesSingleRedisRead", "scope": "One initial read at most; failed read retains no candidate, never begins recovery, and preserves source rejection."}, + {"ref": "formal/dialcache-stale-recovery.qnt:readFailureNeverRetains", "scope": "One initial read at most; failed read retains no candidate, never begins recovery, and preserves source rejection."}, + {"ref": "formal/dialcache-stale-recovery.qnt:readFailureNeverAttemptsRecovery", "scope": "One initial read at most; failed read retains no candidate, never begins recovery, and preserves source rejection."}, + {"ref": "formal/dialcache-stale-recovery.qnt:failedReadSkipsRecoveryTest", "scope": "One initial read at most; failed read retains no candidate, never begins recovery, and preserves source rejection."}, + {"ref": "formal/dialcache-recovery-conformance.qnt:initialReadFailureSkipsRecoveryClassificationTest", "scope": "read failure never causes a recovery reread"}]}, + {"id": "C45.maximum-age-exclusive", "rule": "After asynchronous decoding, age exactly M preserves the source error", "scenarios": ["stale candidate crossing M during decoding preserves source error"], "generated": [{"profile": "recovery", "witness": "exact-maximum-after-decode-rejects"}], "vectors": [], "contracts": ["C45"], "evidenceNotes": ["Distinguish equality after decode from greater-than-M; do not count the same fixed scenario twice as independent evidence."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/maximumAgeAfterDecodePreservesSourceTest"], "models": [ + {"ref": "formal/dialcache-stale-recovery.qnt:servedStaleIsStrictlyWithinMaxAge", "scope": "Return-event age must be < M and nonnegative; crossing to exact M during decode preserves source rejection and writes no request memo."}, + {"ref": "formal/dialcache-stale-recovery.qnt:decodingAtMaxAgeRejectsTest", "scope": "Return-event age must be < M and nonnegative; crossing to exact M during decode preserves source rejection and writes no request memo."}, + {"ref": "formal/dialcache-recovery-conformance.qnt:maximumAgeAfterDecodePreservesSourceTest", "scope": "Distinguish equality after decode from greater-than-M; do not count the same fixed scenario twice as independent evidence."}, + {"ref": "formal/dialcache-recovery-connection.qnt:recoveredValueWasWithinAcceptedAge", "scope": "At the settlement that serves a recovered value, the recovery connection model checks the retained snapshot's stamp against the pre-step wall clock: nonnegative age, strictly below the captured maximum. One-step restatement of the former profile receipt."}, + {"ref": "formal/dialcache-rule-checks.qnt:recoveryBoundaryIsExclusive", "scope": "Finite symbolic domains independently characterize recovery age as nonnegative and strictly below the acquired maximum, including equality rejection."}]}, + {"id": "C45.recheck-after-decode", "rule": "stale candidate crossing M during decoding preserves source error", "scenarios": ["stale candidate crossing M during decoding preserves source error"], "generated": [{"profile": "recovery", "witness": "expired-during-decode"}], "vectors": [], "contracts": ["C45"], "models": [ + {"ref": "formal/dialcache-stale-recovery.qnt:servedStaleIsStrictlyWithinMaxAge", "scope": "Return-event age must be < M and nonnegative; crossing to exact M during decode preserves source rejection and writes no request memo."}, + {"ref": "formal/dialcache-stale-recovery.qnt:decodingAtMaxAgeRejectsTest", "scope": "Return-event age must be < M and nonnegative; crossing to exact M during decode preserves source rejection and writes no request memo."}]}, + {"id": "C45.captured-policy", "rule": "pending recovery keeps its age snapshot while later calls use new policy", "scenarios": ["pending recovery keeps its age snapshot while later calls use new policy"], "generated": [{"profile": "independent", "witness": "independent-recovery-age-boundary"}], "vectors": [], "contracts": ["C45"], "quintReplays": ["independent/independentRecoveryAtCapturedAgeBoundaryTest"], "models": [ + {"ref": "formal/dialcache-independent-conformance.qnt:recoveryPolicyIsCapturedPerCallerTest", "scope": "Two acquired candidates retain their own max-age snapshots; after decode delay the older policy serves while the newer shorter policy preserves that caller's source error."}, + {"ref": "formal/dialcache-recovery-read-connection.qnt:recoveryReturnMatchesAcquiredContract", "scope": "A served recovery result after releaseLoad must match the acquired snapshot owner and modeled payload and satisfy its captured maximum at the pre-settlement wall clock. Single-active-call profile."}, + {"ref": "formal/dialcache-independent-connection.qnt:independentRecoveryMatchesContract", "scope": "A served independent recovery decode returns the selected caller snapshot payload under its captured maximum and current wall clock, including reversed completion schedules."}, + {"ref": "formal/dialcache-independent-conformance.qnt:independentRecoveryAtCapturedAgeBoundaryTest", "scope": "The shorter captured policy rejects at its exact maximum age while a longer-policy decode remains pending; subsequent decode serves only the longer-policy caller and neither recovery writes shared state."}]}, + {"id": "C45.preserve-source-error", "rule": "recovery deserialization failure preserves original error", "scenarios": ["recovery deserialization failure preserves original error"], "generated": [{"profile": "independent", "witness": "failed-recovery-keeps-source-error"}], "vectors": [], "contracts": ["C45"], "evidenceNotes": ["Verification outcome enum checks source-vs-recovery error category; portable fixed driver/native errors carry exact original identity."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/failedRecoveryPreservesDeadlineErrorTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:failedRecoveryPreservesDeadlineErrorTest", "scope": "Recovery load failure preserves the original deadline result and emits deserialization_error."}, + {"ref": "formal/dialcache-stale-recovery.qnt:recoveryDecodeFailureKeepsSourceOutcomeTest", "scope": "Verification outcome enum checks source-vs-recovery error category; portable fixed driver/native errors carry exact original identity."}]}, + {"id": "C45.rollback-future", "rule": "wall rollback during recovery decode rejects a now future snapshot", "scenarios": ["wall rollback during recovery decode rejects a now future snapshot"], "generated": [{"profile": "recovery", "witness": "rollback-rejects-retained-future"}], "vectors": [], "contracts": ["C45"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/rollbackDuringRetainedDecodeRejectsFutureSnapshotTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:rollbackDuringRetainedDecodeRejectsFutureSnapshotTest", "scope": "Wall rollback during decode makes the retained snapshot future and preserves the original deadline with recovery miss/no age sample."}, + {"ref": "formal/dialcache-stale-recovery.qnt:rollbackToFutureCandidateRejectsTest", "scope": "wall rollback during recovery decode rejects a now future snapshot"}]}, + {"id": "C45.failed-fresh-not-stale", "rule": "failed fresh deserialization is never retried as stale recovery", "scenarios": ["failed fresh deserialization is never retried as stale recovery"], "generated": [{"profile": "recovery", "witness": "failed-fresh-decode-is-not-recovery"}], "vectors": [], "contracts": ["C45"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/freshDecodeFailureCannotBeRetriedAsRecoveryTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:freshDecodeFailureCannotBeRetriedAsRecoveryTest", "scope": "failed fresh deserialization is never retried as stale recovery"}], "definitions": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:releaseLoad", "scope": "Failed fresh decode starts source with canRecover=false; later source error cannot decode that failed fresh snapshot again."}, + {"ref": "formal/kernel/recovery.qnt:failure", "scope": "Failed fresh decode starts source with canRecover=false; later source error cannot decode that failed fresh snapshot again."}]}, + {"id": "C46.ignore-late-source", "rule": "default timeout recovery ignores late successful loader", "scenarios": ["default timeout recovery ignores late successful loader"], "generated": [{"profile": "recovery", "witness": "recovery-abandoned-overlap"}, {"profile": "recovery", "witness": "recovery-late-source-settles"}], "vectors": [], "contracts": ["C46"], "quintReplays": ["recovery/lateSuccessCannotReplaceRecoveredValueTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:lateSuccessCannotReplaceRecoveredValueTest", "scope": "Late successful source cannot replace timeout recovery or create dump/write effects."}]}, + {"id": "C47.requires-hook", "rule": "shadow requires an outcome observer", "scenarios": ["shadow requires an outcome observer"], "generated": [{"profile": "shadow", "witness": "missing-hook-skips-job"}], "vectors": [], "contracts": ["C47"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:missingHookHasNoShadowEffects", "scope": "Without the outcome hook no dark cache/read/load/write machinery runs; caller still returns its source value."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:missingHookSkipsDarkJobTest", "scope": "Without the outcome hook no dark cache/read/load/write machinery runs; caller still returns its source value."}]}, + {"id": "C47.requires-capacity", "rule": "shadow global capacity drops another key instead of queueing", "scenarios": ["shadow global capacity drops another key instead of queueing"], "generated": [{"profile": "admission", "witness": "full-capacity-drop"}, {"profile": "shadow-layers", "witness": "mixed-shadow-capacity-retains-only-owned-source"}], "vectors": [], "contracts": ["C47"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "quintReplays": ["shadow-layers/servedAndDarkJobsShareCapacityButNotSourceOwnershipTest", "admission/fullInstanceDoesNotBlockOtherInstanceTest"], "models": [ + {"ref": "formal/dialcache-admission-conformance.qnt:capacityIsPerInstance", "scope": "Per-instance capacity bounds admitted jobs; a full instance drops its next key while another instance can admit."}, + {"ref": "formal/dialcache-admission-conformance.qnt:fullInstanceDoesNotBlockOtherInstanceTest", "scope": "Per-instance capacity bounds admitted jobs; a full instance drops its next key while another instance can admit."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:deduplicatedJobKeepsIndependentCallerSourcesTest", "scope": "A dark job dropped for a live job of its identity leaves the caller's own source to complete with its value: a drop never queues and never touches the caller."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:servedAndDarkJobsShareCapacityButNotSourceOwnershipTest", "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:admitJobs", "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs."}, + {"ref": "formal/kernel/shadow.qnt:expireJob", "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs."}, + {"ref": "formal/kernel/remote-writes.qnt:settle", "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs."}]}, + {"id": "C47.requires-cohort", "rule": "shadow cohort excludes equality and admits just above its exact sample", "scenarios": ["shadow cohort excludes equality and admits just above its exact sample"], "generated": [{"profile": "shadow-layers", "witness": "shadow-cohort-below-does-not-admit"}, {"profile": "shadow-layers", "witness": "shadow-cohort-equality-does-not-admit"}, {"profile": "shadow-layers", "witness": "shadow-cohort-above-admits"}], "vectors": [], "contracts": ["C47"], "quintReplays": ["shadow-layers/shadowCohortBelowDoesNotAdmitTest", "shadow-layers/shadowCohortEqualityDoesNotAdmitTest", "shadow-layers/shadowCohortAboveAdmitsTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:shadowCohortBelowDoesNotAdmitTest", "scope": "For the tracked key{urn:id:0}#ShadowLayers and independent shadow FNV numerator3203834406, thresholds exactly one uint32unit below/equal/above the sample produce no-read/no-job below/equal and an actual C0 read/fill serialization above. Caller success remains independent of diagnostic admission."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:shadowCohortEqualityDoesNotAdmitTest", "scope": "For the tracked key{urn:id:0}#ShadowLayers and independent shadow FNV numerator3203834406, thresholds exactly one uint32unit below/equal/above the sample produce no-read/no-job below/equal and an actual C0 read/fill serialization above. Caller success remains independent of diagnostic admission."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:shadowCohortAboveAdmitsTest", "scope": "For the tracked key{urn:id:0}#ShadowLayers and independent shadow FNV numerator3203834406, thresholds exactly one uint32unit below/equal/above the sample produce no-read/no-job below/equal and an actual C0 read/fill serialization above. Caller success remains independent of diagnostic admission."}], "definitions": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:shadowFor", "scope": "For the tracked key{urn:id:0}#ShadowLayers and independent shadow FNV numerator3203834406, thresholds exactly one uint32unit below/equal/above the sample produce no-read/no-job below/equal and an actual C0 read/fill serialization above. Caller success remains independent of diagnostic admission."}, + {"ref": "formal/kernel/shadow.qnt:admitJobs", "scope": "For the tracked key{urn:id:0}#ShadowLayers and independent shadow FNV numerator3203834406, thresholds exactly one uint32unit below/equal/above the sample produce no-read/no-job below/equal and an actual C0 read/fill serialization above. Caller success remains independent of diagnostic admission."}]}, + {"id": "C48.source-disabled", "rule": "shadow source observes disabled caching scope", "scenarios": ["shadow source observes disabled caching scope"], "generated": [{"profile": "admission", "witness": "coalesced-hit-one-job"}], "vectors": [], "contracts": ["C48"], "models": [ + {"ref": "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic", "scope": "Served-hit detached shadow sources observe disabled caching; all their outcomes remain diagnostic with no dump/write effects in this profile."}]}, + {"id": "C48.ordinary-miss", "rule": "ordinary remote miss does not schedule shadow source", "scenarios": ["ordinary remote miss does not schedule shadow source"], "generated": [{"profile": "shadow-layers", "witness": "ordinary-serving-miss-has-no-diagnostic-source"}], "vectors": [], "contracts": ["C48"], "quintReplays": ["shadow-layers/ordinaryServingMissDoesNotAdmitDiagnosticSourceTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:ordinaryServingMissDoesNotAdmitDiagnosticSourceTest", "scope": "A serving-enabled remote miss with shadow100 starts exactly one enabled caller source; source success fills normally and a later no-shadow serving probe returns that value. No disabled diagnostic source or shadow verdict occurs."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:admitJobs", "scope": "A miss whose reply enables the remote layer admits no job: the Starts arm registers a dark job only under a reply that left the remote layer off, and a served job only for a remote hit."}, + {"ref": "formal/kernel/shadow.qnt:begin", "scope": "A serving-enabled remote miss with shadow100 starts exactly one enabled caller source; source success fills normally and a later no-shadow serving probe returns that value. No disabled diagnostic source or shadow verdict occurs."}, + {"ref": "formal/kernel/serving.qnt:startSource", "scope": "A serving-enabled remote miss with shadow100 starts exactly one enabled caller source; source success fills normally and a later no-shadow serving probe returns that value. No disabled diagnostic source or shadow verdict occurs."}]}, + {"id": "C49.dark-source-reuse", "rule": "ramped down shadow fills from the same caller source", "scenarios": ["ramped down shadow fills from the same caller source"], "generated": [{"profile": "shadow", "witness": "outcome:filled"}], "vectors": [], "contracts": ["C49"], "quintReplays": ["shadow/darkReadBeforeSourceWaitsForItTest"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:fillsRequireMissAndAcceptedSource", "scope": "Every held dump or write belongs to a job whose C0 found nothing and whose source was accepted: ramped-down dark work fills from the caller's own source, never a detached one, and only after that source settled."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:darkReadBeforeSourceWaitsForItTest", "scope": "A dark C0 miss released before the source holds no dump and reports nothing until the source resolves; the fill then follows from the accepted caller result."}]}, + {"id": "C49.dark-no-delay", "rule": "dark read does not delay caller source result", "scenarios": ["dark read does not delay caller source result"], "generated": [{"profile": "shadow", "witness": "source-before-c0"}], "vectors": [], "contracts": ["C49"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:sourceWorkBeforeDeadlineStillReadsTest", "scope": "The source resolves while the dark C0 read is still held: the caller completes with its value at once and the job's read stays pending."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:darkReadBeforeSourceWaitsForItTest", "scope": "The dark C0 read settles before the source: the caller stays pending until its own source resolves, then completes with that value."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:settleHeld", "scope": "Source settlement completes caller outcomes immediately even when C0 read remains pending; job progression is separate."}, + {"ref": "formal/kernel/shadow.qnt:settleJobHeld", "scope": "Source settlement completes caller outcomes immediately even when C0 read remains pending; job progression is separate."}]}, + {"id": "C50.custom-equal", "rule": "shadow comparator equal outcome is diagnostic", "scenarios": ["shadow comparator equal outcome is diagnostic"], "generated": [{"profile": "shadow", "witness": "custom-equal-overrides-values"}], "vectors": [], "contracts": ["C50"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:explicitEqualityOverridesValuesTest", "scope": "Explicit equal comparator overrides unequal values and yields one match and age sample."}]}, + {"id": "C50.custom-unequal", "rule": "shadow comparator unequal outcome is diagnostic", "scenarios": ["shadow comparator unequal outcome is diagnostic"], "generated": [{"profile": "shadow", "witness": "custom-unequal-confirms-equal-values"}], "vectors": [], "contracts": ["C50"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:explicitInequalityRequiresConfirmationTest", "scope": "Explicit unequal comparator overrides equal values, requires C1 confirmation, and only then yields mismatch/warning."}]}, + {"id": "C50.comparator-error", "rule": "shadow comparator error outcome is diagnostic", "scenarios": ["shadow comparator error outcome is diagnostic"], "generated": [{"profile": "shadow", "witness": "outcome:comparison_error"}], "vectors": [], "contracts": ["C50"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:comparisonFailureKeepsCallerTest", "scope": "Comparator error emits comparison_error without changing already acquired caller result or recording age."}]}, + {"id": "C51.changed-confirmation", "rule": "served hit shadow superseded remains diagnostic", "scenarios": ["served hit shadow superseded remains diagnostic"], "generated": [{"profile": "shadow", "witness": "different-c1-bytes-supersede"}], "vectors": [], "contracts": ["C51"], "quintReplays": ["shadow-layers/darkC0ReplacedBeforeConfirmationIsSupersededTest"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}, {"path": "src/dialcache.ts", "lines": [1220], "scope": "Compare C1 payload bytes with original C0 before confirmed mismatch."}], "evidenceNotes": ["The common confirmation rule is checked on the dark generated profile and on served-hit fixed scenarios; this witness does not establish source detachment."], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:identicalTextAndBinaryBytesConfirmMismatchTest", "scope": "A mismatch requires exactly one C1 read returning the C0 bytes; changed or absent C1 bytes are a supersession. The superseded outcome itself is defined by the confirmation judgment."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:sameDecodedValueWithDifferentBytesIsSupersededTest", "scope": "The common confirmation rule is checked on the dark generated profile and on served-hit fixed scenarios; this witness does not establish source detachment."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:darkC0ReplacedBeforeConfirmationIsSupersededTest", "scope": "In the composed shadow-layers profile a dark job's fresh C0 (value 1) differs from its source (value 2) and the frame was replaced (value 2) before the confirmation read, so the second read finds other bytes and the job ends superseded: one decode, two reads, no dump, the caller completing with its source value. A dark job, not a served hit; no repair claim."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:confirmation", "scope": "The one confirmation judgment for both lifecycles: a failed read is confirmation_error, the C0 bytes still current a mismatch, other bytes a supersession."}]}, + {"id": "C51.confirmation-age", "rule": "shadow confirmation compares payload bytes after C0 freshness expires", "scenarios": ["shadow confirmation compares payload bytes after C0 freshness expires"], "generated": [{"profile": "shadow", "witness": "shadow-confirmation-past-freshness-preserves-payload-and-age"}], "vectors": [], "contracts": ["C51"], "quintReplays": ["shadow/confirmationPastFreshnessKeepsOriginalPayloadAndAgeTest"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:confirmationPastFreshnessKeepsOriginalPayloadAndAgeTest", "scope": "C0=1 is acquired fresh and retained; source2 compares unequal and C1 is held. Advancing application time exactly60000ms crosses F while elapsed job time and physical retention stay unchanged. C1 matching bytes confirm mismatch with read count2, no repair, source caller2 preserved and age60000ms."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:settleJobRead", "scope": "C1 confirmation compares valid unfenced payload bytes without applying C0 freshness or current wall-clock age; no wall-age filter runs on the confirmation branch."}, + {"ref": "formal/kernel/shadow.qnt:settleJobLoad", "scope": "C0=1 is acquired fresh and retained; source2 compares unequal and C1 is held. Advancing application time exactly60000ms crosses F while elapsed job time and physical retention stay unchanged. C1 matching bytes confirm mismatch with read count2, no repair, source caller2 preserved and age60000ms."}, + {"ref": "formal/kernel/clock.qnt:shiftWall", "scope": "C0=1 is acquired fresh and retained; source2 compares unequal and C1 is held. Advancing application time exactly60000ms crosses F while elapsed job time and physical retention stay unchanged. C1 matching bytes confirm mismatch with read count2, no repair, source caller2 preserved and age60000ms."}]}, + {"id": "C51.confirmation-rollback", "rule": "shadow confirmation preserves payload comparison across wall clock rollback", "scenarios": ["shadow confirmation preserves payload comparison across wall clock rollback", "shadow confirmation retains future dated payload for comparison"], "generated": [{"profile": "shadow", "witness": "shadow-confirmation-rollback-keeps-payload-and-reports-offset"}], "vectors": [], "contracts": ["C51"], "quintReplays": ["shadow/confirmationRollbackKeepsPayloadAndClampsAgeTest"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:confirmationRollbackKeepsPayloadAndClampsAgeTest", "scope": "After fresh C0/source inequality starts C1, application time rolls backward1000ms. The now-future C1 still confirms identical payload bytes, preserves source caller2, writes nothing and emits mismatch with age clamped0 and remote_shadow future offset1000ms."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:settleJobRead", "scope": "C1 confirmation compares valid unfenced payload bytes without applying C0 freshness or current wall-clock age; no wall-age filter runs on the confirmation branch."}, + {"ref": "formal/kernel/clock.qnt:shiftWall", "scope": "After fresh C0/source inequality starts C1, application time rolls backward1000ms. The now-future C1 still confirms identical payload bytes, preserves source caller2, writes nothing and emits mismatch with age clamped0 and remote_shadow future offset1000ms."}, + {"ref": "formal/kernel/shadow.qnt:recordVerdict", "scope": "After fresh C0/source inequality starts C1, application time rolls backward1000ms. The now-future C1 still confirms identical payload bytes, preserves source caller2, writes nothing and emits mismatch with age clamped0 and remote_shadow future offset1000ms."}]}, + {"id": "C51.payload-representation", "rule": "Identical UTF-8 bytes confirm across text and binary representations", "scenarios": [], "generated": [{"profile": "shadow", "witness": "text-to-binary-confirmation"}, {"profile": "shadow", "witness": "binary-to-text-confirmation"}], "vectors": [], "contracts": ["C51"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:identicalTextAndBinaryBytesConfirmMismatchTest", "scope": "Text and binary C0/C1 representations with identical UTF-8 bytes confirm mismatch; the byte identity is a finite fixture encoding."}]}, + {"id": "C51.bytes-not-decoded-value", "rule": "Different payload bytes supersede even if they decode to the same value", "scenarios": [], "generated": [{"profile": "shadow", "witness": "different-bytes-same-value-superseded"}], "vectors": [], "contracts": ["C51"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:sameDecodedValueWithDifferentBytesIsSupersededTest", "scope": "Padding changes C1 bytes even when decoded value is equal, so the model produces superseded."}]}, + {"id": "C52.present-not-repaired", "rule": "ramped down present C0 is diagnosed without repair", "scenarios": ["ramped down present C0 is diagnosed without repair"], "generated": [{"profile": "shadow-layers", "witness": "dark-present-c0-never-publishes-local"}], "vectors": [], "contracts": ["C52"], "quintReplays": ["shadow-layers/darkPresentC0NeverBecomesLocalPublicationTest"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:fillsRequireMissAndAcceptedSource", "scope": "Every held dump or write belongs to a job whose C0 found nothing: a present C0 is never repaired, whatever the comparison verdict."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:darkPresentC0NeverBecomesLocalPublicationTest", "scope": "Fresh present C0=1 and caller source=2 produce a confirmed mismatch with one C1 read and zero Redis writes. Local publication of2 belongs only to the caller source; diagnostic work never repairs the present C0."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:settleJob", "scope": "Fresh present C0=1 and caller source=2 produce a confirmed mismatch with one C1 read and zero Redis writes. Local publication of2 belongs only to the caller source; diagnostic work never repairs the present C0."}]}, + {"id": "C52.undecodable-not-repaired", "rule": "dark present undecodable value is never repaired", "scenarios": ["dark present undecodable value is never repaired"], "generated": [{"profile": "shadow", "witness": "outcome:deserialization_error"}, {"profile": "shadow", "witness": "present-undecodable-c0-is-not-repaired"}], "vectors": [], "contracts": ["C52"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:fillsRequireMissAndAcceptedSource", "scope": "Every held dump or write belongs to a job whose C0 found nothing: a present C0 whose decode fails ends deserialization_error with no fill."}]}, + {"id": "C53.fill-fenced", "rule": "ramped down shadow fill respects observed fence", "scenarios": ["ramped down shadow fill respects observed fence"], "generated": [{"profile": "shadow", "witness": "outcome:fill_fenced"}], "vectors": [], "contracts": ["C53"], "quintReplays": ["shadow/fenceRejudgedAtDumpReleaseAfterRollbackTest"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:fillsClearTheirFence", "scope": "A held write was stamped after the fence its job's C0 read observed: the fence recheck at dump release (remote_writes::dispatch) is judged one step later, so a fenced fill outcome has no write."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:fenceRejudgedAtDumpReleaseAfterRollbackTest", "scope": "The fence a miss observed is judged again when the dump is released: a wall rollback below it between settlement and release ends the job fill_fenced with no write, the caller keeping its value."}]}, + {"id": "C53.confirmation-fails-open", "rule": "shadow confirmation failure does not repair cache", "scenarios": ["shadow confirmation failure does not repair cache"], "generated": [{"profile": "shadow", "witness": "outcome:confirmation_error"}], "vectors": [], "contracts": ["C53"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:fillsRequireMissAndAcceptedSource", "scope": "A confirmation read fails only for a job whose C0 was present, and every held fill belongs to a job whose C0 found nothing, so a confirmation failure never initiates a repair; caller preservation is separately replayed."}]}, + {"id": "C54.deduplication", "rule": "shadow admission drops duplicate work", "scenarios": ["shadow admission drops duplicate work"], "generated": [{"profile": "admission", "witness": "duplicate-with-free-capacity"}, {"profile": "shadow-layers", "witness": "dark-job-dedup-preserves-independent-source-values"}], "vectors": [], "contracts": ["C54"], "quintReplays": ["shadow-layers/deduplicatedJobKeepsIndependentCallerSourcesTest", "admission/duplicateDropsBeforeCapacityIsFullTest"], "models": [ + {"ref": "formal/dialcache-admission-conformance.qnt:oneJobPerIdentity", "scope": "At most one live job per identity; another same-key eligible hit drops even when capacity is not full."}, + {"ref": "formal/dialcache-admission-conformance.qnt:duplicateDropsBeforeCapacityIsFullTest", "scope": "At most one live job per identity; another same-key eligible hit drops even when capacity is not full."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:deduplicatedJobKeepsIndependentCallerSourcesTest", "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result."}], "definitions": [ + {"ref": "formal/kernel/serving.qnt:startSource", "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result."}, + {"ref": "formal/kernel/shadow.qnt:admitJobs", "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result."}, + {"ref": "formal/kernel/remote-writes.qnt:settle", "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result."}]}, + {"id": "C54.source-ownership", "rule": "shadow timeout retains capacity until external source settles", "scenarios": ["shadow timeout retains capacity until external source settles"], "generated": [{"profile": "admission", "witness": "source-timeout-keeps-slot"}, {"profile": "shadow-layers", "witness": "mixed-shadow-capacity-retains-only-owned-source"}], "vectors": [], "contracts": ["C54"], "quintReplays": ["shadow-layers/servedAndDarkJobsShareCapacityButNotSourceOwnershipTest", "admission/timeoutRetainsSourceCapacityTest"], "models": [ + {"ref": "formal/dialcache-admission-conformance.qnt:timeoutRetainsSourceCapacityTest", "scope": "Job timeout keeps raw source capacity live until source settlement, which releases it without changing caller or emitting another outcome."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:servedAndDarkJobsShareCapacityButNotSourceOwnershipTest", "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:admitJobs", "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs."}, + {"ref": "formal/kernel/shadow.qnt:expireJob", "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs."}, + {"ref": "formal/kernel/remote-writes.qnt:settle", "scope": "A served-hit job and dark job jointly fill two per-instance slots, so another key is dropped while its independent caller source still runs. At60000ms the dark-source wait releases its slot, but a timed-out served raw source still consumes the other. A distinct-key probe is dropped until that raw source settles, after which another probe admits. Late settlements do not replace served hits or fill expired jobs."}]}, + {"id": "C54.decode-ownership", "rule": "served shadow decode retains capacity after timeout until raw load settles", "scenarios": ["served shadow decode retains capacity after timeout until raw load settles"], "generated": [{"profile": "admission", "witness": "decode-timeout-keeps-slot"}, {"profile": "shadow", "witness": "late-shadow-decode-cannot-start-c1"}], "vectors": [], "contracts": ["C54"], "evidenceNotes": ["This witness proves late-effect suppression; existing admission decode-timeout-keeps-slot proves capacity ownership."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "quintReplays": ["admission/timeoutRetainsDecodeCapacityTest"], "models": [ + {"ref": "formal/dialcache-admission-conformance.qnt:timeoutRetainsDecodeCapacityTest", "scope": "Job timeout keeps raw decode capacity live until load settlement; no later confirmation is started."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:lateDecodeCannotStartConfirmationTest", "scope": "This witness proves late-effect suppression; existing admission decode-timeout-keeps-slot proves capacity ownership."}]}, + {"id": "C54.read-ownership", "rule": "shadow confirmation read retains capacity after its separate read deadline", "scenarios": ["shadow confirmation read retains capacity after its separate read deadline"], "generated": [{"profile": "shadow", "witness": "late-c1-cannot-emit-second-verdict"}], "vectors": [], "contracts": ["C54"], "evidenceNotes": ["This witness proves late-effect suppression; existing admission confirmation-timeout-keeps-slot and fixed separate-read-deadline scenario cover owned capacity.", "C54.read-ownership is not linked to timeoutRetainsConfirmationCapacityTest: that model regression exhausts the job deadline, not the separate read deadline specified by this case."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:lateConfirmationCannotEmitAnotherVerdictTest", "scope": "This witness proves late-effect suppression; existing admission confirmation-timeout-keeps-slot and fixed separate-read-deadline scenario cover owned capacity."}]}, + {"id": "C54.comparison-budget", "rule": "Comparison work can exhaust the job deadline before confirmation", "scenarios": [], "generated": [{"profile": "shadow", "witness": "comparison-crosses-deadline:9"}, {"profile": "shadow", "witness": "comparison-crosses-deadline:10"}], "vectors": [], "contracts": ["C54"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:slowComparisonTimesOutBeforeConfirmationTest", "scope": "Successful or failing comparator work reaching the job budget produces timeout before any confirmation read; caller result remains unchanged."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:slowComparisonFailureStillTimesOutTest", "scope": "Successful or failing comparator work reaching the job budget produces timeout before any confirmation read; caller result remains unchanged."}]}, + {"id": "C54.expired-before-start", "rule": "A dark job already expired before deferred work starts must issue no Redis read", "scenarios": ["elapsed source work expires dark shadow before deferred read dispatch"], "generated": [{"profile": "shadow", "witness": "source-work-before-deadline-dispatches-read"}, {"profile": "shadow", "witness": "source-work-exhausts-deferred-job"}, {"profile": "shadow", "witness": "expired-job-source-resolve-keeps-deadline"}, {"profile": "shadow", "witness": "expired-job-source-reject-keeps-deadline"}], "vectors": [], "contracts": ["C54"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:expiredSourceWorkSkipsRedis", "scope": "At 9ms source work, deferred read can start and source settlement can succeed; at exactly 10ms, no Redis read starts and late success/rejection gives the source deadline. These fixtures observe later timer progress only in complete 10ms windows."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:sourceWorkBeforeDeadlineStillReadsTest", "scope": "At 9ms source work, deferred read can start and source settlement can succeed; at exactly 10ms, no Redis read starts and late success/rejection gives the source deadline. These fixtures observe later timer progress only in complete 10ms windows."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:sourceWorkAtDeadlineSkipsDeferredReadTest", "scope": "At 9ms source work, deferred read can start and source settlement can succeed; at exactly 10ms, no Redis read starts and late success/rejection gives the source deadline. These fixtures observe later timer progress only in complete 10ms windows."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:expiredDeferredJobRetainsSourceRejectionDeadlineTest", "scope": "At 9ms source work, deferred read can start and source settlement can succeed; at exactly 10ms, no Redis read starts and late success/rejection gives the source deadline. These fixtures observe later timer progress only in complete 10ms windows."}]}, + {"id": "C55.miss-discriminator", "rule": "adapter miss with stray frame fields preserves only trustworthy miss metadata", "scenarios": ["adapter miss with stray frame fields preserves only trustworthy miss metadata"], "generated": [{"profile": "effects", "witness": "reply:14"}], "vectors": [], "contracts": ["C55"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:missDiscriminatorWinsOverFrameFieldsTest", "scope": "A miss discriminator wins over stray frame fields and starts source without decode; other metadata trust rules remain the adapterReply/releaseRead transition."}]}, + {"id": "C55.unknown-reason", "rule": "adapter unknown reason with valid fence preserves only trustworthy miss metadata", "scenarios": ["adapter unknown reason with valid fence preserves only trustworthy miss metadata", "adapter missing reason preserves only trustworthy miss metadata", "adapter unknown reason preserves only trustworthy miss metadata"], "generated": [{"profile": "effects", "witness": "reply:7"}], "vectors": [], "contracts": ["C55"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:unknownReasonKeepsValidFenceTest", "scope": "Unknown reason is normalized to unclassified while a valid future fence still suppresses serialization."}]}, + {"id": "C55.ignore-untracked-fence", "rule": "adapter untracked fence preserves only trustworthy miss metadata", "scenarios": ["adapter untracked fence preserves only trustworthy miss metadata"], "generated": [{"profile": "effects", "witness": "untracked-demotes-fenced-reply"}], "vectors": [], "contracts": ["C55"], "quintReplays": ["effects/untrackedFencedReplyRefillsAndIsReadableTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:untrackedReplyCannotCarryFenceTest", "scope": "Untracked reply strips observed fence and normalizes reason, allowing serialization."}, + {"ref": "formal/dialcache-effects-conformance.qnt:untrackedFencedReplyRefillsAndIsReadableTest", "scope": "An untracked watermark-fenced reply is normalized to an unclassified miss with zero fence; one source refill is subsequently readable without a second source."}]}, + {"id": "C56.cooperative-cancel", "rule": "read deadline requests cooperative cancellation once for the shared execution", "scenarios": ["read deadline requests cooperative cancellation once for the shared execution"], "generated": [{"profile": "effects", "witness": "read-timeout-starts-source"}], "vectors": [], "contracts": ["C56"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:readTimeoutStartsIndependentSourceDeadlineTest", "scope": "One shared read deadline requests one cancellation for two pending callers."}]}, + {"id": "C56.late-read", "rule": "late read fulfillment checks deadline before timer delivery", "scenarios": ["late read fulfillment checks deadline before timer delivery", "late read rejection checks deadline before timer delivery"], "generated": [{"profile": "effects", "witness": "read-late-settlement"}], "vectors": [], "contracts": ["C56"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:lateReadCannotBecomeHitTest", "scope": "A reply observed after elapsed read budget cannot start fresh decode even before timer delivery."}, + {"ref": "formal/dialcache-effects-conformance.qnt:lateReadRejectionUsesDeadlineCategoryTest", "scope": "late read fulfillment checks deadline before timer delivery The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}]}, + {"id": "C56.clear-read-timer", "rule": "successful read does not request cancellation after its timer is cleared", "scenarios": ["successful read does not request cancellation after its timer is cleared"], "generated": [{"profile": "effects", "witness": "successful-read-has-no-late-cancel"}], "vectors": [], "contracts": ["C56"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest", "scope": "A read accepted before deadline does not request cancellation when decoding later crosses the budget."}, + {"ref": "formal/dialcache-effects-conformance.qnt:successfulReadClearsDeadlineBeforeDecodeTest", "scope": "successful read does not request cancellation after its timer is cleared The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}]}, + {"id": "C57.recovery-age", "rule": "recovery age is sampled after asynchronous decode and only on served outcome", "scenarios": ["recovery age is sampled after asynchronous decode and only on served outcome", "recovery miss emits no served value age", "recovery deserialization_error emits no served value age"], "generated": [{"profile": "recovery", "witness": "recovery-age-sampled-at-successful-decode"}], "vectors": [], "contracts": ["C57"], "evidenceNotes": ["Witness checks successful decode age against observed diagnostic; existing agesRequireRecovery invariant checks no nonserved age samples."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:agesRequireRecovery", "scope": "Witness checks successful decode age against observed diagnostic; existing agesRequireRecovery invariant checks no nonserved age samples."}], "definitions": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:releaseLoad", "scope": "Successful recovery samples retained-frame age after decode; miss/error/fresh decode do not append recovery age."}]}, + {"id": "C57.shadow-age", "rule": "shadow mismatch samples original frame age at verdict", "scenarios": ["shadow mismatch samples original frame age at verdict", "shadow match samples original frame age at verdict"], "generated": [{"profile": "shadow", "witness": "age-at-verdict"}], "vectors": [], "contracts": ["C57"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:confirmationKeepsOriginalAgeTest", "scope": "A mismatch records C0's age at verdict, not the replacement C1 timestamp."}]}, + {"id": "C57.clamp-age", "rule": "shadow verdict age clamps application clock rollback to zero", "scenarios": ["shadow verdict age clamps application clock rollback to zero"], "generated": [{"profile": "shadow", "witness": "age-clamped-after-rollback"}, {"profile": "shadow", "witness": "shadow-confirmation-rollback-keeps-payload-and-reports-offset"}], "vectors": [], "contracts": ["C57"], "quintReplays": ["shadow/confirmationRollbackKeepsPayloadAndClampsAgeTest"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:ageClampsAfterWallRollbackTest", "scope": "A match age sample after wall rollback clamps to zero."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:confirmationRollbackKeepsPayloadAndClampsAgeTest", "scope": "A held C1 confirmation after1000ms wall rollback still confirms mismatch, and reported retained-C0 age is exactly0 rather than a negative or absolute duration."}], "definitions": [ + {"ref": "formal/kernel/clock.qnt:shiftWall", "scope": "A held C1 confirmation after1000ms wall rollback still confirms mismatch, and reported retained-C0 age is exactly0 rather than a negative or absolute duration."}, + {"ref": "formal/kernel/shadow.qnt:recordVerdict", "scope": "A held C1 confirmation after1000ms wall rollback still confirms mismatch, and reported retained-C0 age is exactly0 rather than a negative or absolute duration."}]}, + {"id": "C57.future-offset", "rule": "serving future offset uses the observing layer and positive seconds", "scenarios": ["serving future offset uses the observing layer and positive seconds", "dark future offset uses the observing layer and positive seconds", "confirmation future offset uses the observing layer and positive seconds"], "generated": [{"profile": "effects", "witness": "event:futureOffset"}, {"profile": "effects", "witness": "future-offset-observing-layer-positive-seconds"}, {"profile": "shadow", "witness": "shadow-confirmation-rollback-keeps-payload-and-reports-offset"}, {"profile": "shadow", "witness": "future-dark-c0-reports-offset-and-fills-semantic-miss"}, {"profile": "shadow", "witness": "late-dark-read-reports-offset-without-reviving-job"}], "vectors": [], "contracts": ["C57"], "quintReplays": ["effects/futureFrameReportsPositiveObservingOffsetTest", "shadow/confirmationRollbackKeepsPayloadAndClampsAgeTest", "shadow/futureDarkAcquisitionReportsOffsetAndFillsMissTest", "shadow/futureLateDarkReadKeepsTimeoutAndReportsOffsetTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:futureFrameReportsPositiveObservingOffsetTest", "scope": "Serving future frame emits one remote futureOffset at +1000 modeled milliseconds, projected as +1 public second, skips serializer and preserves source error. Dark and confirmation observing locations remain outside this model."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:confirmationRollbackKeepsPayloadAndClampsAgeTest", "scope": "A successful C1 read of now-future bytes reports exactly one futureTimestampOffset event with namespace urn, useCase Behavior, keyType id, layer remote_shadow and offset1000ms. The frame remains a valid C1 payload-identity participant and confirms mismatch without repair."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:futureDarkAcquisitionReportsOffsetAndFillsMissTest", "scope": "A fresh seeded C0 becomes1000ms future after wall rollback. Dark acquisition emits exactly one futureTimestampOffset event labeled urn/Behavior/id/remote_shadow with1000ms; it treats the frame as semantic miss, never decodes it, and may fill from accepted source2."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:futureLateDarkReadKeepsTimeoutAndReportsOffsetTest", "scope": "A raw dark read returns after the10ms job/caller deadline but inside its separate60s read budget. Its now-future frame emits remote_shadow offset990ms while caller timeout and single job timeout verdict remain; no decode, serialization or write can resume."}], "definitions": [ + {"ref": "formal/kernel/metrics.qnt:settleRead", "scope": "Only an otherwise readable future frame produces a positive offset, attributed to the remote layer in this profile. Other observing layers and unit conversion require their binding evidence."}, + {"ref": "formal/kernel/metrics.qnt:remote", "scope": "Only an otherwise readable future frame produces a positive offset, attributed to the remote layer in this profile. Other observing layers and unit conversion require their binding evidence."}, + {"ref": "formal/kernel/shadow.qnt:releaseRead", "scope": "A successful C1 read of now-future bytes reports exactly one futureTimestampOffset event with namespace urn, useCase Behavior, keyType id, layer remote_shadow and offset1000ms. The frame remains a valid C1 payload-identity participant and confirms mismatch without repair."}]}, + {"id": "C58.shared-trail", "rule": "coalesced remote failure records one leader trail and one follower event", "scenarios": ["coalesced remote failure records one leader trail and one follower event"], "generated": [{"profile": "effects", "witness": "shared-failure-preserves-leader-and-follower-trail"}], "vectors": [], "contracts": ["C58"], "quintReplays": ["effects/coalescedFailureKeepsOneLeaderAndFollowerTrailTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:coalescedFailureKeepsOneLeaderAndFollowerTrailTest", "scope": "Two coalesced callers share one failed read/source trail. Public event ordering includes one remote request, one process follower, remote cache_read error then fallback error, with both original caller errors."}], "definitions": [ + {"ref": "formal/dialcache-effects-conformance.qnt:beginCall", "scope": "Each follower adds a coalesced event while the single read/source owner records the failure trail; exact native label attribution is checked by replay."}, + {"ref": "formal/kernel/metrics.qnt:settleRead", "scope": "Each follower adds a coalesced event while the single read/source owner records the failure trail; exact native label attribution is checked by replay."}, + {"ref": "formal/kernel/metrics.qnt:sourceDone", "scope": "Each follower adds a coalesced event while the single read/source owner records the failure trail; exact native label attribution is checked by replay."}]}, + {"id": "C58.recovered-failure", "rule": "recovered source failure remains a fallback diagnostic", "scenarios": ["recovered source failure remains a fallback diagnostic"], "generated": [{"profile": "recovery", "witness": "recovery-keeps-source-failure-trail"}], "vectors": [], "contracts": ["C58"], "quintReplays": ["recovery/recoveredValueKeepsOriginalFallbackDiagnosticTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:recoveredValueKeepsOriginalFallbackDiagnosticTest", "scope": "Successful retained recovery preserves one original remote fallback error diagnostic, one classifier/decode and served outcome with no shared publication."}], "definitions": [ + {"ref": "formal/kernel/recovery.qnt:failure", "scope": "A source rejection records its fallback error before deciding whether stale recovery may succeed."}]}, + {"id": "C59.remote-includes-decode", "rule": "remote get duration includes fresh decoding without spending a source budget", "scenarios": ["remote get duration includes fresh decoding without spending a source budget"], "generated": [{"profile": "effects", "witness": "duration:load"}], "vectors": [], "contracts": ["C59"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:readDurationIncludesDecodeTest", "scope": "Remote get duration includes delayed fresh decode while accepted decoding starts no source budget."}, + {"ref": "formal/dialcache-effects-conformance.qnt:acquiredDecodeSurvivesInvalidationAndDeadlineTest", "scope": "Remote get duration includes delayed fresh decode while accepted decoding starts no source budget."}]}, + {"id": "C59.source-excludes-publication", "rule": "accepted publication time is separate from reported source duration", "scenarios": ["accepted publication time is separate from reported source duration"], "generated": [{"profile": "effects", "witness": "duration:dump"}], "vectors": [], "contracts": ["C59"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:sourceDurationExcludesPublicationTest", "scope": "Source duration stays at its accepted settlement interval while serialization has a separate later duration."}]}, + {"id": "C60.logging-default-off", "rule": "Omitting the logging flag leaves mismatch warnings disabled", "scenarios": [], "generated": [{"profile": "shadow", "witness": "omitted-logging-defaults-off"}, {"profile": "shadow", "witness": "omitted-shadow-logging-keeps-mismatch-metrics-only"}], "vectors": [], "contracts": ["C60"], "quintReplays": ["shadow/omittedLoggingKeepsMismatchMetricsOnlyTest"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:omittedLoggingKeepsMismatchMetricsOnlyTest", "scope": "The comparator fixture omits logging entirely. Confirmed mismatch still emits one age sample and verdict, with zero warning and zero configuration failure; public action history never includes a false logging reply."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:admitDark", "scope": "Omitted-logging fixture starts false, admission captures it, and mismatch warning emission consults the captured flag."}, + {"ref": "formal/kernel/shadow.qnt:beginDark", "scope": "Omitted-logging fixture starts false, admission captures it, and mismatch warning emission consults the captured flag."}, + {"ref": "formal/kernel/shadow.qnt:recordVerdict", "scope": "Omitted-logging fixture starts false, admission captures it, and mismatch warning emission consults the captured flag."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:initialize", "scope": "The comparator fixture omits logging entirely. Confirmed mismatch still emits one age sample and verdict, with zero warning and zero configuration failure; public action history never includes a false logging reply."}]}, + {"id": "C60.logging-enabled", "rule": "mismatch warning enabled with mismatch verdict", "scenarios": ["mismatch warning enabled with mismatch verdict"], "generated": [{"profile": "shadow", "witness": "mismatch-logging:true"}], "vectors": [], "contracts": ["C60"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:explicitInequalityRequiresConfirmationTest", "scope": "Confirmed mismatch warns only after C1; accepted enabled logging remains in effect despite later policy disable."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:acceptedLoggingSurvivesPolicyChangeTest", "scope": "Confirmed mismatch warns only after C1; accepted enabled logging remains in effect despite later policy disable."}]}, + {"id": "C60.no-warning-on-match", "rule": "mismatch warning enabled with match verdict", "scenarios": ["mismatch warning enabled with match verdict"], "generated": [{"profile": "shadow", "witness": "enabled-logging-match-has-no-warning"}], "vectors": [], "contracts": ["C60"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:warningsRequireMismatch", "scope": "Warnings never exceed the confirmed mismatches, so a match adds none. This constrains warnings for match but does not test every logger implementation."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:recordVerdict", "scope": "A match samples the C0 age and warns nothing; only a confirmed mismatch under the logging the job captured warns."}]}, + {"id": "C60.no-warning-on-superseded", "rule": "mismatch warning enabled with superseded verdict", "scenarios": ["mismatch warning enabled with superseded verdict"], "generated": [{"profile": "shadow", "witness": "enabled-logging-superseded-has-no-warning"}], "vectors": [], "contracts": ["C60"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:warningsRequireMismatch", "scope": "Warnings never exceed the confirmed mismatches, so a supersession adds none."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:recordVerdict", "scope": "A supersession is neither a match nor a confirmed mismatch: no age sample and no warning."}]}, + {"id": "C60.invalid-logging-policy", "rule": "Malformed runtime mismatch logging records configuration failure and leaves an eligible job active with logging off", "scenarios": ["malformed runtime mismatch logging keeps comparison and suppresses warnings"], "generated": [{"profile": "shadow", "witness": "invalid-logging-compares-without-warning"}], "vectors": [], "contracts": ["C60"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:invalidLoggingCannotBeCaptured", "scope": "An invalid logging flag is never captured as enabled. Admission still records one configuration error, comparison reaches mismatch, and no warning is emitted."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:invalidLoggingKeepsComparisonWithoutWarningTest", "scope": "An invalid logging flag is never captured as enabled. Admission still records one configuration error, comparison reaches mismatch, and no warning is emitted."}]}, + {"id": "W01.key-identity", "rule": "Construct interoperable logical, value, and watermark keys", "scenarios": [], "generated": [], "vectors": ["protocol/keyVectors/*"], "contracts": ["W01"], "generatedVectors": [{"artifact": "formal/quint-key-vectors.json", "group": "keyVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-key-protocol.qnt:successfulKeysHaveOneOperationDelimiter", "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests."}, + {"ref": "formal/dialcache-key-protocol.qnt:encodingSeparatesReservedDelimitersTest", "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests."}, + {"ref": "formal/dialcache-key-protocol.qnt:surrogatePairEncodesOneFourByteScalarTest", "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests."}, + {"ref": "formal/dialcache-key-protocol.qnt:trackedArgumentsDoNotChangeWatermarkTest", "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests."}], "definitions": [ + {"ref": "formal/dialcache-key-protocol.qnt:encodeComponent", "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests."}, + {"ref": "formal/dialcache-key-protocol.qnt:encodedEntity", "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests."}, + {"ref": "formal/dialcache-key-protocol.qnt:encodedArguments", "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests."}, + {"ref": "formal/dialcache-key-protocol.qnt:constructKey", "scope": "UTF-8 percent escaping with uppercase hex and URI-safe punctuation, one operation delimiter, ordered raw arguments, frame suffix, and tracked watermark grouping; all ASCII plus bounded Unicode sequences moved through every identity/argument component. Caller-supplied configuration omission belongs to native construction tests."}]}, + {"id": "W01.invalid-identity", "rule": "Reject unsupported key identities, including tracked component braces, namespace braces and unpaired UTF-16 code units in escaped identities.", "scenarios": [], "generated": [], "vectors": ["protocol/invalidKeyVectors/*"], "contracts": ["W01"], "generatedVectors": [{"artifact": "formal/quint-key-vectors.json", "group": "invalidKeyVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-key-protocol.qnt:keyAcceptanceRespectsTextAndHashTagDomain", "scope": "Reject unpaired UTF-16 units in each encoded component, namespace braces in either mode, and keyType/id braces only when tracked. Raw unit overrides construct actual malformed native inputs; removed properties and host type errors remain fixed/native API boundaries."}, + {"ref": "formal/dialcache-key-protocol.qnt:rejectedKeysExposeNoPartialIdentity", "scope": "Reject unpaired UTF-16 units in each encoded component, namespace braces in either mode, and keyType/id braces only when tracked. Raw unit overrides construct actual malformed native inputs; removed properties and host type errors remain fixed/native API boundaries."}, + {"ref": "formal/dialcache-key-protocol.qnt:malformedUtf16RejectsInsteadOfReplacementTest", "scope": "Reject unpaired UTF-16 units in each encoded component, namespace braces in either mode, and keyType/id braces only when tracked. Raw unit overrides construct actual malformed native inputs; removed properties and host type errors remain fixed/native API boundaries."}, + {"ref": "formal/dialcache-key-protocol.qnt:bracesDependOnEntityTrackingTest", "scope": "Reject unpaired UTF-16 units in each encoded component, namespace braces in either mode, and keyType/id braces only when tracked. Raw unit overrides construct actual malformed native inputs; removed properties and host type errors remain fixed/native API boundaries."}], "definitions": [ + {"ref": "formal/dialcache-key-protocol.qnt:validKey", "scope": "Reject unpaired UTF-16 units in each encoded component, namespace braces in either mode, and keyType/id braces only when tracked. Raw unit overrides construct actual malformed native inputs; removed properties and host type errors remain fixed/native API boundaries."}, + {"ref": "formal/dialcache-key-protocol.qnt:containsBrace", "scope": "Reject unpaired UTF-16 units in each encoded component, namespace braces in either mode, and keyType/id braces only when tracked. Raw unit overrides construct actual malformed native inputs; removed properties and host type errors remain fixed/native API boundaries."}]}, + {"id": "W02.sorted-arguments", "rule": "Normalize scalar arguments with prescribed UTF-16 name ordering, omission, formatting and escaping; preserve explicitly supplied ordered argument pairs.", "scenarios": [], "generated": [], "vectors": ["protocol/normalizeArgsVectors/*"], "contracts": ["W02"], "generatedVectors": [{"artifact": "formal/quint-key-vectors.json", "group": "normalizeArgsVectors", "name": "*"}, {"artifact": "formal/quint-key-vectors.json", "group": "keyVectors", "name": "Quint key 416: ordered duplicate arguments"}, {"artifact": "formal/quint-key-vectors.json", "group": "keyVectors", "name": "Quint key 417: ordered duplicate arguments"}, {"artifact": "formal/quint-key-vectors.json", "group": "keyVectors", "name": "Quint key 418: ordered duplicate arguments"}, {"artifact": "formal/quint-key-vectors.json", "group": "keyVectors", "name": "Quint key 419: ordered duplicate arguments"}], "models": [ + {"ref": "formal/dialcache-key-protocol.qnt:normalizedNamesAreOrderedAndValuesAssociated", "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries."}, + {"ref": "formal/dialcache-key-protocol.qnt:normalizedIntegersRetainExactMagnitude", "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries."}, + {"ref": "formal/dialcache-key-protocol.qnt:normalizedNamesUseUtf16OrderingTest", "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries."}, + {"ref": "formal/dialcache-key-protocol.qnt:normalizedPrimitivesPreserveFalsyAndOmittedValuesTest", "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries."}, + {"ref": "formal/dialcache-key-protocol.qnt:signedBigintsPreserveEveryDecimalDigitTest", "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries."}, + {"ref": "formal/dialcache-key-protocol.qnt:orderedKeyArgumentsRetainDuplicatesTest", "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries."}], "definitions": [ + {"ref": "formal/dialcache-key-protocol.qnt:textBefore", "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries."}, + {"ref": "formal/dialcache-key-protocol.qnt:decimalUnits", "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries."}, + {"ref": "formal/dialcache-key-protocol.qnt:argumentText", "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries."}, + {"ref": "formal/dialcache-key-protocol.qnt:normalizeArguments", "scope": "Separate normalized records from caller-ordered key pairs: omit Absent, retain null/false/true/empty/literal text, sort UTF-16 names including astral versus BMP order, preserve prototype-like own names and exact signed safe integers/bigints with magnitude fitting i64. Float shortest-decimal/scientific/-0/nonfinite and arbitrary bigint width are explicit native binding boundaries."}]}, + {"id": "W03.cohort-assignment", "rule": "Serving and shadow cohorts use their specified independent deterministic assignment", "scenarios": [], "generated": [], "vectors": ["protocol/rampVectors/*"], "contracts": ["W03"], "generatedVectors": [{"artifact": "formal/quint-key-vectors.json", "group": "rampVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-key-protocol.qnt:cohortNumeratorsAreUnsignedAndBoundariesStrict", "scope": "Compute FNV-1a over UTF-16 units of logical key plus local/remote/shadow discriminator with XOR and modulo-2^32 multiplication. Generated exact numerators are converted only to the public percent representation. Strict admission is checked in Quint; runtime-boundaries and shadow-layers replay actual equal/below/above policy consequences."}, + {"ref": "formal/dialcache-key-protocol.qnt:publishedCohortNumeratorsRemainStableTest", "scope": "Compute FNV-1a over UTF-16 units of logical key plus local/remote/shadow discriminator with XOR and modulo-2^32 multiplication. Generated exact numerators are converted only to the public percent representation. Strict admission is checked in Quint; runtime-boundaries and shadow-layers replay actual equal/below/above policy consequences."}], "definitions": [ + {"ref": "formal/dialcache-key-protocol.qnt:xorUnit", "scope": "Compute FNV-1a over UTF-16 units of logical key plus local/remote/shadow discriminator with XOR and modulo-2^32 multiplication. Generated exact numerators are converted only to the public percent representation. Strict admission is checked in Quint; runtime-boundaries and shadow-layers replay actual equal/below/above policy consequences."}, + {"ref": "formal/dialcache-key-protocol.qnt:fnv1a", "scope": "Compute FNV-1a over UTF-16 units of logical key plus local/remote/shadow discriminator with XOR and modulo-2^32 multiplication. Generated exact numerators are converted only to the public percent representation. Strict admission is checked in Quint; runtime-boundaries and shadow-layers replay actual equal/below/above policy consequences."}, + {"ref": "formal/dialcache-key-protocol.qnt:cohortHash", "scope": "Compute FNV-1a over UTF-16 units of logical key plus local/remote/shadow discriminator with XOR and modulo-2^32 multiplication. Generated exact numerators are converted only to the public percent representation. Strict admission is checked in Quint; runtime-boundaries and shadow-layers replay actual equal/below/above policy consequences."}]}, + {"id": "W04.frame-encoding", "rule": "Encode version, timestamp, UTF-8 and binary payloads in interoperable frames", "scenarios": [], "generated": [], "vectors": ["protocol/frameVectors/*"], "contracts": ["W04"], "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "frameVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-frame-vectors.qnt:encodedFrameKeepsHeaderAndPayload", "scope": "Concrete version-1 header and big-endian timestamp bytes, text UTF-16 replacement and binary identity across the declared finite byte/code-unit inputs; actual frame bytes checked in both ports."}, + {"ref": "formal/dialcache-frame-vectors.qnt:payloadUnpairedSurrogateUsesReplacementTest", "scope": "Concrete version-1 header and big-endian timestamp bytes, text UTF-16 replacement and binary identity across the declared finite byte/code-unit inputs; actual frame bytes checked in both ports."}]}, + {"id": "W04.tracked-decoder", "rule": "Classify tracked frames and malformed watermarks with specified precedence", "scenarios": [], "generated": [], "vectors": ["protocol/trackedDecodeVectors/*"], "contracts": ["W04"], "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "trackedDecodeVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-redis-protocol.qnt:nilValueIsValueAbsent", "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors."}, + {"ref": "formal/dialcache-redis-protocol.qnt:fenceCanPrecedeEncodingError", "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors."}, + {"ref": "formal/dialcache-redis-protocol.qnt:malformedWatermarkPrecedesEncodingError", "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors."}, + {"ref": "formal/dialcache-redis-protocol.qnt:trackedZeroTimestampIsNotHit", "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors."}, + {"ref": "formal/dialcache-redis-protocol.qnt:encodingErrorRequiresSupportedFrame", "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors."}, + {"ref": "formal/dialcache-redis-protocol.qnt:fencedEncodingTest", "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors."}, + {"ref": "formal/dialcache-redis-protocol.qnt:malformedWatermarkTest", "scope": "Abstract reply/frame/watermark/encoding classes check classification precedence; exact bytes and host numeric boundaries remain vectors."}, + {"ref": "formal/dialcache-frame-vectors.qnt:trackedHitsStrictlyClearValidFence", "scope": "Tracked decoder matrix covers missing/short/unsupported/zero/supported frames, decimal watermark validity and payload tags; paired miss metadata and exact decoded scalar/byte output are replayed. Invalid host reply object types stay in the existing abstraction and native binding tests."}, + {"ref": "formal/dialcache-frame-vectors.qnt:absentValueKeepsItsOwnClassification", "scope": "Tracked decoder matrix covers missing/short/unsupported/zero/supported frames, decimal watermark validity and payload tags; paired miss metadata and exact decoded scalar/byte output are replayed. Invalid host reply object types stay in the existing abstraction and native binding tests."}, + {"ref": "formal/dialcache-frame-vectors.qnt:trackedFencePrecedesEncodingErrorTest", "scope": "Tracked decoder matrix covers missing/short/unsupported/zero/supported frames, decimal watermark validity and payload tags; paired miss metadata and exact decoded scalar/byte output are replayed. Invalid host reply object types stay in the existing abstraction and native binding tests."}]}, + {"id": "W04.untracked-decoder", "rule": "Classify untracked frames without applying watermarks", "scenarios": [], "generated": [], "vectors": ["protocol/untrackedDecodeVectors/*"], "contracts": ["W04"], "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "untrackedDecodeVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-frame-vectors.qnt:untrackedIgnoresMalformedWatermarkTest", "scope": "Untracked decoder ignores watermark content and permits zero timestamp while preserving byte/scalar output and payload-encoding errors in its finite frame matrix."}, + {"ref": "formal/dialcache-frame-vectors.qnt:decodedTextContainsOnlyScalars", "scope": "Untracked decoder ignores watermark content and permits zero timestamp while preserving byte/scalar output and payload-encoding errors in its finite frame matrix."}], "definitions": [ + {"ref": "formal/dialcache-redis-protocol.qnt:classify", "scope": "Untracked classification ignores watermark validity/fence; exact bytes and numeric input boundaries remain protocol vectors."}, + {"ref": "formal/dialcache-redis-protocol.qnt:decode", "scope": "Untracked classification ignores watermark validity/fence; exact bytes and numeric input boundaries remain protocol vectors."}]}, + {"id": "W04.invalid-timestamps", "rule": "Reject unsafe, negative or fractional timestamps before mutation", "scenarios": [], "generated": [], "vectors": ["protocol/invalidTimestampVectors/*"], "contracts": ["W04"], "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "invalidTimestampVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-frame-vectors.qnt:writerRejectsInvalidNumericDomain", "scope": "Writer rejects negative, fractional, first-unsafe, NaN and positive/negative infinity inputs; native bindings convert explicit numeric tags only, while Quint computes rejection."}]}, + {"id": "W05.duration-bounds", "rule": "Round native write durations up within the supported positive bound", "scenarios": [], "generated": [], "vectors": ["protocol/durationVectors/*"], "contracts": ["W05"], "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "durationVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-frame-vectors.qnt:acceptedDurationWithinCeiling", "scope": "Rational finite inputs and explicit nonfinite tags distinguish ceil-to-positive-integer acceptance through 365 days, exclusive overflow, zero and invalid inputs; actual adapter-level duration APIs replay the Quint prediction."}, + {"ref": "formal/dialcache-frame-vectors.qnt:physicalDurationRoundsUpWithinBoundTest", "scope": "Rational finite inputs and explicit nonfinite tags distinguish ceil-to-positive-integer acceptance through 365 days, exclusive overflow, zero and invalid inputs; actual adapter-level duration APIs replay the Quint prediction."}]}, + {"id": "W06.envelope-markers", "rule": "Escape raw marker bytes while decoding supported legacy envelopes", "scenarios": [], "generated": [], "vectors": ["protocol/envelopeVectors/*"], "contracts": ["W06"], "generatedVectors": [{"artifact": "formal/quint-envelope-vectors.json", "group": "envelopeVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-envelope-vectors.qnt:rawEscapeIsLossless", "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:escapeConsumesExactlyOnePrefix", "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:unknownZeroPrefixPassesThroughUnchanged", "scope": "A binary payload whose leading zero is followed by nothing or by a byte above 2 is legacy raw data: the read outcome is passthrough with every byte returned. Complements the one-prefix unescape invariant; together they cover every zero-prefixed vector input."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:escapedCompressedMarkerRemainsLiteralTest", "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:unknownLegacyZeroPrefixRemainsUntouchedTest", "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:corruptCompressionPreservesMarkedBytesTest", "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result."}], "definitions": [ + {"ref": "formal/dialcache-envelope-vectors.qnt:escapedRaw", "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:readEnvelope", "scope": "Fifteen explicit raw binary prefixes cover marker escaping, single-prefix unescape, unknown legacy zero prefixes and corrupt-marked fallback; native wrappers replay every result."}]}, + {"id": "W06.compressed-decode", "rule": "Decode fixed compressed UTF-8 and binary envelopes", "scenarios": [], "generated": [], "vectors": ["protocol/compressedDecodeVectors/*"], "contracts": ["W06"], "generatedVectors": [{"artifact": "formal/quint-envelope-vectors.json", "group": "compressedDecodeVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-envelope-vectors.qnt:readFailuresPreserveOriginalBinary", "scope": "Both markers decode ten independently verified raw-block codec fixtures, including malformed UTF-8 and BOM/scalar boundaries; three rejected codec headers and injected output limits retain exact original marked bytes. Arbitrary zstd streams, dictionaries and windows are native boundaries."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:successfulReadRespectsMarkerAndLimit", "scope": "Both markers decode ten independently verified raw-block codec fixtures, including malformed UTF-8 and BOM/scalar boundaries; three rejected codec headers and injected output limits retain exact original marked bytes. Arbitrary zstd streams, dictionaries and windows are native boundaries."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:corruptCompressionPreservesMarkedBytesTest", "scope": "Both markers decode ten independently verified raw-block codec fixtures, including malformed UTF-8 and BOM/scalar boundaries; three rejected codec headers and injected output limits retain exact original marked bytes. Arbitrary zstd streams, dictionaries and windows are native boundaries."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:decoderLimitKeepsRawBytesTest", "scope": "Both markers decode ten independently verified raw-block codec fixtures, including malformed UTF-8 and BOM/scalar boundaries; three rejected codec headers and injected output limits retain exact original marked bytes. Arbitrary zstd streams, dictionaries and windows are native boundaries."}], "definitions": [ + {"ref": "formal/dialcache-envelope-vectors.qnt:readEnvelope", "scope": "Both markers decode ten independently verified raw-block codec fixtures, including malformed UTF-8 and BOM/scalar boundaries; three rejected codec headers and injected output limits retain exact original marked bytes. Arbitrary zstd streams, dictionaries and windows are native boundaries."}]}, + {"id": "W07.compression-selection", "rule": "Compress only at the byte threshold and only when stored size shrinks", "scenarios": [], "generated": [], "vectors": ["protocol/compressionWriteVectors/*"], "contracts": ["W07"], "generatedVectors": [{"artifact": "formal/quint-envelope-vectors.json", "group": "compressionWriteVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-envelope-vectors.qnt:compressionUsesByteThresholdAndStrictShrink", "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:utf8ThresholdCountsBytesTest", "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:compressionTieKeepsRawRepresentationTest", "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:shrinkComparedWithEscapedRawBytesTest", "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:thresholdPrecedesWriteLimitTest", "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:writeLimitPrecedesCompressionTest", "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload."}], "definitions": [ + {"ref": "formal/dialcache-envelope-vectors.qnt:payloadBytes", "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:escapedRaw", "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:selectWrite", "scope": "Fourteen concrete payloads cross three UTF-8 byte thresholds and three injected maximum-output caps. Each native level-3 codec byte count is independently verified; Quint computes each binding selection, strict shrink against escaped raw bytes, marker and stored size. Native compressed-size differences may produce different compression diagnostics but preserve logical payload."}]}, + {"id": "W08.legacy-reading", "rule": "Disabling new compression does not disable reading previously compressed values", "scenarios": [], "generated": [{"profile": "recovery-read", "witness": "tracked-compressed-recovery-is-request-only"}], "vectors": ["protocol/compressedDecodeVectors/*"], "contracts": ["W08"], "quintReplays": ["recovery-read/compressedRecoveryMemoizesWithoutLocalPublicationTest"], "generatedVectors": [{"artifact": "formal/quint-envelope-vectors.json", "group": "compressedDecodeVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-envelope-vectors.qnt:readDoesNotConsultNewWritePolicy", "scope": "The envelope reader ignores the model new-write policy input. Its native helper has no policy argument; combine primitive vectors with the actual compression:false recovery-read cached compressed history for the cache binding."}, + {"ref": "formal/dialcache-envelope-vectors.qnt:disabledNewWritesStillReadLegacyCompressionTest", "scope": "The envelope reader ignores the model new-write policy input. Its native helper has no policy argument; combine primitive vectors with the actual compression:false recovery-read cached compressed history for the cache binding."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryMemoizesWithoutLocalPublicationTest", "scope": "Actual cache with new compression writes disabled still decodes the acquired compressed stale candidate and memoizes only in its request scope. This connects the unconditional envelope reader to resolved cache policy."}], "definitions": [ + {"ref": "formal/dialcache-envelope-vectors.qnt:readEnvelope", "scope": "The envelope reader ignores the model new-write policy input. Its native helper has no policy argument; combine primitive vectors with the actual compression:false recovery-read cached compressed history for the cache binding."}]}, + {"id": "W04.strict-fence", "rule": "Reject a tracked frame equal to its watermark", "scenarios": [], "generated": [], "vectors": ["protocol/trackedDecodeVectors/equal timestamp is fenced"], "contracts": ["W04", "C33"], "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "trackedDecodeVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-redis-protocol.qnt:fenceCanPrecedeEncodingError", "scope": "Tracked supported positive frames at equality are fenced; zero timestamp cannot yield a hit."}, + {"ref": "formal/dialcache-redis-protocol.qnt:trackedZeroTimestampIsNotHit", "scope": "Tracked supported positive frames at equality are fenced; zero timestamp cannot yield a hit."}, + {"ref": "formal/dialcache-tracked-invalidation.qnt:servedSnapshotClearedObservedFence", "scope": "Every served tracked snapshot has timestamp strictly above its acquired watermark."}, + {"ref": "formal/dialcache-frame-vectors.qnt:trackedHitsStrictlyClearValidFence", "scope": "Tracked hit requires positive timestamp strictly greater than an observed valid watermark. A distinguishing equality regression rejects before unsupported payload encoding."}, + {"ref": "formal/dialcache-frame-vectors.qnt:trackedFencePrecedesEncodingErrorTest", "scope": "Tracked hit requires positive timestamp strictly greater than an observed valid watermark. A distinguishing equality regression rejects before unsupported payload encoding."}, + {"ref": "formal/dialcache-rule-checks.qnt:fenceBoundaryIsExclusive", "scope": "Finite symbolic timestamp/watermark domains independently characterize strict timestamp-greater-than-fence acceptance; wire numeric validation is separate."}]}, + {"id": "C38.retention", "contracts": ["C38", "W09"], "rule": "Preserve persistence and longer TTLs while meeting the required retention floor", "scenarios": [], "generated": [], "vectors": ["invalidation/absent marker gets the two hour floor", "invalidation/large buffer extends retention beyond the floor", "invalidation/existing longer TTL never shrinks", "invalidation/persistent valid marker stays persistent"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 000: zero buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 001: zero buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 003: zero buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 004: zero buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 024: retention above floor / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 025: retention above floor / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 027: retention above floor / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 028: retention above floor / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 036: maximum buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 037: maximum buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 039: maximum buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 040: maximum buffer / valid persistent"}], "models": [ + {"ref": "formal/dialcache-invalidation-transition.qnt:successfulRetentionMeetsBothFloors", "scope": "Finite results meet the two-hour floor and cutoff-relative value-retention horizon exactly, preserve longer string TTL and preserve string persistence."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:stringsKeepExistingRetention", "scope": "Finite results meet the two-hour floor and cutoff-relative value-retention horizon exactly, preserve longer string TTL and preserve string persistence."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:finiteRetentionIsExact", "scope": "Finite results meet the two-hour floor and cutoff-relative value-retention horizon exactly, preserve longer string TTL and preserve string persistence."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:absentMarkerGetsRetentionFloorTest", "scope": "Finite results meet the two-hour floor and cutoff-relative value-retention horizon exactly, preserve longer string TTL and preserve string persistence."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:longBufferExtendsRequiredRetentionTest", "scope": "Finite results meet the two-hour floor and cutoff-relative value-retention horizon exactly, preserve longer string TTL and preserve string persistence."}], "definitions": [ + {"ref": "formal/dialcache-invalidation-transition.qnt:invalidated", "scope": "Finite results meet the two-hour floor and cutoff-relative value-retention horizon exactly, preserve longer string TTL and preserve string persistence."}]}, + {"id": "C38.marker-repair", "contracts": ["C38", "W09"], "rule": "Malformed strings preserve their existing retention; unrelated Redis types receive finite repair", "scenarios": [], "generated": [], "vectors": ["invalidation/malformed finite marker is repaired with longer TTL preserved", "invalidation/malformed persistent marker stays persistent", "invalidation/wrong type persistent marker gets finite repair", "invalidation/wrong type marker does not preserve unrelated TTL"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 005: zero buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 006: zero buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 007: zero buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 008: zero buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 010: zero buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 011: zero buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 017: buffered cutoff / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 018: buffered cutoff / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 019: buffered cutoff / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 020: buffered cutoff / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 022: buffered cutoff / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 023: buffered cutoff / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 029: retention above floor / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 030: retention above floor / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 031: retention above floor / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 032: retention above floor / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 034: retention above floor / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 035: retention above floor / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 041: maximum buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 042: maximum buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 043: maximum buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 044: maximum buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 046: maximum buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 047: maximum buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 053: maximum safe sum / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 054: maximum safe sum / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 055: maximum safe sum / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 056: maximum safe sum / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 058: maximum safe sum / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 059: maximum safe sum / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 065: leading decimal zeros / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 066: leading decimal zeros / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 067: leading decimal zeros / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 068: leading decimal zeros / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 070: leading decimal zeros / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 071: leading decimal zeros / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 245: maximum timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 246: maximum timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 247: maximum timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 248: maximum timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 250: maximum timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 251: maximum timestamp / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 257: zero timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 258: zero timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 259: zero timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 260: zero timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 262: zero timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 263: zero timestamp / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 281: all-zero decimal text / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 282: all-zero decimal text / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 283: all-zero decimal text / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 284: all-zero decimal text / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 286: all-zero decimal text / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 287: all-zero decimal text / empty stored string"}], "models": [ + {"ref": "formal/dialcache-invalidation-transition.qnt:stringsKeepExistingRetention", "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:unrelatedTypesReceiveFiniteRepair", "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:persistentMalformedStringStaysPersistentTest", "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:wrongTypeLongTtlIsNotInheritedTest", "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:wrongTypePersistenceIsNotInheritedTest", "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:emptyStringRetentionIsPreservedTest", "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention."}], "definitions": [ + {"ref": "formal/dialcache-invalidation-transition.qnt:invalidated", "scope": "Malformed/unsafe/empty string values repair to canonical watermarks while retaining string TTL/persistence rules; ordered-list wrong types repair to finite required TTL without inheriting unrelated retention."}]}, + {"id": "C39.numeric-limits", "contracts": ["C39", "W09"], "rule": "Accept the maximum valid future buffer and safe timestamp sum", "scenarios": [], "generated": [], "vectors": ["invalidation/maximum future buffer is supported", "invalidation/maximum safe sum is supported"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 036: maximum buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 037: maximum buffer / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 038: maximum buffer / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 039: maximum buffer / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 040: maximum buffer / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 041: maximum buffer / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 042: maximum buffer / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 043: maximum buffer / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 044: maximum buffer / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 045: maximum buffer / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 046: maximum buffer / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 047: maximum buffer / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 048: maximum safe sum / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 049: maximum safe sum / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 050: maximum safe sum / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 051: maximum safe sum / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 052: maximum safe sum / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 053: maximum safe sum / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 054: maximum safe sum / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 055: maximum safe sum / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 056: maximum safe sum / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 057: maximum safe sum / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 058: maximum safe sum / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 059: maximum safe sum / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 240: maximum timestamp / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 241: maximum timestamp / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 242: maximum timestamp / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 243: maximum timestamp / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 244: maximum timestamp / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 245: maximum timestamp / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 246: maximum timestamp / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 247: maximum timestamp / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 248: maximum timestamp / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 249: maximum timestamp / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 250: maximum timestamp / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 251: maximum timestamp / empty stored string"}], "models": [ + {"ref": "formal/dialcache-invalidation-transition.qnt:argumentValidationIsExact", "scope": "Maximum365day buffer and maximum safe timestamp/sum accepted with exact canonical decimal output; surrounding invalid boundary forms have separate preservation evidence."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:maximumBufferAndTimestampSumAreAcceptedTest", "scope": "Maximum365day buffer and maximum safe timestamp/sum accepted with exact canonical decimal output; surrounding invalid boundary forms have separate preservation evidence."}], "definitions": [ + {"ref": "formal/dialcache-invalidation-transition.qnt:parseSafeDecimal", "scope": "Maximum365day buffer and maximum safe timestamp/sum accepted with exact canonical decimal output; surrounding invalid boundary forms have separate preservation evidence."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:invalidated", "scope": "Maximum365day buffer and maximum safe timestamp/sum accepted with exact canonical decimal output; surrounding invalid boundary forms have separate preservation evidence."}]}, + {"id": "C38.buffer-cutoff", "contracts": ["C38", "W09"], "rule": "Add the requested future buffer to the invalidation timestamp", "scenarios": [], "generated": [], "vectors": ["invalidation/buffer determines marker cutoff"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 012: buffered cutoff / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 024: retention above floor / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 036: maximum buffer / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 060: leading decimal zeros / absent"}], "models": [ + {"ref": "formal/dialcache-invalidation-transition.qnt:successfulCutoffIsExactMaximum", "scope": "Without a greater prior cutoff, timestamp plus requested future buffer becomes the exact marker value; long buffers also change retention."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:longBufferExtendsRequiredRetentionTest", "scope": "Without a greater prior cutoff, timestamp plus requested future buffer becomes the exact marker value; long buffers also change retention."}], "definitions": [ + {"ref": "formal/dialcache-invalidation-transition.qnt:invalidated", "scope": "Without a greater prior cutoff, timestamp plus requested future buffer becomes the exact marker value; long buffers also change retention."}]}, + {"id": "C39.decimal-normalization", "contracts": ["C39", "W09"], "rule": "Normalize accepted leading-zero decimal watermark arguments", "scenarios": [], "generated": [], "vectors": ["invalidation/leading decimal zeros are canonicalized"], "generatedVectors": [{"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 060: leading decimal zeros / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 061: leading decimal zeros / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 062: leading decimal zeros / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 063: leading decimal zeros / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 064: leading decimal zeros / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 065: leading decimal zeros / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 066: leading decimal zeros / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 067: leading decimal zeros / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 068: leading decimal zeros / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 069: leading decimal zeros / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 070: leading decimal zeros / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 071: leading decimal zeros / empty stored string"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 276: all-zero decimal text / absent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 277: all-zero decimal text / valid finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 278: all-zero decimal text / future finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 279: all-zero decimal text / valid longer TTL"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 280: all-zero decimal text / valid persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 281: all-zero decimal text / malformed finite"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 282: all-zero decimal text / malformed persistent"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 283: all-zero decimal text / ordered finite list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 284: all-zero decimal text / ordered persistent list"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 285: all-zero decimal text / leading-zero stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 286: all-zero decimal text / unsafe stored decimal"}, {"artifact": "formal/quint-invalidation-vectors.json", "name": "Quint 287: all-zero decimal text / empty stored string"}], "models": [ + {"ref": "formal/dialcache-invalidation-transition.qnt:outputIsCanonicalDecimalString", "scope": "Leading-zero decimal arguments are accepted and output zero/positive watermark text is canonical; valid prior values can still dominate the buffered proposal."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:decimalZerosAreCanonicalizedTest", "scope": "Leading-zero decimal arguments are accepted and output zero/positive watermark text is canonical; valid prior values can still dominate the buffered proposal."}], "definitions": [ + {"ref": "formal/dialcache-invalidation-transition.qnt:decimalText", "scope": "Leading-zero decimal arguments are accepted and output zero/positive watermark text is canonical; valid prior values can still dominate the buffered proposal."}, + {"ref": "formal/dialcache-invalidation-transition.qnt:parseSafeDecimal", "scope": "Leading-zero decimal arguments are accepted and output zero/positive watermark text is canonical; valid prior values can still dominate the buffered proposal."}]}, + {"scenarios": ["null coalesce leaf bypasses caching without replacing retained entries"], "generated": [{"profile": "runtime-boundaries", "witness": "bypass-preserves-cache:null-coalesce"}], "vectors": [], "id": "C16.explicit-null-leaf", "contracts": ["C16", "C20"], "rule": "Explicit null coalesce is invalid and bypasses existing cached entries without replacing them", "quintReplays": ["runtime-boundaries/explicitNullCoalesceBypassesWithoutReplacingRemoteTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:invalidInvocationPolicyNeverTouchesStorage", "scope": "Malformed boolean leaves are abstracted as invalid invocation admission. The check asserts no storage effects and retained memo; the fixed scenario binds actual JSON null to this invalid branch."}, + {"ref": "formal/dialcache-core.qnt:invalidBooleanOverlayBypassesAndPreservesMemoTest", "scope": "Malformed boolean leaves are abstracted as invalid invocation admission. The check asserts no storage effects and retained memo; the fixed scenario binds actual JSON null to this invalid branch."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:explicitNullCoalesceBypassesWithoutReplacingRemoteTest", "scope": "Explicit null coalesce is invalid and bypasses existing cached entries without replacing them. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}]}, + {"scenarios": ["tracked local-only calls publish and reuse source values"], "generated": [{"profile": "layers", "witness": "tracked-local-only-hit"}], "vectors": [], "id": "C31.local-only-publication", "contracts": ["C31"], "rule": "Tracked local-only calls retain eligible local source publication", "quintReplays": ["layers/trackedWithoutRemotePublishesReusableLocalTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:trackedWithoutRemoteStillPublishesLocalTest", "scope": "Tracked local-only calls retain eligible local source publication. This check covers the bounded model clause: trackedWithoutRemoteStillPublishesLocalTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-layers-conformance.qnt:trackedWithoutRemotePublishesReusableLocalTest", "scope": "Tracked local-only calls retain eligible local source publication. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}], "definitions": [ + {"ref": "formal/dialcache-core.qnt:loaderSuccessWithoutRemote", "scope": "Tracked status alone does not prevent local publication when remote serving did not participate."}]}, + {"scenarios": ["tracked remote ramp zero retains local source publication"], "generated": [{"profile": "layers", "witness": "tracked-remote-disabled-local-hit"}], "vectors": [], "id": "C31.ramped-down-publication", "contracts": ["C31"], "rule": "Tracked calls excluded from remote serving retain eligible local source publication", "models": [ + {"ref": "formal/dialcache-core.qnt:trackedWithoutRemoteStillPublishesLocalTest", "scope": "Tracked calls excluded from remote serving retain eligible local source publication. This check covers the bounded model clause: trackedWithoutRemoteStillPublishesLocalTest. Host representations and other feature combinations retain separate fixed/native evidence."}], "definitions": [ + {"ref": "formal/dialcache-core.qnt:skipRemote", "scope": "Remote policy exclusion traverses the no-remote source path, preserving eligible local publication for tracked calls."}, + {"ref": "formal/dialcache-core.qnt:loaderSuccessWithoutRemote", "scope": "Remote policy exclusion traverses the no-remote source path, preserving eligible local publication for tracked calls."}]}, + {"scenarios": [], "generated": [], "vectors": ["protocol/trackedDecodeVectors/*", "protocol/untrackedDecodeVectors/*", "protocol/compressedDecodeVectors/*"], "id": "W04.malformed-text", "contracts": ["W04", "W06"], "rule": "Direct and decompressed text use maximal-subpart UTF-8 replacement without BOM removal; binary remains exact", "generatedVectors": [{"artifact": "formal/quint-frame-vectors.json", "group": "trackedDecodeVectors", "name": "*"}, {"artifact": "formal/quint-frame-vectors.json", "group": "untrackedDecodeVectors", "name": "*"}], "models": [ + {"ref": "formal/dialcache-frame-vectors.qnt:decodedTextContainsOnlyScalars", "scope": "Pure UTF-8 maximal-subpart consumption and UTF-16 writer replacement compute expected Unicode scalars/bytes; finite lead/continuation/truncation/overlong/surrogate/ceiling/BOM inputs replay against real codecs. Zstd wrapper binding uses separate generated envelope cases."}, + {"ref": "formal/dialcache-frame-vectors.qnt:maximalSubpartConsumesAcceptedPrefixOnceTest", "scope": "Pure UTF-8 maximal-subpart consumption and UTF-16 writer replacement compute expected Unicode scalars/bytes; finite lead/continuation/truncation/overlong/surrogate/ceiling/BOM inputs replay against real codecs. Zstd wrapper binding uses separate generated envelope cases."}, + {"ref": "formal/dialcache-frame-vectors.qnt:malformedSurrogateBytesRemainSeparateErrorsTest", "scope": "Pure UTF-8 maximal-subpart consumption and UTF-16 writer replacement compute expected Unicode scalars/bytes; finite lead/continuation/truncation/overlong/surrogate/ceiling/BOM inputs replay against real codecs. Zstd wrapper binding uses separate generated envelope cases."}, + {"ref": "formal/dialcache-frame-vectors.qnt:payloadUnpairedSurrogateUsesReplacementTest", "scope": "Pure UTF-8 maximal-subpart consumption and UTF-16 writer replacement compute expected Unicode scalars/bytes; finite lead/continuation/truncation/overlong/surrogate/ceiling/BOM inputs replay against real codecs. Zstd wrapper binding uses separate generated envelope cases."}]}, + {"id": "C27.decode-failure-refill", "rule": "A failed fresh decode falls through to the source and may refill Redis when the read itself granted publication authority.", "contracts": ["C27"], "scenarios": ["deserialization failure refills from source"], "generated": [{"profile": "effects", "witness": "failed-decode-refills"}], "vectors": [], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:decodeFailureMayRefillTest", "scope": "A failed fresh decode falls through to the source and may refill Redis when the read itself granted publication authority. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}]}, + {"id": "C33.reject-future-before-decode", "rule": "At initial serving or recovery acquisition, a future-dated frame is rejected before deserialization; later shadow confirmation has a separate payload-identity contract.", "contracts": ["C33"], "scenarios": ["future frame is rejected before deserialization"], "generated": [{"profile": "policy", "witness": "rollback-rejects-future-remote"}], "vectors": [], "evidenceNotes": ["The model rejects an acquired future frame and excludes it from recovery; generated rollback evidence exercises future rejection, while fixed scenarios exercise direct future timestamps before deserialization."], "quintReplays": ["recovery/futureFrameDoesNotCarryMissFenceTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:futureFrameDoesNotCarryMissFenceTest", "scope": "The model rejects an acquired future frame and excludes it from recovery; generated rollback evidence exercises future rejection, while fixed scenarios exercise direct future timestamps before deserialization."}]}, + {"id": "C33.reject-unsafe-before-decode", "rule": "An unsafe frame timestamp is rejected before deserialization or stale-candidate retention.", "contracts": ["C33"], "scenarios": ["unsafe frame is rejected before deserialization"], "generated": [{"profile": "recovery-read", "witness": "unsafe-timestamp-skips-serializer-and-refills"}], "vectors": [], "evidenceNotes": ["Verification model abstracts invalid frame structure; wire vectors separately distinguish unsafe timestamps from malformed/version/encoding fields."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "quintReplays": ["recovery-read/unsafeTimestampSkipsSerializerAndAllowsRefillTest", "recovery-read/unsafeTimestampAtTheWatermarkStillRefillsTest"], "models": [ + {"ref": "formal/dialcache-stale-recovery.qnt:invalidFrameNeverBecomesRecoveryCandidateTest", "scope": "Verification model abstracts invalid frame structure; wire vectors separately distinguish unsafe timestamps from malformed/version/encoding fields."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:unsafeTimestampSkipsSerializerAndAllowsRefillTest", "scope": "A real frame with timestamp 2^53+1 and supported payload encoding never reaches the serializer; source refill remains allowed and is verified by a later public hit. Payload envelope decoding precedes core timestamp validation; this case does not assert timestamp validation before payload encoding checks."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:unsafeTimestampAtTheWatermarkStillRefillsTest", "scope": "An unsafe stamp above a watermark raised at the same instant is visible and never fresh: the read holds no decode and its miss refills unfenced with the policy retention."}], "definitions": [ + {"ref": "formal/kernel/remote-io.qnt:settleRead", "scope": "A real frame with timestamp 2^53+1 and supported payload encoding never reaches the serializer; source refill remains allowed and is verified by a later public hit. Payload envelope decoding precedes core timestamp validation; this case does not assert timestamp validation before payload encoding checks."}]}, + {"id": "C33.reject-version-before-decode", "rule": "An unsupported frame version is rejected before payload deserialization.", "contracts": ["C33"], "scenarios": ["unsupported version frame is rejected before deserialization"], "generated": [{"profile": "recovery-read", "witness": "unsupported-version-skips-serializer-and-refills"}], "vectors": [], "evidenceNotes": ["The decoder classifies unsupported frame versions before consulting payload encoding. Fixed cache-path scenarios establish that this miss skips application deserialization."], "quintReplays": ["recovery-read/unsupportedVersionSkipsSerializerAndAllowsRefillTest", "recovery-read/unsupportedVersionUnderRaisedWatermarkIsAFencedMissTest"], "models": [ + {"ref": "formal/dialcache-redis-protocol.qnt:unsupportedFramePrecedesEncodingError", "scope": "The decoder classifies unsupported frame versions before consulting payload encoding. Fixed cache-path scenarios establish that this miss skips application deserialization."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:unsupportedVersionSkipsSerializerAndAllowsRefillTest", "scope": "Unsupported version-2 bytes never reach the serializer; source refill remains allowed and a subsequent independent request reads the new value."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:unsupportedVersionUnderRaisedWatermarkIsAFencedMissTest", "scope": "An unsupported-version frame under a watermark raised at the same instant is read as a miss that carries the fence: no decode is held and the refill stamped at that instant is fenced out, so nothing is dumped or written."}], "definitions": [ + {"ref": "formal/kernel/remote-io.qnt:settleRead", "scope": "Unsupported version-2 bytes never reach the serializer; source refill remains allowed and a subsequent independent request reads the new value."}]}, + {"id": "C45.recheck-before-decode", "rule": "A retained candidate reaching its exclusive maximum age before source failure is rejected without starting its decode.", "contracts": ["C45"], "scenarios": ["stale candidate crossing M before decoding is rejected"], "generated": [{"profile": "recovery-read", "witness": "maximum-before-decode-preserves-original-error-without-load"}], "vectors": [], "evidenceNotes": ["The recovery-read profile now exports and requires the maximum-before-decode witness: a retained compressed candidate reaches M before source rejection, preserving the original error without starting decode. The earlier recovery models and fixed scenario remain complementary evidence."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery-read/maximumAgeBeforeDecodeKeepsOriginalErrorTest", "recovery/maximumAgeBeforeDecodePreservesSourceTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:maximumAgeBeforeDecodePreservesSourceTest", "scope": "This bounded regression retains a candidate at M-1, advances to M before source rejection, and checks a source-error result with no load and one recovery miss. The separate recovery-read replay and required witness additionally bind compressed bytes and original source-error identity."}, + {"ref": "formal/dialcache-stale-recovery.qnt:maximumAgeBeforeDecodeSkipsLoadingTest", "scope": "This abstract regression advances a retained candidate to its maximum age before the recovery check, preserving the source-rejection category without decoding or request publication. The separate recovery-read replay and required witness additionally bind compressed bytes and original source-error identity."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:maximumAgeBeforeDecodeKeepsOriginalErrorTest", "scope": "A compressed retained candidate acquired at M-1 reaches M before source rejection; the original source error survives without decompression/serializer work or shared publication."}], "definitions": [ + {"ref": "formal/kernel/remote-io.qnt:settleLoader", "scope": "A compressed retained candidate acquired at M-1 reaches M before source rejection; the original source error survives without decompression/serializer work or shared publication."}]}, + {"id": "C50.served-match-diagnostic", "rule": "A served-hit shadow match keeps the originally returned value and emits a match without cache repair.", "contracts": ["C50"], "scenarios": ["served hit shadow match remains diagnostic"], "generated": [{"profile": "admission", "witness": "outcome:match"}], "vectors": [], "models": [ + {"ref": "formal/dialcache-admission-conformance.qnt:callsKeepAcquiredValue", "scope": "A served-hit shadow match keeps the originally returned value and emits a match without cache repair. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}, + {"ref": "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic", "scope": "A served-hit shadow match keeps the originally returned value and emits a match without cache repair. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}]}, + {"id": "C50.served-mismatch-diagnostic", "rule": "A confirmed served-hit shadow mismatch keeps the originally returned value and does not repair the cache.", "contracts": ["C50"], "scenarios": ["served hit shadow mismatch remains diagnostic"], "generated": [{"profile": "admission", "witness": "outcome:mismatch"}], "vectors": [], "models": [ + {"ref": "formal/dialcache-admission-conformance.qnt:callsKeepAcquiredValue", "scope": "A confirmed served-hit shadow mismatch keeps the originally returned value and does not repair the cache. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}, + {"ref": "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic", "scope": "A confirmed served-hit shadow mismatch keeps the originally returned value and does not repair the cache. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}]}, + {"id": "C53.source-error-keeps-caller", "rule": "A detached shadow source failure reports its diagnostic outcome without replacing the value already served to the caller.", "contracts": ["C53"], "scenarios": ["shadow source error does not replace caller value"], "generated": [{"profile": "admission", "witness": "outcome:source_error"}], "vectors": [], "models": [ + {"ref": "formal/dialcache-admission-conformance.qnt:callsKeepAcquiredValue", "scope": "A detached shadow source failure reports its diagnostic outcome without replacing the value already served to the caller. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}, + {"ref": "formal/dialcache-admission-conformance.qnt:jobsAreDiagnostic", "scope": "A detached shadow source failure reports its diagnostic outcome without replacing the value already served to the caller. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}]}, + {"id": "C20.invalid-coalesce", "rule": "An invalid runtime coalesce leaf bypasses every layer and sharing rather than inheriting or coercing the invalid value.", "contracts": ["C20"], "scenarios": ["invalid runtime coalesce bypasses all cache layers"], "generated": [{"profile": "runtime-boundaries", "witness": "bypass-preserves-cache:invalid-coalesce"}], "vectors": [], "evidenceNotes": ["The core model abstracts malformed invocation-level leaves as invalid admission and checks bypass plus preserved memo. Fixed scenarios supply the actual malformed coalesce/requestLocal values."], "quintReplays": ["runtime-boundaries/invalidCoalesceBypassesWithoutReplacingRemoteTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:invalidInvocationPolicyNeverTouchesStorage", "scope": "The core model abstracts malformed invocation-level leaves as invalid admission and checks bypass plus preserved memo. Fixed scenarios supply the actual malformed coalesce/requestLocal values."}, + {"ref": "formal/dialcache-core.qnt:invalidBooleanOverlayBypassesAndPreservesMemoTest", "scope": "The core model abstracts malformed invocation-level leaves as invalid admission and checks bypass plus preserved memo. Fixed scenarios supply the actual malformed coalesce/requestLocal values."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:invalidCoalesceBypassesWithoutReplacingRemoteTest", "scope": "An invalid runtime coalesce leaf bypasses every layer and sharing rather than inheriting or coercing the invalid value.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:invalidBooleanLeavesBypassAllCaching", "scope": "An invalid runtime coalesce leaf bypasses every layer and sharing rather than inheriting or coercing the invalid value.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}]}, + {"id": "C20.invalid-request-local", "rule": "An invalid runtime requestLocal leaf bypasses every layer rather than disabling only request memoization.", "contracts": ["C20"], "scenarios": ["invalid runtime requestLocal bypasses all cache layers"], "generated": [{"profile": "runtime-boundaries", "witness": "bypass-preserves-cache:invalid-request-local"}], "vectors": [], "evidenceNotes": ["The core model abstracts malformed invocation-level leaves as invalid admission and checks bypass plus preserved memo. Fixed scenarios supply the actual malformed coalesce/requestLocal values."], "quintReplays": ["runtime-boundaries/invalidRequestLocalBypassesWithoutReplacingRemoteTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:invalidInvocationPolicyNeverTouchesStorage", "scope": "The core model abstracts malformed invocation-level leaves as invalid admission and checks bypass plus preserved memo. Fixed scenarios supply the actual malformed coalesce/requestLocal values."}, + {"ref": "formal/dialcache-core.qnt:invalidBooleanOverlayBypassesAndPreservesMemoTest", "scope": "The core model abstracts malformed invocation-level leaves as invalid admission and checks bypass plus preserved memo. Fixed scenarios supply the actual malformed coalesce/requestLocal values."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:invalidRequestLocalBypassesWithoutReplacingRemoteTest", "scope": "An invalid runtime requestLocal leaf bypasses every layer rather than disabling only request memoization.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:invalidBooleanLeavesBypassAllCaching", "scope": "An invalid runtime requestLocal leaf bypasses every layer rather than disabling only request memoization.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}]}, + {"id": "C42.operation-denial", "rule": "An operation recovery denial replaces an instance allow predicate and preserves the original source failure.", "contracts": ["C42"], "scenarios": ["recovery deny overrides allow policy safely"], "generated": [{"profile": "recovery", "witness": "operation-denial-overrides-instance-allow"}], "vectors": [], "quintReplays": ["recovery/operationDenialReplacesInstanceAllowTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:operationDenialReplacesInstanceAllowTest", "scope": "An operation recovery denial replaces an instance allow predicate and preserves the original source failure. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}]}, + {"id": "C54.dump-ownership", "rule": "A timed-out shadow job retains its capacity while its serialization is unfinished; late serialization cannot initiate a write.", "contracts": ["C54"], "scenarios": ["shadow timeout retains held dump capacity and ignores late completion"], "generated": [{"profile": "shadow", "witness": "late-shadow-dump-cannot-dispatch-write"}], "vectors": [], "evidenceNotes": ["This witness proves late-effect suppression only. Fixed capacity probes must remain attached to this case."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:lateFillSerializationCannotDispatchWriteTest", "scope": "This witness proves late-effect suppression only. Fixed capacity probes must remain attached to this case."}]}, + {"id": "C54.write-ownership", "rule": "A timed-out shadow job retains its capacity while a dispatched write is unfinished; late completion cannot produce a second outcome.", "contracts": ["C54"], "scenarios": ["shadow timeout retains held write capacity and ignores late completion"], "generated": [{"profile": "shadow", "witness": "late-shadow-write-cannot-change-caller-or-verdict"}], "vectors": [], "evidenceNotes": ["This witness proves post-timeout completion does not alter result/verdict; fixed capacity probe proves retained slot."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:lateFillWriteCannotEmitAnotherVerdictTest", "scope": "This witness proves post-timeout completion does not alter result/verdict; fixed capacity probe proves retained slot."}]}, + {"id": "C54.dark-read-ownership", "rule": "A timed-out dark read retains capacity until the raw read settles, and its late result cannot initiate decoding or publication.", "contracts": ["C54"], "scenarios": ["shadow read timeout retains raw read capacity"], "generated": [{"profile": "shadow", "witness": "late-c0-cannot-start-new-shadow-work"}], "vectors": [], "evidenceNotes": ["This witness proves late-effect suppression only. Capacity retention is a separate fixed-scenario observation for the dark read."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:lateDarkReadCannotStartDecodeOrFillTest", "scope": "This witness proves late-effect suppression only. Capacity retention is a separate fixed-scenario observation for the dark read."}]}, + {"id": "C06.absent-distinct-from-text", "rule": "An absent value and the literal string undefined remain distinct cacheable results.", "contracts": ["C06"], "scenarios": ["literal undefined string is distinct from absent result"], "generated": [{"profile": "runtime-boundaries", "witness": "absent-distinct-from-text:request"}, {"profile": "runtime-boundaries", "witness": "absent-distinct-from-text:local"}, {"profile": "runtime-boundaries", "witness": "absent-distinct-from-text:remote"}], "vectors": [], "quintReplays": ["runtime-boundaries/requestAbsenceAndLiteralTextStayDistinctTest", "runtime-boundaries/localAbsenceAndLiteralTextStayDistinctTest", "runtime-boundaries/remoteAbsenceAndLiteralTextStayDistinctTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:requestAbsenceAndLiteralTextStayDistinctTest", "scope": "Both actual absence and literal string undefined settle as independent same-key source results and are distinguished by subsequent request/local/remote reads."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:localAbsenceAndLiteralTextStayDistinctTest", "scope": "Both actual absence and literal string undefined settle as independent same-key source results and are distinguished by subsequent request/local/remote reads."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteAbsenceAndLiteralTextStayDistinctTest", "scope": "Both actual absence and literal string undefined settle as independent same-key source results and are distinguished by subsequent request/local/remote reads."}]}, + {"id": "C24.independent-source-budgets", "rule": "Uncoalesced same-key callers each receive their full source budget from their own source start; one timeout does not shorten another budget.", "contracts": ["C24"], "scenarios": ["uncoalesced callers have independent source deadlines"], "generated": [{"profile": "independent", "witness": "later-source-survives-earlier-deadline"}, {"profile": "independent", "witness": "later-source-expires-at-own-deadline"}], "vectors": [], "evidenceNotes": ["The independent-source submodel checks each recorded source start and captured budget; the generated independent profile supplies per-call source/read ownership and the fixed scenario isolates different source start times."], "quintReplays": ["independent/staggeredSourceStartsKeepIndependentBudgetsTest", "independent/staggeredSourcesExpireAtTheirOwnDeadlineTest"], "models": [ + {"ref": "formal/dialcache-independent-conformance.qnt:eachSourceKeepsItsFullBudget", "scope": "Two uncoalesced same-key callers start sources five milliseconds apart. First timeout does not cancel the second, which can succeed at elapsed11 or time out at its own elapsed15 deadline. Both reads acquire fenced storage, so recovery cannot mask shortened deadlines. Clock advance delivers modeled due timers; no timer-undelivered acceptance claim."}, + {"ref": "formal/dialcache-independent-conformance.qnt:staggeredSourceStartsKeepIndependentBudgetsTest", "scope": "Two uncoalesced same-key callers start sources five milliseconds apart. First timeout does not cancel the second, which can succeed at elapsed11 or time out at its own elapsed15 deadline. Both reads acquire fenced storage, so recovery cannot mask shortened deadlines. Clock advance delivers modeled due timers; no timer-undelivered acceptance claim."}, + {"ref": "formal/dialcache-independent-conformance.qnt:staggeredSourcesExpireAtTheirOwnDeadlineTest", "scope": "Two uncoalesced same-key callers start sources five milliseconds apart. First timeout does not cancel the second, which can succeed at elapsed11 or time out at its own elapsed15 deadline. Both reads acquire fenced storage, so recovery cannot mask shortened deadlines. Clock advance delivers modeled due timers; no timer-undelivered acceptance claim."}, + {"ref": "formal/dialcache-independent-connection.qnt:independentSourceOriginsMatchContract", "scope": "The independent profile reconstructs source starts and caller ownership from preceding read/decode events or owned read deadlines during time advance, then compares actual modeled source origins and call-to-source links. Read-deadline correctness remains a profile obligation."}], "definitions": [ + {"ref": "formal/kernel/deadlines.qnt:deliver", "scope": "Two uncoalesced same-key callers start sources five milliseconds apart. First timeout does not cancel the second, which can succeed at elapsed11 or time out at its own elapsed15 deadline. Both reads acquire fenced storage, so recovery cannot mask shortened deadlines. Clock advance delivers modeled due timers; no timer-undelivered acceptance claim."}, + {"ref": "formal/kernel/remote-io.qnt:startLoader", "scope": "Two uncoalesced same-key callers start sources five milliseconds apart. First timeout does not cancel the second, which can succeed at elapsed11 or time out at its own elapsed15 deadline. Both reads acquire fenced storage, so recovery cannot mask shortened deadlines. Clock advance delivers modeled due timers; no timer-undelivered acceptance claim."}]}, + {"id": "C23.policy-does-not-spend-source-budget", "rule": "Waiting for runtime policy does not consume the subsequent source budget.", "contracts": ["C23"], "scenarios": ["policy resolution does not spend the source deadline"], "generated": [{"profile": "source-budgets", "witness": "policy-wait-does-not-spend-source-budget"}], "vectors": [], "evidenceNotes": ["The model abstracts pre-source waiting as cache lookup and independently checks a full budget from source start. The fixed policy-delay scenario binds runtime-provider waiting to that rule."], "quintReplays": ["source-budgets/heldPolicyDoesNotSpendSourceBudgetTest"], "models": [ + {"ref": "formal/dialcache-source-budgets-conformance.qnt:acceptedSourceRespectsItsOwnStart", "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim."}, + {"ref": "formal/dialcache-source-budgets-conformance.qnt:heldPolicyDoesNotSpendSourceBudgetTest", "scope": "Held policy and source gates, eight callers, and local-only storage exercise default/unbounded/ten-millisecond budgets. Public result and subsequent local reuse distinguish source deadline ownership, pre-source policy time, and enabled key-error behavior; no remote/read/shadow timing claim."}, + {"ref": "formal/dialcache-source-connection.qnt:sourceOriginsMatchContract", "scope": "Each source-budgets source start projects the preceding external clock and captured mode into a separate start/budget record; the executing profile fields must agree."}]}, + {"id": "C30.original-source-error", "rule": "Observer failure preserves the identity of the original source rejection.", "contracts": ["C30"], "scenarios": ["observer failures preserve original source rejection"], "generated": [{"profile": "effects", "witness": "observer-failure-source-error"}], "vectors": [], "quintReplays": ["effects/observerFailuresCannotReplaceSourceErrorTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:observerFailuresCannotReplaceSourceErrorTest", "scope": "Observer failure preserves the identity of the original source rejection. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}]}, + {"id": "C54.unbounded-source-bounded-shadow", "rule": "Disabling the caller source deadline leaves detached shadow work subject to a finite job deadline.", "contracts": ["C54"], "scenarios": ["shadow remains bounded when source deadline is disabled"], "generated": [{"profile": "shadow-layers", "witness": "unbounded-caller-outlives-released-dark-job"}], "vectors": [], "quintReplays": ["shadow-layers/unboundedCallerSurvivesDarkJobDeadlineTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:unboundedCallerSurvivesDarkJobDeadlineTest", "scope": "At the finite60000ms dark-job deadline an explicitly unbounded caller remains pending. A same-key second dark read is admitted, proving release of the old diagnostic slot; the first source later returns its value without late fill, while the second can start its own fill."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:expireJob", "scope": "At the finite60000ms dark-job deadline an explicitly unbounded caller remains pending. A same-key second dark read is admitted, proving release of the old diagnostic slot; the first source later returns its value without late fill, while the second can start its own fill."}, + {"ref": "formal/kernel/remote-writes.qnt:settle", "scope": "At the finite60000ms dark-job deadline an explicitly unbounded caller remains pending. A same-key second dark read is admitted, proving release of the old diagnostic slot; the first source later returns its value without late fill, while the second can start its own fill."}]}, + {"id": "C54.unowned-caller-releases-slot", "rule": "An expired dark job can release its capacity while an independently owned unbounded caller source continues.", "contracts": ["C54"], "scenarios": ["dark shadow releases capacity while unbounded caller source continues"], "generated": [{"profile": "shadow-layers", "witness": "unbounded-caller-outlives-released-dark-job"}], "vectors": [], "evidenceNotes": ["The shadow profile's late-read regression checks independent caller settlement after diagnostic timeout without modeling slot reuse. The shadow-layers profile additionally exports and requires an explicitly unbounded caller schedule: a second same-key dark read proves the expired job released its slot, and the original caller later succeeds without a late fill. Fixed scenarios retain their native budget and capacity probes."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "quintReplays": ["shadow-layers/unboundedCallerSurvivesDarkJobDeadlineTest"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:lateDarkReadCannotStartDecodeOrFillTest", "scope": "The caller's source settles before its dark job's budget expires and the late C0 read then drains with no decode, fill or detached source; the profile runs one caller at a time and does not model slot reuse or finite-versus-unbounded source budgets. The separate shadow-layers regression and required witness establish slot release with an explicitly unbounded caller by admitting a second same-key dark read."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:unboundedCallerSurvivesDarkJobDeadlineTest", "scope": "At the finite60000ms dark-job deadline an explicitly unbounded caller remains pending. A same-key second dark read is admitted, proving release of the old diagnostic slot; the first source later returns its value without late fill, while the second can start its own fill."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:expireJob", "scope": "At the finite60000ms dark-job deadline an explicitly unbounded caller remains pending. A same-key second dark read is admitted, proving release of the old diagnostic slot; the first source later returns its value without late fill, while the second can start its own fill."}, + {"ref": "formal/kernel/remote-writes.qnt:settle", "scope": "At the finite60000ms dark-job deadline an explicitly unbounded caller remains pending. A same-key second dark read is admitted, proving release of the old diagnostic slot; the first source later returns its value without late fill, while the second can start its own fill."}]}, + {"id": "C53.dark-propagated-timeout", "rule": "A timeout error returned by the caller source is a dark source failure, distinct from expiration of the shadow job deadline.", "contracts": ["C53"], "scenarios": ["dark shadow distinguishes source timeout from its own deadline"], "generated": [{"profile": "shadow-layers", "witness": "dark-propagated-timeout-is-source-error"}], "vectors": [], "quintReplays": ["shadow-layers/darkPropagatedTimeoutIsSourceFailureTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:darkPropagatedTimeoutIsSourceFailureTest", "scope": "The single dark caller source rejects its exact controlled nested timeout object at time0. Caller classification remains original source error and the diagnostic verdict is source_error, with no classification/recovery/serialization/write or own deadline event."}], "definitions": [ + {"ref": "formal/kernel/remote-writes.qnt:settle", "scope": "The single dark caller source rejects its exact controlled nested timeout object at time0. Caller classification remains original source error and the diagnostic verdict is source_error, with no classification/recovery/serialization/write or own deadline event."}, + {"ref": "formal/kernel/shadow.qnt:settleJob", "scope": "The single dark caller source rejects its exact controlled nested timeout object at time0. Caller classification remains original source error and the diagnostic verdict is source_error, with no classification/recovery/serialization/write or own deadline event."}]}, + {"id": "C53.served-propagated-timeout", "rule": "A timeout error returned by a detached source is a source-error verdict, distinct from expiration of the shadow job deadline.", "contracts": ["C53"], "scenarios": ["served shadow distinguishes source timeout from its own deadline"], "generated": [{"profile": "shadow-layers", "witness": "served-propagated-timeout-preserves-hit"}], "vectors": [], "quintReplays": ["shadow-layers/servedPropagatedTimeoutPreservesHitTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:servedPropagatedTimeoutPreservesHitTest", "scope": "The detached served-hit source runs with caching disabled and rejects its controlled nested timeout at time0. The caller keeps its already served C0=1 and the job reports source_error, with no write or own job deadline event."}], "definitions": [ + {"ref": "formal/kernel/remote-writes.qnt:settle", "scope": "The detached served-hit source runs with caching disabled and rejects its controlled nested timeout at time0. The caller keeps its already served C0=1 and the job reports source_error, with no write or own job deadline event."}, + {"ref": "formal/kernel/shadow.qnt:settleJob", "scope": "The detached served-hit source runs with caching disabled and rejects its controlled nested timeout at time0. The caller keeps its already served C0=1 and the job reports source_error, with no write or own job deadline event."}]}, + {"id": "C49.local-publication", "rule": "Dark work never publishes C0 into process-local storage; eligible local publication uses only the caller source result.", "contracts": ["C49"], "scenarios": ["dark shadow publishes only caller source into local cache"], "generated": [{"profile": "shadow-layers", "witness": "dark-present-c0-never-publishes-local"}, {"profile": "shadow-layers", "witness": "dark-local-source-publication-stops-later-shadow"}], "vectors": [], "quintReplays": ["shadow-layers/darkSourcePublishesLocalBeforeShadowWriteTest", "shadow-layers/darkPresentC0NeverBecomesLocalPublicationTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:darkPresentC0NeverBecomesLocalPublicationTest", "scope": "With request memo disabled, a present C0=1 cannot satisfy a later dark caller before source settlement; source=2 alone becomes the subsequent local hit. A separate absent-C0 history proves source publication precedes the held shadow fill write and a local hit stops new shadow admission."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesLocalBeforeShadowWriteTest", "scope": "With request memo disabled, a present C0=1 cannot satisfy a later dark caller before source settlement; source=2 alone becomes the subsequent local hit. A separate absent-C0 history proves source publication precedes the held shadow fill write and a local hit stops new shadow admission."}], "definitions": [ + {"ref": "formal/kernel/serving.qnt:publish", "scope": "With request memo disabled, a present C0=1 cannot satisfy a later dark caller before source settlement; source=2 alone becomes the subsequent local hit. A separate absent-C0 history proves source publication precedes the held shadow fill write and a local hit stops new shadow admission."}, + {"ref": "formal/kernel/shadow.qnt:begin", "scope": "With request memo disabled, a present C0=1 cannot satisfy a later dark caller before source settlement; source=2 alone becomes the subsequent local hit. A separate absent-C0 history proves source publication precedes the held shadow fill write and a local hit stops new shadow admission."}, + {"ref": "formal/kernel/shadow.qnt:settleJob", "scope": "With request memo disabled, a present C0=1 cannot satisfy a later dark caller before source settlement; source=2 alone becomes the subsequent local hit. A separate absent-C0 history proves source publication precedes the held shadow fill write and a local hit stops new shadow admission."}]}, + {"id": "C49.request-publication", "rule": "Dark work never publishes C0 into request memoization; memoization uses only the caller source result.", "contracts": ["C49"], "scenarios": ["dark shadow publishes only caller source into request cache"], "generated": [{"profile": "shadow-layers", "witness": "dark-present-c0-never-publishes-request"}, {"profile": "shadow-layers", "witness": "dark-request-source-publication-is-scope-local"}], "vectors": [], "quintReplays": ["shadow-layers/darkSourcePublishesRequestBeforeShadowWriteTest", "shadow-layers/darkPresentC0NeverBecomesRequestPublicationTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:darkPresentC0NeverBecomesRequestPublicationTest", "scope": "With local disabled, present C0=1 cannot satisfy a same-scope caller before source settlement; source=2 alone becomes that scope's memo hit. A sibling scope starts an independent source. The absent-C0 history proves request publication precedes held shadow fill."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:darkSourcePublishesRequestBeforeShadowWriteTest", "scope": "With local disabled, present C0=1 cannot satisfy a same-scope caller before source settlement; source=2 alone becomes that scope's memo hit. A sibling scope starts an independent source. The absent-C0 history proves request publication precedes held shadow fill."}], "definitions": [ + {"ref": "formal/kernel/serving.qnt:complete", "scope": "With local disabled, present C0=1 cannot satisfy a same-scope caller before source settlement; source=2 alone becomes that scope's memo hit. A sibling scope starts an independent source. The absent-C0 history proves request publication precedes held shadow fill."}, + {"ref": "formal/kernel/shadow.qnt:begin", "scope": "With local disabled, present C0=1 cannot satisfy a same-scope caller before source settlement; source=2 alone becomes that scope's memo hit. A sibling scope starts an independent source. The absent-C0 history proves request publication precedes held shadow fill."}, + {"ref": "formal/kernel/shadow.qnt:settleJob", "scope": "With local disabled, present C0=1 cannot satisfy a same-scope caller before source settlement; source=2 alone becomes that scope's memo hit. A sibling scope starts an independent source. The absent-C0 history proves request publication precedes held shadow fill."}]}, + {"id": "C49.job-dedup-keeps-independent-sources", "rule": "Deduplicating a dark diagnostic job does not coalesce independent ramped-out caller sources.", "contracts": ["C49"], "scenarios": ["dark shadow deduplicates jobs without coalescing caller sources"], "generated": [{"profile": "shadow-layers", "witness": "dark-job-dedup-preserves-independent-source-values"}], "vectors": [], "quintReplays": ["shadow-layers/deduplicatedJobKeepsIndependentCallerSourcesTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:deduplicatedJobKeepsIndependentCallerSourcesTest", "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result."}], "definitions": [ + {"ref": "formal/kernel/serving.qnt:startSource", "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result."}, + {"ref": "formal/kernel/shadow.qnt:admitJobs", "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result."}, + {"ref": "formal/kernel/remote-writes.qnt:settle", "scope": "Same-key dark calls with coalesce=false create two independently controlled sources but one C0 read/job. The second settles to 2 without a fill; the owner settles to 1, fills once, and a later serving probe returns 1 while each caller retains its own result."}]}, + {"id": "C49.no-stale-recovery", "rule": "A ramped-out caller never serves a dark stale candidate, even when its recovery classifier would allow stale recovery.", "contracts": ["C49"], "scenarios": ["dark serving never recovers stale even when classifier allows"], "generated": [{"profile": "shadow-layers", "witness": "dark-eligible-stale-c0-never-recovers"}], "vectors": [], "quintReplays": ["shadow-layers/darkFailureDoesNotUseEligibleStaleBytesTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:darkFailureDoesNotUseEligibleStaleBytesTest", "scope": "Dark acquisition sees physical C0 exactly F=60000ms old and younger than M=120000ms, with an always-allow recovery classifier. Source rejection preserves that one original error, emits source_error, and performs no classification, deserialization, recovery, or write."}], "definitions": [ + {"ref": "formal/kernel/serving.qnt:startSource", "scope": "Dark acquisition sees physical C0 exactly F=60000ms old and younger than M=120000ms, with an always-allow recovery classifier. Source rejection preserves that one original error, emits source_error, and performs no classification, deserialization, recovery, or write."}, + {"ref": "formal/kernel/remote-writes.qnt:settle", "scope": "Dark acquisition sees physical C0 exactly F=60000ms old and younger than M=120000ms, with an always-allow recovery classifier. Source rejection preserves that one original error, emits source_error, and performs no classification, deserialization, recovery, or write."}]}, + {"id": "C47.recovery-skips-shadow", "rule": "A recovered value, including absence, does not admit served-hit shadow work.", "contracts": ["C47"], "scenarios": ["recovered absent value never starts selected shadow work"], "generated": [{"profile": "recovery-read", "witness": "recovered-absence-skips-selected-shadow-and-memoizes"}, {"profile": "recovery-read", "witness": "recovered-value-skips-selected-shadow-and-memoizes"}], "vectors": [], "evidenceNotes": ["The stale-recovery invariant includes zero shadow jobs after a stale result. The fixed scenario uses explicit absence and selected shadow policy to exercise the otherwise eligible admission path."], "quintReplays": ["recovery-read/recoveredAbsenceSkipsSelectedShadowTest", "recovery-read/recoveredValueSkipsSelectedShadowTest"], "models": [ + {"ref": "formal/dialcache-stale-recovery.qnt:recoveredStaleHasNoSharedPublication", "scope": "The stale model keeps a zero-shadow-job projection after recovery but does not model otherwise eligible shadow admission. The fixed selected-shadow/absent-recovery scenario supplies the discriminating implementation check."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:recoveredAbsenceSkipsSelectedShadowTest", "scope": "With tracked stale bytes, a selected 100% shadow policy, installed outcome hook and available capacity, source failure recovers the retained value, including absence. Recovery and its same-request memo probe start no diagnostic source/read/job and publish no remote/local value; an independent request repeats source failure and recovery for the absence case."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:recoveredValueSkipsSelectedShadowTest", "scope": "With tracked stale bytes, a selected 100% shadow policy, installed outcome hook and available capacity, source failure recovers the retained value, including absence. Recovery and its same-request memo probe start no diagnostic source/read/job and publish no remote/local value; an independent request repeats source failure and recovery for the absence case."}], "definitions": [ + {"ref": "formal/dialcache-recovery-read-conformance.qnt:initialized", "scope": "With tracked stale bytes, a selected 100% shadow policy, installed outcome hook and available capacity, source failure recovers the retained value, including absence. Recovery and its same-request memo probe start no diagnostic source/read/job and publish no remote/local value; an independent request repeats source failure and recovery for the absence case."}, + {"ref": "formal/kernel/remote-io.qnt:settleLoad", "scope": "With tracked stale bytes, a selected 100% shadow policy, installed outcome hook and available capacity, source failure recovers the retained value, including absence. Recovery and its same-request memo probe start no diagnostic source/read/job and publish no remote/local value; an independent request repeats source failure and recovery for the absence case."}, + {"ref": "formal/kernel/remote-io.qnt:complete", "scope": "With tracked stale bytes, a selected 100% shadow policy, installed outcome hook and available capacity, source failure recovers the retained value, including absence. Recovery and its same-request memo probe start no diagnostic source/read/job and publish no remote/local value; an independent request repeats source failure and recovery for the absence case."}]}, + {"id": "C47.coalesced-hit-one-job", "rule": "Coalesced callers sharing one remote hit admit only one detached shadow source.", "contracts": ["C47"], "scenarios": ["coalesced remote hits admit only one shadow source"], "generated": [{"profile": "admission", "witness": "coalesced-hit-one-job"}], "vectors": [], "quintReplays": ["admission/coalescedHitAdmitsOneJobTest"], "models": [ + {"ref": "formal/dialcache-admission-conformance.qnt:coalescedHitAdmitsOneJobTest", "scope": "Coalesced callers sharing one remote hit admit only one detached shadow source. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}]}, + {"id": "C52.future-miss-may-fill", "rule": "A future C0 is a semantic miss; after caller success a dark job may fill from that source subject to its observed fence.", "contracts": ["C52"], "scenarios": ["dark future C0 is a miss that permits source fill"], "generated": [{"profile": "shadow", "witness": "future-dark-c0-fills-without-decoding"}], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:futureDarkAcquisitionReportsOffsetAndFillsMissTest", "scope": "A future C0 is a semantic miss; after caller success a dark job may fill from that source subject to its observed fence."}]}, + {"id": "C52.expired-miss-may-fill", "rule": "An expired C0 is a semantic miss; a dark job may fill from the accepted caller source.", "contracts": ["C52"], "scenarios": ["dark expired C0 is a miss that permits source fill"], "generated": [{"profile": "shadow-layers", "witness": "expired-c0-miss-fills-source-and-serves-probe"}], "vectors": [], "quintReplays": ["shadow-layers/expiredC0CanFillAndServeNewValueTest", "shadow/c0AtExactFreshnessBoundaryRefillsTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:expiredC0CanFillAndServeNewValueTest", "scope": "C0=1 acquired exactly at freshness age60000ms is a semantic miss despite physical presence. Source=2 fills once without decoding old bytes; a later serving probe reads2 and starts no new source."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:c0AcquisitionsRespectFreshness", "scope": "At the step that releases a read, a surviving job acquired the frame exactly when it was visible and strictly younger than the freshness at that instant (nonnegative age strictly below the ceiling); later comparison and C1 confirmation do not reclassify the acquired C0."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:c0AtExactFreshnessBoundaryRefillsTest", "scope": "A public C1 confirmation completes using retained bytes at age 60000 ms. A subsequent job reacquires the same stored bytes as C0 at exact freshness age 60000 ms, does not decode them, and fills once from the accepted caller source. This checks C0 reacquisition rather than changing the prior job's retained decision."}], "definitions": [ + {"ref": "formal/kernel/remote-frames.qnt:observe", "scope": "C0=1 acquired exactly at freshness age60000ms is a semantic miss despite physical presence. Source=2 fills once without decoding old bytes; a later serving probe reads2 and starts no new source."}, + {"ref": "formal/kernel/shadow.qnt:admitJobs", "scope": "C0=1 acquired exactly at freshness age60000ms is a semantic miss despite physical presence. Source=2 fills once without decoding old bytes; a later serving probe reads2 and starts no new source."}, + {"ref": "formal/kernel/shadow.qnt:settleJob", "scope": "C0=1 acquired exactly at freshness age60000ms is a semantic miss despite physical presence. Source=2 fills once without decoding old bytes; a later serving probe reads2 and starts no new source."}]}, + {"id": "C53.acquired-miss-no-reread", "rule": "A dark job uses its acquired C0 miss and observed fence without rereading C0 after an external replacement.", "contracts": ["C53"], "scenarios": ["dark acquired miss survives later Redis replacement without a second C0 read"], "generated": [{"profile": "shadow-layers", "witness": "acquired-c0-miss-does-not-reread-before-fill"}], "vectors": [], "quintReplays": ["shadow-layers/acquiredMissDoesNotRereadBeforeFillTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:acquiredMissDoesNotRereadBeforeFillTest", "scope": "An absent C0 is acquired, external storage is then seeded to1, and source=2 fills without rereading/reclassifying C0. Read count stays1 through write completion; a later serving probe observes2."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:admitJobs", "scope": "An absent C0 is acquired, external storage is then seeded to1, and source=2 fills without rereading/reclassifying C0. Read count stays1 through write completion; a later serving probe observes2."}, + {"ref": "formal/kernel/shadow.qnt:settleJob", "scope": "An absent C0 is acquired, external storage is then seeded to1, and source=2 fills without rereading/reclassifying C0. Read count stays1 through write completion; a later serving probe observes2."}]}, + {"id": "C51.retained-candidate-not-reclassified", "rule": "An initially accepted C0 remains a comparison candidate after its freshness expires; confirmation checks payload identity.", "contracts": ["C51"], "scenarios": ["dark C0 retained for comparison is not reclassified after freshness expires"], "generated": [{"profile": "shadow-layers", "witness": "retained-fresh-c0-compares-after-freshness-boundary"}], "vectors": [], "quintReplays": ["shadow-layers/retainedFreshC0StillComparesAfterFreshnessBoundaryTest"], "models": [ + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:retainedFreshC0StillComparesAfterFreshnessBoundaryTest", "scope": "C0 is acquired at age59999ms, then source=2 settles exactly at F=60000ms before the60000ms job deadline. Retained C0=1 is decoded once, one C1 payload read confirms mismatch, caller gets2, and no fill occurs."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:admitJobs", "scope": "C0 is acquired at age59999ms, then source=2 settles exactly at F=60000ms before the60000ms job deadline. Retained C0=1 is decoded once, one C1 payload read confirms mismatch, caller gets2, and no fill occurs."}, + {"ref": "formal/kernel/shadow.qnt:settleJob", "scope": "C0 is acquired at age59999ms, then source=2 settles exactly at F=60000ms before the60000ms job deadline. Retained C0=1 is decoded once, one C1 payload read confirms mismatch, caller gets2, and no fill occurs."}]}, + {"id": "C13.request-last-writer", "rule": "Disabling coalescing preserves request memoization; independent successful completions replace its value in settlement order.", "contracts": ["C13"], "scenarios": ["uncoalesced request calls still memoize the last settled value"], "generated": [{"profile": "scope", "witness": "independent-request-last-completion-probed"}], "vectors": [], "quintReplays": ["scope/independentRequestMemoUsesLastCompletionTest", "scope/rejectedIndependentSourceKeepsMemoizedValueTest"], "models": [ + {"ref": "formal/dialcache-scope-conformance.qnt:independentRequestMemoUsesLastCompletionTest", "scope": "Disabling coalescing preserves request memoization; independent successful completions replace its value in settlement order.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-scope-conformance.qnt:memoFollowsLatestSuccessfulSettlement", "scope": "Disabling coalescing preserves request memoization; independent successful completions replace its value in settlement order.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-scope-conformance.qnt:rejectedIndependentSourceKeepsMemoizedValueTest", "scope": "A failed independent completion neither replaces nor clears the memoized value: the row keeps the last successful settlement and a later call in the same scope is served from it without a new source."}]}, + {"id": "C16.runtime-enables-coalescing", "rule": "Explicit runtime coalesce true replaces an operation default of false and enables eligible sharing.", "contracts": ["C16"], "scenarios": ["runtime coalescing override enables sharing over a disabled default"], "generated": [{"profile": "runtime-boundaries", "witness": "runtime-enables-sharing"}, {"profile": "runtime-boundaries", "witness": "inherited-false-request-last-writer"}], "vectors": [], "quintReplays": ["runtime-boundaries/runtimeTrueEnablesSharingOverFalseDefaultTest", "runtime-boundaries/inheritedFalseKeepsIndependentMemoizingSourcesTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeTrueEnablesSharingOverFalseDefaultTest", "scope": "Explicit runtime coalesce true replaces an operation default of false and enables eligible sharing.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:inheritedFalseKeepsIndependentMemoizingSourcesTest", "scope": "Explicit runtime coalesce true replaces an operation default of false and enables eligible sharing.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:inheritedDisabledSharingNeverJoins", "scope": "Explicit runtime coalesce true replaces an operation default of false and enables eligible sharing.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}]}, + {"id": "C03.late-recovery-publication", "rule": "Late stale recovery returns to original callers but cannot populate a closed or replacement request scope.", "contracts": ["C03"], "scenarios": ["late recovery cannot memoize into a closed or replacement request scope"], "generated": [{"profile": "recovery", "witness": "closed-recovery-does-not-memoize-another-scope"}, {"profile": "recovery-read", "witness": "closed-request-recovery-keeps-new-request-cold"}], "vectors": [], "quintReplays": ["recovery-read/closedRequestCannotReceiveCompressedRecoveryTest", "recovery/closedRequestCannotReceiveLateRecoveryMemoTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:closedRequestCannotReceiveLateRecoveryMemoTest", "scope": "Late stale recovery returns to original callers but cannot populate a closed or replacement request scope. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:closedContextsStayEmpty", "scope": "Closing the attached request during held recovery decode permits the caller result but prevents request/local publication, distinguished by a new-scope read."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:closedRequestCannotReceiveCompressedRecoveryTest", "scope": "Closing the attached request during held recovery decode permits the caller result but prevents request/local publication, distinguished by a new-scope read."}], "definitions": [ + {"ref": "formal/kernel/remote-io.qnt:complete", "scope": "Closing the attached request during held recovery decode permits the caller result but prevents request/local publication, distinguished by a new-scope read."}]}, + {"id": "C54.instance-isolation", "rule": "Shadow capacity and job identity deduplication apply within each cache instance independently.", "contracts": ["C54"], "scenarios": ["shadow capacity and job deduplication are isolated per instance"], "generated": [{"profile": "admission", "witness": "per-instance-deduplication"}, {"profile": "admission", "witness": "other-instance-full-admission"}, {"profile": "shadow-layers", "witness": "mixed-shadow-capacity-is-per-instance"}], "vectors": [], "quintReplays": ["shadow-layers/fullMixedInstanceDoesNotBlockAnotherInstanceTest", "admission/fullInstanceDoesNotBlockOtherInstanceTest"], "models": [ + {"ref": "formal/dialcache-admission-conformance.qnt:capacityIsPerInstance", "scope": "Shadow capacity and job identity deduplication apply within each cache instance independently. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}, + {"ref": "formal/dialcache-admission-conformance.qnt:fullInstanceDoesNotBlockOtherInstanceTest", "scope": "Shadow capacity and job identity deduplication apply within each cache instance independently. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:fullMixedInstanceDoesNotBlockAnotherInstanceTest", "scope": "A served and a dark job fill instance0; its third key is dropped, while the same key on instance1 admits a C0 read. Recorded source contexts distinguish the disabled served source from enabled independent caller sources."}], "definitions": [ + {"ref": "formal/kernel/shadow.qnt:admitJobs", "scope": "A served and a dark job fill instance0; its third key is dropped, while the same key on instance1 admits a C0 read. Recorded source contexts distinguish the disabled served source from enabled independent caller sources."}]}, + {"id": "C18.captured-shadow-admission", "rule": "Disabling shadow prevents new admission while an already admitted comparison retains its captured policy.", "contracts": ["C18"], "scenarios": ["disabling shadow prevents new jobs but preserves an admitted comparison"], "generated": [{"profile": "shadow", "witness": "admitted-job-keeps-shadow-policy"}, {"profile": "admission", "witness": "accepted-shadow-policy"}], "vectors": [], "quintReplays": ["admission/capturedShadowPolicySurvivesPolicyChangeTest"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:admittedComparisonSurvivesPolicyDisableTest", "scope": "Disabling shadow prevents new admission while an already admitted comparison retains its captured policy. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}, + {"ref": "formal/dialcache-admission-conformance.qnt:capturedShadowPolicySurvivesPolicyChangeTest", "scope": "A caller admitted under a selected shadow policy keeps its admission when the policy is disabled before its decode completes, and one admitted under a disabled policy gains none when it is re-enabled: the selection is captured with the read, not read at the hit."}]}, + {"id": "C36.independent-invalidation-snapshots", "rule": "Independent tracked reads acquired before and after invalidation keep their own snapshot and fencing outcomes.", "contracts": ["C36"], "scenarios": ["uncoalesced tracked readers on either side of invalidation keep their own snapshots"], "generated": [{"profile": "independent", "witness": "acquired-fresh-decode-survives-invalidation"}], "vectors": [], "models": [ + {"ref": "formal/dialcache-independent-conformance.qnt:acceptedFreshDecodeSurvivesOtherInvalidationTest", "scope": "Independent tracked reads acquired before and after invalidation keep their own snapshot and fencing outcomes. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}, + {"ref": "formal/dialcache-independent-connection.qnt:independentSnapshotsMatchAcquisition", "scope": "Each independent caller retains its admitted maximum and separately projected read-time payload, timestamp and acquisition wall clock whenever a candidate is retained; callers do not borrow another acquisition."}]}, + {"id": "C55.legacy-reply-normalization", "rule": "Null, primitive, legacy, and kindless metadata-only replies that are not valid frames normalize to safe misses without trusting stray watermark metadata.", "contracts": ["C55"], "scenarios": ["adapter legacy null preserves only trustworthy miss metadata", "adapter primitive preserves only trustworthy miss metadata", "adapter legacy watermark shape preserves only trustworthy miss metadata", "adapter kindless metadata preserves only trustworthy miss metadata"], "generated": [{"profile": "effects", "witness": "normalized-reply-allows-refill:1"}, {"profile": "effects", "witness": "normalized-reply-allows-refill:2"}, {"profile": "effects", "witness": "normalized-reply-allows-refill:4"}], "vectors": [], "evidenceNotes": ["Generated consequences cover representative null, primitive and kindless replies; fixed scenarios additionally bind every listed legacy reply shape. The classifier does not credit mere reply selection."], "quintReplays": ["effects/nullReplyRefillsAndIsReadableTest", "effects/primitiveReplyRefillsAndIsReadableTest", "effects/legacyReplyRefillsAndIsReadableTest", "effects/kindlessReplyRefillsAndIsReadableTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:nullReplyRefillsAndIsReadableTest", "scope": "Null, primitive, obsolete discriminator and kindless replies are semantic misses, permit one refill, and a subsequent public read hits the written value."}, + {"ref": "formal/dialcache-effects-conformance.qnt:primitiveReplyRefillsAndIsReadableTest", "scope": "Null, primitive, obsolete discriminator and kindless replies are semantic misses, permit one refill, and a subsequent public read hits the written value."}, + {"ref": "formal/dialcache-effects-conformance.qnt:legacyReplyRefillsAndIsReadableTest", "scope": "Null, primitive, obsolete discriminator and kindless replies are semantic misses, permit one refill, and a subsequent public read hits the written value."}, + {"ref": "formal/dialcache-effects-conformance.qnt:kindlessReplyRefillsAndIsReadableTest", "scope": "Null, primitive, obsolete discriminator and kindless replies are semantic misses, permit one refill, and a subsequent public read hits the written value."}], "definitions": [ + {"ref": "formal/kernel/adapter-replies.qnt:reason", "scope": "Queued legacy/primitive/kindless reply classes fall through normalized misses and may refill; exact host shapes are the driver binding."}]}, + {"id": "C55.invalid-fence-discarded", "rule": "Missing, negative, fractional, or unsafe miss watermarks are discarded and cannot authorize fencing metadata.", "contracts": ["C55"], "scenarios": ["adapter fenced reason without fence preserves only trustworthy miss metadata", "adapter negative fence preserves only trustworthy miss metadata", "adapter fractional fence preserves only trustworthy miss metadata", "adapter unsafe fence preserves only trustworthy miss metadata"], "generated": [{"profile": "effects", "witness": "normalized-reply-allows-refill:8"}, {"profile": "effects", "witness": "normalized-reply-allows-refill:9"}, {"profile": "effects", "witness": "normalized-reply-allows-refill:10"}, {"profile": "effects", "witness": "normalized-reply-allows-refill:11"}], "vectors": [], "evidenceNotes": ["Each invalid fence class must progress to source serialization with no retained fence. Fixed scenarios separately check normalized miss diagnostics."], "quintReplays": ["effects/missingFenceRefillsAndIsReadableTest", "effects/negativeFenceRefillsAndIsReadableTest", "effects/fractionalFenceRefillsAndIsReadableTest", "effects/unsafeFenceRefillsAndIsReadableTest"], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:missingFenceRefillsAndIsReadableTest", "scope": "Missing, negative, fractional and unsafe fences do not suppress refill; resulting native value is readable on the subsequent call. Valid semantic miss categories are preserved where present."}, + {"ref": "formal/dialcache-effects-conformance.qnt:negativeFenceRefillsAndIsReadableTest", "scope": "Missing, negative, fractional and unsafe fences do not suppress refill; resulting native value is readable on the subsequent call. Valid semantic miss categories are preserved where present."}, + {"ref": "formal/dialcache-effects-conformance.qnt:fractionalFenceRefillsAndIsReadableTest", "scope": "Missing, negative, fractional and unsafe fences do not suppress refill; resulting native value is readable on the subsequent call. Valid semantic miss categories are preserved where present."}, + {"ref": "formal/dialcache-effects-conformance.qnt:unsafeFenceRefillsAndIsReadableTest", "scope": "Missing, negative, fractional and unsafe fences do not suppress refill; resulting native value is readable on the subsequent call. Valid semantic miss categories are preserved where present."}], "definitions": [ + {"ref": "formal/kernel/adapter-replies.qnt:reason", "scope": "The reply-class transition retains only the enumerated valid tracked fence classes; fixed inputs bind numeric invalidity and missing metadata."}]}, + {"id": "C55.valid-fence-independent-of-cause", "rule": "A valid tracked watermark survives normalization independently of a recognized miss cause and constrains later publication.", "contracts": ["C55"], "scenarios": ["adapter absent with future fence preserves only trustworthy miss metadata", "adapter expired with zero fence preserves only trustworthy miss metadata"], "generated": [{"profile": "effects", "witness": "normalized-reply-fences-refill:12"}, {"profile": "effects", "witness": "normalized-reply-allows-refill:13"}], "vectors": [], "evidenceNotes": ["A valid future fence suppresses serialization despite an absent cause; zero-fence expired metadata permits serialization. Protocol invariants separately require valid metadata retention for semantic misses."], "quintReplays": ["effects/absentReplyWithFutureFenceBlocksRefillTest", "effects/expiredZeroFenceReplyRefillsAndIsReadableTest"], "models": [ + {"ref": "formal/dialcache-redis-protocol.qnt:validMissWatermarksArePreserved", "scope": "A valid future fence suppresses serialization despite an absent cause; zero-fence expired metadata permits serialization. Protocol invariants separately require valid metadata retention for semantic misses."}, + {"ref": "formal/dialcache-effects-conformance.qnt:absentReplyWithFutureFenceBlocksRefillTest", "scope": "A tracked absent-reason reply with a valid future fence retains that fence through normalization; the accepted source is served without serialization, and the next public read misses and starts a second source."}, + {"ref": "formal/dialcache-effects-conformance.qnt:expiredZeroFenceReplyRefillsAndIsReadableTest", "scope": "A tracked expired-reason reply with a zero fence is normalized to an expired miss with no retained fence; one source refill is serialized and written, and the next public read hits it without a second source."}]}, + {"id": "C55.frame-ignores-miss-metadata", "rule": "A valid frame without a miss discriminator remains a frame despite stray miss-reason or fence fields.", "contracts": ["C55"], "scenarios": ["frame without miss discriminator ignores stray miss metadata"], "generated": [{"profile": "effects", "witness": "reply:15"}], "vectors": [], "evidenceNotes": ["The scheduled regression asserts the frame is served without a source. Generated reply15 is an additional required input category, not by itself proof that a frame was served."], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:frameWithoutMissDiscriminatorIgnoresMetadataTest", "scope": "The scheduled regression asserts the frame is served without a source. Generated reply15 is an additional required input category, not by itself proof that a frame was served."}]}, + {"id": "C19.exact-serving-cohort", "rule": "A serving ramp excludes a key at equality with its cohort sample and includes it just above that sample, independently for each layer.", "contracts": ["C19"], "scenarios": ["local cohort excludes equality and admits just above its exact sample", "remote cohort excludes equality and admits just above its exact sample"], "generated": [{"profile": "runtime-boundaries", "witness": "exact-serving-cohort:local"}, {"profile": "runtime-boundaries", "witness": "exact-serving-cohort:remote"}], "vectors": [], "quintReplays": ["runtime-boundaries/localCohortEqualityBypassesBeforeAboveSampleCachesTest", "runtime-boundaries/remoteCohortEqualityBypassesBeforeAboveSampleCachesTest"], "models": [ + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:localCohortEqualityBypassesBeforeAboveSampleCachesTest", "scope": "One fixed independently published canonical key numerator per serving layer, strict below/equality/above integer sample thresholds bound to floating percentage inputs; full FNV/hash key construction stays W03 wire-vector authority."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:remoteCohortEqualityBypassesBeforeAboveSampleCachesTest", "scope": "One fixed independently published canonical key numerator per serving layer, strict below/equality/above integer sample thresholds bound to floating percentage inputs; full FNV/hash key construction stays W03 wire-vector authority."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:equalAndLowerCohortsNeverTraverse", "scope": "One fixed independently published canonical key numerator per serving layer, strict below/equality/above integer sample thresholds bound to floating percentage inputs; full FNV/hash key construction stays W03 wire-vector authority."}]}, + {"id": "C45.compressed-candidate", "rule": "Retained compressed bytes follow the same recovery and no-shared-publication rules; decompression failure preserves the source error.", "contracts": ["C45"], "scenarios": ["compressed retained payload follows normal recovery publication rules", "corrupt compressed retained payload follows normal recovery publication rules"], "generated": [{"profile": "recovery-read", "witness": "tracked-compressed-recovery-is-request-only"}, {"profile": "recovery-read", "witness": "corrupt-compressed-recovery-keeps-original-error"}, {"profile": "recovery-read", "witness": "untracked-compressed-recovery-does-not-warm-local"}, {"profile": "recovery-read", "witness": "compressed-recovery-crossing-maximum-keeps-original-error"}], "vectors": [], "quintReplays": ["recovery-read/compressedRecoveryMemoizesWithoutLocalPublicationTest", "recovery-read/corruptCompressedRecoveryKeepsOriginalSourceErrorTest", "recovery-read/untrackedCompressedRecoveryDoesNotWarmLocalTest", "recovery-read/compressedRecoveryRechecksMaximumAfterDecodeTest"], "models": [ + {"ref": "formal/dialcache-recovery-read-connection.qnt:recoveredResultsNeverPublishShared", "scope": "The modeled input domain includes valid/corrupt compressed bytes; retained recovery either serves the decoded value with request-only publication or preserves the indexed original source error. Compression algorithm correctness remains vector/native evidence."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryMemoizesWithoutLocalPublicationTest", "scope": "The modeled input domain includes valid/corrupt compressed bytes; retained recovery either serves the decoded value with request-only publication or preserves the indexed original source error. Compression algorithm correctness remains vector/native evidence."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:corruptCompressedRecoveryKeepsOriginalSourceErrorTest", "scope": "The modeled input domain includes valid/corrupt compressed bytes; retained recovery either serves the decoded value with request-only publication or preserves the indexed original source error. Compression algorithm correctness remains vector/native evidence."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:untrackedCompressedRecoveryDoesNotWarmLocalTest", "scope": "The modeled input domain includes valid/corrupt compressed bytes; retained recovery either serves the decoded value with request-only publication or preserves the indexed original source error. Compression algorithm correctness remains vector/native evidence."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:compressedRecoveryRechecksMaximumAfterDecodeTest", "scope": "The modeled input domain includes valid/corrupt compressed bytes; retained recovery either serves the decoded value with request-only publication or preserves the indexed original source error. Compression algorithm correctness remains vector/native evidence."}], "definitions": [ + {"ref": "formal/kernel/remote-io.qnt:settleLoad", "scope": "The modeled input domain includes valid/corrupt compressed bytes; retained recovery either serves the decoded value with request-only publication or preserves the indexed original source error. Compression algorithm correctness remains vector/native evidence."}]}, + {"id": "C28.encoding-error-suppresses-refill", "rule": "Unsupported payload encoding is a read failure that suppresses Redis refill for both tracked and untracked calls.", "contracts": ["C28"], "scenarios": ["untracked unsupported payload encoding is a read failure that suppresses refill", "tracked unsupported payload encoding is a read failure that suppresses refill"], "generated": [{"profile": "recovery-read", "witness": "tracked-encoding-error-denies-refill-and-local-reuse"}, {"profile": "recovery-read", "witness": "untracked-encoding-error-denies-refill-keeps-local-reuse"}], "vectors": [], "quintReplays": ["recovery-read/trackedEncodingFailureSuppressesRefillTest", "recovery-read/untrackedEncodingFailureStillPublishesLocalTest", "recovery-read/encodingFailedReadLeavesNoCandidateTest"], "models": [ + {"ref": "formal/dialcache-recovery-read-conformance.qnt:trackedEncodingFailureSuppressesRefillTest", "scope": "Unsupported encoding is classified after presence/fence checks and denies remote refill; source success remains visible, and untracked local publication remains eligible."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:untrackedEncodingFailureStillPublishesLocalTest", "scope": "Unsupported encoding is classified after presence/fence checks and denies remote refill; source success remains visible, and untracked local publication remains eligible."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:encodingFailedReadLeavesNoCandidateTest", "scope": "An encoding-failed read retains no recovery snapshot: the source failure that follows is unclassified, completes the caller with the source's own error, reports no recovery label and refills nothing."}], "definitions": [ + {"ref": "formal/kernel/remote-io.qnt:settleRead", "scope": "Unsupported encoding is classified after presence/fence checks and denies remote refill; source success remains visible, and untracked local publication remains eligible."}]}, + {"id": "C22.freshness-after-read", "rule": "Logical remote freshness is evaluated at read settlement, so age accumulated during the bounded read can make a frame stale.", "contracts": ["C22"], "scenarios": ["freshness samples wall time after the bounded Redis read settles"], "generated": [{"profile": "recovery-read", "witness": "read-settlement-crosses-freshness-and-recovers"}, {"profile": "recovery-read", "witness": "read-settlement-before-freshness-hits"}], "vectors": [], "quintReplays": ["recovery-read/freshnessAfterHeldReadTest", "recovery-read/heldReadJustBeforeFreshnessBoundaryStillHitsTest"], "models": [ + {"ref": "formal/dialcache-recovery-read-connection.qnt:freshnessUsesReadSettlement", "scope": "Read acquisition samples the settlement wall clock; a frame initially fresh becomes stale during the held read and subsequently recovers after source rejection."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:freshnessAfterHeldReadTest", "scope": "Read acquisition samples the settlement wall clock; a frame initially fresh becomes stale during the held read and subsequently recovers after source rejection."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:heldReadJustBeforeFreshnessBoundaryStillHitsTest", "scope": "Read acquisition samples the settlement wall clock; a frame initially fresh becomes stale during the held read and subsequently recovers after source rejection."}], "definitions": [ + {"ref": "formal/kernel/remote-io.qnt:settleRead", "scope": "Read acquisition samples the settlement wall clock; a frame initially fresh becomes stale during the held read and subsequently recovers after source rejection."}]}, + {"id": "C58.failure-categories", "rule": "Read, policy, load, dump, and write failures retain their stable phase-specific diagnostic classification while their documented fail-open path continues.", "contracts": ["C58"], "scenarios": ["read failure retains its stable diagnostic category", "dump failure retains its stable diagnostic category", "write failure retains its stable diagnostic category", "load failure retains its stable diagnostic category", "policy failure retains its stable diagnostic category"], "generated": [{"profile": "effects", "witness": "error:cache_read"}, {"profile": "effects", "witness": "error:serialization_load"}, {"profile": "effects", "witness": "error:serialization_dump"}, {"profile": "effects", "witness": "error:cache_write"}], "vectors": [], "evidenceNotes": ["Each added model regression requires the phase label alongside its source-result and write/no-write consequence. Fixed scenarios additionally check policy-resolution diagnostics."], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:readFailureKeepsCategoryAndDeniesRefillTest", "scope": "Each added model regression requires the phase label alongside its source-result and write/no-write consequence. Fixed scenarios additionally check policy-resolution diagnostics."}, + {"ref": "formal/dialcache-effects-conformance.qnt:decodeFailureKeepsCategoryAndAllowsRefillTest", "scope": "Each added model regression requires the phase label alongside its source-result and write/no-write consequence. Fixed scenarios additionally check policy-resolution diagnostics."}, + {"ref": "formal/dialcache-effects-conformance.qnt:dumpFailureKeepsCategoryAndSourceValueTest", "scope": "Each added model regression requires the phase label alongside its source-result and write/no-write consequence. Fixed scenarios additionally check policy-resolution diagnostics."}, + {"ref": "formal/dialcache-effects-conformance.qnt:writeFailureKeepsCategoryAndSourceValueTest", "scope": "Each added model regression requires the phase label alongside its source-result and write/no-write consequence. Fixed scenarios additionally check policy-resolution diagnostics."}]}, + {"id": "C58.request-follower-trail", "rule": "Request followers report request-local coalescing without repeating lower cache traversal or the leader error trail.", "contracts": ["C58"], "scenarios": ["request followers report request scope without repeating lower traversal"], "generated": [{"profile": "scope", "witness": "one-error-for-request-followers"}], "vectors": [], "quintReplays": ["scope/sharedFailureHasOneAttributedErrorTest"], "models": [ + {"ref": "formal/dialcache-scope-conformance.qnt:sharedFailureHasOneAttributedErrorTest", "scope": "Request followers report request-local coalescing without repeating lower cache traversal or the leader error trail. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}]}, + {"id": "C58.late-rejection-not-recounted", "rule": "A source deadline records one failure; a later rejection of the abandoned loader does not emit another fallback failure.", "contracts": ["C58"], "scenarios": ["source timeout records one failure even after a late rejection"], "generated": [{"profile": "effects", "witness": "late-rejection-does-not-repeat-error"}], "vectors": [], "models": [ + {"ref": "formal/dialcache-effects-conformance.qnt:lateSourceCannotRepeatFailureMetricTest", "scope": "A source deadline records one failure; a later rejection of the abandoned loader does not emit another fallback failure. The cited property covers its bounded modeled clause; exact values, adapter errors and unmodeled combinations retain their separate evidence."}]}, + {"id": "C59.compression-read-telemetry", "rule": "Previously compressed reads report decompression success or failure even when new compression writes are disabled.", "contracts": ["C59"], "scenarios": ["compressed read reports compression even when new compression is disabled", "corrupt read reports compression even when new compression is disabled"], "generated": [{"profile": "recovery-read", "witness": "fresh-compressed-hit-reports-decompression"}, {"profile": "recovery-read", "witness": "corrupt-compressed-read-reports-fallback-with-source-result"}], "vectors": [], "quintReplays": ["recovery-read/freshCompressedReadReportsDecompressionTest", "recovery-read/corruptCompressedReadReportsRawFallbackTest"], "models": [ + {"ref": "formal/dialcache-recovery-read-conformance.qnt:freshCompressedReadReportsDecompressionTest", "scope": "Previously compressed inputs emit exact decompressed or fallback_raw diagnostics at decode start; later public completion distinguishes successful hit from source fallback while new compression writes remain disabled."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:corruptCompressedReadReportsRawFallbackTest", "scope": "Previously compressed inputs emit exact decompressed or fallback_raw diagnostics at decode start; later public completion distinguishes successful hit from source fallback while new compression writes remain disabled."}], "definitions": [ + {"ref": "formal/kernel/payloads.qnt:decodeOutcome", "scope": "Previously compressed inputs emit exact decompressed or fallback_raw diagnostics at decode start; later public completion distinguishes successful hit from source fallback while new compression writes remain disabled."}]}, + {"id": "C60.logging-explicit-off", "rule": "Explicitly disabling mismatch logging suppresses warnings while preserving a confirmed mismatch verdict.", "contracts": ["C60"], "scenarios": ["mismatch warning omitted with mismatch verdict"], "generated": [{"profile": "shadow", "witness": "mismatch-logging:false"}, {"profile": "shadow", "witness": "explicit-false-shadow-logging-overrides-enabled-default"}], "vectors": [], "evidenceNotes": ["A confirmed mismatch with an explicitly disabled logging flag has no warning. Omitted/default logging and malformed flags have separate named cases."], "quintReplays": ["shadow/explicitFalseLoggingOverridesEnabledDefaultTest"], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:warningsRequireMismatch", "scope": "A confirmed mismatch with an explicitly disabled logging flag has no warning. Omitted/default logging and malformed flags have separate named cases."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:explicitFalseLoggingOverridesEnabledDefaultTest", "scope": "A logging-enabled fixture receives an explicit false runtime reply before admission. Confirmed mismatch and age metric remain, while warning and configuration-error counts remain zero."}], "definitions": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:initialize", "scope": "A logging-enabled fixture receives an explicit false runtime reply before admission. Confirmed mismatch and age metric remain, while warning and configuration-error counts remain zero."}, + {"ref": "formal/dialcache-shadow-conformance.qnt:setLogging", "scope": "A logging-enabled fixture receives an explicit false runtime reply before admission. Confirmed mismatch and age metric remain, while warning and configuration-error counts remain zero."}, + {"ref": "formal/kernel/shadow.qnt:beginDark", "scope": "A logging-enabled fixture receives an explicit false runtime reply before admission. Confirmed mismatch and age metric remain, while warning and configuration-error counts remain zero."}, + {"ref": "formal/kernel/shadow.qnt:recordVerdict", "scope": "A logging-enabled fixture receives an explicit false runtime reply before admission. Confirmed mismatch and age metric remain, while warning and configuration-error counts remain zero."}]}, + {"id": "C40.fenced-candidate", "rule": "A fenced initial value is not retained or decoded for recovery; an allowed failure remains the original source error.", "contracts": ["C40"], "scenarios": [], "generated": [{"profile": "recovery", "witness": "fenced-read-does-not-retain"}], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/fencedInitialBytesNeverRecoverTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:fencedInitialBytesNeverRecoverTest", "scope": "A fenced initial value is not retained or decoded for recovery; an allowed failure remains the original source error."}, + {"ref": "formal/dialcache-stale-recovery.qnt:fencedFrameNeverBecomesRecoveryCandidateTest", "scope": "A fenced initial value is not retained or decoded for recovery; an allowed failure remains the original source error."}]}, + {"id": "C45.rollback-below-fresh", "rule": "After retaining stale bytes, wall rollback to a nonnegative age below the fresh ceiling still permits recovery; only future age or the exclusive maximum rejects.", "contracts": ["C45"], "scenarios": [], "generated": [{"profile": "recovery", "witness": "rollback-below-fresh-age-still-recovers"}], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/internal/redis-cache.ts", "lines": [169, 198, 210, 224, 228], "scope": "Fresh/recovery acquisition and pre/post-decode age checks."}], "quintReplays": ["recovery/rollbackBelowFreshCeilingStillRecoversTest"], "models": [ + {"ref": "formal/dialcache-recovery-conformance.qnt:rollbackBelowFreshCeilingStillRecoversTest", "scope": "After retaining stale bytes, wall rollback to a nonnegative age below the fresh ceiling still permits recovery; only future age or the exclusive maximum rejects."}, + {"ref": "formal/dialcache-stale-recovery.qnt:rollbackBelowFreshAgeStillRecoversTest", "scope": "After retaining stale bytes, wall rollback to a nonnegative age below the fresh ceiling still permits recovery; only future age or the exclusive maximum rejects."}, + {"ref": "formal/dialcache-rule-checks.qnt:rollbackCanRecoverRetainedBytesTest", "scope": "Direct canonical-rule example accepts nonnegative recovery age below the fresh ceiling. Actual retention followed by rollback is exercised by the profile evidence."}]}, + {"id": "C53.dark-read-error-keeps-caller", "rule": "A failed dark C0 read completes the diagnostic job but an independent caller source can still succeed; no decode or fill follows the failed read.", "contracts": ["C53"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "dark-read-error-still-allows-source-result"}], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:darkReadErrorCannotReplaceCallerSourceTest", "scope": "A failed dark C0 read completes the diagnostic job but an independent caller source can still succeed; no decode or fill follows the failed read."}]}, + {"id": "C53.dark-source-error", "rule": "A rejected dark caller source is preserved as the caller failure, emits source_error, and never decodes or fills C0.", "contracts": ["C53"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "dark-source-error-never-decodes-or-fills"}], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:sourceErrorDoesNotDecodePresentDarkBytesTest", "scope": "A rejected dark caller source is preserved as the caller failure, emits source_error, and never decodes or fills C0."}]}, + {"id": "C52.fenced-miss-may-fill", "rule": "A fenced C0 is a semantic miss; a source-success fill may proceed once its own timestamp clears the observed fence, without decoding C0.", "contracts": ["C52"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "fenced-dark-c0-can-fill-after-cutoff"}], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:fencedDarkBytesCanAdmitNewerFillTest", "scope": "A fenced C0 is a semantic miss; a source-success fill may proceed once its own timestamp clears the observed fence, without decoding C0."}]}, + {"id": "C51.fenced-confirmation", "rule": "A watermark-fenced C1 supersedes an unequal C0/source comparison without repair, warning, or value-age verdict.", "contracts": ["C51"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "fenced-c1-supersedes-without-repair"}], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:fencedConfirmationNeverRepairsTest", "scope": "A watermark-fenced C1 supersedes an unequal C0/source comparison without repair, warning, or value-age verdict."}]}, + {"id": "C51.future-confirmation", "rule": "A future-dated C1 still participates in payload confirmation after C0 was accepted; identical bytes confirm mismatch without cache repair.", "contracts": ["C51"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "future-c1-confirms-payload-without-repair"}], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:futureConfirmationStillComparesBytesTest", "scope": "A future-dated C1 still participates in payload confirmation after C0 was accepted; identical bytes confirm mismatch without cache repair."}]}, + {"id": "C50.equal-skips-confirmation", "rule": "A semantic C0/source match emits match without issuing a C1 read or repairing the cache.", "contracts": ["C50"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "equal-comparison-skips-c1"}], "vectors": [], "quintReplays": ["shadow-layers/darkC0EqualToSourceIsAMatchTest"], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:binarySnapshotComparesDecodedValueTest", "scope": "A semantic C0/source match emits match without issuing a C1 read or repairing the cache."}, + {"ref": "formal/dialcache-shadow-layers-conformance.qnt:darkC0EqualToSourceIsAMatchTest", "scope": "In the composed shadow-layers profile a dark job whose fresh C0 decodes to the caller source's value ends match after one decode with no confirmation read (the read count stays at the C0 read) and holds no dump; the caller completes with its source value. Public inputs only; no served-hit or repair claim."}]}, + {"id": "C53.fill-serialization-error", "rule": "A dark fill serialization failure emits fill_error without dispatching a Redis write and preserves the accepted caller result.", "contracts": ["C53"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "fill-serialization-error-preserves-caller"}], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:fillSerializationFailureNeverDispatchesWriteTest", "scope": "A dark fill serialization failure emits fill_error without dispatching a Redis write and preserves the accepted caller result."}]}, + {"id": "C53.fill-write-error", "rule": "A dispatched dark Redis write failure emits fill_error and preserves the accepted caller result; it does not retry or emit a second verdict.", "contracts": ["C53"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "fill-write-error-preserves-caller"}], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}, {"path": "src/dialcache.ts", "lines": [1101, 1126, 1147, 1175, 1206, 1220], "scope": "Caller/source ownership, detached decoding, conditional fill, byte confirmation."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:fillWriteFailurePreservesCallerResultTest", "scope": "A dispatched dark Redis write failure emits fill_error and preserves the accepted caller result; it does not retry or emit a second verdict."}]}, + {"id": "C34.observed-fence-snapshot", "rule": "A conditional refill uses the miss-time observed fence; later invalidation can fence a dispatched write on subsequent reads without retroactively rewriting that miss.", "contracts": ["C34"], "scenarios": ["invalidation during source does not replace the acquired miss fence"], "generated": [{"profile": "recovery-read", "witness": "later-invalidation-keeps-captured-miss-fence-new-read-fences-write"}], "vectors": [], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "quintReplays": ["recovery-read/laterInvalidationDoesNotRewriteObservedMissFenceTest"], "models": [ + {"ref": "formal/dialcache-tracked-invalidation.qnt:laterInvalidationDoesNotRewriteMissFenceTest", "scope": "A conditional refill uses the miss-time observed fence; later invalidation can fence a dispatched write on subsequent reads without retroactively rewriting that miss."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:laterInvalidationDoesNotRewriteObservedMissFenceTest", "scope": "A miss captures the absent watermark baseline before invalidation. Source publication still dispatches at the later watermark timestamp; a new request rejects that now-fenced write, proving both captured-refill authority and subsequent fence visibility."}], "definitions": [ + {"ref": "formal/kernel/remote-io.qnt:settleRead", "scope": "A miss captures the absent watermark baseline before invalidation. Source publication still dispatches at the later watermark timestamp; a new request rejects that now-fenced write, proving both captured-refill authority and subsequent fence visibility."}]}, + {"id": "C38.value-work-does-not-extend-marker", "rule": "Ordinary tracked reads and complete value writes do not create, advance, or extend invalidation watermarks.", "contracts": ["C38"], "scenarios": [], "generated": [{"profile": "recovery-read", "witness": "ordinary-value-work-preserves-absent-marker"}, {"profile": "recovery-read", "witness": "ordinary-value-work-preserves-marker-cutoff-and-expiry"}], "vectors": [], "evidenceNotes": ["The tracked-invalidation regression checks cutoff preservation only. The recovery-read profile additionally exports marker probes that check continued absence or unchanged cutoff and expiry across ordinary reads and value writes. These controlled adapter observations complement real-server protocol integration; they do not prove native Redis internals."], "provenance": [{"path": "formal/SPEC.md", "section": "Recovery, shadow work, and invalidation races"}], "quintReplays": ["recovery-read/ordinaryValueWorkDoesNotCreateMarkerTest", "recovery-read/ordinaryValueWorkDoesNotExtendMarkerTest", "recovery-read/expiredMarkerIsGoneTest", "recovery-read/lapsedMarkerUnfencesTheFrameStampedAtItsCutoffTest"], "models": [ + {"ref": "formal/dialcache-tracked-invalidation.qnt:readsAndValueWritesDoNotMoveWatermarkTest", "scope": "This regression checks cutoff preservation only; it does not model marker existence or TTL. The separate recovery-read regressions and required witnesses probe continued marker absence or unchanged cutoff and expiry across ordinary reads and value writes, with real-server protocol integration remaining additional evidence."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:ordinaryValueWorkDoesNotCreateMarkerTest", "scope": "External marker cutoff and TTL probes before/after ordinary tracked reads and value writes distinguish missing-marker creation, cutoff movement and lifetime extension. Controlled adapter observation, not a proof of native Redis internals."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:ordinaryValueWorkDoesNotExtendMarkerTest", "scope": "External marker cutoff and TTL probes before/after ordinary tracked reads and value writes distinguish missing-marker creation, cutoff movement and lifetime extension. Controlled adapter observation, not a proof of native Redis internals."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:expiredMarkerIsGoneTest", "scope": "A marker's lifetime ends at its two-hour floor: the probe reads no marker at that instant and the next invalidation stamps a fresh floor marker at the new cutoff, so an expired marker is neither read nor extended."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:lapsedMarkerUnfencesTheFrameStampedAtItsCutoffTest", "scope": "Once a marker's lifetime lapses, the frame stamped exactly at its cutoff is no longer fenced: a tracked read finds it stale under the two-hour freshness and holds no decode, the loader's failure retains it as the recovery candidate, and the held decode serves it with no write, so a lapsed marker fences nothing on the public channels."}, + {"ref": "formal/dialcache-recovery-read-conformance.qnt:expiredMarkersFenceNothing", "scope": "A marker no longer in force fences nothing: its entity's watermark is at the zero baseline once the marker's lifetime lapsed, so only an invalidation, never ordinary work or a lapsed marker, keeps a watermark in force."}], "definitions": [ + {"ref": "formal/kernel/markers.qnt:observe", "scope": "External marker cutoff and TTL probes before/after ordinary tracked reads and value writes distinguish missing-marker creation, cutoff movement and lifetime extension. Controlled adapter observation, not a proof of native Redis internals."}]}, + {"id": "C51.identical-payload-confirmation", "rule": "An unequal C0/source comparison is reported as mismatch only when one successful C1 read returns the same payload bytes, including equivalent text/binary representations; the cache is never repaired.", "contracts": ["C51"], "scenarios": [], "generated": [{"profile": "shadow", "witness": "same-c1-bytes-confirm-mismatch"}], "vectors": [], "evidenceNotes": ["Shared confirmation rule; source detachment and caller-path differences have separate cases."], "provenance": [{"path": "src/dialcache.ts", "lines": [1220], "scope": "Compare C1 payload bytes with original C0 before confirmed mismatch."}], "models": [ + {"ref": "formal/dialcache-shadow-conformance.qnt:identicalTextAndBinaryBytesConfirmMismatchTest", "scope": "Shared confirmation rule; source detachment and caller-path differences have separate cases."}]}, + {"id": "C05.request-hit-stops-traversal", "rule": "A request memo hit skips local and remote traversal and source execution", "contracts": ["C05"], "scenarios": [], "generated": [{"profile": "layers", "witness": "request-hit-stops-lower-traversal"}], "vectors": [], "models": [ + {"ref": "formal/dialcache-core.qnt:firstHitStopsLowerTraversal", "scope": "A request memo hit skips local and remote traversal and source execution. This check covers the bounded model clause: firstHitStopsLowerTraversal. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-core.qnt:untrackedSourcePublishesToAllParticipatingLayersTest", "scope": "A request memo hit skips local and remote traversal and source execution. This check covers the bounded model clause: untrackedSourcePublishesToAllParticipatingLayersTest. Host representations and other feature combinations retain separate fixed/native evidence."}]}, + {"id": "C05.local-hit-stops-traversal", "rule": "A local hit skips remote reads and source execution while warming an eligible request memo", "contracts": ["C05"], "scenarios": [], "generated": [{"profile": "layers", "witness": "local-hit-stops-remote-and-source"}], "vectors": [], "quintReplays": ["runtime-boundaries/runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", "core/localValueSurvivesSourceChangeTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:firstHitStopsLowerTraversal", "scope": "A local hit skips remote reads and source execution while warming an eligible request memo. This check covers the bounded model clause: firstHitStopsLowerTraversal. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-core.qnt:localHitWarmsRequestAndSkipsRemoteTest", "scope": "A local hit skips remote reads and source execution while warming an eligible request memo. This check covers the bounded model clause: localHitWarmsRequestAndSkipsRemoteTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:runtimeLocalTtlAddsEarlierLayerToRemoteFixtureTest", "scope": "An earlier local value suppresses remote read/decode and source execution after a runtime TTL overlay adds local serving."}, + {"ref": "formal/dialcache-conformance.qnt:localValueSurvivesSourceChangeTest", "scope": "Two enabled local calls around an external source update return the original value with one local source execution in the introductory profile. No request-memo warming claim."}, + {"ref": "formal/dialcache-conformance.qnt:servedLayerValueMatchesCache", "scope": "After each public local, coalesced or remote call in the introductory profile, the served layer holds exactly the returned value and a semantic miss leaves that layer readable. The receipt reads the input record, not the transition helpers; it makes no claim about request-memo warming or remote read counts."}]}, + {"id": "C16.reenable-default-coalescing", "rule": "Reenabling a shared serving layer over the disabled baseline retains library coalescing when its leaf is omitted", "contracts": ["C16", "C17"], "scenarios": ["runtime ramp up over disabled baseline preserves default coalescing"], "generated": [{"profile": "runtime-boundaries", "witness": "disabled-baseline-default-sharing"}], "vectors": [], "provenance": ["test/dialcache-coalescing.test.ts:coalesces a disabled() baseline ramped up by an overlay that omits coalesce"], "quintReplays": ["runtime-boundaries/disabledBaselineRampedUpKeepsDefaultSharingTest"], "models": [ + {"ref": "formal/dialcache-runtime-policy.qnt:reenablingDisabledBaselineKeepsDefaultCoalescingTest", "scope": "Reenabling a shared serving layer over the disabled baseline retains library coalescing when its leaf is omitted. This check covers the bounded model clause: reenablingDisabledBaselineKeepsDefaultCoalescingTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:disabledBaselineRampedUpKeepsDefaultSharingTest", "scope": "Reenabling a shared serving layer over the disabled baseline retains library coalescing when its leaf is omitted. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}]}, + {"id": "C17.explicit-feature-kill-switch", "rule": "Explicit zero or false runtime feature leaves replace inherited request, recovery, and shadow enablement while preserving omitted coalescing policy", "contracts": ["C16", "C17"], "scenarios": ["explicit feature kill switches bypass and preserve request memo for reenablement"], "generated": [{"profile": "runtime-boundaries", "witness": "full-feature-kill-switch"}], "vectors": [], "provenance": ["src/config.ts:DialCacheKeyConfig.disabled", "test/dialcache-config-ramp.test.ts:returns the explicit kill-switch overlay from DialCacheKeyConfig.disabled()"], "quintReplays": ["runtime-boundaries/fullFeatureKillSwitchKeepsOmittedSharingAndRetainedMemoTest"], "models": [ + {"ref": "formal/dialcache-runtime-policy.qnt:explicitOffReplacesInheritedFeaturesTest", "scope": "Explicit zero or false runtime feature leaves replace inherited request, recovery, and shadow enablement while preserving omitted coalescing policy. This check covers the bounded model clause: explicitOffReplacesInheritedFeaturesTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-runtime-boundaries-conformance.qnt:fullFeatureKillSwitchKeepsOmittedSharingAndRetainedMemoTest", "scope": "Explicit zero or false runtime feature leaves replace inherited request, recovery, and shadow enablement while preserving omitted coalescing policy. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}]}, + {"id": "C21.invalid-remote-ttl", "rule": "Invalid remote TTL preserves valid local serving", "contracts": ["C21"], "scenarios": [], "generated": [{"profile": "policy", "witness": "invalid-remote-ttl-preserves-local-hit"}], "vectors": [], "provenance": ["test/dialcache-config-ramp.test.ts:rejects unsupported runtime TTLs before cache or serialization work"], "evidenceNotes": ["The required generated witness isolates invalid remote TTL while a valid local entry remains usable."], "quintReplays": ["policy/invalidRemoteTtlPreservesLocalServingTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:invalidRemoteTtlPreservesLocalServingTest", "scope": "Invalid remote TTL preserves valid local serving. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}]}, + {"id": "C21.invalid-local-ramp", "rule": "Invalid local ramps suppress local caching while a valid remote layer remains usable", "contracts": ["C21"], "scenarios": ["invalid runtime ramp fails open"], "generated": [{"profile": "policy", "witness": "invalid-local-ramp-preserves-remote-hit"}], "vectors": [], "provenance": ["test/dialcache-config-ramp.test.ts:rejects runtime ramps outside the inclusive 0-100 domain"], "evidenceNotes": ["The fixed scenario checks local bypass and no retention after an invalid local ramp. The required generated witness and scoped Quint regression separately check preservation of a valid remote hit."], "quintReplays": ["policy/invalidLocalRampPreservesRemoteTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:invalidLocalRampPreservesRemoteTest", "scope": "Invalid local ramp preserves valid remote hits. This check covers the bounded model clause: invalidLocalRampPreservesRemoteTest. Host representations and other feature combinations retain separate fixed/native evidence."}]}, + {"id": "C21.invalid-remote-ramp", "rule": "Invalid remote ramp preserves valid local hits", "contracts": ["C21"], "scenarios": [], "generated": [{"profile": "policy", "witness": "invalid-remote-ramp-preserves-local-hit"}], "vectors": [], "provenance": ["test/dialcache-config-ramp.test.ts:rejects runtime ramps outside the inclusive 0-100 domain"], "quintReplays": ["policy/invalidRemoteRampPreservesLocalTest"], "models": [ + {"ref": "formal/dialcache-policy-conformance.qnt:invalidRemoteRampPreservesLocalTest", "scope": "Invalid remote ramp preserves valid local hits. This check covers the bounded model clause: invalidRemoteRampPreservesLocalTest. Host representations and other feature combinations retain separate fixed/native evidence."}]}, + {"id": "C27.source-error-no-publication", "rule": "A rejected source preserves its failure and publishes no successful value to participating cache layers", "contracts": ["C15", "C27"], "scenarios": ["source rejection publishes to none of the participating layers"], "generated": [{"profile": "local-failure", "witness": "rejected-source-preserves-previous-local-publication"}], "vectors": [], "provenance": ["test/dialcache-request-local.test.ts:removes a rejected request-local in-flight entry so the same scope can retry"], "quintReplays": ["local-failure/sourceFailureKeepsPreviouslyAcceptedStorageTest", "local-failure/rejectedSourceDoesNotSeedLocalTest"], "models": [ + {"ref": "formal/dialcache-core.qnt:sourceFailureNeverPublishes", "scope": "A rejected source preserves its failure and publishes no successful value to participating cache layers. This check covers the bounded model clause: sourceFailureNeverPublishes. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-core.qnt:rejectedSourceNeverPublishesTest", "scope": "A rejected source preserves its failure and publishes no successful value to participating cache layers. This check covers the bounded model clause: rejectedSourceNeverPublishesTest. Host representations and other feature combinations retain separate fixed/native evidence."}, + {"ref": "formal/dialcache-local-failure-conformance.qnt:storageHoldsAcceptedValuesOnly", "scope": "The local slot, the remote frame and every memo row hold no value or an accepted one, so a rejected source publishes and memoizes nothing and an error code is never stored. Real local storage remains behind a native exception/clock-failure injection seam; no elapsed-time or concurrent-source claim."}, + {"ref": "formal/dialcache-local-failure-conformance.qnt:sourceFailureKeepsPreviouslyAcceptedStorageTest", "scope": "Real local storage remains behind a native exception/clock-failure injection seam. Distinct request and transient public probes check the old local value, accepted caller result and request-only memo; read failure remains publication-ineligible after the injected fault is cleared. No elapsed-time or concurrent-source claim."}, + {"ref": "formal/dialcache-local-failure-conformance.qnt:rejectedSourceDoesNotSeedLocalTest", "scope": "A source rejected on an empty local store seeds nothing: the transient call that follows misses locally, reads remote again and starts its own source, so the rejected result never becomes a local publication. Healthy storage throughout; no memo, elapsed-time or concurrent-source claim."}], "definitions": [ + {"ref": "formal/kernel/serving.qnt:publish", "scope": "Publication warms local storage only for an accepted value with a positive captured local TTL; a rejected source refills and warms nothing and completes its callers with the error."}]}, + {"id": "C09.fractional-clock-grid", "rule": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.", "contracts": ["C09"], "scenarios": [], "generated": [{"profile": "local-clock", "witness": "fractional-insertion-expiry"}, {"profile": "local-clock", "witness": "shared-instance-grid"}], "vectors": [], "evidenceNotes": ["The fixture advances native time in microseconds and constructs real default cache instances. It does not replace either local clock with the shared integer behavior clock. Precise source, read and shadow deadlines remain separately bound."], "quintReplays": ["local-clock/fractionalInsertionExpiresAtWholeMillisecondTest", "local-clock/fractionalConstructionKeepsCommonInstanceGridTest", "local-clock/nonzeroOriginKeepsWholeMillisecondBoundaryTest", "local-clock/integerInsertionRetainsFullTtlTest"], "models": [ + {"ref": "formal/dialcache-local-clock-conformance.qnt:fractionalInsertionExpiresAtWholeMillisecondTest", "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-local-clock-conformance.qnt:fractionalConstructionKeepsCommonInstanceGridTest", "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-local-clock-conformance.qnt:nonzeroOriginKeepsWholeMillisecondBoundaryTest", "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-local-clock-conformance.qnt:integerInsertionRetainsFullTtlTest", "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times.. The deterministic regression checks the public result and subsequent reuse for this bounded fixture."}, + {"ref": "formal/dialcache-local-clock-conformance.qnt:clockIsOnTheGrid", "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times. The clock the layers read is the integer projection of the raw ticks, spelled without the clock module, so a precise-clock substitution violates it."}, + {"ref": "formal/dialcache-local-clock-conformance.qnt:callsServeLiveEntriesOrRunTheSource", "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times. At a call step the caller served its instance's live entry (strictly before the entry's grid expiry) and started no source, or ran its source, returned the offered value and left the entry stamped from this grid instant for the local TTL."}, + {"ref": "formal/dialcache-local-clock-conformance.qnt:publicCallsMatchSources", "scope": "Local insertion and expiry use the common process monotonic whole-millisecond grid, including fractional insertion times and cache instances constructed at different fractional times. One source per loader, every owned caller completed by its own source's outcome and every entry the value of a source on its instance, so the public observation agrees with the library records."}], "definitions": [ + {"ref": "formal/kernel/local-storage.qnt:promote", "scope": "A hit renews recency, never insertion: promote writes the LRU order only, so the entry keeps the grid expiry its fill stamped; the regression fractionalInsertionExpiresAtWholeMillisecondTest pins it."}]} ] } diff --git a/formal/semantic-mutations.json b/formal/semantic-mutations.json deleted file mode 100644 index f69f20e4..00000000 --- a/formal/semantic-mutations.json +++ /dev/null @@ -1,173 +0,0 @@ -{ - "schemaVersion": 1, - "mutations": [ - { - "id": "M01", - "case": "C45.maximum-age-exclusive", - "description": "Accept a retained candidate at the exact maximum age after decoding", - "path": "src/internal/redis-cache.ts", - "before": "servingAge.ageMs >= maximumAgeMs", - "after": "servingAge.ageMs > maximumAgeMs", - "requiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M02", - "case": "C45.recheck-after-decode", - "description": "Reuse the pre-decode age instead of observing age after asynchronous decoding", - "path": "src/internal/redis-cache.ts", - "before": "const servingAge = this.frameAge(key, frame, CacheLayer.REMOTE);", - "after": "const servingAge = initialAge;", - "requiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M03", - "case": "C25.late-source-rejected", - "description": "Accept an externally settled result after its elapsed deadline when the timer has not run", - "path": "src/internal/deadline.ts", - "before": "if (elapsedMs() >= timeoutMs) {", - "after": "if (false) {", - "requiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M04", - "case": "C34.second-fence", - "description": "Skip the tracked fence recheck after serialization", - "path": "src/internal/redis-cache.ts", - "before": "if (createdAtMs <= observedWatermarkMs) {", - "after": "if (false) {", - "requiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M05", - "case": "C03.detached-bypass", - "description": "Treat a detached context whose outer scope closed as still enabled", - "path": "src/context.ts", - "before": "return store?.enabled === true && store.holder?.closed === false;", - "after": "return store?.enabled === true;", - "requiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M06", - "case": "W04.strict-fence", - "description": "Accept a tracked frame timestamp equal to its watermark", - "path": "src/internal/redis-payload.ts", - "before": "observedWatermarkMs !== undefined && createdAtMs <= observedWatermarkMs", - "after": "observedWatermarkMs !== undefined && createdAtMs < observedWatermarkMs", - "requiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M07", - "case": "C51.changed-confirmation", - "description": "Confirm an unequal shadow result even when C1 contains different payload bytes", - "path": "src/dialcache.ts", - "before": "confirmationFrame === null || !redisPayloadsEqual(originalFrame.payload, confirmationFrame.payload)", - "after": "confirmationFrame === null", - "requiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M08", - "case": "C60.invalid-logging-policy", - "description": "Enable mismatch logging after a malformed runtime logging flag", - "path": "src/dialcache.ts", - "before": "this.recordError(key, CacheLayer.REMOTE, \"config_resolution\");\n return false;\n }\n return configuredLogMismatches;", - "after": "this.recordError(key, CacheLayer.REMOTE, \"config_resolution\");\n return true;\n }\n return configuredLogMismatches;", - "requiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M09", - "case": "C60.logging-default-off", - "description": "Enable mismatch logging when its flag is omitted", - "path": "src/dialcache.ts", - "before": "if (configuredLogMismatches === undefined) {\n return false;", - "after": "if (configuredLogMismatches === undefined) {\n return true;", - "requiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M10", - "case": "C31.tracked-no-local-fill", - "description": "Publish an unvalidated tracked source value directly into local storage", - "path": "src/dialcache.ts", - "before": "const suppressLocalWrite = (remote.status === \"disabled\" && remote.skipCacheWrite === true)\n || (remoteWriteConfig !== undefined && key.trackForInvalidation);", - "after": "const suppressLocalWrite = remote.status === \"disabled\" && remote.skipCacheWrite === true;", - "requiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M11", - "case": "C09.fixed-local-ttl", - "description": "Renew the local insertion TTL on every cache hit", - "path": "src/internal/local-cache.ts", - "before": "ttlResolution: 0,", - "after": "ttlResolution: 0,\n updateAgeOnGet: true,", - "requiredDetections": [ - "ordinary", - "generated", - "portable" - ] - }, - { - "id": "M12", - "case": "W02.sorted-arguments", - "description": "Reverse the prescribed argument-name ordering", - "path": "src/key.ts", - "before": ".sort(([left], [right]) => compareCodePoints(left, right));", - "after": ".sort(([left], [right]) => -compareCodePoints(left, right));", - "requiredDetections": [ - "generated", - "portable" - ] - }, - { - "id": "M13", - "case": "C54.expired-before-start", - "description": "Dispatch dark shadow reads after the job deadline already elapsed before deferred work starts", - "path": "src/dialcache.ts", - "before": " try {\n if (abandonIfExpired()) {\n return \"timeout\";\n }\n\n let shadowFillConfig:", - "after": " try {\n let shadowFillConfig:", - "requiredDetections": [ - "ordinary", - "generated", - "portable" - ] - } - ] -} diff --git a/formal/semantic-reporter.mjs b/formal/semantic-reporter.mjs index d43d8892..eee962a1 100644 --- a/formal/semantic-reporter.mjs +++ b/formal/semantic-reporter.mjs @@ -1,19 +1,35 @@ import { writeFileSync } from 'node:fs'; +import { settlementViolationPattern } from './replay/settlement.mjs'; // A successful process alone is insufficient: an unmatched selector or an // entirely skipped cohort can exit successfully without executing assertions. +// An unhandled rejection with no failed assertion is infrastructure, whatever +// the exit code says. Beside failed assertions it is a consequence of the +// fault under measurement (the unmodified baseline has none, so under a mutant +// it is the mutant settling a promise the suite was not awaiting at that +// moment: a deadline that fired early, a joined flight that failed); it is +// recorded with the result and never counts as a detection on its own. A +// settlement violation is the driver failing its own contract, not the library +// failing a comparison, so it is infrastructure too, as in the Go evaluator; +// the first violated rule travels with the error so the runner can record a +// mutant's cohort against it by name (mutation-reports.mjs classifyCohort). export function evaluateSemanticTestReport(data, execution, exitCode, label = 'cohort') { const assertions = data.testResults.flatMap(file => file.assertionResults); const failed = assertions.filter(test => test.status === 'failed'); const passed = assertions.filter(test => test.status === 'passed').length; - const timedOut = failed.some(test => test.failureMessages.some(message => /(?:Test|Hook) timed out in/.test(message))); - if (execution.reason !== (failed.length ? 'failed' : 'passed') || execution.collectionErrors.length || execution.unhandledErrors.length || passed + failed.length === 0 || - timedOut || + const violation = failed.flatMap(test => test.failureMessages).find(message => settlementViolationPattern.test(message)); + const infrastructure = violation !== undefined + || failed.some(test => test.failureMessages.some(message => /(?:Test|Hook) timed out in/.test(message))); + const { unhandledErrors } = execution; + if (execution.reason !== (failed.length ? 'failed' : 'passed') || execution.collectionErrors.length || (unhandledErrors.length && !failed.length) || + passed + failed.length === 0 || infrastructure || (exitCode !== 0 && failed.length === 0) || (exitCode === 0 && failed.length > 0)) { - throw new Error(`${label}: infrastructure/import error, not evidence of detection (exit=${exitCode}, passed=${passed}, failed=${failed.length})`); + const error = new Error(`${label}: infrastructure/import error, not evidence of detection (exit=${exitCode}, passed=${passed}, failed=${failed.length})`); + if (violation !== undefined) error.settlementViolation = violation.split('\n')[0].replace(/^Error: /, ''); + throw error; } return { state: failed.length ? 'detected' : 'survived', passed, failed: failed.length, - failingTests: failed.map(test => test.fullName) }; + failingTests: failed.map(test => test.fullName), ...(unhandledErrors.length ? { unhandledErrors } : {}) }; } // Vitest's JSON reporter omits unhandled and suite-collection errors. Preserve diff --git a/formal/shadow-layers-smoke.itf.json b/formal/shadow-layers-smoke.itf.json index 3d74b0a7..30ab6cb7 100644 --- a/formal/shadow-layers-smoke.itf.json +++ b/formal/shadow-layers-smoke.itf.json @@ -11,1598 +11,11 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [], - "dumps": [], - "jobs": [], - "localExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localWriters": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "100000" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policy": { - "choice": { - "#bigint": "0" - }, - "freshMs": { - "#bigint": "60000" - }, - "local": true, - "request": true, - "retainedMs": { - "#bigint": "120000" - }, - "serving": false, - "shadow": true - }, - "remoteCreated": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "remoteExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "sources": [], - "work": [], - "writes": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "calls": [], - "dumps": [], - "jobs": [], - "localExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localWriters": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "100000" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policy": { - "choice": { - "#bigint": "2" - }, - "freshMs": { - "#bigint": "60000" - }, - "local": true, - "request": false, - "retainedMs": { - "#bigint": "120000" - }, - "serving": false, - "shadow": true - }, - "remoteCreated": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "remoteExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "sources": [], - "work": [], - "writes": [] - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "calls": [ - { - "hit": { - "#bigint": "0" - }, - "slot": { - "#bigint": "-1" - }, - "source": { - "#bigint": "0" - } - } - ], - "dumps": [], - "jobs": [ - { - "admittedAt": { - "#bigint": "100000" - }, - "cached": { - "#bigint": "0" - }, - "cachedCreated": { - "#bigint": "0" - }, - "dark": true, - "freshMs": { - "#bigint": "60000" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "policyChoice": { - "#bigint": "2" - }, - "retainedMs": { - "#bigint": "120000" - }, - "source": { - "#bigint": "0" - }, - "timedOut": false - } - ], - "localExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localWriters": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "100000" - }, - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policy": { - "choice": { - "#bigint": "2" - }, - "freshMs": { - "#bigint": "60000" - }, - "local": true, - "request": false, - "retainedMs": { - "#bigint": "120000" - }, - "serving": false, - "shadow": true - }, - "remoteCreated": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "remoteExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "sources": [ - { - "call": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "local": true, - "remote": false, - "result": { - "#bigint": "0" - }, - "retainedMs": { - "#bigint": "120000" - }, - "slot": { - "#bigint": "-1" - } - } - ], - "work": [], - "writes": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "calls": [ - { - "hit": { - "#bigint": "0" - }, - "slot": { - "#bigint": "-1" - }, - "source": { - "#bigint": "0" - } - } - ], - "dumps": [ - { - "#bigint": "0" - } - ], - "jobs": [ - { - "admittedAt": { - "#bigint": "100000" - }, - "cached": { - "#bigint": "0" - }, - "cachedCreated": { - "#bigint": "0" - }, - "dark": true, - "freshMs": { - "#bigint": "60000" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "policyChoice": { - "#bigint": "2" - }, - "retainedMs": { - "#bigint": "120000" - }, - "source": { - "#bigint": "0" - }, - "timedOut": false - } - ], - "localExpires": [ - { - "#bigint": "160000" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localWriters": [ - { - "#bigint": "0" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "100000" - }, - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policy": { - "choice": { - "#bigint": "2" - }, - "freshMs": { - "#bigint": "60000" - }, - "local": true, - "request": false, - "retainedMs": { - "#bigint": "120000" - }, - "serving": false, - "shadow": true - }, - "remoteCreated": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "remoteExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "sources": [ - { - "call": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "local": true, - "remote": false, - "result": { - "#bigint": "1" - }, - "retainedMs": { - "#bigint": "120000" - }, - "slot": { - "#bigint": "-1" - } - } - ], - "work": [ - { - "job": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "retainedMs": { - "#bigint": "120000" - }, - "source": { - "#bigint": "0" - }, - "stamp": { - "#bigint": "0" - } - } - ], - "writes": [] - } - }, - { - "input": { - "choice": { - "#bigint": "12" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "12" - } - } - }, - "s": { - "calls": [ - { - "hit": { - "#bigint": "0" - }, - "slot": { - "#bigint": "-1" - }, - "source": { - "#bigint": "0" - } - } - ], - "dumps": [ - { - "#bigint": "0" - } - ], - "jobs": [ - { - "admittedAt": { - "#bigint": "100000" - }, - "cached": { - "#bigint": "0" - }, - "cachedCreated": { - "#bigint": "0" - }, - "dark": true, - "freshMs": { - "#bigint": "60000" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "policyChoice": { - "#bigint": "2" - }, - "retainedMs": { - "#bigint": "120000" - }, - "source": { - "#bigint": "0" - }, - "timedOut": false - } - ], - "localExpires": [ - { - "#bigint": "160000" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localWriters": [ - { - "#bigint": "0" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "100000" - }, - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policy": { - "choice": { - "#bigint": "12" - }, - "freshMs": { - "#bigint": "60000" - }, - "local": true, - "request": true, - "retainedMs": { - "#bigint": "120000" - }, - "serving": true, - "shadow": true - }, - "remoteCreated": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "remoteExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "sources": [ - { - "call": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "local": true, - "remote": false, - "result": { - "#bigint": "1" - }, - "retainedMs": { - "#bigint": "120000" - }, - "slot": { - "#bigint": "-1" - } - } - ], - "work": [ - { - "job": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "retainedMs": { - "#bigint": "120000" - }, - "source": { - "#bigint": "0" - }, - "stamp": { - "#bigint": "0" - } - } - ], - "writes": [] - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "calls": [ - { - "hit": { - "#bigint": "0" - }, - "slot": { - "#bigint": "-1" - }, - "source": { - "#bigint": "0" - } - }, - { - "hit": { - "#bigint": "1" - }, - "slot": { - "#bigint": "-1" - }, - "source": { - "#bigint": "-1" - } - } - ], - "dumps": [ - { - "#bigint": "0" - } - ], - "jobs": [ - { - "admittedAt": { - "#bigint": "100000" - }, - "cached": { - "#bigint": "0" - }, - "cachedCreated": { - "#bigint": "0" - }, - "dark": true, - "freshMs": { - "#bigint": "60000" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "policyChoice": { - "#bigint": "2" - }, - "retainedMs": { - "#bigint": "120000" - }, - "source": { - "#bigint": "0" - }, - "timedOut": false - } - ], - "localExpires": [ - { - "#bigint": "160000" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localWriters": [ - { - "#bigint": "0" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "100000" - }, - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policy": { - "choice": { - "#bigint": "12" - }, - "freshMs": { - "#bigint": "60000" - }, - "local": true, - "request": true, - "retainedMs": { - "#bigint": "120000" - }, - "serving": true, - "shadow": true - }, - "remoteCreated": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "remoteExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "sources": [ - { - "call": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "local": true, - "remote": false, - "result": { - "#bigint": "1" - }, - "retainedMs": { - "#bigint": "120000" - }, - "slot": { - "#bigint": "-1" - } - } - ], - "work": [ - { - "job": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "phase": { - "#bigint": "1" - }, - "retainedMs": { - "#bigint": "120000" - }, - "source": { - "#bigint": "0" - }, - "stamp": { - "#bigint": "0" - } - } - ], - "writes": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"12"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } diff --git a/formal/shadow-smoke.itf.json b/formal/shadow-smoke.itf.json index f7d253a9..f7e0df2c 100644 --- a/formal/shadow-smoke.itf.json +++ b/formal/shadow-smoke.itf.json @@ -11,5684 +11,66 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "20" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "20" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "shadowPolicy" - }, - "mbt::actionTaken": "shadowPolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "shadowPolicy" - }, - "mbt::actionTaken": "shadowPolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseDump" - }, - "mbt::actionTaken": "releaseDump", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "writeFault" - }, - "mbt::actionTaken": "writeFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "logPolicy" - }, - "mbt::actionTaken": "logPolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "1" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "1" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "loadFault" - }, - "mbt::actionTaken": "loadFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "1" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "1" - }, - "fallbackErrors": [ - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "6" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "1" - }, - "fallbackErrors": [ - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "6" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "1" - }, - "fallbackErrors": [ - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "2" - }, - "fallbackErrors": [ - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "2" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "2" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "2" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "3" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "3" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "writeFault" - }, - "mbt::actionTaken": "writeFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "3" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "seedUnicode" - }, - "mbt::actionTaken": "seedUnicode", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "3" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "7" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "7" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "3" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "3" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "dumpFault" - }, - "mbt::actionTaken": "dumpFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "3" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "3" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "4" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "4" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "4" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "4" - }, - "fallbackErrors": [ - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "5" - }, - "fallbackErrors": [ - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "5" - }, - "fallbackErrors": [ - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "5" - }, - "fallbackErrors": [ - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "7" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "7" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "6" - }, - "fallbackErrors": [ - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "7" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "7" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "6" - }, - "fallbackErrors": [ - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "7" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "7" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "6" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "7" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "7" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "6" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "7" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "7" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "6" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "8" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "seedUnicode" - }, - "mbt::actionTaken": "seedUnicode", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "8" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "20" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "20" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "8" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "loadFault" - }, - "mbt::actionTaken": "loadFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "8" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "8" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "logPolicy" - }, - "mbt::actionTaken": "logPolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "8" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "8" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error", - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "logPolicy" - }, - "mbt::actionTaken": "logPolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error", - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error", - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "20" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "20" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error", - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error", - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "shadowPolicy" - }, - "mbt::actionTaken": "shadowPolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error", - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "loadFault" - }, - "mbt::actionTaken": "loadFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error", - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error", - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "shadowPolicy" - }, - "mbt::actionTaken": "shadowPolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error", - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error", - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "dumpFault" - }, - "mbt::actionTaken": "dumpFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "8" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok", - "mutation_error", - "mutation_error" - ], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "9" - }, - "recovery": [], - "shadow": [ - "timeout", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "fill_fenced", - "source_error", - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "7" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - } + {"input":{"choice":{"#bigint":"0"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"20"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"20"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["timeout"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"shadowPolicy"},"mbt::actionTaken":"shadowPolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["timeout"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"shadowPolicy"},"mbt::actionTaken":"shadowPolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["timeout"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseDump"},"mbt::actionTaken":"releaseDump","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["timeout"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"writeFault"},"mbt::actionTaken":"writeFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["timeout"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"logPolicy"},"mbt::actionTaken":"logPolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["timeout"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["timeout"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"1"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["timeout"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"1"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"loadFault"},"mbt::actionTaken":"loadFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["timeout"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"1"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["timeout","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"1"},"fallbackErrors":["local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"6"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"6"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["timeout","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"1"},"fallbackErrors":["local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"6"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"6"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["timeout","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"1"},"fallbackErrors":["local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":["timeout","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"2"},"fallbackErrors":["local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":["timeout","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"2"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":["timeout","source_error","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"2"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"4"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":["timeout","source_error","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"2"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":[],"shadow":["timeout","source_error","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"3"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":[],"shadow":["timeout","source_error","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"3"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"writeFault"},"mbt::actionTaken":"writeFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":[],"shadow":["timeout","source_error","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"3"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"8"},"name":"seedUnicode"},"mbt::actionTaken":"seedUnicode","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":[],"shadow":["timeout","source_error","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"3"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"7"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"7"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":[],"shadow":["timeout","source_error","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"3"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":[],"shadow":["timeout","source_error","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"3"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"dumpFault"},"mbt::actionTaken":"dumpFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":[],"shadow":["timeout","source_error","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"3"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"3"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"4"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"4"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"4"},"fallbackErrors":["local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"4"},"fallbackErrors":["local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"5"},"fallbackErrors":["local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"5"},"fallbackErrors":["local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"5"},"fallbackErrors":["local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"7"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"7"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"6"},"fallbackErrors":["local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"7"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"7"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"6"},"fallbackErrors":["local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"7"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"7"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"6"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"7"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"7"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"6"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"7"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"7"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"6"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"8"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"8"},"name":"seedUnicode"},"mbt::actionTaken":"seedUnicode","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"8"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"20"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"20"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["ok","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"8"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"loadFault"},"mbt::actionTaken":"loadFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["ok","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"8"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["ok","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"8"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"logPolicy"},"mbt::actionTaken":"logPolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"0"},"maintenance":["ok","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"8"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"8"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"8"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error","mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"logPolicy"},"mbt::actionTaken":"logPolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error","mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error","mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"20"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"20"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error","mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error","mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"shadowPolicy"},"mbt::actionTaken":"shadowPolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error","mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"loadFault"},"mbt::actionTaken":"loadFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error","mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error","mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"shadowPolicy"},"mbt::actionTaken":"shadowPolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error","mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error","mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"dumpFault"},"mbt::actionTaken":"dumpFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"8"},"loads":{"#bigint":"1"},"maintenance":["ok","mutation_error","mutation_error"],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"9"},"recovery":[],"shadow":["timeout","source_error","source_error","fill_fenced","source_error","fill_fenced","source_error","mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"7"},"fallbackErrors":["local","local","local","local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}} ] } diff --git a/formal/source-audit.json b/formal/source-audit.json index e5bd1f99..88b4a941 100644 --- a/formal/source-audit.json +++ b/formal/source-audit.json @@ -1005,19 +1005,20 @@ "reviewedGuides": [ { "path": "formal/AUTHORING.md", - "sha256": "35f00c622fc42ab636fd915b15e61dbb5bd8bfdc89715e1c85fa359bbec4e1d1", + "sha256": "abbda4d86306771ce8c8bd4df66134acaac0eb66966accba70d3b3d544f19b8f", "entries": [ {"line":1,"title":"Reading and extending the DialCache models"}, - {"line":16,"title":"Reading a model"}, - {"line":56,"title":"Writing conventions"}, - {"line":150,"title":"Codifying the next behavior"}, - {"line":183,"title":"Give reviewers focused context"}, - {"line":198,"title":"Exporting a deterministic regression"}, - {"line":234,"title":"Maintaining case and witness evidence"}, - {"line":282,"title":"Reproducible committed fixtures"}, - {"line":292,"title":"Refactoring and execution"}, - {"line":317,"title":"Challenging every model"}, - {"line":389,"title":"Exported runs are exactly the public-only runs"} + {"line":20,"title":"Reading a model"}, + {"line":61,"title":"Writing conventions"}, + {"line":159,"title":"Codifying the next behavior"}, + {"line":208,"title":"Give reviewers focused context"}, + {"line":223,"title":"Exporting a deterministic regression"}, + {"line":261,"title":"Maintaining case and witness evidence"}, + {"line":314,"title":"Reproducible committed fixtures"}, + {"line":324,"title":"Refactoring and execution"}, + {"line":352,"title":"Challenging every model"}, + {"line":425,"title":"Mapping every challenge to native mutants"}, + {"line":511,"title":"Exported runs are exactly the public-only runs"} ], "review": { "kind": "tooling-guide", @@ -1026,7 +1027,7 @@ }, { "path": "formal/BEHAVIOR.md", - "sha256": "f62fdee1d5d8335383f99afedcd13c172aa6cb244159360c28457189aa771b08", + "sha256": "999ead7066aa1b178912530020bdef6f9aa10670a1dc1351feacde2c442d0527", "entries": [ {"line":1,"title":"Portable behavioral scenarios and generated feature profiles"}, {"line":17,"title":"Scenario format"}, @@ -1153,7 +1154,7 @@ }, { "path": "formal/CONTRACTS.md", - "sha256": "c7add8b75ef29e5b8618b78263a4ff3dc326bd550d8f03d0407d17c968061350", + "sha256": "5dd880c3ca427206a3c28fd0e26c4f0ff202e37a053f0b10ea050c3a5869b267", "entries": [ {"line":1,"title":"Portable contract inventory"}, {"line":11,"title":"Where the boundary lies"}, @@ -1256,14 +1257,14 @@ }, { "path": "formal/FEATURE-COVERAGE.md", - "sha256": "b218c442c6202f08497c92fed024210e466b1ab28bf686c618c9fd7122b7ba37", + "sha256": "81312d747f7af78d518462f3b0ab7641c1aa101dcbdf478cb3f9105c0f48b1b3", "entries": [ {"line":1,"title":"DialCache features and known behavioral corners"}, {"line":16,"title":"What is accounted for"}, - {"line":43,"title":"Feature map"}, - {"line":63,"title":"How a corner earns evidence"}, - {"line":112,"title":"Native adaptations are explicit contracts"}, - {"line":150,"title":"Remaining finite limits"} + {"line":42,"title":"Feature map"}, + {"line":62,"title":"How a corner earns evidence"}, + {"line":111,"title":"Native adaptations are explicit contracts"}, + {"line":149,"title":"Remaining finite limits"} ], "review": { "kind": "coverage-guide", @@ -1272,13 +1273,13 @@ }, { "path": "formal/GO-PARITY.md", - "sha256": "6710539770731259b721165c1fddf9974626d12274e6ebabe5c026d2898de648", + "sha256": "2db023f6fa8c8c7c654cb52a53499cd1041615be300eda4925b1ef7420db4e31", "entries": [ {"line":1,"title":"Go parity acceptance"}, {"line":52,"title":"Required evidence"}, - {"line":110,"title":"Reading and updating the ledger"}, - {"line":154,"title":"Native clock precision"}, - {"line":187,"title":"Current configuration and observability bindings"} + {"line":111,"title":"Reading and updating the ledger"}, + {"line":163,"title":"Native clock precision"}, + {"line":196,"title":"Current configuration and observability bindings"} ], "review": { "kind": "tooling-guide", @@ -1287,18 +1288,18 @@ }, { "path": "formal/PORTING.md", - "sha256": "ae7780bea1efc026232b3b48af92bce6f40df9591d6fc633c9c6130cea1ebd5f", + "sha256": "2807f483a12eabe71fa7ead0d19df2d1dcf9f106da86b69d03555956472c167e", "entries": [ {"line":1,"title":"Implementing another DialCache port"}, {"line":14,"title":"What a port supplies"}, {"line":45,"title":"Shared coordinator protocol"}, - {"line":84,"title":"Trace and observation contract"}, - {"line":146,"title":"Observation contract"}, - {"line":222,"title":"Generated fixtures and fast local tests"}, - {"line":257,"title":"Complete corpus and reusable acceptance checks"}, - {"line":365,"title":"Witness evidence"}, - {"line":455,"title":"Current limitations for a third port"}, - {"line":469,"title":"New-port acceptance"} + {"line":88,"title":"Trace and observation contract"}, + {"line":189,"title":"Observation contract"}, + {"line":287,"title":"Generated fixtures and fast local tests"}, + {"line":322,"title":"Complete corpus and reusable acceptance checks"}, + {"line":430,"title":"Witness evidence"}, + {"line":520,"title":"Current limitations for a third port"}, + {"line":542,"title":"New-port acceptance"} ], "review": { "kind": "tooling-guide", @@ -1346,14 +1347,14 @@ }, { "path": "formal/README.md", - "sha256": "0317648114092eae71371cff05fe40d049be4f66f87002074fa1b6fef46f53a1", + "sha256": "7edd8ccbb9d6dc4d3e528c085e6b4337b540f4e793f827b1a7867dc64f30c86a", "entries": [ {"line":1,"title":"Executable DialCache specification"}, - {"line":7,"title":"Start with your task"}, - {"line":23,"title":"How the specification connects to code"}, - {"line":43,"title":"Models and composition profiles"}, - {"line":94,"title":"Generating and replaying behavior"}, - {"line":181,"title":"Evidence and scope"} + {"line":10,"title":"Start with your task"}, + {"line":26,"title":"How the specification connects to code"}, + {"line":46,"title":"Models and composition profiles"}, + {"line":95,"title":"Generating and replaying behavior"}, + {"line":182,"title":"Evidence and scope"} ], "review": { "kind": "tooling-guide", @@ -1362,16 +1363,16 @@ }, { "path": "formal/SEMANTIC-COVERAGE.md", - "sha256": "36dfebb6bfe76998f42ae0880ba5f9a984e6c5cd4376c2aef55b189cf12cdc65", + "sha256": "1d026f63937685a63f9f7f90339aa1d88696046a56083dc16a82b19a64adb807", "entries": [ {"line":1,"title":"Measuring semantic coverage"}, {"line":5,"title":"Evidence inventory"}, - {"line":47,"title":"Model assurance"}, - {"line":102,"title":"Generated boundary evidence"}, - {"line":110,"title":"Behavioral mutation comparison"}, - {"line":124,"title":"Recorded measurements"}, - {"line":130,"title":"Reproduction and CI"}, - {"line":172,"title":"Model properties and cross-language execution"} + {"line":65,"title":"Model assurance"}, + {"line":128,"title":"Generated boundary evidence"}, + {"line":136,"title":"Behavioral mutation comparison"}, + {"line":150,"title":"Recorded measurements"}, + {"line":156,"title":"Reproduction and CI"}, + {"line":198,"title":"Model properties and cross-language execution"} ], "review": { "kind": "coverage-guide", @@ -1380,17 +1381,17 @@ }, { "path": "formal/SPEC.md", - "sha256": "33d5c3074a9b6009e84fddac3ee4c3fb4b64e950b8fe33242a680b6cacefa922", + "sha256": "04fab67afcdac644a24b622072c425a3ecca68e9689c61563e8c9144c6ab1f9a", "entries": [ {"line":1,"title":"DialCache behavioral specification"}, - {"line":15,"title":"Definition ownership and executable connections"}, - {"line":53,"title":"Meaning of conformance"}, - {"line":85,"title":"State and environmental inputs"}, - {"line":110,"title":"Admission, policy, and traversal"}, - {"line":159,"title":"Remote acquisition and publication"}, - {"line":200,"title":"Time, source acceptance, and progress"}, - {"line":230,"title":"Recovery, shadow work, and invalidation races"}, - {"line":268,"title":"Assumptions, evidence, and claims"} + {"line":18,"title":"Definition ownership and executable connections"}, + {"line":55,"title":"Meaning of conformance"}, + {"line":87,"title":"State and environmental inputs"}, + {"line":112,"title":"Admission, policy, and traversal"}, + {"line":161,"title":"Remote acquisition and publication"}, + {"line":202,"title":"Time, source acceptance, and progress"}, + {"line":232,"title":"Recovery, shadow work, and invalidation races"}, + {"line":270,"title":"Assumptions, evidence, and claims"} ], "review": { "kind": "contract-guide", @@ -1485,7 +1486,7 @@ }, { "path": "formal/TEST-MAP.md", - "sha256": "b41628eb0cf5fe7c3a24334bf88e758c93b5c7fcd885e9dbf67a6959aaa8d3b5", + "sha256": "5e900759ff92b754130a856e49b5e977b97a359bce6e725957cd40118fe167c7", "entries": [ {"line":1,"title":"Formal contract and implementation evidence map"}, {"line":18,"title":"Behavioral map"}, @@ -1501,15 +1502,15 @@ }, { "path": "formal/VALIDATION.md", - "sha256": "79d61df9534e7a1db8a1b4819076e7cc7a4e7aff43281756e9135d95f86e1308", + "sha256": "b7211947e99a84098ae07879c8be22862c00bcb83f91d0ef0f0ee3e4143bcf6c", "entries": [ {"line":1,"title":"Validation and evidence"}, {"line":7,"title":"Choosing a run"}, - {"line":67,"title":"Reading a completion report"}, - {"line":85,"title":"Mutation evidence"}, - {"line":146,"title":"Exploratory runs"}, - {"line":194,"title":"A retained sampling regression"}, - {"line":231,"title":"Historical results"} + {"line":72,"title":"Reading a completion report"}, + {"line":90,"title":"Mutation evidence"}, + {"line":171,"title":"Exploratory runs"}, + {"line":219,"title":"A retained sampling regression"}, + {"line":256,"title":"Historical results"} ], "review": { "kind": "tooling-guide", @@ -1518,13 +1519,13 @@ }, { "path": "formal/WALKTHROUGH.md", - "sha256": "a2e81aaab41c65c8ba02aa0fb80c1cbf6e8ba442d00913a87ac82c5935cee242", + "sha256": "86ec1c60442e2dc1f6912d27a28924e42a32824e0a7c19fccbdb8d69d3b8a2e4", "entries": [ {"line":1,"title":"Follow one behavior from Quint to both ports"}, {"line":14,"title":"Read the named run first"}, {"line":58,"title":"Follow input and evidence separately"}, {"line":93,"title":"Find the rule's catalog entries"}, - {"line":120,"title":"Run this example"} + {"line":119,"title":"Run this example"} ], "review": { "kind": "tooling-guide", diff --git a/formal/source-budgets-smoke.itf.json b/formal/source-budgets-smoke.itf.json index f84bcd6d..ecd9d626 100644 --- a/formal/source-budgets-smoke.itf.json +++ b/formal/source-budgets-smoke.itf.json @@ -11,477 +11,13 @@ "mbt::nondetPicks" ], "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "6" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"6"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"6"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } diff --git a/formal/validation.mjs b/formal/validation.mjs index dbef55c9..e4700bdd 100644 --- a/formal/validation.mjs +++ b/formal/validation.mjs @@ -2,7 +2,7 @@ import { spawn, spawnSync } from 'node:child_process'; import { closeSync, existsSync, mkdirSync, openSync, readFileSync, rmSync } from 'node:fs'; import { delimiter, dirname, isAbsolute, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; -import { parseShard } from './mutation-reports.mjs'; +import { parseOnly, parseShard } from './mutation-reports.mjs'; const root = fileURLToPath(new URL('../', import.meta.url)); const replayTests = ['test/formal-conformance.test.ts', 'test/formal-effects.test.ts', 'test/formal-features.test.ts', @@ -28,12 +28,12 @@ export const targetDescriptions = { 'formal-go': 'Complete prepared Go replay of the generated corpus with race detection', 'fixtures-check': 'Recompute every committed model-derived artifact with pinned Quint', 'kernel-fixtures': 'Typecheck the kernel library fixtures (test/fixtures/kernel) and run every run they declare', - differential: 'Check the composition lint baseline, then replay every composed profile against its reference corpus (merge base with DIFFERENTIAL_REFERENCE, default origin/main) in both directions', + differential: 'Check the composition lint baseline, then replay every composed profile against its reference corpus (merge base with DIFFERENTIAL_REFERENCE, default origin/main) in both directions (DIFFERENTIAL_SHARD=/ replays one round-robin shard of the composed profiles, as the hosted lane does with four)', explore: 'Explore a new recorded seed and replay both ports in an isolated source snapshot', 'model-check': 'Symbolically verify the scheduled finite rules with pinned Quint/Apalache (Java 21)', mutations: 'Measure TypeScript and Go semantic mutations over the generated corpus and shared witness evidence', - 'mutations-ts': 'Measure TypeScript semantic mutations over the generated corpus (MUTATION_SHARD=/ measures one shard)', - 'mutations-go': 'Measure Go semantic mutations over the generated corpus and shared witness evidence (MUTATION_SHARD=/ measures one shard)', + 'mutations-ts': 'Measure TypeScript semantic mutations over the generated corpus (MUTATION_SHARD=/ measures one shard; MUTATION_ONLY=, measures the named mutants into a partial report)', + 'mutations-go': 'Measure Go semantic mutations over the generated corpus and shared witness evidence (MUTATION_SHARD=/ measures one shard; MUTATION_ONLY=, measures the named mutants into a partial report)', 'mutations-merge-ts': 'Merge TypeScript mutation shards into the complete report; refuses inconsistent or missing shards', 'mutations-merge-go': 'Merge Go mutation shards into the complete report; refuses inconsistent or missing shards', integration: 'Run real TypeScript and Go Redis/Valkey/Cluster integration checks', @@ -49,20 +49,43 @@ export function expandTargets(target) { } // MUTATION_SHARD=/ narrows one measurement lane to a shard of -// its catalog; the merge target later assembles the complete report. Only the -// two leaf lanes accept it: an aggregate that silently ignored it would run the -// complete measurement the caller did not ask for. +// its catalog; the merge target later assembles the complete report. +// MUTATION_ONLY=, measures only the named mutants into a partial +// report that is never evidence. Only the two leaf lanes accept them: an +// aggregate that silently ignored them would run the complete measurement the +// caller did not ask for. const shardedTargets = ['mutations-ts', 'mutations-go']; -export function mutationShardArguments(target, environment = process.env) { - const value = environment.MUTATION_SHARD; - if (value === undefined) return []; +export function mutationSelectionArguments(target, environment = process.env) { + const set = [['MUTATION_SHARD', environment.MUTATION_SHARD], ['MUTATION_ONLY', environment.MUTATION_ONLY]].filter(([, value]) => value !== undefined); + if (!set.length) return []; + const stated = set.map(([name, value]) => `${name}=${value}`).join(' '); if (!shardedTargets.includes(target)) { - if (expandTargets(target).some(name => shardedTargets.includes(name))) throw new Error(`MUTATION_SHARD=${value} applies only to make mutations-ts and make mutations-go; unset it to run the complete measurement with make ${target}.`); + if (expandTargets(target).some(name => shardedTargets.includes(name))) throw new Error(`${stated} applies only to make mutations-ts and make mutations-go; unset it to run the complete measurement with make ${target}.`); return []; } - // The measurement scripts parse the same value; one implementation decides - // what is well-formed, so the runner cannot accept a shard the script rejects. - try { parseShard(value); } catch { throw new Error(`MUTATION_SHARD must be / with 1 <= index <= count (for example 2/3); got ${JSON.stringify(value)}.`); } + if (set.length > 1) throw new Error(`${stated}: MUTATION_SHARD and MUTATION_ONLY exclude each other; a partial run is never merged.`); + const [[name, value]] = set; + // The measurement scripts parse the same values; one implementation decides + // what is well-formed, so the runner cannot accept a value the script rejects. + if (name === 'MUTATION_SHARD') { + try { parseShard(value); } catch { throw new Error(`MUTATION_SHARD must be / with 1 <= index <= count (for example 2/3); got ${JSON.stringify(value)}.`); } + return [`--shard=${value}`]; + } + try { parseOnly(value); } catch { throw new Error(`MUTATION_ONLY must be , naming distinct mutant ids (for example M14,M15); got ${JSON.stringify(value)}.`); } + return [`--only=${value}`]; +} + +// DIFFERENTIAL_SHARD=/ narrows make differential to one +// round-robin shard of the composed profiles (formal/differential.mjs +// shardProfiles), the way the hosted lane's four-shard matrix does; every shard +// keeps the lint baseline and the kernel fixtures, so each is self-contained. +// No aggregate includes the differential, so other targets ignore the variable. +// The script parses the value with the same function: the runner cannot accept +// a value the script rejects. +export function differentialShardArguments(target, environment = process.env) { + const value = environment.DIFFERENTIAL_SHARD; + if (value === undefined || !expandTargets(target).includes('differential')) return []; + try { parseShard(value); } catch { throw new Error(`DIFFERENTIAL_SHARD must be / with 1 <= index <= count (for example 2/4); got ${JSON.stringify(value)}.`); } return [`--shard=${value}`]; } @@ -123,7 +146,8 @@ export function validationPlan(target, { directory = root, environment = process 'test', '-race', '-count=1', ...(full ? ['-json', '-timeout=35m'] : []), './...'), ...(full ? { env: { ...replayEnv, DIALCACHE_WITNESS_EVIDENCE_DIR: witnessDirectory }, stdoutFile: '.formal-traces/go-replay.jsonl' } : {}) }); const node22 = floorExecutable(environment, runnerNode, nodeVersion) ?? ''; - const shard = mutationShardArguments(target, environment); + const selection = mutationSelectionArguments(target, environment); + const differentialShard = differentialShardArguments(target, environment); const plans = { 'check-ts': [pnpm('Typecheck TypeScript', 'typecheck'), pnpm('Run TypeScript unit tests with coverage', 'test'), pnpm('Build package', 'build'), pnpm('Check packed package on Node 24', 'test:package')], @@ -136,7 +160,7 @@ export function validationPlan(target, { directory = root, environment = process smoke: [tsReplay(false), nativeGo(false)], 'fixtures-check': [node('Recompute all committed Quint artifacts', 'formal/generate-artifacts.mjs', '--check')], 'kernel-fixtures': [kernelFixtures], - differential: [lintBaseline, kernelFixtures, node('Replay composed profiles against their reference corpus', 'formal/differential.mjs', '--composed', `--reference=${environment.DIFFERENTIAL_REFERENCE ?? 'origin/main'}`)], + differential: [lintBaseline, kernelFixtures, node('Replay composed profiles against their reference corpus', 'formal/differential.mjs', '--composed', `--reference=${environment.DIFFERENTIAL_REFERENCE ?? 'origin/main'}`, ...differentialShard)], explore: [node('Explore and replay an isolated alternate-seed corpus', 'formal/explore.mjs')], 'model-check': [node('Symbolically verify the scheduled finite rules', 'formal/check-symbolic-models.mjs')], // The model check is evidence about the Quint models (typechecks, bounded @@ -156,8 +180,8 @@ export function validationPlan(target, { directory = root, environment = process node('Prepare Go execution context', 'formal/conformance.mjs', 'prepare', 'go', reportPath('go', 'context')), nativeGo(true), { ...node('Check complete Go native report', 'formal/check-go-replay.mjs'), stdoutFile: '.formal-traces/go-replay-summary.json' }, { ...node('Adapt Go native assertion report', 'formal/conformance-adapters.mjs', 'go', '.formal-traces/go-replay.jsonl', reportPath('go', 'context')), stdoutFile: reportPath('go', 'completion') }, completion('go')], - 'mutations-ts': [node('Measure TypeScript semantic mutations', 'formal/measure-semantics.mjs', ...shard)], - 'mutations-go': [node('Measure Go semantic mutations', 'formal/measure-go-semantics.mjs', ...shard)], + 'mutations-ts': [node('Measure TypeScript semantic mutations', 'formal/measure-semantics.mjs', ...selection)], + 'mutations-go': [node('Measure Go semantic mutations', 'formal/measure-go-semantics.mjs', ...selection)], // The merge needs neither Quint nor Go: it reads shard reports, checks // them against each other and this checkout, and writes the complete report. 'mutations-merge-ts': [node('Merge TypeScript mutation shards', 'formal/merge-mutation-reports.mjs', 'ts')], @@ -351,7 +375,9 @@ if (process.argv[1] === fileURLToPath(import.meta.url)) { console.log(Object.entries(targetDescriptions).map(([name, description]) => `make ${name.padEnd(width)} ${description}`).join('\n')); console.log('\nPrerequisites: frozen pnpm install; Node 24, pinned pnpm; Go 1.27.1 / Docker where required; Quint 0.32.0 for formal-check, formal-generate, fixtures-check, explore and model-check; Java 21 and tar for model-check and ci.'); console.log('formal-check is the Quint evidence lane (models, regressions, challenges); the port and mutation lanes read only the formal-generate output and do not wait for it.'); - console.log('Sharded mutation runs: MUTATION_SHARD=1/3 make mutations-ts (then 2/3, 3/3, on any machines with the same corpus), then make mutations-merge-ts; the merged report is the only complete evidence.'); + console.log('Sharded mutation runs: MUTATION_SHARD=/ make mutations-ts for every index, matching the workflow matrix, on any machines with the same corpus, then make mutations-merge-ts; the merged report is the only complete evidence.'); + console.log('One mutant locally: MUTATION_ONLY=M14,M15 make mutations-ts (or mutations-go) writes a partial report under partial/ and leaves the complete report alone.'); + console.log('Sharded differential runs: DIFFERENTIAL_SHARD=/ make differential replays one round-robin shard of the composed profiles, matching the pull request workflow\'s four-shard matrix; every shard checks the lint baseline and the kernel fixtures.'); console.log('Full local CI: make ci NODE22_BIN=/absolute/path/to/node22/bin/node (exact 22.15.0).'); } else { try { await runTarget(target); } diff --git a/formal/witness-baseline.json b/formal/witness-baseline.json index a3cdb1e0..c2810568 100644 --- a/formal/witness-baseline.json +++ b/formal/witness-baseline.json @@ -7,7 +7,7 @@ "profiles": { "admission": { "sampledHistories": 128, - "corpusSha256": "42e843bd3126da1c79b6fa713b10b35e8b0131012ef179c87734b1dd6bfb6548", + "corpusSha256": "706a2b21115095297825cc537e7ef4459cbbb48887de3f39c07b53249dc78619", "labels": { "outcome:match": 57, "outcome:mismatch": 35, @@ -31,106 +31,106 @@ }, "effects": { "sampledHistories": 512, - "corpusSha256": "0e20f4873f08eefcdd2d3e2d81bb90b0a0b3a51ad9d8f0e4056832d791de58bc", + "corpusSha256": "2349717b738cc931d9ae740e2e5c35f06f63e3a73fffb4533d018755558b7145", "labels": { "event:request": 512, "event:disabled": 512, - "event:miss": 434, + "event:miss": 419, "event:error": 512, - "event:coalesced": 509, - "event:invalidation": 501, + "event:coalesced": 512, + "event:invalidation": 502, "event:get": 512, "event:fallback": 512, - "event:serialization": 358, - "event:futureOffset": 25, - "event:size": 124, - "event:storedSize": 124, - "event:writeDispatch": 120, - "reply:1": 7, - "reply:2": 4, - "reply:3": 8, - "reply:4": 12, + "event:serialization": 341, + "event:futureOffset": 28, + "event:size": 117, + "event:storedSize": 117, + "event:writeDispatch": 114, + "reply:1": 8, + "reply:2": 9, + "reply:3": 2, + "reply:4": 6, "reply:5": 5, "reply:6": 8, - "reply:7": 9, - "reply:8": 6, - "reply:9": 6, - "reply:10": 8, - "reply:11": 6, - "reply:12": 7, - "reply:13": 3, + "reply:7": 8, + "reply:8": 7, + "reply:9": 5, + "reply:10": 6, + "reply:11": 8, + "reply:12": 3, + "reply:13": 4, "reply:14": 6, - "reply:15": 11, - "reply:16": 8, - "error:cache_read": 463, - "error:cache_read_timeout": 149, - "error:serialization_load": 169, - "error:serialization_dump": 112, - "error:cache_write": 62, - "error:fallback": 485, - "miss:value_absent": 243, + "reply:15": 4, + "reply:16": 6, + "error:cache_read": 457, + "error:cache_read_timeout": 160, + "error:serialization_load": 161, + "error:serialization_dump": 111, + "error:cache_write": 58, + "error:fallback": 480, + "miss:value_absent": 229, "miss:watermark_fenced": 102, - "miss:unclassified": 232, - "miss:expired": 3, - "duration:load": 76, - "duration:dump": 57, - "untracked-demotes-fenced-reply": 3, + "miss:unclassified": 222, + "miss:expired": 4, + "duration:load": 67, + "duration:dump": 52, + "untracked-demotes-fenced-reply": 1, "normalized-fence-blocks-publication": 3, - "abandoned-overlap": 29, - "publication-after-deadline": 21, - "delayed-fenced-write": 3, - "late-settlement": 161, - "read-timeout-starts-source": 149, - "read-late-settlement": 87, - "abandoned-read-settles": 93, - "decode-outlives-deadline": 31, - "acquired-hit-survives-invalidation": 15, - "failed-read-no-refill": 306, - "failed-decode-refills": 73, - "dump-failure-preserves-value": 112, - "write-failure-preserves-value": 62, - "serialize-outlives-deadline": 36, + "abandoned-overlap": 22, + "publication-after-deadline": 25, + "delayed-fenced-write": 1, + "late-settlement": 154, + "read-timeout-starts-source": 160, + "read-late-settlement": 79, + "abandoned-read-settles": 106, + "decode-outlives-deadline": 33, + "acquired-hit-survives-invalidation": 16, + "failed-read-no-refill": 327, + "failed-decode-refills": 68, + "dump-failure-preserves-value": 111, + "write-failure-preserves-value": 58, + "serialize-outlives-deadline": 26, "dump-rechecks-fence-after-rollback": 5, "observer-failure-hit": 0, "observer-failure-publication": 0, "observer-failure-source-error": 0, - "fixture:0": 95, - "fixture:1": 98, - "fixture:2": 78, - "fixture:3": 79, - "fixture:4": 81, + "fixture:0": 79, + "fixture:1": 85, + "fixture:2": 97, + "fixture:3": 92, + "fixture:4": 78, "fixture:5": 81, - "read-budget:10": 256, - "read-budget:20": 135, - "read-budget:30": 114, - "read-budget:50": 124, - "follower-keeps-read-budget": 16, - "initial-budget:0": 92, - "initial-budget:1": 92, - "initial-budget:2": 75, - "initial-budget:3": 77, - "initial-budget:4": 80, - "late-resolve": 82, - "late-reject": 87, - "normalized-reply-allows-refill:1": 3, - "normalized-reply-allows-refill:2": 1, - "normalized-reply-allows-refill:4": 4, - "normalized-reply-allows-refill:8": 3, - "normalized-reply-allows-refill:9": 4, + "read-budget:10": 274, + "read-budget:20": 113, + "read-budget:30": 112, + "read-budget:50": 105, + "follower-keeps-read-budget": 9, + "initial-budget:0": 77, + "initial-budget:1": 80, + "initial-budget:2": 93, + "initial-budget:3": 88, + "initial-budget:4": 75, + "late-resolve": 83, + "late-reject": 83, + "normalized-reply-allows-refill:1": 5, + "normalized-reply-allows-refill:2": 0, + "normalized-reply-allows-refill:4": 3, + "normalized-reply-allows-refill:8": 2, + "normalized-reply-allows-refill:9": 3, "normalized-reply-allows-refill:10": 3, - "normalized-reply-allows-refill:11": 1, - "normalized-reply-fences-refill:12": 2, + "normalized-reply-allows-refill:11": 2, + "normalized-reply-fences-refill:12": 1, "normalized-reply-allows-refill:13": 1, - "successful-read-has-no-late-cancel": 31, + "successful-read-has-no-late-cancel": 33, "write-stamp-after-serialization": 0, - "late-rejection-does-not-repeat-error": 95, + "late-rejection-does-not-repeat-error": 112, "future-offset-observing-layer-positive-seconds": 0, - "shared-failure-preserves-leader-and-follower-trail": 0 + "shared-failure-preserves-leader-and-follower-trail": 2 } }, "independent": { "sampledHistories": 512, - "corpusSha256": "9e8c9084c909e2d38307356f6e7adf1809ad739b25abe2cdc4dc927a4920ab53", + "corpusSha256": "57134d035a0f317364338513d107f10d26765ca05b33f3af6b58c2836c236b6e", "labels": { "independent-source-error-identities": 262, "independent-read-overlap": 465, @@ -147,7 +147,9 @@ "recovery:miss": 386, "recovery:deserialization_error": 64, "source-deadline": 373, - "failed-recovery-keeps-source-error": 36 + "failed-recovery-keeps-source-error": 36, + "later-source-survives-earlier-deadline": 11, + "later-source-expires-at-own-deadline": 20 } }, "layers": { @@ -179,12 +181,13 @@ "local-hit-stops-remote-and-source": 244, "request-hit-stops-lower-traversal": 307, "source-publication-probed-in-all-three-layers": 3, - "tracked-remote-disabled-local-hit": 17 + "tracked-remote-disabled-local-hit": 17, + "tracked-local-only-hit": 69 } }, "local-clock": { "sampledHistories": 128, - "corpusSha256": "8e6f796e9387efdd1651d71841de94d7944c783e2d2b940345f6030915731b7f", + "corpusSha256": "dd5c3f7d92942a834c84ec7b4e2602e4208cff99b4e94c23f8bd3e259df439ff", "labels": { "fractional-insertion-expiry": 0, "shared-instance-grid": 0 @@ -192,7 +195,7 @@ }, "local-failure": { "sampledHistories": 128, - "corpusSha256": "f299300bcf8ca50a98380a84b9ec182874f2229fe76e6c6a8b181770d283e4f0", + "corpusSha256": "23b06d251cefdd4e930b5d94114c5cb80907ad07a854ef94a152fb7aba4c5605", "labels": { "failed-local-read-preserves-old-value-and-memoizes-remote": 0, "failed-local-read-suppresses-later-source-publication": 0, @@ -252,65 +255,67 @@ "sparse-empty-provider-inherits-local-hit": 119, "sparse-empty-provider-inherits-remote-hit": 70, "uncoalesced-local-settled-hit": 104, - "uncoalesced-remote-settled-hit": 39 + "uncoalesced-remote-settled-hit": 39, + "remote-hit-local-ttl-outlives-remote-freshness": 0, + "independent-remote-last-completion-probed": 0 } }, "recovery": { "sampledHistories": 512, - "corpusSha256": "cbd6f011a2ce320b4a240ab42581fa6fa131b5c2728d2781789567c4dc5bdd06", + "corpusSha256": "f84821f62362d2da4301c4c7574a1d3b880c1c060d8ac3e0174938c8d86cbdb1", "labels": { - "fixture:4": 52, - "fixture:5": 59, - "fixture:6": 73, - "fixture:7": 68, + "fixture:4": 58, + "fixture:5": 73, + "fixture:6": 56, + "fixture:7": 62, "recovered-value-request-hit": 17, - "recovery-memoizes-both-requests": 3, - "closed-recovery-does-not-memoize-another-scope": 1, - "request-follower-shares-recovery-flight": 123, - "recovery-keeps-source-failure-trail": 67, - "rollback-rejects-retained-future": 1, - "outcome:served": 67, - "outcome:miss": 129, - "outcome:deserialization_error": 23, - "retained-across-invalidation": 22, - "coalesced-recovery": 43, - "expired-during-decode": 11, - "default-denies-ordinary-error": 22, - "default-recovers-deadline": 2, + "recovery-memoizes-both-requests": 1, + "closed-recovery-does-not-memoize-another-scope": 0, + "request-follower-shares-recovery-flight": 121, + "recovery-keeps-source-failure-trail": 53, + "rollback-rejects-retained-future": 0, + "outcome:served": 53, + "outcome:miss": 108, + "outcome:deserialization_error": 30, + "retained-across-invalidation": 17, + "coalesced-recovery": 34, + "expired-during-decode": 6, + "default-denies-ordinary-error": 21, + "default-recovers-deadline": 1, "default-recovers-propagated-timeout": 2, - "explicit-denial-overrides-timeout": 56, - "recovery-abandoned-overlap": 54, - "recovery-late-source-settles": 183, - "recovery-failure-preserves-timeout": 10, - "fixture:0": 56, - "fixture:1": 80, - "fixture:2": 67, - "fixture:3": 57, - "operation-denial-overrides-instance-allow": 43, - "instance-classifier-error-preserves-source": 38, - "instance-denial-overrides-timeout-default": 16, - "instance-allow-recovers-ordinary-error": 9, + "explicit-denial-overrides-timeout": 39, + "recovery-abandoned-overlap": 48, + "recovery-late-source-settles": 173, + "recovery-failure-preserves-timeout": 8, + "fixture:0": 59, + "fixture:1": 52, + "fixture:2": 75, + "fixture:3": 77, + "operation-denial-overrides-instance-allow": 35, + "instance-classifier-error-preserves-source": 46, + "instance-denial-overrides-timeout-default": 21, + "instance-allow-recovers-ordinary-error": 1, "operation-allow-overrides-instance-denial": 11, - "classifier-error-keeps-error-without-decode": 38, - "exact-maximum-after-decode-rejects": 5, - "failed-fresh-decode-is-not-recovery": 13, - "failed-initial-read-skips-recovery": 74, - "fenced-read-does-not-retain": 76, - "first-stale-age-recovers-without-publication": 55, - "fresh-zero-age-skips-source": 126, - "future-read-preserves-source-error": 17, - "last-fresh-age-skips-source": 7, + "classifier-error-keeps-error-without-decode": 41, + "exact-maximum-after-decode-rejects": 4, + "failed-fresh-decode-is-not-recovery": 20, + "failed-initial-read-skips-recovery": 77, + "fenced-read-does-not-retain": 54, + "first-stale-age-recovers-without-publication": 47, + "fresh-zero-age-skips-source": 143, + "future-read-preserves-source-error": 14, + "last-fresh-age-skips-source": 12, "last-recovery-age-serves": 1, "maximum-age-read-preserves-source-error": 6, - "recovery-age-sampled-at-successful-decode": 25, - "replacement-cannot-change-recovered-value": 6, - "rollback-below-fresh-age-still-recovers": 13, - "source-success-skips-stale-decode": 215 + "recovery-age-sampled-at-successful-decode": 18, + "replacement-cannot-change-recovered-value": 4, + "rollback-below-fresh-age-still-recovers": 9, + "source-success-skips-stale-decode": 197 } }, "recovery-read": { "sampledHistories": 256, - "corpusSha256": "2b830b52713f1d9b4dfca326aa40c2314baf7b428cf4ac23c203687b34194a57", + "corpusSha256": "21ac95fe3f2ee6dfbbf12ea5c1e59529b204ebeb47af507efa291fe6a8f2431b", "labels": { "read-settlement-crosses-freshness-and-recovers": 0, "read-settlement-before-freshness-hits": 0, @@ -359,7 +364,7 @@ "reenabled-default-sharing": 0, "bypass-preserves-cache:false-request-leaf": 0, "bypass-preserves-cache:invalid-coalesce": 10, - "bypass-preserves-cache:invalid-request-local": 8, + "bypass-preserves-cache:invalid-request-local": 7, "bypass-preserves-cache:null-coalesce": 10, "bypass-preserves-cache:null-request-local": 8, "runtime-ttl-implies-ramp:local": 0, @@ -402,7 +407,7 @@ }, "shadow": { "sampledHistories": 1024, - "corpusSha256": "8699d7dcea093ad9962d1a169ebf58fb64a0307cd13f13f0c7d9e007abd4784e", + "corpusSha256": "c0dceb6430cd99bcb85948585856e5cb5fed5fa88771a525697e8304511a0038", "labels": { "outcome:match": 53, "outcome:mismatch": 54, @@ -485,7 +490,7 @@ }, "shadow-layers": { "sampledHistories": 256, - "corpusSha256": "c7210e376ad01e1ce1eccf99ebe67db853000524765fa7ec30843c4221910447", + "corpusSha256": "cf714d5332969b514f383c69ac1f2d5849f26058d6e8885a5a7e853c6b3394ab", "labels": { "dark-present-c0-never-publishes-local": 0, "dark-local-source-publication-stops-later-shadow": 0, diff --git a/formal/witnesses.mjs b/formal/witnesses.mjs index 54b32226..b76f8569 100644 --- a/formal/witnesses.mjs +++ b/formal/witnesses.mjs @@ -2,7 +2,7 @@ import { createHash } from 'node:crypto'; import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; import { basename, dirname, relative, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; -import { readExecution, root } from './execution.mjs'; +import { readExecution, root, scheduleExecution } from './execution.mjs'; import { witnessEvidence, writeWitnessEvidence } from './replay/witnesses/evidence.mjs'; import { checkWitnesses, readWitnessRegistry, witnessProfiles } from './replay/witnesses/index.mjs'; @@ -100,7 +100,9 @@ export function traceKind(path, directories) { throw new Error(`${path}: outside the sampled and regression corpus directories`); } -export function witnessCorpus(profile, tracesRoot, execution = readExecution(), directory = root) { +// `execution` is the scheduled manifest (scheduleExecution): the exported +// regressions it names complete the profile's corpus. +export function witnessCorpus(profile, tracesRoot, execution = scheduleExecution(), directory = root) { const model = execution.models.find(candidate => candidate.profile === profile); if (model === undefined) throw new Error(`${profile}: no scheduled model in formal/execution.json`); const output = model.generate?.outputDirectory; @@ -117,7 +119,7 @@ export function witnessCorpus(profile, tracesRoot, execution = readExecution(), return { paths, kinds, directories }; } -export function witnessCorpusPaths(profile, tracesRoot, execution = readExecution(), directory = root) { +export function witnessCorpusPaths(profile, tracesRoot, execution = scheduleExecution(), directory = root) { return witnessCorpus(profile, tracesRoot, execution, directory).paths; } @@ -237,7 +239,7 @@ export function formatReport(report) { } export function evaluateProfiles(options, { directory = root, log = message => console.log(message), environment = process.env } = {}) { - const execution = readExecution(); + const execution = scheduleExecution(); const registry = readWitnessRegistry(resolve(directory, 'formal/coverage-witnesses.json')); const outputDirectory = resolve(directory, options.out); const baselinePath = resolve(directory, options.baseline); diff --git a/go/behavior_driver_test.go b/go/behavior_driver_test.go index 421d18ea..06098573 100644 --- a/go/behavior_driver_test.go +++ b/go/behavior_driver_test.go @@ -339,7 +339,13 @@ type behaviorDriver struct { fallbackFailed bool discardWrites, discardInvalidations bool skipSettle bool - unsettled obj + // reported is the observation the driver attests to; settlementReceipt is + // its receipt. Both are taken together at the end of every apply. + reported obj + settlementReceipt obj + // settlementDiagnostic describes the verification drain's findings when + // the receipt reports runnable work; it never crosses the wire. + settlementDiagnostic string } func emptyBehaviorObservation(fixture obj) obj { @@ -362,15 +368,19 @@ func newBehaviorDriver(t *testing.T, fixture obj) *behaviorDriver { d.effects[key] = map[int]*behaviorGate{} } d.instance("default") + // A fresh driver attests its own quiescence like every later apply does, so + // a session whose setup is empty still observes a measured receipt. + d.settle() return d } // newUnsettledBehaviorDriver is a harness control only: the returned driver -// reports the observation it held before the end-of-apply drain that -// implements the causally-ready-v1 settlement contract, so a control test can -// prove the replays depend on it. It still drains after that snapshot, so -// every command starts from a settled driver and the control measures early -// observation alone. Conformance replays must never use it. +// skips the settle drain that implements the causally-ready-v1 settlement +// contract and so reports the observation it held before it, which is what an +// unsettled port would report. Its receipt still comes from the verification +// drain, which finds the skipped work and settles the driver, so every command +// starts settled and the coordinator can only reject the replay through the +// receipt. Conformance replays must never use it. func newUnsettledBehaviorDriver(t *testing.T, fixture obj) *behaviorDriver { d := newBehaviorDriver(t, fixture) d.skipSettle = true @@ -502,13 +512,126 @@ func (d *behaviorDriver) hold(effect string, index int) error { <-gate.done return gate.err } + +// observation is the record the driver reports: the snapshot its receipt +// attests to, not the live counters, so the observation and the receipt +// describe one instant and the coordinator's next commands derive from it. func (d *behaviorDriver) observation() obj { d.mu.Lock() defer d.mu.Unlock() - if d.skipSettle && d.unsettled != nil { - return bm(bclone(d.unsettled)) + return bm(bclone(d.reported)) +} + +// receipt is the settlement receipt of the reported observation, computed by +// the driver alone from its executor, gate and clock state and sent with every +// behavior observe (PORTING.md, causally-ready-v1). +func (d *behaviorDriver) receipt() obj { + d.mu.Lock() + defer d.mu.Unlock() + return bm(bclone(d.settlementReceipt)) +} + +// settle is the causally-ready-v1 settlement step followed by its attestation. +// The settle drain runs the executor work a command made ready while external +// gates stay held; the harness control skips only that drain. The driver then +// snapshots the observation it will report together with its held gates and +// monotonic clock, and verifies quiescence with one more zero-time drain: the +// deferred functions pending once every goroutine is blocked, plus one if the +// observation changed, are the runnable count the coordinator requires to be +// zero. That drain also settles a control driver, so its next command starts +// settled and skipped settlement can only surface through the receipt. +func (d *behaviorDriver) settle() { + if !d.skipSettle { + d.clock.drain() + } + // The base clock: the local-fault wrapper is the library's view and panics + // under the localStorage fault. + elapsed := d.clock.ElapsedMS() + d.mu.Lock() + reported := bm(bclone(d.observed)) + held := d.heldLocked() + d.mu.Unlock() + synctest.Wait() + d.clock.mu.Lock() + runnable := int64(len(d.clock.deferred)) + d.clock.mu.Unlock() + d.clock.drain() + d.mu.Lock() + defer d.mu.Unlock() + // Compare two clones so the check reads wire values on both sides. + after := bm(bclone(d.observed)) + changed := !bequal(reported, after) + if changed { + runnable++ + } + d.reported = reported + d.settlementReceipt = obj{"elapsedMs": elapsed, "runnable": runnable, "held": held} + // For the failure message only, never for the wire: what the drain did. + d.settlementDiagnostic = "" + if runnable > 0 { + member := "observation unchanged" + if changed { + member = "observation member " + firstDifference(reported, after) + " changed" + } + d.settlementDiagnostic = fmt.Sprintf("verification drain: %s, %d deferred function(s) pending", member, runnable-boolToInt(changed)) + } +} + +// firstDifference names the first observation member, in key order, whose +// wire value differs between two snapshots. +func firstDifference(before, after obj) string { + keys := make([]string, 0, len(after)) + for key := range after { + keys = append(keys, key) + } + sort.Strings(keys) + for _, key := range keys { + if !bequal(before[key], after[key]) { + return key + } } - return bm(bclone(d.observed)) + return "(none)" +} + +func boolToInt(value bool) int64 { + if value { + return 1 + } + return 0 +} + +// diagnostic is what the verification drain found when the receipt reports +// runnable work, for the harness failure message; the receipt itself stays a +// closed record. +func (d *behaviorDriver) diagnostic() string { + d.mu.Lock() + defer d.mu.Unlock() + return d.settlementDiagnostic +} + +// heldLocked counts the controlled gates still unsettled: loader gates settle +// only through resolve and reject, effect gates leave the map only through +// their release (a gate the library abandons, such as a deadline-aborted read, +// stays registered until then), and a closed scope stays in the map with a +// settled gate. +func (d *behaviorDriver) heldLocked() obj { + held := obj{} + for effect, field := range map[string]string{"read": "reads", "write": "writes", "dump": "dumps", "load": "loads", "policy": "policies"} { + held[field] = int64(len(d.effects[effect])) + } + loaders, scopes := int64(0), int64(0) + for _, gate := range d.loaders { + if !gate.settled { + loaders++ + } + } + for _, scope := range d.scopes { + if !scope.gate.settled { + scopes++ + } + } + held["loaders"], held["scopes"] = loaders, scopes + return held } func (d *behaviorDriver) observedEffectCount(effect string) int { keys := map[string]string{"read": "reads", "write": "writes", "dump": "dumps", "load": "loads", "policy": "policyCalls", "loader": "loaders"} @@ -819,17 +942,7 @@ func (d *behaviorDriver) apply(input obj) error { default: return fmt.Errorf("unknown behavior input %s", bjson(input)) } - // The no-settle harness control records what an unsettled port would - // report: the observation before the drain. It drains afterwards so the - // next command finds its gates registered and no failure is a harness error. - if d.skipSettle { - d.mu.Lock() - d.unsettled = bm(bclone(d.observed)) - d.mu.Unlock() - } - // Drain ready executor work while unresolved external gates remain held: - // the causally-ready-v1 settlement step. - d.clock.drain() + d.settle() return d.assertPublicationCausality() } func (d *behaviorDriver) close() { diff --git a/go/core_replay_test.go b/go/core_replay_test.go index e6dcaa43..4542c1e4 100644 --- a/go/core_replay_test.go +++ b/go/core_replay_test.go @@ -487,17 +487,24 @@ func TestCoreParserAndObservationBoundary(t *testing.T) { if err != nil { t.Fatal(err) } + // The negative controls edit the compact text of the history, so they read + // the same whatever spacing the committed encoding uses. + compact := new(bytes.Buffer) + if err := json.Compact(compact, raw); err != nil { + t.Fatal(err) + } + raw = compact.Bytes() for name, malformed := range map[string][]byte{ "empty": []byte(`{"states":[]}`), - "missing input": bytes.Replace(raw, []byte(`"input": {`), []byte(`"missingInput": {`), 1), - "explicit arguments": bytes.Replace(raw, []byte(`"#bigint": "-1"`), []byte(`"#bigint": "0"`), 1), + "missing input": bytes.Replace(raw, []byte(`"input":{`), []byte(`"missingInput":{`), 1), + "explicit arguments": bytes.Replace(raw, []byte(`"#bigint":"-1"`), []byte(`"#bigint":"0"`), 1), "init only": initOnly, - "unknown action": bytes.Replace(raw, []byte(`"mbt::actionTaken": "outsideCall"`), []byte(`"mbt::actionTaken": "inventedAction"`), 1), - "missing init": bytes.Replace(raw, []byte(`"mbt::actionTaken": "init"`), []byte(`"mbt::actionTaken": "localCall"`), 1), - "arguments": bytes.Replace(raw, []byte(`"mbt::nondetPicks": {}`), []byte(`"mbt::nondetPicks": {"choice":1}`), 1), - "unsafe integer": bytes.Replace(raw, []byte(`"#bigint": "1"`), []byte(`"#bigint": "9007199254740992"`), 1), + "unknown action": bytes.Replace(raw, []byte(`"mbt::actionTaken":"outsideCall"`), []byte(`"mbt::actionTaken":"inventedAction"`), 1), + "missing init": bytes.Replace(raw, []byte(`"mbt::actionTaken":"init"`), []byte(`"mbt::actionTaken":"localCall"`), 1), + "arguments": bytes.Replace(raw, []byte(`"mbt::nondetPicks":{}`), []byte(`"mbt::nondetPicks":{"choice":1}`), 1), + "unsafe integer": bytes.Replace(raw, []byte(`"#bigint":"1"`), []byte(`"#bigint":"9007199254740992"`), 1), "missing observation": bytes.Replace(raw, []byte(`"sourceVersion"`), []byte(`"missingField"`), 1), - "duplicate action": bytes.Replace(raw, []byte(`"mbt::actionTaken": "init"`), []byte(`"mbt::actionTaken": "init", "mbt::actionTaken": "init"`), 1), + "duplicate action": bytes.Replace(raw, []byte(`"mbt::actionTaken":"init"`), []byte(`"mbt::actionTaken":"init","mbt::actionTaken":"init"`), 1), } { t.Run(name, func(t *testing.T) { if bytes.Equal(raw, malformed) { diff --git a/go/feature_replay_test.go b/go/feature_replay_test.go index 1ecfe838..0a92fa4d 100644 --- a/go/feature_replay_test.go +++ b/go/feature_replay_test.go @@ -1,7 +1,6 @@ package dialcache import ( - "encoding/json" "fmt" "os" "path/filepath" @@ -36,33 +35,20 @@ func featurePaths(p string) ([]string, error) { return []string{filepath.Join("..", "formal", p+"-smoke.itf.json")}, nil } +// The exported regressions of a profile are the histories under +// /../regressions//. Which runs a model exports is read from +// its Quint text by formal/execution.mjs, and the gate over this package's +// report (formal/check-go-replay.mjs) requires exactly those histories, so +// this reader lists the directory rather than the manifest. func featureRegressionPaths(profile, directory string) ([]string, error) { - raw, err := os.ReadFile("../formal/execution.json") + paths, err := filepath.Glob(filepath.Join(directory, "..", "regressions", profile, "*.itf.json")) if err != nil { return nil, err } - var manifest struct { - Models []struct { - Profile string `json:"profile"` - Regressions []string `json:"replayRegressions"` - } `json:"models"` - } - if err := json.Unmarshal(raw, &manifest); err != nil { - return nil, err - } - paths := []string{} - for _, model := range manifest.Models { - if model.Profile != profile { - continue - } - for _, name := range model.Regressions { - path := filepath.Join(directory, "..", "regressions", profile, name+".itf.json") - if _, err := os.Stat(path); err != nil { - return nil, fmt.Errorf("missing Quint regression %s: %w", name, err) - } - paths = append(paths, path) - } + if len(paths) == 0 { + return nil, fmt.Errorf("missing Quint regressions for %s", profile) } + sort.Strings(paths) return paths, nil } func TestFeatureConformance(t *testing.T) { diff --git a/go/replay_coordinator_test.go b/go/replay_coordinator_test.go index fcb326fd..487b5c46 100644 --- a/go/replay_coordinator_test.go +++ b/go/replay_coordinator_test.go @@ -13,6 +13,7 @@ import ( "path/filepath" "reflect" "regexp" + "strconv" "strings" "sync" "sync/atomic" @@ -24,9 +25,11 @@ import ( const replaySettlement = "causally-ready-v1" -// Observation definitions a prepare result may name. Every observation the -// driver reports is validated against the named definition before it is sent. -var replayObservationDefinitions = map[string]bool{"behaviorObservation": true, "coreObservation": true, "localClockObservation": true} +// Record definitions a prepare result may name, by kind: the observation +// definition every record the driver reports must satisfy, and the receipt +// definition a behavior session carries with each observation. Both are +// validated locally against the named definition before they are sent. +var replayRecordDefinitions = map[string]string{"behaviorObservation": "observation", "coreObservation": "observation", "localClockObservation": "observation", "settlementReceipt": "receipt"} func readReplaySchema() (obj, error) { raw, err := os.ReadFile("../formal/replay/protocol.schema.json") @@ -189,11 +192,24 @@ func (c *replayCoordinator) prepare(profile, path string, raw []byte) (obj, erro if err != nil { return nil, err } - if behaviorKeys(result) != "actions,fixture,observation,session,settlement,setup,steps" || result["settlement"] != replaySettlement || bs(result["session"]) == "" || !replayIndex(result["steps"], 2) { + // The receipt member names the definition every observe of the session + // must carry, or is null for a session whose driver reports none. + keys := behaviorKeys(result) + if keys != "actions,fixture,observation,receipt,session,settlement,setup,steps" || result["settlement"] != replaySettlement || bs(result["session"]) == "" || !replayIndex(result["steps"], 2) { return nil, fmt.Errorf("malformed replay preparation") } - if definition := bs(result["observation"]); !replayObservationDefinitions[definition] || bm(c.schema["$defs"])[definition] == nil { - return nil, fmt.Errorf("malformed replay observation definition %q", definition) + observation := bs(result["observation"]) + if replayRecordDefinitions[observation] != "observation" || bm(c.schema["$defs"])[observation] == nil { + return nil, fmt.Errorf("malformed replay observation definition %q", observation) + } + // Only a behavior session may require a receipt: core and local-clock + // commands are awaited request/response and their drivers have no + // controlled executor to attest. + if receipt := result["receipt"]; receipt != nil { + definition := bs(receipt) + if replayRecordDefinitions[definition] != "receipt" || bm(c.schema["$defs"])[definition] == nil || observation != "behaviorObservation" { + return nil, fmt.Errorf("malformed replay receipt definition %q", definition) + } } if _, ok := result["fixture"].(map[string]any); !ok { return nil, fmt.Errorf("malformed replay fixture") @@ -215,9 +231,24 @@ func (c *replayCoordinator) prepare(profile, path string, raw []byte) (obj, erro return result, nil } func (c *replayCoordinator) replay(d *behaviorDriver, prepared obj, monitors ...func() error) error { - return c.execute(prepared, d.apply, d.observation, d.clock.WallMS, monitors...) + err := c.executeWithReceipt(prepared, d.apply, d.observation, d.clock.WallMS, d.receipt, monitors...) + // A settlement violation names the rule; the driver's own account of what + // its verification drain found makes the failure diagnosable from the + // message, as the TypeScript transport does. + if err != nil && strings.Contains(err.Error(), "Settlement violation") { + if note := d.diagnostic(); note != "" { + return fmt.Errorf("%w\n%s", err, note) + } + } + return err } + +// execute runs a session whose driver reports no settlement receipt: core and +// local-clock, whose commands are awaited request/response. func (c *replayCoordinator) execute(prepared obj, apply func(obj) error, observation func() obj, wallMS func() int64, monitors ...func() error) error { + return c.executeWithReceipt(prepared, apply, observation, wallMS, nil, monitors...) +} +func (c *replayCoordinator) executeWithReceipt(prepared obj, apply func(obj) error, observation func() obj, wallMS func() int64, receipt func() obj, monitors ...func() error) error { session := bs(prepared["session"]) complete := false defer func() { @@ -225,6 +256,13 @@ func (c *replayCoordinator) execute(prepared obj, apply func(obj) error, observa _, _ = c.call(obj{"op": "discard", "session": session}) } }() + // The receipt travels exactly when the session names its definition. A + // driver with nothing to report on such a session is a harness defect. + definitions := bm(c.schema["$defs"]) + receiptDefinition := bs(prepared["receipt"]) + if receiptDefinition != "" && receipt == nil { + return fmt.Errorf("replay session requires a %s receipt the driver does not report", receiptDefinition) + } for _, input := range ba(prepared["setup"]) { if err := apply(bm(input)); err != nil { return err @@ -239,10 +277,18 @@ func (c *replayCoordinator) execute(prepared obj, apply func(obj) error, observa // A malformed record is a driver defect. Attribute it here, before the // coordinator sees it, so no round trip or session state is spent on it. observed := observation() - if err := replayObservationError(observed, bs(prepared["observation"]), bm(c.schema["$defs"])); err != nil { + if err := replayRecordError(observed, bs(prepared["observation"]), "observation", definitions); err != nil { return err } - result, err := c.call(obj{"op": "observe", "session": session, "index": index, "settlement": replaySettlement, "observed": observed, "environment": obj{"wallMs": wallMS()}}) + request := obj{"op": "observe", "session": session, "index": index, "settlement": replaySettlement, "observed": observed, "environment": obj{"wallMs": wallMS()}} + if receiptDefinition != "" { + attested := receipt() + if err := replayRecordError(attested, receiptDefinition, "receipt", definitions); err != nil { + return err + } + request["receipt"] = attested + } + result, err := c.call(request) if err != nil { return err } @@ -270,29 +316,30 @@ func replayIndex(value any, minimum int64) bool { return ok && n >= float64(minimum) && n <= 9007199254740991 && n == float64(int64(n)) } -// replayObservationError validates one driver observation against the $defs -// definition the prepare result named. It checks the wire encoding, so Go -// integers, typed slices and nested maps are judged exactly as the coordinator -// decodes them. The diagnostic never carries expected/actual comparison -// markers: a shape defect is infrastructure evidence, not a mutation detection. -func replayObservationError(observed any, definition string, definitions obj) error { +// replayRecordError validates one driver record, an observation or a receipt, +// against the $defs definition of that kind the prepare result named. It checks +// the wire encoding, so Go integers, typed slices and nested maps are judged +// exactly as the coordinator decodes them. The diagnostic never carries +// expected/actual comparison markers: a shape defect is infrastructure +// evidence, not a mutation detection. +func replayRecordError(record any, definition, kind string, definitions obj) error { target, ok := definitions[definition].(map[string]any) - if !ok || !replayObservationDefinitions[definition] { - return fmt.Errorf("unknown replay observation definition %q", definition) + if !ok || replayRecordDefinitions[definition] != kind { + return fmt.Errorf("unknown replay %s definition %q", kind, definition) } - raw, err := json.Marshal(observed) + raw, err := json.Marshal(record) if err != nil { - return fmt.Errorf("driver produced an unencodable %s observation: %w", definition, err) + return fmt.Errorf("driver produced an unencodable %s %s: %w", definition, kind, err) } var decoded any if err := json.Unmarshal(raw, &decoded); err != nil { - return fmt.Errorf("driver produced an unencodable %s observation: %w", definition, err) + return fmt.Errorf("driver produced an unencodable %s %s: %w", definition, kind, err) } // Name the record's keys, never its values: a value could carry the // expected/actual markers the mutation lane reads as comparison evidence. if !matchesReplaySchema(decoded, target, definitions) { keys, _ := decoded.(map[string]any) - return fmt.Errorf("driver produced a malformed %s observation: keys [%s]", definition, behaviorKeys(keys)) + return fmt.Errorf("driver produced a malformed %s %s: keys [%s]", definition, kind, behaviorKeys(keys)) } return nil } @@ -550,7 +597,7 @@ func TestReplayCoordinatorRejectsPrematureCompletionAndEmptyCommands(t *testing. applied := 0 // A well-formed core observation passes the local shape check, so the // coordinator's malformed reply is what execution must reject. - err := coordinator.execute(obj{"session": "1", "setup": []any{}, "steps": float64(2), "observation": "coreObservation"}, func(obj) error { applied++; return nil }, healthyCoreObservation, func() int64 { return 0 }) + err := coordinator.execute(obj{"session": "1", "setup": []any{}, "steps": float64(2), "observation": "coreObservation", "receipt": nil}, func(obj) error { applied++; return nil }, healthyCoreObservation, func() int64 { return 0 }) if err == nil || applied != 0 { t.Fatalf("malformed reply advanced execution: err=%v, commands=%d", err, applied) } @@ -567,6 +614,25 @@ func healthyCoreObservation() obj { return observed } +// healthySettlementReceipt is the all-zero record $defs/settlementReceipt +// accepts: a driver with nothing runnable, no gate held and its clock unmoved. +func healthySettlementReceipt() obj { + held := obj{} + for _, field := range strings.Fields("loaders reads writes dumps loads policies scopes") { + held[field] = int64(0) + } + return obj{"elapsedMs": int64(0), "runnable": int64(0), "held": held} +} + +// standInCoordinator starts a Node program that runs `body` for every parsed +// request line in place of the shared coordinator. Test controls only; +// production replay always uses the shared coordinator. +func standInCoordinator(t *testing.T, body string) *replayCoordinator { + t.Helper() + program := "require('readline').createInterface({input:process.stdin}).on('line', line => { const request=JSON.parse(line); " + body + " });" + return startReplayCoordinator(t, exec.Command("node", "-e", program), time.Second, false) +} + func TestReplayTransportValidatesObservationsLocally(t *testing.T) { schema, err := readReplaySchema() if err != nil { @@ -575,8 +641,9 @@ func TestReplayTransportValidatesObservationsLocally(t *testing.T) { definitions := bm(schema["$defs"]) behavior := emptyBehaviorObservation(obj{"observe": []any{}}) local := emptyBehaviorObservation(obj{}) - for definition, observed := range map[string]obj{"behaviorObservation": behavior, "coreObservation": healthyCoreObservation(), "localClockObservation": local} { - if err := replayObservationError(observed, definition, definitions); err != nil { + receipt := healthySettlementReceipt() + for definition, record := range map[string]obj{"behaviorObservation": behavior, "coreObservation": healthyCoreObservation(), "localClockObservation": local, "settlementReceipt": receipt} { + if err := replayRecordError(record, definition, replayRecordDefinitions[definition], definitions); err != nil { t.Fatalf("well-formed %s rejected: %v", definition, err) } } @@ -590,9 +657,18 @@ func TestReplayTransportValidatesObservationsLocally(t *testing.T) { delete(changed, field) return changed } + withHeld := func(field string, value any) obj { + changed := bm(bclone(receipt)) + if value == nil { + delete(bm(changed["held"]), field) + } else { + bm(changed["held"])[field] = value + } + return changed + } for name, control := range map[string]struct { definition string - observed any + record any }{ "string counter": {"behaviorObservation", with(behavior, "loaders", "1")}, "pending call value": {"behaviorObservation", with(behavior, "calls", []any{obj{"status": "value"}})}, @@ -606,13 +682,24 @@ func TestReplayTransportValidatesObservationsLocally(t *testing.T) { "events on local clock": {"localClockObservation", with(local, "events", []any{})}, "non-object observation": {"behaviorObservation", []any{}}, "nil observation": {"coreObservation", nil}, + "string runnable": {"settlementReceipt", with(receipt, "runnable", "0")}, + "negative elapsed": {"settlementReceipt", with(receipt, "elapsedMs", int64(-1))}, + "fractional elapsed": {"settlementReceipt", with(receipt, "elapsedMs", 0.5)}, + "missing held": {"settlementReceipt", without(receipt, "held")}, + "negative held gate": {"settlementReceipt", withHeld("reads", int64(-1))}, + "missing held gate": {"settlementReceipt", withHeld("scopes", nil)}, + "unknown held gate": {"settlementReceipt", withHeld("timers", int64(0))}, + "unknown receipt member": {"settlementReceipt", with(receipt, "wallMs", int64(0))}, + "non-object receipt": {"settlementReceipt", []any{}}, + "nil receipt": {"settlementReceipt", nil}, } { t.Run(name, func(t *testing.T) { - err := replayObservationError(control.observed, control.definition, definitions) + kind := replayRecordDefinitions[control.definition] + err := replayRecordError(control.record, control.definition, kind, definitions) if err == nil { - t.Fatalf("malformed %s accepted: %s", control.definition, bjson(control.observed)) + t.Fatalf("malformed %s accepted: %s", control.definition, bjson(control.record)) } - if !strings.HasPrefix(err.Error(), "driver produced a malformed "+control.definition+" observation: ") { + if !strings.HasPrefix(err.Error(), "driver produced a malformed "+control.definition+" "+kind+": ") { t.Fatalf("shape defect lacks the driver attribution: %v", err) } if matched, _ := regexp.MatchString(`expected:[\s\S]*actual:`, err.Error()); matched { @@ -620,19 +707,24 @@ func TestReplayTransportValidatesObservationsLocally(t *testing.T) { } }) } - for _, definition := range []string{"", "invented", "observedEvent", "command"} { - if err := replayObservationError(behavior, definition, definitions); err == nil || !strings.Contains(err.Error(), "unknown replay observation definition") { - t.Fatalf("definition %q accepted: %v", definition, err) + for _, definition := range []string{"", "invented", "observedEvent", "command", "settlementReceipt"} { + if err := replayRecordError(behavior, definition, "observation", definitions); err == nil || !strings.Contains(err.Error(), "unknown replay observation definition") { + t.Fatalf("observation definition %q accepted: %v", definition, err) + } + } + for _, definition := range []string{"", "invented", "behaviorObservation", "command"} { + if err := replayRecordError(receipt, definition, "receipt", definitions); err == nil || !strings.Contains(err.Error(), "unknown replay receipt definition") { + t.Fatalf("receipt definition %q accepted: %v", definition, err) } } + // The stand-in exits nonzero if an observe request ever arrives, which the + // transport's cleanup reports as a process failure. + exitOnObserve := "if (request.op === 'observe') process.exit(3); process.stdout.write(JSON.stringify({version:1,id:request.id,ok:true,result:{complete:true,steps:2}})+'\\n');" t.Run("rejected before any request reaches the coordinator", func(t *testing.T) { - // The stand-in exits nonzero if an observe request ever arrives, which - // the transport's cleanup reports as a process failure. - program := "require('readline').createInterface({input:process.stdin}).on('line', line => { const request=JSON.parse(line); if (request.op === 'observe') process.exit(3); process.stdout.write(JSON.stringify({version:1,id:request.id,ok:true,result:{complete:true,steps:2}})+'\\n'); });" - coordinator := startReplayCoordinator(t, exec.Command("node", "-e", program), time.Second, false) + coordinator := standInCoordinator(t, exitOnObserve) applied := 0 - prepared := obj{"session": "1", "setup": []any{obj{"op": "bumpSource"}}, "steps": float64(2), "observation": "coreObservation"} + prepared := obj{"session": "1", "setup": []any{obj{"op": "bumpSource"}}, "steps": float64(2), "observation": "coreObservation", "receipt": nil} err := coordinator.execute(prepared, func(obj) error { applied++; return nil }, func() obj { return with(healthyCoreObservation(), "redisReads", "many") }, func() int64 { return 0 }) if err == nil || !strings.Contains(err.Error(), "driver produced a malformed coreObservation observation") { t.Fatalf("malformed observation was not attributed to the driver: %v", err) @@ -641,13 +733,88 @@ func TestReplayTransportValidatesObservationsLocally(t *testing.T) { t.Fatalf("setup must run before the first observation: applied=%d", applied) } }) + t.Run("malformed receipt rejected before any request reaches the coordinator", func(t *testing.T) { + coordinator := standInCoordinator(t, exitOnObserve) + applied := 0 + prepared := obj{"session": "1", "setup": []any{obj{"op": "begin"}}, "steps": float64(2), "observation": "behaviorObservation", "receipt": "settlementReceipt"} + err := coordinator.executeWithReceipt(prepared, func(obj) error { applied++; return nil }, func() obj { return behavior }, func() int64 { return 0 }, func() obj { return withHeld("loaders", int64(-1)) }) + if err == nil || !strings.HasPrefix(err.Error(), "driver produced a malformed settlementReceipt receipt: keys [") { + t.Fatalf("malformed receipt was not attributed to the driver: %v", err) + } + if matched, _ := regexp.MatchString(`expected:[\s\S]*actual:`, err.Error()); matched { + t.Fatalf("receipt defect acquired comparison markers: %v", err) + } + if applied != 1 { + t.Fatalf("setup must run before the first observation: applied=%d", applied) + } + }) + t.Run("a session that names a receipt needs a driver that reports one", func(t *testing.T) { + coordinator := standInCoordinator(t, exitOnObserve) + prepared := obj{"session": "1", "setup": []any{obj{"op": "begin"}}, "steps": float64(2), "observation": "behaviorObservation", "receipt": "settlementReceipt"} + applied := 0 + err := coordinator.execute(prepared, func(obj) error { applied++; return nil }, func() obj { return behavior }, func() int64 { return 0 }) + if err == nil || !strings.Contains(err.Error(), "requires a settlementReceipt receipt") || applied != 0 { + t.Fatalf("receipt-less driver ran a session that names a receipt: err=%v, commands=%d", err, applied) + } + }) + t.Run("receipt travels exactly when the session names it", func(t *testing.T) { + session := obj{"session": "1", "setup": []any{obj{"op": "begin"}}, "steps": float64(2), "observation": "behaviorObservation"} + for name, prepared := range map[string]obj{"named": with(session, "receipt", "settlementReceipt"), "null": with(session, "receipt", nil)} { + t.Run(name, func(t *testing.T) { + // The stand-in exits nonzero when an observe request carries the + // receipt member against what the session names. + expected := strconv.FormatBool(prepared["receipt"] != nil) + coordinator := standInCoordinator(t, "if (request.op === 'observe' && Object.hasOwn(request, 'receipt') !== "+expected+") process.exit(3); const result = request.index === 0 ? {complete:false,index:1,inputs:[{op:'begin'}]} : {complete:true,steps:2}; process.stdout.write(JSON.stringify({version:1,id:request.id,ok:true,result})+'\\n');") + applied := 0 + err := coordinator.executeWithReceipt(prepared, func(obj) error { applied++; return nil }, func() obj { return behavior }, func() int64 { return 0 }, healthySettlementReceipt) + if err != nil || applied != 2 { + t.Fatalf("receipt transport disagreed with the session: err=%v, commands=%d", err, applied) + } + }) + } + }) t.Run("prepare rejects an unknown observation definition", func(t *testing.T) { - program := "require('readline').createInterface({input:process.stdin}).on('line', line => { const request=JSON.parse(line); process.stdout.write(JSON.stringify({version:1,id:request.id,ok:true,result:{session:'1',settlement:'causally-ready-v1',observation:'observedEvent',fixture:{},setup:[],actions:['init','outsideCall'],steps:2}})+'\\n'); });" - coordinator := startReplayCoordinator(t, exec.Command("node", "-e", program), time.Second, false) + coordinator := standInCoordinator(t, "process.stdout.write(JSON.stringify({version:1,id:request.id,ok:true,result:{session:'1',settlement:'causally-ready-v1',observation:'observedEvent',receipt:null,fixture:{},setup:[],actions:['init','outsideCall'],steps:2}})+'\\n');") if _, err := coordinator.prepare("core", "control.itf.json", nil); err == nil || !strings.Contains(err.Error(), "malformed replay observation definition") { t.Fatalf("unknown observation definition accepted: %v", err) } }) + t.Run("prepare rejects a receipt definition the session cannot carry", func(t *testing.T) { + for name, members := range map[string]string{ + "unknown definition": "observation:'behaviorObservation',receipt:'observedEvent'", + "observation as receipt": "observation:'behaviorObservation',receipt:'behaviorObservation'", + "non-string definition": "observation:'behaviorObservation',receipt:1", + "receipt on core": "observation:'coreObservation',receipt:'settlementReceipt'", + "receipt on local clock": "observation:'localClockObservation',receipt:'settlementReceipt'", + } { + t.Run(name, func(t *testing.T) { + coordinator := standInCoordinator(t, "process.stdout.write(JSON.stringify({version:1,id:request.id,ok:true,result:{session:'1',settlement:'causally-ready-v1',"+members+",fixture:{},setup:[],actions:['init','outsideCall'],steps:2}})+'\\n');") + if _, err := coordinator.prepare("core", "control.itf.json", nil); err == nil || !strings.Contains(err.Error(), "malformed replay receipt definition") { + t.Fatalf("receipt definition accepted: %v", err) + } + }) + } + }) + t.Run("prepare rejects a session that omits the receipt member", func(t *testing.T) { + coordinator := standInCoordinator(t, "process.stdout.write(JSON.stringify({version:1,id:request.id,ok:true,result:{session:'1',settlement:'causally-ready-v1',observation:'coreObservation',fixture:{},setup:[],actions:['init','outsideCall'],steps:2}})+'\\n');") + if _, err := coordinator.prepare("core", "control.itf.json", nil); err == nil || !strings.Contains(err.Error(), "malformed replay preparation") { + t.Fatalf("preparation without a receipt member accepted: %v", err) + } + }) + t.Run("prepare accepts a behavior session that names or nulls its receipt", func(t *testing.T) { + for name, members := range map[string]string{"named": "receipt:'settlementReceipt',", "null": "receipt:null,"} { + t.Run(name, func(t *testing.T) { + coordinator := standInCoordinator(t, "process.stdout.write(JSON.stringify({version:1,id:request.id,ok:true,result:{session:'1',settlement:'causally-ready-v1',observation:'behaviorObservation',"+members+"fixture:{},setup:[],actions:['init','beginCall'],steps:2}})+'\\n');") + prepared, err := coordinator.prepare("layers", "control.itf.json", nil) + if err != nil { + t.Fatal(err) + } + if named := prepared["receipt"] != nil; named != (name == "named") { + t.Fatalf("prepare reported receipt %v for %s", prepared["receipt"], name) + } + }) + } + }) } func TestReplayCoordinatorBoundsFramesBeforeBuffering(t *testing.T) { diff --git a/go/settlement_control_replay_test.go b/go/settlement_control_replay_test.go index ffbc9944..71a019c3 100644 --- a/go/settlement_control_replay_test.go +++ b/go/settlement_control_replay_test.go @@ -2,7 +2,9 @@ package dialcache import ( "path/filepath" + "regexp" "runtime" + "sort" "strings" "testing" "testing/synctest" @@ -10,28 +12,53 @@ import ( // Harness control for the causally-ready-v1 settlement contract (PORTING.md), // the Go counterpart of test/formal-settlement-control.test.ts. It replays the -// committed smoke history of every behaviorDriver-backed profile through the -// shared coordinator twice: once with the settling driver, which must pass, -// and once with a driver that reports the observation it held before its -// end-of-apply drain, which must be caught by the coordinator's observation -// assertions. If it were not, the contract would be unenforced and a port -// could pass without ever settling. The unsettled driver drains after its -// snapshot, so every command starts settled and a failure can only be an -// observation mismatch, never a missing gate. The test also runs on one -// scheduler thread so the goroutines a command starts cannot run before that -// snapshot; detection then does not depend on scheduling, which is what makes -// the floor below a pin rather than a probability. The core and local-clock -// profiles use other drivers and are not covered. +// committed smoke history of every behaviorDriver-backed profile the +// coordinator lists through the shared coordinator twice: once with the +// settling driver, which must pass, and once with a driver that skips the +// settle drain and so reports the observation it held before it. The +// coordinator must reject that replay through the settlement receipt, as a +// `Settlement violation`, and never through an observation comparison: the +// receipt's verification drain finds the work the driver skipped (runnable +// above zero), or its held gates disagree with the command schedule. Were the +// receipt not to catch it, the contract would rest on incidental mismatches and +// a port could pass without ever settling. The unsettled driver still drains +// after its snapshot, so every command starts settled and no failure can be a +// missing gate. The test runs on one scheduler thread so the goroutines a +// command starts cannot run before the snapshot; detection then does not +// depend on scheduling, which is what makes the floor a pin rather than a +// probability. Core and local-clock use awaited drivers, carry no receipt and +// are not covered. +// +// Measured with the receipt probe at 76ba3ef, the unsettled replay is rejected +// at the first step whose drain does work: shadow-layers 2, local-failure 1, +// independent 4, scope 1, policy 1, runtime-boundaries 2, recovery 1, +// source-budgets 1, layers 1, recovery-read 5, admission 1, shadow 1, +// effects 5. The test logs the step it observes for each profile. // // The file name ends in _replay_test.go so measure-go-semantics.mjs keeps this // control out of the ordinary mutation cohort: it is evidence about the // harness, not about the cache, and must earn no detection credit. -var settlementControlProfiles = []string{"independent", "layers", "admission", "scope", "recovery", "policy", "shadow", "effects"} -// Pinned with the TypeScript control: observed before the drain, all eight -// smoke histories fail an observation comparison. Lower it only with a written -// reason, together with the TypeScript floor; it must stay at least one. -const settlementControlMinimumDetections = 8 +// settlementControlProfiles lists every profile the coordinator serves through +// the behaviorDriver, so a new profile joins the control without an edit here. +func settlementControlProfiles(t *testing.T, coordinator *replayCoordinator) []string { + t.Helper() + info, err := coordinator.call(obj{"op": "profiles"}) + if err != nil { + t.Fatal(err) + } + profiles := []string{} + for name := range bm(info["profiles"]) { + if name != "core" && name != "local-clock" { + profiles = append(profiles, name) + } + } + sort.Strings(profiles) + if len(profiles) == 0 { + t.Fatal("the coordinator lists no behavior-driver profile") + } + return profiles +} // replaySettlementControl runs one smoke history and returns the replay error, // if any, instead of failing the test: the caller decides what the error means. @@ -55,13 +82,16 @@ func replaySettlementControl(t *testing.T, coordinator *replayCoordinator, profi return result } +var settlementViolationStep = regexp.MustCompile(` step (\d+) action `) + func TestHarnessControlNoSettle(t *testing.T) { requireRegistry(t) defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(1)) coordinator := newReplayCoordinator(t) + profiles := settlementControlProfiles(t, coordinator) detected := []string{} undetected := []string{} - for _, profile := range settlementControlProfiles { + for _, profile := range profiles { requireBehaviorProfile(t, profile) t.Run(profile+"/settling", func(t *testing.T) { if err := replaySettlementControl(t, coordinator, profile, true); err != nil { @@ -70,26 +100,37 @@ func TestHarnessControlNoSettle(t *testing.T) { }) t.Run(profile+"/no-settle", func(t *testing.T) { err := replaySettlementControl(t, coordinator, profile, false) - if err == nil { + switch { + case err == nil: undetected = append(undetected, profile) - return - } - // Only an observation mismatch counts as detection. A driver, - // transport or binding crash would be a harness defect, not - // settlement evidence. - if !strings.Contains(err.Error(), "Observation mismatch") { - t.Fatalf("skipping settlement in %s failed without observation evidence: %v", profile, err) + case strings.Contains(err.Error(), "Observation mismatch"): + // An observation mismatch means the receipt let an unsettled + // observation through and the comparison caught it by chance. + t.Fatalf("skipping settlement in %s was caught by observation comparison, not by the settlement receipt: %v", profile, err) + case !strings.Contains(err.Error(), "Settlement violation"): + // A driver, transport or binding crash is a harness defect, + // not settlement evidence. + t.Fatalf("skipping settlement in %s failed without settlement evidence: %v", profile, err) + case !strings.Contains(err.Error(), "verification drain:"): + // The driver's account of what its verification drain found + // travels with the violation, so the failure is diagnosable. + t.Fatalf("skipping settlement in %s failed without the driver's drain diagnostic: %v", profile, err) + default: + detected = append(detected, profile) + step := "?" + if match := settlementViolationStep.FindStringSubmatch(err.Error()); match != nil { + step = match[1] + } + t.Logf("%s: settlement violation at step %s", profile, step) } - detected = append(detected, profile) }) } - if len(settlementControlProfiles) < settlementControlMinimumDetections { - t.Fatalf("the control covers %d profiles, fewer than its floor of %d", len(settlementControlProfiles), settlementControlMinimumDetections) - } - if len(detected) < settlementControlMinimumDetections { - t.Fatalf("skipping settlement was detected by %d profiles, below the floor of %d\ndetected: %s\nundetected: %s", - len(detected), settlementControlMinimumDetections, strings.Join(detected, ", "), strings.Join(undetected, ", ")) + // The floor is the whole list: the receipt must catch skipped settlement on + // every behavior smoke history, which is what a third port's control must + // show as well. + if len(undetected) > 0 || len(detected) != len(profiles) { + t.Fatalf("skipping settlement was detected by %d of %d profiles\ndetected: %s\nundetected: %s", + len(detected), len(profiles), strings.Join(detected, ", "), strings.Join(undetected, ", ")) } - t.Logf("harness control: skipping settlement detected by %d/%d profiles (%s); undetected: [%s]", - len(detected), len(settlementControlProfiles), strings.Join(detected, ", "), strings.Join(undetected, ", ")) + t.Logf("harness control: skipping settlement detected as a settlement violation by all %d profiles (%s)", len(detected), strings.Join(detected, ", ")) } diff --git a/go/witness_evidence_test.go b/go/witness_evidence_test.go index 77d5e727..15c62fce 100644 --- a/go/witness_evidence_test.go +++ b/go/witness_evidence_test.go @@ -4,6 +4,7 @@ import ( "crypto/sha256" "encoding/hex" "encoding/json" + "errors" "fmt" "io/fs" "os" @@ -137,7 +138,9 @@ func checkWitnessEvidenceAt(root, profile, directory string, paths []string) err // (which holds the witness classifiers) and the profile's witness sources. expectedInputs := []string{"formal/profiles.json", "formal/coverage-witnesses.json", "formal/execution.json", "formal/dialcache-" + profile + "-conformance.qnt", "formal/conformance-observations.qnt"} var execution struct { - Libraries []string `json:"libraries"` + Models []struct { + Path string `json:"path"` + } `json:"models"` } executionRaw, err := os.ReadFile(filepath.Join(root, "formal/execution.json")) if err != nil { @@ -146,6 +149,14 @@ func checkWitnessEvidenceAt(root, profile, directory string, paths []string) err if err := json.Unmarshal(executionRaw, &execution); err != nil { return err } + claimed := map[string]bool{} + for _, model := range execution.Models { + claimed[model.Path] = true + } + libraries, err := quintLibraries(root, claimed) + if err != nil { + return err + } var definitions struct { Profiles []struct { ID string `json:"id"` @@ -163,7 +174,7 @@ func checkWitnessEvidenceAt(root, profile, directory string, paths []string) err if err != nil { return err } - additional := append([]string{}, execution.Libraries...) + additional := append([]string{}, libraries...) additional = append(additional, sharedSources...) for _, definition := range definitions.Profiles { if definition.ID == profile { @@ -223,6 +234,32 @@ func checkWitnessEvidenceAt(root, profile, directory string, paths []string) err return nil } +// quintLibraries lists every Quint source under formal/ and formal/kernel/ +// that no scheduled model claims, sorted, as formal/execution.mjs derives the +// libraries the witness evidence binds. +func quintLibraries(root string, claimed map[string]bool) ([]string, error) { + libraries := []string{} + for _, folder := range []string{"formal", "formal/kernel"} { + entries, err := os.ReadDir(filepath.Join(root, filepath.FromSlash(folder))) + if errors.Is(err, fs.ErrNotExist) { + continue + } + if err != nil { + return nil, err + } + for _, entry := range entries { + if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".qnt") { + continue + } + if path := folder + "/" + entry.Name(); !claimed[path] { + libraries = append(libraries, path) + } + } + } + sort.Strings(libraries) + return libraries, nil +} + // A history's kind follows the corpus layout the shared evaluator classifies // by: exported regressions live under .formal-traces/regressions//, // every other replayed history is a sampled one. @@ -343,7 +380,7 @@ func TestWitnessEvidenceBindsSharedReplaySources(t *testing.T) { } write("formal/profiles.json", `{"profiles":[{"id":"effects"}],"replaySources":["formal/replay/coordinator.mjs","formal/replay/mapping.mjs"]}`) write("formal/coverage-witnesses.json", `{"effects":["observed"]}`) - write("formal/execution.json", `{"libraries":[]}`) + write("formal/execution.json", `{"models":[{"path":"formal/dialcache-effects-conformance.qnt"}]}`) write("trace.itf.json", "controlled trace") evidence := witnessEvidence{SchemaVersion: 2, Profile: "effects", Traces: 1, Required: []string{"observed"}, Seen: []string{"observed"}, Labels: map[string]witnessLabel{"observed": {Sampled: 1, Traces: []witnessTrace{{Name: "trace.itf.json", Kind: "sampled", Checkpoints: []int{1}}}}}} diff --git a/test/fixtures/effects-authority-witnesses.json b/test/fixtures/effects-authority-witnesses.json index b3f219ed..9d7a8d9b 100644 --- a/test/fixtures/effects-authority-witnesses.json +++ b/test/fixtures/effects-authority-witnesses.json @@ -7,301 +7,12 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/effects-authority-witnesses.json/observerFailuresCannotPreventCacheHitTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "calls": [], - "reads": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "observerFault" - }, - "mbt::actionTaken": "observerFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "calls": [], - "reads": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [], - "reads": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "1" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ] - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"observerFault"},"mbt::actionTaken":"observerFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}} ] } }, @@ -313,927 +24,16 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/effects-authority-witnesses.json/observerFailuresCannotPreventPublicationTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "calls": [], - "reads": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "observerFault" - }, - "mbt::actionTaken": "observerFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "calls": [], - "reads": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseDump" - }, - "mbt::actionTaken": "releaseDump", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseWrite" - }, - "mbt::actionTaken": "releaseWrite", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "1" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "reads": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ] - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"observerFault"},"mbt::actionTaken":"observerFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseDump"},"mbt::actionTaken":"releaseDump","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseWrite"},"mbt::actionTaken":"releaseWrite","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}} ] } }, @@ -1245,297 +45,11 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/effects-authority-witnesses.json/observerFailuresCannotReplaceSourceErrorTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "calls": [], - "reads": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "observerFault" - }, - "mbt::actionTaken": "observerFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "calls": [], - "reads": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "failRead" - }, - "mbt::actionTaken": "failRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "calls": [ - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - } - ] - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"observerFault"},"mbt::actionTaken":"observerFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"failRead"},"mbt::actionTaken":"failRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"}]}} ] } }, @@ -1547,1109 +61,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/effects-authority-witnesses.json/writeStampAfterSerializationClearsInterveningFenceTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "calls": [], - "reads": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "tick" - }, - "mbt::actionTaken": "tick", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseDump" - }, - "mbt::actionTaken": "releaseDump", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseWrite" - }, - "mbt::actionTaken": "releaseWrite", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "1" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "reads": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "1" - }, - "writes": { - "#bigint": "1" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "value_absent", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "invalidation", - "location": "remote" - }, - { - "amount": { - "#bigint": "10" - }, - "detail": "dump", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "size", - "location": "remote" - }, - { - "amount": { - "#bigint": "1" - }, - "detail": "", - "event": "storedSize", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "writeDispatch", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "load", - "event": "serialization", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ] - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"tick"},"mbt::actionTaken":"tick","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseDump"},"mbt::actionTaken":"releaseDump","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseWrite"},"mbt::actionTaken":"releaseWrite","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"value_absent","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"invalidation","location":"remote"},{"amount":{"#bigint":"10"},"detail":"dump","event":"serialization","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"size","location":"remote"},{"amount":{"#bigint":"1"},"detail":"","event":"storedSize","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"writeDispatch","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"load","event":"serialization","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}} ] } }, @@ -2661,349 +83,12 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/effects-authority-witnesses.json/futureFrameReportsPositiveObservingOffsetTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "calls": [], - "reads": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "seedRemote" - }, - "mbt::actionTaken": "seedRemote", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [], - "reads": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [], - "reads": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "1000" - }, - "detail": "", - "event": "futureOffset", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "calls": [ - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "1000" - }, - "detail": "", - "event": "futureOffset", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "unclassified", - "event": "miss", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - } - ] - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"seedRemote"},"mbt::actionTaken":"seedRemote","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"1000"},"detail":"","event":"futureOffset","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"1000"},"detail":"","event":"futureOffset","location":"remote"},{"amount":{"#bigint":"0"},"detail":"unclassified","event":"miss","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"}]}} ] } }, @@ -3015,375 +100,11 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/effects-authority-witnesses.json/coalescedFailureKeepsOneLeaderAndFollowerTrailTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "calls": [], - "reads": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "failRead" - }, - "mbt::actionTaken": "failRead", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "reads": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "writes": { - "#bigint": "0" - }, - "events": [ - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "request", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "policy_disabled", - "event": "disabled", - "location": "local" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "coalesced", - "location": "process" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "cache_read", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "get", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "fallback", - "event": "error", - "location": "remote" - }, - { - "amount": { - "#bigint": "0" - }, - "detail": "", - "event": "fallback", - "location": "remote" - } - ] - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"events":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"failRead"},"mbt::actionTaken":"failRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"1"},{"#bigint":"1"}]},"events":[{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"request","location":"remote"},{"amount":{"#bigint":"0"},"detail":"policy_disabled","event":"disabled","location":"local"},{"amount":{"#bigint":"0"},"detail":"","event":"coalesced","location":"process"},{"amount":{"#bigint":"0"},"detail":"cache_read","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"get","location":"remote"},{"amount":{"#bigint":"0"},"detail":"fallback","event":"error","location":"remote"},{"amount":{"#bigint":"0"},"detail":"","event":"fallback","location":"remote"}]}} ] } } diff --git a/test/fixtures/formal-runtime-boundary-witnesses.json b/test/fixtures/formal-runtime-boundary-witnesses.json index 775fe436..333866da 100644 --- a/test/fixtures/formal-runtime-boundary-witnesses.json +++ b/test/fixtures/formal-runtime-boundary-witnesses.json @@ -5,740 +5,18 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/disabledBaselineRampedUpKeepsDefaultSharingTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "20" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "20" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"8"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"20"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"20"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] }, "explicitNullCoalesceBypassesWithoutReplacingRemoteTest": { @@ -747,696 +25,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/explicitNullCoalesceBypassesWithoutReplacingRemoteTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "16" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "16" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"5"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"16"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"16"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} ] }, "explicitNullRequestLocalBypassesWithoutReplacingRemoteTest": { @@ -1445,696 +44,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/explicitNullRequestLocalBypassesWithoutReplacingRemoteTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "17" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "17" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"5"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"17"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"17"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} ] }, "falseRequestLeafPreservesMemoForReenablementTest": { @@ -2143,664 +63,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/falseRequestLeafPreservesMemoForReenablementTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "13" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "13" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"3"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"13"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"13"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] }, "fullFeatureKillSwitchKeepsOmittedSharingAndRetainedMemoTest": { @@ -2809,1067 +82,22 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/fullFeatureKillSwitchKeepsOmittedSharingAndRetainedMemoTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "21" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "21" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "19" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "19" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "11" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "11" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "11" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "11" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"9"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"21"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"21"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"19"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"19"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"11"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"11"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"11"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"11"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}} ] }, "inheritedFalseKeepsIndependentMemoizingSourcesTest": { @@ -3878,548 +106,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/inheritedFalseKeepsIndependentMemoizingSourcesTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"0"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] }, "invalidCoalesceBypassesWithoutReplacingRemoteTest": { @@ -4428,696 +123,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/invalidCoalesceBypassesWithoutReplacingRemoteTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "14" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "14" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"5"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"14"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"14"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} ] }, "invalidRequestLocalBypassesWithoutReplacingRemoteTest": { @@ -5126,696 +142,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/invalidRequestLocalBypassesWithoutReplacingRemoteTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "15" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "15" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"5"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"15"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"15"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} ] }, "localAbsenceAndLiteralTextStayDistinctTest": { @@ -5824,548 +161,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/localAbsenceAndLiteralTextStayDistinctTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "11" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "11" - }, - { - "#bigint": "5" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "11" - }, - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "11" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"11"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"11"},{"#bigint":"5"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"11"},{"#bigint":"5"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"11"},{"#bigint":"5"},{"#bigint":"5"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] }, "localCohortEqualityBypassesBeforeAboveSampleCachesTest": { @@ -6374,657 +178,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/localCohortEqualityBypassesBeforeAboveSampleCachesTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"8"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] }, "localFalsyValuesRemainDistinctAndReusableTest": { @@ -7033,1442 +197,27 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/localFalsyValuesRemainDistinctAndReusableTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "13" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "13" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "22" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "22" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "31" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "31" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "9" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "9" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "9" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "9" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"13"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"13"}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"7"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"22"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"22"}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"7"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"31"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"31"}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"9"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"9"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"9"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"9"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] }, "nullProviderInheritsConfiguredServingAndDefaultSharingTest": { @@ -8477,553 +226,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/nullProviderInheritsConfiguredServingAndDefaultSharingTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "12" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "12" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"5"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"12"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} ] }, "omittedRampAndSharingUseLibraryDefaultsTest": { @@ -9032,499 +243,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/omittedRampAndSharingUseLibraryDefaultsTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"5"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} ] }, "reenablingSharingUsesTheOmittedTrueDefaultTest": { @@ -9533,800 +259,19 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/reenablingSharingUsesTheOmittedTrueDefaultTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"3"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] }, "remoteAbsenceAndLiteralTextStayDistinctTest": { @@ -10335,573 +280,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/remoteAbsenceAndLiteralTextStayDistinctTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "11" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "11" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - }, - { - "#bigint": "11" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "2" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "2" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - }, - { - "#bigint": "11" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "2" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "2" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - }, - { - "#bigint": "11" - }, - { - "#bigint": "11" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "2" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "2" - } - } - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"5"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"11"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"11"}}},"s":{"o":{"calls":[{"#bigint":"5"},{"#bigint":"11"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"},{"#bigint":"60000"}],"writes":{"#bigint":"2"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"5"},{"#bigint":"11"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"},{"#bigint":"60000"}],"writes":{"#bigint":"2"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"5"},{"#bigint":"11"},{"#bigint":"11"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"},{"#bigint":"60000"}],"writes":{"#bigint":"2"}}}} ] }, "remoteCohortEqualityBypassesBeforeAboveSampleCachesTest": { @@ -10910,669 +297,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/remoteCohortEqualityBypassesBeforeAboveSampleCachesTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"8"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} ] }, "remoteFalsyValuesRemainDistinctAndReusableTest": { @@ -11581,1544 +316,27 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/remoteFalsyValuesRemainDistinctAndReusableTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "13" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "13" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "2" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "2" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "2" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "2" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "2" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "2" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "22" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "22" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "3" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "3" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "3" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "3" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "3" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "3" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "7" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "3" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "31" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "31" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "9" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "4" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "3" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "7" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "4" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "9" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "4" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "3" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "7" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "4" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "9" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "9" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "4" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "4" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "8" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - }, - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "4" - } - } - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"4"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"13"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"13"}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"},{"#bigint":"60000"}],"writes":{"#bigint":"2"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"5"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"},{"#bigint":"60000"}],"writes":{"#bigint":"2"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"7"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"},{"#bigint":"60000"}],"writes":{"#bigint":"2"}}}}, + {"input":{"choice":{"#bigint":"22"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"22"}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"7"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"3"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"},{"#bigint":"60000"},{"#bigint":"60000"}],"writes":{"#bigint":"3"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"3"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"6"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"},{"#bigint":"60000"},{"#bigint":"60000"}],"writes":{"#bigint":"3"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"3"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"3"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"7"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"},{"#bigint":"60000"},{"#bigint":"60000"}],"writes":{"#bigint":"3"}}}}, + {"input":{"choice":{"#bigint":"31"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"31"}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"9"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"4"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"3"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"7"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"},{"#bigint":"60000"},{"#bigint":"60000"},{"#bigint":"60000"}],"writes":{"#bigint":"4"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"9"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"4"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"3"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"7"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"},{"#bigint":"60000"},{"#bigint":"60000"},{"#bigint":"60000"}],"writes":{"#bigint":"4"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"9"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"9"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"4"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"4"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"8"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"},{"#bigint":"60000"},{"#bigint":"60000"},{"#bigint":"60000"}],"writes":{"#bigint":"4"}}}} ] }, "requestAbsenceAndLiteralTextStayDistinctTest": { @@ -13127,548 +345,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/requestAbsenceAndLiteralTextStayDistinctTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "11" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "11" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - }, - { - "#bigint": "11" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - }, - { - "#bigint": "11" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - }, - { - "#bigint": "11" - }, - { - "#bigint": "11" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"0"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"5"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"11"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"11"}}},"s":{"o":{"calls":[{"#bigint":"5"},{"#bigint":"11"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"5"},{"#bigint":"11"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"5"},{"#bigint":"11"},{"#bigint":"11"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] }, "requestFalsyValuesRemainDistinctAndReusableTest": { @@ -13677,1442 +362,27 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/requestFalsyValuesRemainDistinctAndReusableTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "13" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "13" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "22" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "22" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "0" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "31" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "31" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "9" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "9" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "9" - }, - { - "#bigint": "6" - }, - { - "#bigint": "7" - }, - { - "#bigint": "8" - }, - { - "#bigint": "9" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "8" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"0"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"13"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"13"}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"7"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"22"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"22"}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"7"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"0"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"31"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"31"}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"9"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"9"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"9"},{"#bigint":"6"},{"#bigint":"7"},{"#bigint":"8"},{"#bigint":"9"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"8"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] }, "runtimeLocalTtlWithoutRampActivatesLayerTest": { @@ -15121,603 +391,16 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/runtimeLocalTtlWithoutRampActivatesLayerTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "6" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "18" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "18" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"6"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"6"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"18"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"18"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] }, "runtimeRemoteTtlWithoutRampActivatesLayerTest": { @@ -15726,615 +409,16 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/runtimeRemoteTtlWithoutRampActivatesLayerTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "7" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "7" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "19" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "19" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"7"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"7"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"19"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"19"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} ] }, "runtimeTrueEnablesSharingOverFalseDefaultTest": { @@ -16343,541 +427,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-boundary-witnesses.json/runtimeTrueEnablesSharingOverFalseDefaultTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "11" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "11" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"0"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"11"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"11"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } } diff --git a/test/fixtures/formal-runtime-witness-boundaries.json b/test/fixtures/formal-runtime-witness-boundaries.json index 026fde59..561d1c87 100644 --- a/test/fixtures/formal-runtime-witness-boundaries.json +++ b/test/fixtures/formal-runtime-witness-boundaries.json @@ -7,643 +7,13 @@ "model": "formal/dialcache-layers-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-witness-boundaries.json/memo-created-after-invalidation" }, - "initialState": { - "capacity": { - "#bigint": "2" - }, - "closed": [ - false, - false, - false - ], - "created": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [], - [] - ], - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "memoSlots": [], - "now": { - "#bigint": "10000" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [], - "policy": { - "#bigint": "0" - }, - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "remoteAvailable": true, - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "requestFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "sources": [], - "tracked": true, - "watermark": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, + "initialState": {"capacity":{"#bigint":"2"},"closed":[false,false,false],"created":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"localValues":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"lru":[[],[]],"memo":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"memoSlots":[],"now":{"#bigint":"10000"},"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[],"policy":{"#bigint":"0"},"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"remoteAvailable":true,"remoteValues":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"requestFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"sources":[],"tracked":true,"watermark":[{"#bigint":"0"},{"#bigint":"0"}]}, "steps": [ - { - "action": "beginCall", - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - }, - "statePatch": { - "memoSlots": [ - { - "#bigint": "6" - } - ], - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "loaders": { - "#bigint": "1" - }, - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - } - }, - "owners": [ - { - "#bigint": "0" - } - ], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "requestFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "2" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "0" - }, - "retentionMs": { - "#bigint": "60000" - }, - "shared": true - } - ] - } - }, - { - "action": "invalidate", - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - }, - "statePatch": { - "o": { - "invalidations": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ] - }, - "watermark": [ - { - "#bigint": "0" - }, - { - "#bigint": "10000" - } - ] - } - }, - { - "action": "resolveLoader", - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - }, - "statePatch": { - "created": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "10000" - }, - { - "#bigint": "0" - } - ], - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "dumps": { - "#bigint": "1" - }, - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "requestFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "2" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "2" - }, - "retentionMs": { - "#bigint": "60000" - }, - "shared": true - } - ] - } - }, - { - "action": "seed", - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - }, - "statePatch": { - "created": [ - { - "#bigint": "0" - }, - { - "#bigint": "10000" - }, - { - "#bigint": "10000" - }, - { - "#bigint": "0" - } - ], - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ] - } - }, - { - "action": "beginCall", - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - }, - "statePatch": { - "memoSlots": [ - { - "#bigint": "6" - }, - { - "#bigint": "6" - } - ], - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "policyCalls": { - "#bigint": "2" - } - }, - "owners": [ - { - "#bigint": "0" - }, - { - "#bigint": "-1" - } - ] - } - } + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"6"}},"statePatch":{"memoSlots":[{"#bigint":"6"}],"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}},"owners":[{"#bigint":"0"}],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"0"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"requestFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"0"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"2"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"60000"},"shared":true}]}}, + {"action":"invalidate","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"invalidations":{"#bigint":"1"},"maintenance":["ok"]},"watermark":[{"#bigint":"0"},{"#bigint":"10000"}]}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"created":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"10000"},{"#bigint":"0"}],"memo":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"o":{"calls":[{"#bigint":"2"}],"dumps":{"#bigint":"1"},"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"remoteValues":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"}],"requestFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"2"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"60000"},"shared":true}]}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"3"}},"statePatch":{"created":[{"#bigint":"0"},{"#bigint":"10000"},{"#bigint":"10000"},{"#bigint":"0"}],"remoteValues":[{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"}]}}, + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"6"}},"statePatch":{"memoSlots":[{"#bigint":"6"},{"#bigint":"6"}],"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"policyCalls":{"#bigint":"2"}},"owners":[{"#bigint":"0"},{"#bigint":"-1"}]}} ] }, { @@ -654,1024 +24,17 @@ "model": "formal/dialcache-layers-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-runtime-witness-boundaries.json/preexisting-memo-survives" }, - "initialState": { - "capacity": { - "#bigint": "0" - }, - "closed": [ - false, - false, - false - ], - "created": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [], - [] - ], - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "memoSlots": [], - "now": { - "#bigint": "10000" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [], - "policy": { - "#bigint": "0" - }, - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "remoteAvailable": true, - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "requestFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "sources": [], - "tracked": true, - "watermark": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, + "initialState": {"capacity":{"#bigint":"0"},"closed":[false,false,false],"created":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"localValues":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"lru":[[],[]],"memo":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"memoSlots":[],"now":{"#bigint":"10000"},"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[],"policy":{"#bigint":"0"},"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"remoteAvailable":true,"remoteValues":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"requestFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"sources":[],"tracked":true,"watermark":[{"#bigint":"0"},{"#bigint":"0"}]}, "steps": [ - { - "action": "beginCall", - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - }, - "statePatch": { - "memoSlots": [ - { - "#bigint": "2" - } - ], - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "loaders": { - "#bigint": "1" - }, - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - } - }, - "owners": [ - { - "#bigint": "0" - } - ], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "requestFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "2" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "0" - }, - "retentionMs": { - "#bigint": "60000" - }, - "shared": true - } - ] - } - }, - { - "action": "resolveLoader", - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - }, - "statePatch": { - "created": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "10000" - }, - { - "#bigint": "0" - } - ], - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "dumps": { - "#bigint": "1" - }, - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "requestFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "2" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "60000" - }, - "shared": true - } - ] - } - }, - { - "action": "invalidate", - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - }, - "statePatch": { - "o": { - "invalidations": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ] - }, - "watermark": [ - { - "#bigint": "0" - }, - { - "#bigint": "10000" - } - ] - } - }, - { - "action": "policy", - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - }, - "statePatch": {} - }, - { - "action": "beginCall", - "choice": { - "tag": "Some", - "value": { - "#bigint": "19" - } - }, - "statePatch": { - "memoSlots": [ - { - "#bigint": "2" - }, - { - "#bigint": "-1" - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "loaders": { - "#bigint": "2" - }, - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - } - }, - "owners": [ - { - "#bigint": "0" - }, - { - "#bigint": "1" - } - ], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "1" - } - ], - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "2" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "60000" - }, - "shared": true - }, - { - "fence": { - "#bigint": "10000" - }, - "instance": { - "#bigint": "1" - }, - "key": { - "#bigint": "3" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "0" - }, - "retentionMs": { - "#bigint": "60000" - }, - "shared": true - } - ] - } - }, - { - "action": "resolveLoader", - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - }, - "statePatch": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ] - }, - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "2" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "60000" - }, - "shared": true - }, - { - "fence": { - "#bigint": "10000" - }, - "instance": { - "#bigint": "1" - }, - "key": { - "#bigint": "3" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "60000" - }, - "shared": true - } - ] - } - }, - { - "action": "seed", - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - }, - "statePatch": { - "created": [ - { - "#bigint": "10000" - }, - { - "#bigint": "0" - }, - { - "#bigint": "10000" - }, - { - "#bigint": "0" - } - ], - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ] - } - }, - { - "action": "beginCall", - "choice": { - "tag": "Some", - "value": { - "#bigint": "15" - } - }, - "statePatch": { - "memoSlots": [ - { - "#bigint": "2" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "loaders": { - "#bigint": "3" - }, - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "3" - } - }, - "owners": [ - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "2" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "60000" - }, - "shared": true - }, - { - "fence": { - "#bigint": "10000" - }, - "instance": { - "#bigint": "1" - }, - "key": { - "#bigint": "3" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "60000" - }, - "shared": true - }, - { - "fence": { - "#bigint": "10000" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "3" - }, - "localMs": { - "#bigint": "0" - }, - "result": { - "#bigint": "0" - }, - "retentionMs": { - "#bigint": "60000" - }, - "shared": true - } - ] - } - }, - { - "action": "beginCall", - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - }, - "statePatch": { - "memoSlots": [ - { - "#bigint": "2" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - }, - { - "#bigint": "2" - } - ], - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - } - ], - "policyCalls": { - "#bigint": "4" - } - }, - "owners": [ - { - "#bigint": "0" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "-1" - } - ] - } - } + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"memoSlots":[{"#bigint":"2"}],"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}},"owners":[{"#bigint":"0"}],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"0"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"requestFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"0"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"2"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"60000"},"shared":true}]}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"created":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"10000"},{"#bigint":"0"}],"memo":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"o":{"calls":[{"#bigint":"1"}],"dumps":{"#bigint":"1"},"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"remoteValues":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"}],"requestFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"2"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"60000"},"shared":true}]}}, + {"action":"invalidate","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"invalidations":{"#bigint":"1"},"maintenance":["ok"]},"watermark":[{"#bigint":"0"},{"#bigint":"10000"}]}}, + {"action":"policy","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"19"}},"statePatch":{"memoSlots":[{"#bigint":"2"},{"#bigint":"-1"}],"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"loaders":{"#bigint":"2"},"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"}},"owners":[{"#bigint":"0"},{"#bigint":"1"}],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"1"}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"2"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"60000"},"shared":true},{"fence":{"#bigint":"10000"},"instance":{"#bigint":"1"},"key":{"#bigint":"3"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"60000"},"shared":true}]}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"3"}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}]},"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"2"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"60000"},"shared":true},{"fence":{"#bigint":"10000"},"instance":{"#bigint":"1"},"key":{"#bigint":"3"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"60000"},"shared":true}]}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"created":[{"#bigint":"10000"},{"#bigint":"0"},{"#bigint":"10000"},{"#bigint":"0"}],"remoteValues":[{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"0"}]}}, + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"15"}},"statePatch":{"memoSlots":[{"#bigint":"2"},{"#bigint":"-1"},{"#bigint":"-1"}],"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"loaders":{"#bigint":"3"},"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"2"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"-1"}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"2"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"60000"},"shared":true},{"fence":{"#bigint":"10000"},"instance":{"#bigint":"1"},"key":{"#bigint":"3"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"60000"},"shared":true},{"fence":{"#bigint":"10000"},"instance":{"#bigint":"0"},"key":{"#bigint":"3"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"60000"},"shared":true}]}}, + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"memoSlots":[{"#bigint":"2"},{"#bigint":"-1"},{"#bigint":"-1"},{"#bigint":"2"}],"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"1"}],"policyCalls":{"#bigint":"4"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"-1"}]}} ] } ] diff --git a/test/fixtures/formal-witness-attribution.json b/test/fixtures/formal-witness-attribution.json index 16ea5eb8..60b4ccab 100644 --- a/test/fixtures/formal-witness-attribution.json +++ b/test/fixtures/formal-witness-attribution.json @@ -6,164 +6,23 @@ "model": "formal/dialcache-recovery-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-attribution.json/recovery-age-sampled-at-successful-decode" }, - "initialState": { - "acceptedMaxAge": 5000, - "candidate": 0, - "candidateCreated": 0, - "classifier": 0, - "created": 99000, - "deadline": 0, - "expires": 70000, - "frame": 1, - "loadFailed": false, - "maxAge": 5000, - "now": 10000, - "phase": 0, - "readFailed": false, - "wall": 100000, - "watermark": 0, - "o": { - "calls": [], - "reads": 0, - "loads": 0, - "loaders": 0, - "classifications": 0, - "dumps": 0, - "writes": 0, - "recovery": [], - "shadow": [] - }, - "d": { - "ages": [] - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "candidate": 1, - "candidateCreated": 99000, - "deadline": 10010, - "phase": 2, - "o": { - "calls": [ - 0 - ], - "reads": 1, - "loaders": 1 - } - } - }, - { - "action": "invalidate", - "statePatch": { - "watermark": 100000 - } - }, - { - "action": "invalidate", - "statePatch": {} - }, - { - "action": "advance", - "statePatch": { - "now": 10001, - "wall": 100001 - } - }, - { - "action": "rejectTimeout", - "statePatch": { - "phase": 3, - "o": { - "loads": 1, - "classifications": 1 - } - } - }, - { - "action": "seed", - "statePatch": { - "created": 99001, - "expires": 70001 - } - }, - { - "action": "joinCall", - "statePatch": { - "o": { - "calls": [ - 0, - 0 - ] - } - } - }, - { - "action": "joinCall", - "statePatch": { - "o": { - "calls": [ - 0, - 0, - 0 - ] - } - } - }, - { - "action": "seed", - "statePatch": { - "created": 99002 - } - }, - { - "action": "readFault", - "statePatch": { - "readFailed": true - } - }, - { - "action": "readFault", - "statePatch": { - "readFailed": false - } - }, - { - "action": "loadFault", - "statePatch": {} - }, - { - "action": "policy", - "statePatch": {} - }, - { - "action": "rollbackWall", - "statePatch": { - "wall": 99001 - } - }, - { - "action": "releaseLoad", - "statePatch": { - "phase": 0, - "o": { - "calls": [ - 1, - 1, - 1 - ], - "recovery": [ - "served" - ] - }, - "d": { - "ages": [ - 1 - ] - } - } - } + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"4"}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"invalidate","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"invalidations":{"#bigint":"1"},"maintenance":["ok"]}}}, + {"action":"invalidate","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"invalidations":{"#bigint":"2"},"maintenance":["ok","ok"]}}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"rejectTimeout","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"classifications":{"#bigint":"1"},"loads":{"#bigint":"1"}},"d":{"fallbackErrors":["remote"]}}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"2"}},"d":{"coalesced":["process"]}}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"3"}},"d":{"coalesced":["process","process"]}}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"readFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"readFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"loadFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"policy","choice":{"tag":"Some","value":{"#bigint":"5000"}},"statePatch":{}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"releaseLoad","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"recovery":["served"]},"d":{"ages":[{"#bigint":"1"}]}}} ] }, { @@ -173,71 +32,14 @@ "model": "formal/dialcache-recovery-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-attribution.json/fenced-read-does-not-retain" }, - "initialState": { - "acceptedMaxAge": 5000, - "candidate": 0, - "candidateCreated": 99000, - "classifier": 1, - "created": 99000, - "deadline": 10010, - "expires": 70000, - "frame": 1, - "loadFailed": false, - "maxAge": 5000, - "now": 10000, - "phase": 0, - "readFailed": false, - "wall": 100000, - "watermark": 100000, - "o": { - "calls": [ - 3 - ], - "reads": 1, - "loads": 0, - "loaders": 1, - "classifications": 1, - "dumps": 0, - "writes": 0, - "recovery": [], - "shadow": [] - }, - "d": { - "ages": [] - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "classifier": 0, - "phase": 2, - "o": { - "calls": [ - 3, - 0 - ], - "reads": 2, - "loaders": 2 - } - } - }, - { - "action": "rejectLoader", - "statePatch": { - "phase": 0, - "o": { - "calls": [ - 3, - 3 - ], - "classifications": 2, - "recovery": [ - "miss" - ] - } - } - } + {"action":"invalidate","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"invalidations":{"#bigint":"1"},"maintenance":["ok"]}}}, + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"readFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"rejectTimeout","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"1"}},"d":{"fallbackErrors":["remote"]}}}, + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"2"},"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"}}}}, + {"action":"rejectLoader","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"2"},"recovery":["miss"]},"d":{"fallbackErrors":["remote","remote"]}}} ] }, { @@ -247,71 +49,13 @@ "model": "formal/dialcache-recovery-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-attribution.json/future-read-preserves-source-error" }, - "initialState": { - "acceptedMaxAge": 5000, - "candidate": 0, - "candidateCreated": 0, - "classifier": 0, - "created": 100001, - "deadline": 0, - "expires": 70000, - "frame": 1, - "loadFailed": false, - "maxAge": 2000, - "now": 10000, - "phase": 0, - "readFailed": false, - "wall": 100000, - "watermark": 0, - "o": { - "calls": [], - "reads": 0, - "loads": 0, - "loaders": 0, - "classifications": 0, - "dumps": 0, - "writes": 0, - "recovery": [], - "shadow": [] - }, - "d": { - "ages": [] - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "acceptedMaxAge": 2000, - "candidateCreated": 100001, - "deadline": 10010, - "phase": 2, - "o": { - "calls": [ - 0 - ], - "reads": 1, - "loaders": 1 - } - } - }, - { - "action": "advance", - "statePatch": { - "now": 14000, - "phase": 0, - "wall": 104000, - "o": { - "calls": [ - 4 - ], - "classifications": 1, - "recovery": [ - "miss" - ] - } - } - } + {"action":"policy","choice":{"tag":"Some","value":{"#bigint":"5000"}},"statePatch":{}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"5"}},"statePatch":{}}, + {"action":"policy","choice":{"tag":"Some","value":{"#bigint":"2000"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"7"}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"4000"}},"statePatch":{"o":{"calls":[{"#bigint":"4"}],"classifications":{"#bigint":"1"},"recovery":["miss"]},"d":{"fallbackErrors":["remote"]}}} ] }, { @@ -321,67 +65,10 @@ "model": "formal/dialcache-recovery-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-attribution.json/classifier-error-keeps-error-without-decode" }, - "initialState": { - "acceptedMaxAge": 5000, - "candidate": 0, - "candidateCreated": 0, - "classifier": 0, - "created": 99000, - "deadline": 0, - "expires": 70000, - "frame": 1, - "loadFailed": false, - "maxAge": 5000, - "now": 10000, - "phase": 0, - "readFailed": false, - "wall": 100000, - "watermark": 0, - "o": { - "calls": [], - "reads": 0, - "loads": 0, - "loaders": 0, - "classifications": 0, - "dumps": 0, - "writes": 0, - "recovery": [], - "shadow": [] - }, - "d": { - "ages": [] - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "candidate": 1, - "candidateCreated": 99000, - "classifier": 2, - "deadline": 10010, - "phase": 2, - "o": { - "calls": [ - 0 - ], - "reads": 1, - "loaders": 1 - } - } - }, - { - "action": "rejectLoader", - "statePatch": { - "phase": 0, - "o": { - "calls": [ - 3 - ], - "classifications": 1 - } - } - } + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"3"}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"rejectLoader","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"1"}},"d":{"fallbackErrors":["remote"]}}} ] }, { @@ -391,111 +78,29 @@ "model": "formal/dialcache-recovery-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-attribution.json/maximum-age-read-preserves-source-error" }, - "initialState": { - "acceptedMaxAge": 5000, - "candidate": 1, - "candidateCreated": 99000, - "classifier": 2, - "created": 97000, - "deadline": 14010, - "expires": 74000, - "frame": 1, - "loadFailed": false, - "maxAge": 5000, - "now": 14000, - "phase": 0, - "readFailed": false, - "wall": 102000, - "watermark": 0, - "o": { - "calls": [ - 1, - 1, - 1, - 3, - 3, - 3 - ], - "reads": 3, - "loads": 1, - "loaders": 3, - "classifications": 3, - "dumps": 0, - "writes": 0, - "recovery": [ - "served" - ], - "shadow": [] - }, - "d": { - "ages": [ - 4000 - ] - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "candidate": 0, - "candidateCreated": 97000, - "classifier": 0, - "phase": 2, - "o": { - "calls": [ - 1, - 1, - 1, - 3, - 3, - 3, - 0 - ], - "reads": 4, - "loaders": 4 - } - } - }, - { - "action": "joinCall", - "statePatch": { - "o": { - "calls": [ - 1, - 1, - 1, - 3, - 3, - 3, - 0, - 0 - ] - } - } - }, - { - "action": "rejectLoader", - "statePatch": { - "phase": 0, - "o": { - "calls": [ - 1, - 1, - 1, - 3, - 3, - 3, - 3, - 3 - ], - "classifications": 4, - "recovery": [ - "served", - "miss" - ] - } - } - } + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"rejectLoader","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"classifications":{"#bigint":"1"},"loads":{"#bigint":"1"}},"d":{"fallbackErrors":["remote"]}}}, + {"action":"policy","choice":{"tag":"Some","value":{"#bigint":"2000"}},"statePatch":{}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"2"}},"d":{"coalesced":["process"]}}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"4000"}},"statePatch":{}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"3"}},"d":{"coalesced":["process","process"]}}}, + {"action":"releaseLoad","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"recovery":["served"]},"d":{"ages":[{"#bigint":"4000"}]}}}, + {"action":"policy","choice":{"tag":"Some","value":{"#bigint":"5000"}},"statePatch":{}}, + {"action":"policy","choice":{"tag":"Some","value":{"#bigint":"5000"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"7"}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"loaders":{"#bigint":"2"},"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"2"}}}}, + {"action":"rejectTimeout","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"2"}},"d":{"fallbackErrors":["remote","remote"]}}}, + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"6"}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"3"},"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"3"}}}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"4"}},"statePatch":{}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"6"}},"d":{"coalesced":["process","process","process"]}}}, + {"action":"rejectTimeout","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"3"}},"d":{"fallbackErrors":["remote","remote","remote"]}}}, + {"action":"policy","choice":{"tag":"Some","value":{"#bigint":"5000"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"4"}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"4"},"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"4"}}}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"8"}},"d":{"coalesced":["process","process","process","process"]}}}, + {"action":"rejectLoader","choice":{"tag":"Some","value":{"#bigint":"3"}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"4"},"recovery":["served","miss"]},"d":{"fallbackErrors":["remote","remote","remote","remote"]}}} ] }, { @@ -505,106 +110,22 @@ "model": "formal/dialcache-shadow-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-attribution.json/fenced-c1-supersedes-without-repair" }, - "initialState": { - "abandoned": true, - "c0": 0, - "created": 100000, - "deadline": 10010, - "frame": 3, - "loadFailed": false, - "now": 10010, - "phase": 7, - "readFailed": false, - "wall": 100010, - "watermark": 0, - "writeFailed": false, - "o": { - "calls": [ - 1 - ], - "reads": 1, - "loads": 0, - "loaders": 1, - "classifications": 0, - "dumps": 0, - "writes": 0, - "recovery": [], - "shadow": [ - "timeout" - ] - }, - "d": { - "ages": [] - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "abandoned": false, - "deadline": 10020, - "phase": 1, - "o": { - "calls": [ - 1, - 0 - ], - "reads": 2, - "loaders": 2 - } - } - }, - { - "action": "releaseRead", - "statePatch": { - "c0": 3, - "phase": 2 - } - }, - { - "action": "invalidate", - "statePatch": { - "watermark": 100010 - } - }, - { - "action": "dumpFault", - "statePatch": {} - }, - { - "action": "resolveLoader", - "statePatch": { - "phase": 3, - "o": { - "calls": [ - 1, - 1 - ], - "loads": 1 - } - } - }, - { - "action": "releaseLoad", - "statePatch": { - "phase": 4, - "o": { - "reads": 3 - } - } - }, - { - "action": "releaseRead", - "statePatch": { - "phase": 7, - "o": { - "shadow": [ - "timeout", - "superseded" - ] - } - } - } + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"3"}},"statePatch":{}}, + {"action":"shadowPolicy","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"dumpFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"1"}]}}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"10"}},"statePatch":{"o":{"shadow":["timeout"]}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"loaders":{"#bigint":"2"},"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"}}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"invalidate","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"invalidations":{"#bigint":"1"},"maintenance":["ok"]}}}, + {"action":"dumpFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"loads":{"#bigint":"1"}}}}, + {"action":"releaseLoad","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"comparisons":{"#bigint":"1"},"reads":{"#bigint":"3"}}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["timeout","superseded"]}}} ] } ] diff --git a/test/fixtures/formal-witness-boundaries.json b/test/fixtures/formal-witness-boundaries.json index 0e0101e7..b4c45627 100644 --- a/test/fixtures/formal-witness-boundaries.json +++ b/test/fixtures/formal-witness-boundaries.json @@ -6,368 +6,23 @@ "model": "formal/dialcache-recovery-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-boundaries.json/first-stale-age-recovers-without-publication" }, - "initialState": { - "acceptedMaxAge": { - "#bigint": "5000" - }, - "activeLoader": { - "#bigint": "0" - }, - "attached": [ - false, - false - ], - "canRecover": false, - "canWrite": false, - "candidate": { - "#bigint": "0" - }, - "candidateCreated": { - "#bigint": "0" - }, - "classifier": { - "#bigint": "0" - }, - "closed": [ - false, - false - ], - "created": { - "#bigint": "99000" - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - }, - "deadline": { - "#bigint": "0" - }, - "expires": { - "#bigint": "70000" - }, - "frame": { - "#bigint": "1" - }, - "instanceClassifier": { - "#bigint": "1" - }, - "loadFailed": false, - "maxAge": { - "#bigint": "5000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "10000" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "readFailed": false, - "request": false, - "sourceError": { - "#bigint": "3" - }, - "sources": [], - "wall": { - "#bigint": "100000" - }, - "watermark": { - "#bigint": "0" - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "attached": [ - false, - true - ], - "canRecover": true, - "canWrite": true, - "candidate": { - "#bigint": "1" - }, - "candidateCreated": { - "#bigint": "99000" - }, - "deadline": { - "#bigint": "10010" - }, - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "loaders": { - "#bigint": "1" - }, - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "2" - }, - "sources": [ - { - "#bigint": "0" - } - ] - } - }, - { - "action": "invalidate", - "statePatch": { - "o": { - "invalidations": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ] - }, - "watermark": { - "#bigint": "100000" - } - } - }, - { - "action": "invalidate", - "statePatch": { - "o": { - "invalidations": { - "#bigint": "2" - }, - "maintenance": [ - "ok", - "ok" - ] - } - } - }, - { - "action": "advance", - "statePatch": { - "now": { - "#bigint": "10001" - }, - "wall": { - "#bigint": "100001" - } - } - }, - { - "action": "rejectTimeout", - "statePatch": { - "d": { - "fallbackErrors": [ - "remote" - ] - }, - "o": { - "classifications": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "3" - }, - "sources": [ - { - "#bigint": "2" - } - ] - } - }, - { - "action": "seed", - "statePatch": { - "created": { - "#bigint": "99001" - }, - "expires": { - "#bigint": "70001" - } - } - }, - { - "action": "joinCall", - "statePatch": { - "d": { - "coalesced": [ - "process" - ] - }, - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "policyCalls": { - "#bigint": "2" - } - } - } - }, - { - "action": "joinCall", - "statePatch": { - "attached": [ - true, - true - ], - "d": { - "coalesced": [ - "process", - "process" - ] - }, - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "policyCalls": { - "#bigint": "3" - } - } - } - }, - { - "action": "seed", - "statePatch": { - "created": { - "#bigint": "99002" - } - } - }, - { - "action": "readFault", - "statePatch": { - "readFailed": true - } - }, - { - "action": "readFault", - "statePatch": { - "readFailed": false - } - }, - { - "action": "loadFault", - "statePatch": {} - }, - { - "action": "policy", - "statePatch": {} - }, - { - "action": "rollbackWall", - "statePatch": { - "wall": { - "#bigint": "99001" - } - } - }, - { - "action": "releaseLoad", - "statePatch": { - "d": { - "ages": [ - { - "#bigint": "1" - } - ] - }, - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "recovery": [ - "served" - ] - }, - "phase": { - "#bigint": "0" - } - } - } + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"4"}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"invalidate","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"invalidations":{"#bigint":"1"},"maintenance":["ok"]}}}, + {"action":"invalidate","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"invalidations":{"#bigint":"2"},"maintenance":["ok","ok"]}}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"rejectTimeout","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"classifications":{"#bigint":"1"},"loads":{"#bigint":"1"}},"d":{"fallbackErrors":["remote"]}}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"2"}},"d":{"coalesced":["process"]}}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"3"}},"d":{"coalesced":["process","process"]}}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"readFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"readFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"loadFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"policy","choice":{"tag":"Some","value":{"#bigint":"5000"}},"statePatch":{}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"releaseLoad","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"recovery":["served"]},"d":{"ages":[{"#bigint":"1"}]}}} ] }, { @@ -377,413 +32,24 @@ "model": "formal/dialcache-recovery-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-boundaries.json/last-recovery-age-serves" }, - "initialState": { - "acceptedMaxAge": { - "#bigint": "5000" - }, - "activeLoader": { - "#bigint": "0" - }, - "attached": [ - true, - true - ], - "canRecover": true, - "canWrite": true, - "candidate": { - "#bigint": "1" - }, - "candidateCreated": { - "#bigint": "99000" - }, - "classifier": { - "#bigint": "2" - }, - "closed": [ - false, - false - ], - "created": { - "#bigint": "93001" - }, - "d": { - "ages": [], - "coalesced": [ - "request_local", - "process" - ], - "fallbackErrors": [ - "remote" - ], - "warnings": { - "#bigint": "0" - } - }, - "deadline": { - "#bigint": "10010" - }, - "expires": { - "#bigint": "70000" - }, - "frame": { - "#bigint": "1" - }, - "instanceClassifier": { - "#bigint": "2" - }, - "loadFailed": false, - "maxAge": { - "#bigint": "5000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "10000" - }, - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "readFailed": false, - "request": true, - "sourceError": { - "#bigint": "3" - }, - "sources": [ - { - "#bigint": "2" - } - ], - "wall": { - "#bigint": "98000" - }, - "watermark": { - "#bigint": "0" - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "activeLoader": { - "#bigint": "1" - }, - "attached": [ - true, - false - ], - "candidateCreated": { - "#bigint": "93001" - }, - "classifier": { - "#bigint": "0" - }, - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "loaders": { - "#bigint": "2" - }, - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "2" - } - }, - "phase": { - "#bigint": "2" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ] - } - }, - { - "action": "rejectLoader", - "statePatch": { - "d": { - "fallbackErrors": [ - "remote", - "remote" - ] - }, - "o": { - "classifications": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "3" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ] - } - }, - { - "action": "loadFault", - "statePatch": {} - }, - { - "action": "policy", - "statePatch": {} - }, - { - "action": "joinCall", - "statePatch": { - "d": { - "coalesced": [ - "request_local", - "process", - "request_local" - ] - }, - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "policyCalls": { - "#bigint": "5" - } - } - } - }, - { - "action": "joinCall", - "statePatch": { - "attached": [ - true, - true - ], - "d": { - "coalesced": [ - "request_local", - "process", - "request_local", - "process" - ] - }, - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "policyCalls": { - "#bigint": "6" - } - } - } - }, - { - "action": "policy", - "statePatch": { - "maxAge": { - "#bigint": "2000" - } - } - }, - { - "action": "joinCall", - "statePatch": { - "d": { - "coalesced": [ - "request_local", - "process", - "request_local", - "process", - "request_local" - ] - }, - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "policyCalls": { - "#bigint": "7" - } - } - } - }, - { - "action": "releaseLoad", - "statePatch": { - "d": { - "ages": [ - { - "#bigint": "4999" - } - ] - }, - "memo": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "recovery": [ - "served" - ] - }, - "phase": { - "#bigint": "0" - } - } - } + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"3"}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"2"}},"d":{"coalesced":["request_local"]}}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"3"}},"d":{"coalesced":["request_local","process"]}}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"rejectLoader","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}],"classifications":{"#bigint":"1"}},"d":{"fallbackErrors":["remote"]}}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"3"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"2"},"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"2"}}}}, + {"action":"rejectLoader","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"classifications":{"#bigint":"2"},"loads":{"#bigint":"1"}},"d":{"fallbackErrors":["remote","remote"]}}}, + {"action":"loadFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"policy","choice":{"tag":"Some","value":{"#bigint":"5000"}},"statePatch":{}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"5"}},"d":{"coalesced":["request_local","process","request_local"]}}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"6"}},"d":{"coalesced":["request_local","process","request_local","process"]}}}, + {"action":"policy","choice":{"tag":"Some","value":{"#bigint":"2000"}},"statePatch":{}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"7"}},"d":{"coalesced":["request_local","process","request_local","process","request_local"]}}}, + {"action":"releaseLoad","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"recovery":["served"]},"d":{"ages":[{"#bigint":"4999"}]}}} ] }, { @@ -793,407 +59,21 @@ "model": "formal/dialcache-recovery-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-boundaries.json/exact-maximum-after-decode-rejects" }, - "initialState": { - "acceptedMaxAge": { - "#bigint": "5000" - }, - "activeLoader": { - "#bigint": "0" - }, - "attached": [ - false, - false - ], - "canRecover": false, - "canWrite": false, - "candidate": { - "#bigint": "0" - }, - "candidateCreated": { - "#bigint": "0" - }, - "classifier": { - "#bigint": "0" - }, - "closed": [ - false, - false - ], - "created": { - "#bigint": "99000" - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - }, - "deadline": { - "#bigint": "0" - }, - "expires": { - "#bigint": "70000" - }, - "frame": { - "#bigint": "1" - }, - "instanceClassifier": { - "#bigint": "3" - }, - "loadFailed": false, - "maxAge": { - "#bigint": "5000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "10000" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "readFailed": false, - "request": false, - "sourceError": { - "#bigint": "3" - }, - "sources": [], - "wall": { - "#bigint": "100000" - }, - "watermark": { - "#bigint": "0" - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "attached": [ - true, - false - ], - "canRecover": true, - "canWrite": true, - "candidate": { - "#bigint": "1" - }, - "candidateCreated": { - "#bigint": "99000" - }, - "deadline": { - "#bigint": "10010" - }, - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "loaders": { - "#bigint": "1" - }, - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "2" - }, - "sources": [ - { - "#bigint": "0" - } - ] - } - }, - { - "action": "joinCall", - "statePatch": { - "attached": [ - true, - true - ], - "d": { - "coalesced": [ - "process" - ] - }, - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "policyCalls": { - "#bigint": "2" - } - } - } - }, - { - "action": "joinCall", - "statePatch": { - "d": { - "coalesced": [ - "process", - "process" - ] - }, - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "policyCalls": { - "#bigint": "3" - } - } - } - }, - { - "action": "joinCall", - "statePatch": { - "d": { - "coalesced": [ - "process", - "process", - "process" - ] - }, - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "policyCalls": { - "#bigint": "4" - } - } - } - }, - { - "action": "joinCall", - "statePatch": { - "d": { - "coalesced": [ - "process", - "process", - "process", - "process" - ] - }, - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "policyCalls": { - "#bigint": "5" - } - } - } - }, - { - "action": "invalidate", - "statePatch": { - "o": { - "invalidations": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ] - }, - "watermark": { - "#bigint": "100000" - } - } - }, - { - "action": "loadFault", - "statePatch": { - "loadFailed": true - } - }, - { - "action": "seed", - "statePatch": {} - }, - { - "action": "advance", - "statePatch": { - "d": { - "fallbackErrors": [ - "remote" - ] - }, - "now": { - "#bigint": "14000" - }, - "o": { - "classifications": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "3" - }, - "sourceError": { - "#bigint": "4" - }, - "sources": [ - { - "#bigint": "1" - } - ], - "wall": { - "#bigint": "104000" - } - } - }, - { - "action": "resolveLoader", - "statePatch": { - "sources": [ - { - "#bigint": "2" - } - ] - } - }, - { - "action": "seed", - "statePatch": { - "created": { - "#bigint": "103001" - }, - "expires": { - "#bigint": "74000" - } - } - }, - { - "action": "loadFault", - "statePatch": { - "loadFailed": false - } - }, - { - "action": "releaseLoad", - "statePatch": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - }, - { - "#bigint": "4" - } - ], - "recovery": [ - "miss" - ] - }, - "phase": { - "#bigint": "0" - } - } - } + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"2"}},"d":{"coalesced":["process"]}}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"3"}},"d":{"coalesced":["process","process"]}}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"4"}},"d":{"coalesced":["process","process","process"]}}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"5"}},"d":{"coalesced":["process","process","process","process"]}}}, + {"action":"invalidate","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"invalidations":{"#bigint":"1"},"maintenance":["ok"]}}}, + {"action":"loadFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"4000"}},"statePatch":{"o":{"classifications":{"#bigint":"1"},"loads":{"#bigint":"1"}},"d":{"fallbackErrors":["remote"]}}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"loadFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"releaseLoad","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"},{"#bigint":"4"}],"recovery":["miss"]}}} ] }, { @@ -1203,374 +83,29 @@ "model": "formal/dialcache-recovery-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-boundaries.json/failed-fresh-decode-is-not-recovery" }, - "initialState": { - "acceptedMaxAge": { - "#bigint": "5000" - }, - "activeLoader": { - "#bigint": "1" - }, - "attached": [ - true, - true - ], - "canRecover": false, - "canWrite": true, - "candidate": { - "#bigint": "2" - }, - "candidateCreated": { - "#bigint": "100000" - }, - "classifier": { - "#bigint": "1" - }, - "closed": [ - false, - false - ], - "created": { - "#bigint": "100000" - }, - "d": { - "ages": [], - "coalesced": [ - "process", - "process", - "process" - ], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - }, - "deadline": { - "#bigint": "10010" - }, - "expires": { - "#bigint": "15000" - }, - "frame": { - "#bigint": "2" - }, - "instanceClassifier": { - "#bigint": "0" - }, - "loadFailed": true, - "maxAge": { - "#bigint": "5000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "10000" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "2" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - }, - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "2" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "readFailed": false, - "request": false, - "sourceError": { - "#bigint": "3" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "wall": { - "#bigint": "100000" - }, - "watermark": { - "#bigint": "0" - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "attached": [ - false, - true - ], - "canRecover": true, - "classifier": { - "#bigint": "2" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "loads": { - "#bigint": "2" - }, - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "3" - } - }, - "phase": { - "#bigint": "1" - } - } - }, - { - "action": "policy", - "statePatch": { - "maxAge": { - "#bigint": "2000" - } - } - }, - { - "action": "invalidate", - "statePatch": { - "o": { - "invalidations": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ] - }, - "watermark": { - "#bigint": "100000" - } - } - }, - { - "action": "advance", - "statePatch": { - "now": { - "#bigint": "14000" - }, - "wall": { - "#bigint": "104000" - } - } - }, - { - "action": "releaseLoad", - "statePatch": { - "activeLoader": { - "#bigint": "2" - }, - "canRecover": false, - "deadline": { - "#bigint": "14010" - }, - "o": { - "loaders": { - "#bigint": "3" - } - }, - "phase": { - "#bigint": "2" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ] - } - }, - { - "action": "rollbackWall", - "statePatch": { - "wall": { - "#bigint": "103000" - } - } - }, - { - "action": "joinCall", - "statePatch": { - "attached": [ - true, - true - ], - "d": { - "coalesced": [ - "process", - "process", - "process", - "process" - ] - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "policyCalls": { - "#bigint": "7" - } - } - } - }, - { - "action": "rejectLoader", - "statePatch": { - "d": { - "fallbackErrors": [ - "remote" - ] - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ] - }, - "phase": { - "#bigint": "0" - }, - "sources": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ] - } - } + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"6"}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"policy","choice":{"tag":"Some","value":{"#bigint":"5000"}},"statePatch":{}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"2"}],"dumps":{"#bigint":"1"},"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}}}}, + {"action":"loadFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"loads":{"#bigint":"1"},"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"}}}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"3"}},"d":{"coalesced":["process"]}}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"4"}},"d":{"coalesced":["process","process"]}}}, + {"action":"loadFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"5"}},"statePatch":{}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"5"}},"d":{"coalesced":["process","process","process"]}}}, + {"action":"releaseLoad","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"loaders":{"#bigint":"2"}}}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"dumps":{"#bigint":"2"},"writeTtls":[{"#bigint":"5000"},{"#bigint":"5000"}],"writes":{"#bigint":"2"}}}}, + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"6"}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"}],"loads":{"#bigint":"2"},"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"3"}}}}, + {"action":"policy","choice":{"tag":"Some","value":{"#bigint":"2000"}},"statePatch":{}}, + {"action":"invalidate","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"invalidations":{"#bigint":"1"},"maintenance":["ok"]}}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"4000"}},"statePatch":{}}, + {"action":"releaseLoad","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"loaders":{"#bigint":"3"}}}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"joinCall","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"}],"policyCalls":{"#bigint":"7"}},"d":{"coalesced":["process","process","process","process"]}}}, + {"action":"rejectLoader","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"}]},"d":{"fallbackErrors":["remote"]}}} ] }, { @@ -1580,200 +115,10 @@ "model": "formal/dialcache-recovery-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-boundaries.json/classifier-error-keeps-error-without-decode" }, - "initialState": { - "acceptedMaxAge": { - "#bigint": "5000" - }, - "activeLoader": { - "#bigint": "0" - }, - "attached": [ - false, - false - ], - "canRecover": false, - "canWrite": false, - "candidate": { - "#bigint": "0" - }, - "candidateCreated": { - "#bigint": "0" - }, - "classifier": { - "#bigint": "0" - }, - "closed": [ - false, - false - ], - "created": { - "#bigint": "99000" - }, - "d": { - "ages": [], - "coalesced": [], - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - }, - "deadline": { - "#bigint": "0" - }, - "expires": { - "#bigint": "70000" - }, - "frame": { - "#bigint": "1" - }, - "instanceClassifier": { - "#bigint": "2" - }, - "loadFailed": false, - "maxAge": { - "#bigint": "5000" - }, - "memo": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "now": { - "#bigint": "10000" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "observedFence": { - "#bigint": "0" - }, - "phase": { - "#bigint": "0" - }, - "readFailed": false, - "request": true, - "sourceError": { - "#bigint": "3" - }, - "sources": [], - "wall": { - "#bigint": "100000" - }, - "watermark": { - "#bigint": "0" - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"fallbackErrors":[],"warnings":{"#bigint":"0"}}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "attached": [ - true, - false - ], - "canRecover": true, - "canWrite": true, - "candidate": { - "#bigint": "1" - }, - "candidateCreated": { - "#bigint": "99000" - }, - "classifier": { - "#bigint": "2" - }, - "deadline": { - "#bigint": "10010" - }, - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "loaders": { - "#bigint": "1" - }, - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "2" - }, - "sources": [ - { - "#bigint": "0" - } - ] - } - }, - { - "action": "rejectLoader", - "statePatch": { - "d": { - "fallbackErrors": [ - "remote" - ] - }, - "o": { - "calls": [ - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "0" - }, - "sources": [ - { - "#bigint": "2" - } - ] - } - } + {"action":"beginCall","choice":{"tag":"Some","value":{"#bigint":"3"}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"rejectLoader","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"1"}},"d":{"fallbackErrors":["remote"]}}} ] }, { @@ -1783,332 +128,43 @@ "model": "formal/dialcache-shadow-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-boundaries.json/same-c1-bytes-confirm-mismatch" }, - "initialState": { - "abandoned": false, - "acceptedInvalidLog": true, - "acceptedLog": false, - "c0": { - "#bigint": "0" - }, - "c0Created": { - "#bigint": "100000" - }, - "comparator": { - "#bigint": "2" - }, - "comparisonMs": { - "#bigint": "0" - }, - "created": { - "#bigint": "100001" - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "3" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - }, - "deadline": { - "#bigint": "10010" - }, - "defaultLog": false, - "dumpFailed": false, - "fence": { - "#bigint": "100000" - }, - "frame": { - "#bigint": "8" - }, - "hook": true, - "invalidLog": false, - "invalidShadow": false, - "loadFailed": false, - "log": false, - "mismatchAuthorizations": [], - "now": { - "#bigint": "10001" - }, - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [], - "shadow": [ - "source_error", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "phase": { - "#bigint": "7" - }, - "readFailed": false, - "shadowActive": true, - "source": { - "#bigint": "3" - }, - "sourcePending": false, - "sourceValue": { - "#bigint": "0" - }, - "sourceWorkMs": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100001" - }, - "watermark": { - "#bigint": "100000" - }, - "writeFailed": false, - "writeStamp": { - "#bigint": "0" - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "acceptedInvalidLog": false, - "c0Created": { - "#bigint": "0" - }, - "deadline": { - "#bigint": "10011" - }, - "fence": { - "#bigint": "0" - }, - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "loaders": { - "#bigint": "7" - }, - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "7" - } - }, - "phase": { - "#bigint": "1" - }, - "source": { - "#bigint": "1" - }, - "sourcePending": true - } - }, - { - "action": "releaseRead", - "statePatch": { - "c0": { - "#bigint": "8" - }, - "c0Created": { - "#bigint": "100001" - }, - "phase": { - "#bigint": "2" - } - } - }, - { - "action": "resolveLoader", - "statePatch": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "loads": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "3" - }, - "source": { - "#bigint": "2" - }, - "sourcePending": false, - "sourceValue": { - "#bigint": "2" - } - } - }, - { - "action": "logPolicy", - "statePatch": { - "invalidLog": true - } - }, - { - "action": "releaseLoad", - "statePatch": { - "o": { - "comparisons": { - "#bigint": "1" - }, - "reads": { - "#bigint": "8" - } - }, - "phase": { - "#bigint": "4" - } - } - }, - { - "action": "reencode", - "statePatch": { - "frame": { - "#bigint": "7" - } - } - }, - { - "action": "reencode", - "statePatch": { - "frame": { - "#bigint": "8" - } - } - }, - { - "action": "releaseRead", - "statePatch": { - "d": { - "ages": [ - { - "#bigint": "0" - } - ] - }, - "mismatchAuthorizations": [ - false - ], - "o": { - "shadow": [ - "source_error", - "source_error", - "source_error", - "fill_fenced", - "source_error", - "source_error", - "mismatch" - ] - }, - "phase": { - "#bigint": "7" - } - } - } + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"}]},"d":{"fallbackErrors":["local"]}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["source_error"]}}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"2"},"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"}}}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"5"}},"statePatch":{}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"invalidate","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"invalidations":{"#bigint":"1"},"maintenance":["ok"]}}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"}],"shadow":["source_error","source_error"]},"d":{"fallbackErrors":["local","local"]}}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"3"},"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"}}}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"}]},"d":{"fallbackErrors":["local","local","local"]}}}, + {"action":"logPolicy","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["source_error","source_error","source_error"]}}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"4"},"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"}},"d":{"configErrors":{"#bigint":"1"}}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"}],"shadow":["source_error","source_error","source_error","fill_fenced"]}}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"0"}],"loaders":{"#bigint":"5"},"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"}},"d":{"configErrors":{"#bigint":"2"}}}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"}]},"d":{"fallbackErrors":["local","local","local","local"]}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["source_error","source_error","source_error","fill_fenced","source_error"]}}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"6"},"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"}},"d":{"configErrors":{"#bigint":"3"}}}}, + {"action":"shadowPolicy","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"}]},"d":{"fallbackErrors":["local","local","local","local","local"]}}}, + {"action":"seedUnicode","choice":{"tag":"Some","value":{"#bigint":"8"}},"statePatch":{}}, + {"action":"logPolicy","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["source_error","source_error","source_error","fill_fenced","source_error","source_error"]}}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"8"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"7"},"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"7"}}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"}],"loads":{"#bigint":"1"}}}}, + {"action":"logPolicy","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{}}, + {"action":"releaseLoad","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"comparisons":{"#bigint":"1"},"reads":{"#bigint":"8"}}}}, + {"action":"reencode","choice":{"tag":"Some","value":{"#bigint":"7"}},"statePatch":{}}, + {"action":"reencode","choice":{"tag":"Some","value":{"#bigint":"8"}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["source_error","source_error","source_error","fill_fenced","source_error","source_error","mismatch"]},"d":{"ages":[{"#bigint":"0"}]}}} ] }, { @@ -2118,299 +174,45 @@ "model": "formal/dialcache-shadow-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-boundaries.json/different-c1-bytes-supersede" }, - "initialState": { - "abandoned": false, - "acceptedInvalidLog": false, - "acceptedLog": false, - "c0": { - "#bigint": "2" - }, - "c0Created": { - "#bigint": "97010" - }, - "comparator": { - "#bigint": "2" - }, - "comparisonMs": { - "#bigint": "0" - }, - "created": { - "#bigint": "97010" - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "2" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - }, - "deadline": { - "#bigint": "10020" - }, - "defaultLog": false, - "dumpFailed": true, - "fence": { - "#bigint": "0" - }, - "frame": { - "#bigint": "2" - }, - "hook": true, - "invalidLog": false, - "invalidShadow": false, - "loadFailed": false, - "log": false, - "mismatchAuthorizations": [], - "now": { - "#bigint": "10010" - }, - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "5" - }, - "recovery": [], - "shadow": [ - "source_error", - "source_error", - "timeout", - "filled", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "7" - }, - "readFailed": false, - "shadowActive": true, - "source": { - "#bigint": "3" - }, - "sourcePending": false, - "sourceValue": { - "#bigint": "0" - }, - "sourceWorkMs": { - "#bigint": "0" - }, - "wall": { - "#bigint": "97010" - }, - "watermark": { - "#bigint": "0" - }, - "writeFailed": false, - "writeStamp": { - "#bigint": "97010" - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "c0": { - "#bigint": "0" - }, - "c0Created": { - "#bigint": "0" - }, - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "loaders": { - "#bigint": "6" - }, - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - } - }, - "phase": { - "#bigint": "1" - }, - "source": { - "#bigint": "1" - }, - "sourcePending": true - } - }, - { - "action": "resolveLoader", - "statePatch": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ] - }, - "source": { - "#bigint": "2" - }, - "sourcePending": false, - "sourceValue": { - "#bigint": "2" - } - } - }, - { - "action": "releaseRead", - "statePatch": { - "c0": { - "#bigint": "2" - }, - "c0Created": { - "#bigint": "97010" - }, - "o": { - "loads": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "3" - } - } - }, - { - "action": "releaseLoad", - "statePatch": { - "o": { - "comparisons": { - "#bigint": "1" - }, - "reads": { - "#bigint": "7" - } - }, - "phase": { - "#bigint": "4" - } - } - }, - { - "action": "shadowPolicy", - "statePatch": { - "shadowActive": false - } - }, - { - "action": "seed", - "statePatch": { - "frame": { - "#bigint": "3" - } - } - }, - { - "action": "releaseRead", - "statePatch": { - "o": { - "shadow": [ - "source_error", - "source_error", - "timeout", - "filled", - "source_error", - "superseded" - ] - }, - "phase": { - "#bigint": "7" - } - } - } + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"loadFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"}]},"d":{"fallbackErrors":["local"]}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["source_error"]}}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"2"},"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"}}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"logPolicy","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"dumpFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"seedUnicode","choice":{"tag":"Some","value":{"#bigint":"8"}},"statePatch":{}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"}],"shadow":["source_error","source_error"]},"d":{"fallbackErrors":["local","local"]}}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"3"},"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"}},"d":{"configErrors":{"#bigint":"1"}}}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"10"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"4"}],"shadow":["source_error","source_error","timeout"]},"d":{"fallbackErrors":["local","local","local"]}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"d":{"futureOffsets":[{"layer":"remote_shadow","offsetMs":{"#bigint":"1990"}}]}}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"0"}],"loaders":{"#bigint":"4"},"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"}},"d":{"configErrors":{"#bigint":"2"}}}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"2"}]}}}, + {"action":"shadowPolicy","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"loadFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"dumps":{"#bigint":"1"}},"d":{"futureOffsets":[{"layer":"remote_shadow","offsetMs":{"#bigint":"1990"}},{"layer":"remote_shadow","offsetMs":{"#bigint":"1990"}}]}}}, + {"action":"seedUnicode","choice":{"tag":"Some","value":{"#bigint":"8"}},"statePatch":{}}, + {"action":"releaseDump","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"action":"dumpFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"releaseWrite","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["source_error","source_error","timeout","filled"]}}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"0"}],"loaders":{"#bigint":"5"},"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"}}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"3"}],"shadow":["source_error","source_error","timeout","filled","source_error"]},"d":{"fallbackErrors":["local","local","local","local"]}}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"6"},"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"}}}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"2"}]}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"loads":{"#bigint":"1"}}}}, + {"action":"releaseLoad","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"comparisons":{"#bigint":"1"},"reads":{"#bigint":"7"}}}}, + {"action":"shadowPolicy","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"3"}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["source_error","source_error","timeout","filled","source_error","superseded"]}}} ] }, { @@ -2420,321 +222,64 @@ "model": "formal/dialcache-shadow-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-boundaries.json/late-shadow-dump-cannot-dispatch-write" }, - "initialState": { - "abandoned": false, - "acceptedInvalidLog": true, - "acceptedLog": false, - "c0": { - "#bigint": "0" - }, - "c0Created": { - "#bigint": "100002" - }, - "comparator": { - "#bigint": "3" - }, - "comparisonMs": { - "#bigint": "10" - }, - "created": { - "#bigint": "100002" - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "3" - }, - "fallbackErrors": [ - "local", - "local", - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - }, - "deadline": { - "#bigint": "10024" - }, - "defaultLog": false, - "dumpFailed": true, - "fence": { - "#bigint": "0" - }, - "frame": { - "#bigint": "7" - }, - "hook": true, - "invalidLog": true, - "invalidShadow": false, - "loadFailed": false, - "log": false, - "mismatchAuthorizations": [], - "now": { - "#bigint": "10014" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "3" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "mutation_error", - "mutation_error", - "mutation_error" - ], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "6" - }, - "recovery": [], - "shadow": [ - "redis_error", - "redis_error", - "redis_error", - "timeout", - "source_error", - "source_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "phase": { - "#bigint": "7" - }, - "readFailed": false, - "shadowActive": true, - "source": { - "#bigint": "3" - }, - "sourcePending": false, - "sourceValue": { - "#bigint": "0" - }, - "sourceWorkMs": { - "#bigint": "0" - }, - "wall": { - "#bigint": "98014" - }, - "watermark": { - "#bigint": "0" - }, - "writeFailed": true, - "writeStamp": { - "#bigint": "0" - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "c0Created": { - "#bigint": "0" - }, - "d": { - "configErrors": { - "#bigint": "4" - } - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "loaders": { - "#bigint": "7" - }, - "policyCalls": { - "#bigint": "7" - }, - "reads": { - "#bigint": "7" - } - }, - "phase": { - "#bigint": "1" - }, - "source": { - "#bigint": "1" - }, - "sourcePending": true - } - }, - { - "action": "resolveLoader", - "statePatch": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ] - }, - "source": { - "#bigint": "2" - }, - "sourcePending": false, - "sourceValue": { - "#bigint": "2" - } - } - }, - { - "action": "shadowPolicy", - "statePatch": { - "invalidLog": false, - "shadowActive": false - } - }, - { - "action": "releaseRead", - "statePatch": { - "c0Created": { - "#bigint": "100002" - }, - "o": { - "dumps": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "5" - } - } - }, - { - "action": "advance", - "statePatch": { - "abandoned": true, - "now": { - "#bigint": "10024" - }, - "o": { - "shadow": [ - "redis_error", - "redis_error", - "redis_error", - "timeout", - "source_error", - "source_error", - "timeout" - ] - }, - "wall": { - "#bigint": "98024" - } - } - }, - { - "action": "seedUnicode", - "statePatch": { - "created": { - "#bigint": "98024" - }, - "frame": { - "#bigint": "8" - } - } - }, - { - "action": "seed", - "statePatch": { - "frame": { - "#bigint": "4" - } - } - }, - { - "action": "dumpFault", - "statePatch": {} - }, - { - "action": "releaseDump", - "statePatch": { - "phase": { - "#bigint": "7" - } - } - } + {"action":"readFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"writeFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"invalidate","choice":{"tag":"Some","value":{"#bigint":"20"}},"statePatch":{"o":{"invalidations":{"#bigint":"1"},"maintenance":["mutation_error"]}}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"5"}},"statePatch":{}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"o":{"calls":[{"#bigint":"2"}]}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["redis_error"]}}}, + {"action":"readFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"loaders":{"#bigint":"2"},"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"}}}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"6"}},"statePatch":{}}, + {"action":"loadFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"logPolicy","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"readFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"dumpFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["redis_error","redis_error"]}}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"}]},"d":{"fallbackErrors":["local"]}}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"3"},"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"}}}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"}]},"d":{"fallbackErrors":["local","local"]}}}, + {"action":"dumpFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"logPolicy","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{}}, + {"action":"seedUnicode","choice":{"tag":"Some","value":{"#bigint":"8"}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["redis_error","redis_error","redis_error"]}}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"4"},"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"}},"d":{"configErrors":{"#bigint":"1"}}}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{}}, + {"action":"seedUnicode","choice":{"tag":"Some","value":{"#bigint":"7"}},"statePatch":{}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"}]}}}, + {"action":"readFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"dumpFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"loadFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"loads":{"#bigint":"1"}}}}, + {"action":"writeFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"releaseLoad","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"comparisons":{"#bigint":"1"},"shadow":["redis_error","redis_error","redis_error","timeout"]}}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"0"}],"loaders":{"#bigint":"5"},"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"}},"d":{"configErrors":{"#bigint":"2"}}}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"}],"shadow":["redis_error","redis_error","redis_error","timeout","source_error"]},"d":{"fallbackErrors":["local","local","local"]}}}, + {"action":"logPolicy","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"6"},"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"}},"d":{"configErrors":{"#bigint":"3"}}}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"}]},"d":{"fallbackErrors":["local","local","local","local"]}}}, + {"action":"invalidate","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"invalidations":{"#bigint":"2"},"maintenance":["mutation_error","mutation_error"]}}}, + {"action":"invalidate","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"invalidations":{"#bigint":"3"},"maintenance":["mutation_error","mutation_error","mutation_error"]}}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["redis_error","redis_error","redis_error","timeout","source_error","source_error"]},"d":{"futureOffsets":[{"layer":"remote_shadow","offsetMs":{"#bigint":"988"}}]}}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"7"},"policyCalls":{"#bigint":"7"},"reads":{"#bigint":"7"}},"d":{"configErrors":{"#bigint":"4"}}}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"}]}}}, + {"action":"shadowPolicy","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"dumps":{"#bigint":"1"}},"d":{"futureOffsets":[{"layer":"remote_shadow","offsetMs":{"#bigint":"988"}},{"layer":"remote_shadow","offsetMs":{"#bigint":"1988"}}]}}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"10"}},"statePatch":{"o":{"shadow":["redis_error","redis_error","redis_error","timeout","source_error","source_error","timeout"]}}}, + {"action":"seedUnicode","choice":{"tag":"Some","value":{"#bigint":"8"}},"statePatch":{}}, + {"action":"seed","choice":{"tag":"Some","value":{"#bigint":"4"}},"statePatch":{}}, + {"action":"dumpFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"releaseDump","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}} ] }, { @@ -2744,244 +289,20 @@ "model": "formal/dialcache-shadow-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-boundaries.json/fill-write-error-preserves-caller" }, - "initialState": { - "abandoned": false, - "acceptedInvalidLog": false, - "acceptedLog": false, - "c0": { - "#bigint": "0" - }, - "c0Created": { - "#bigint": "0" - }, - "comparator": { - "#bigint": "3" - }, - "comparisonMs": { - "#bigint": "0" - }, - "created": { - "#bigint": "0" - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - } - }, - "deadline": { - "#bigint": "0" - }, - "defaultLog": false, - "dumpFailed": false, - "fence": { - "#bigint": "0" - }, - "frame": { - "#bigint": "0" - }, - "hook": true, - "invalidLog": false, - "invalidShadow": false, - "loadFailed": false, - "log": true, - "mismatchAuthorizations": [], - "now": { - "#bigint": "10001" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "phase": { - "#bigint": "0" - }, - "readFailed": false, - "shadowActive": true, - "source": { - "#bigint": "0" - }, - "sourcePending": false, - "sourceValue": { - "#bigint": "0" - }, - "sourceWorkMs": { - "#bigint": "0" - }, - "wall": { - "#bigint": "100001" - }, - "watermark": { - "#bigint": "0" - }, - "writeFailed": false, - "writeStamp": { - "#bigint": "0" - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "acceptedLog": true, - "deadline": { - "#bigint": "10011" - }, - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "loaders": { - "#bigint": "1" - }, - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "1" - }, - "source": { - "#bigint": "1" - }, - "sourcePending": true - } - }, - { - "action": "resolveLoader", - "statePatch": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ] - }, - "source": { - "#bigint": "2" - }, - "sourcePending": false, - "sourceValue": { - "#bigint": "2" - } - } - }, - { - "action": "releaseRead", - "statePatch": { - "o": { - "dumps": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "5" - } - } - }, - { - "action": "loadFault", - "statePatch": { - "loadFailed": true - } - }, - { - "action": "dumpFault", - "statePatch": { - "dumpFailed": true - } - }, - { - "action": "readFault", - "statePatch": {} - }, - { - "action": "dumpFault", - "statePatch": { - "dumpFailed": false - } - }, - { - "action": "releaseDump", - "statePatch": { - "o": { - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "phase": { - "#bigint": "6" - }, - "writeStamp": { - "#bigint": "100001" - } - } - }, - { - "action": "writeFault", - "statePatch": { - "writeFailed": true - } - }, - { - "action": "releaseWrite", - "statePatch": { - "o": { - "shadow": [ - "fill_error" - ] - }, - "phase": { - "#bigint": "7" - } - } - } + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"logPolicy","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"o":{"calls":[{"#bigint":"2"}]}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"dumps":{"#bigint":"1"}}}}, + {"action":"loadFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"dumpFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"readFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"dumpFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"releaseDump","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"action":"writeFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"releaseWrite","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["fill_error"]}}} ] }, { @@ -2991,239 +312,35 @@ "model": "formal/dialcache-shadow-conformance.qnt", "recipe": "formal/fixture-recipes.json#test/fixtures/formal-witness-boundaries.json/dark-read-error-still-allows-source-result" }, - "initialState": { - "abandoned": false, - "acceptedInvalidLog": false, - "acceptedLog": false, - "c0": { - "#bigint": "0" - }, - "c0Created": { - "#bigint": "0" - }, - "comparator": { - "#bigint": "3" - }, - "comparisonMs": { - "#bigint": "10" - }, - "created": { - "#bigint": "98001" - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "2" - }, - "fallbackErrors": [ - "local", - "local" - ], - "warnings": { - "#bigint": "0" - } - }, - "deadline": { - "#bigint": "10011" - }, - "defaultLog": false, - "dumpFailed": true, - "fence": { - "#bigint": "0" - }, - "frame": { - "#bigint": "7" - }, - "hook": true, - "invalidLog": false, - "invalidShadow": false, - "loadFailed": true, - "log": false, - "mismatchAuthorizations": [], - "now": { - "#bigint": "10001" - }, - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "ok" - ], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "redis_error", - "redis_error" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "phase": { - "#bigint": "7" - }, - "readFailed": true, - "shadowActive": true, - "source": { - "#bigint": "2" - }, - "sourcePending": false, - "sourceValue": { - "#bigint": "2" - }, - "sourceWorkMs": { - "#bigint": "0" - }, - "wall": { - "#bigint": "98001" - }, - "watermark": { - "#bigint": "100021" - }, - "writeFailed": false, - "writeStamp": { - "#bigint": "0" - } - }, + "initialState": {"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}, "steps": [ - { - "action": "beginCall", - "statePatch": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "loaders": { - "#bigint": "4" - }, - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "3" - } - }, - "phase": { - "#bigint": "1" - }, - "source": { - "#bigint": "1" - }, - "sourcePending": true, - "sourceValue": { - "#bigint": "0" - } - } - }, - { - "action": "invalidate", - "statePatch": { - "o": { - "invalidations": { - "#bigint": "3" - }, - "maintenance": [ - "ok", - "ok", - "ok" - ] - } - } - }, - { - "action": "releaseRead", - "statePatch": { - "o": { - "shadow": [ - "redis_error", - "redis_error", - "redis_error" - ] - }, - "phase": { - "#bigint": "7" - } - } - }, - { - "action": "writeFault", - "statePatch": {} - }, - { - "action": "resolveLoader", - "statePatch": { - "o": { - "calls": [ - { - "#bigint": "3" - }, - { - "#bigint": "3" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ] - }, - "source": { - "#bigint": "2" - }, - "sourcePending": false, - "sourceValue": { - "#bigint": "1" - } - } - } + {"action":"readFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"0"}],"loaders":{"#bigint":"1"},"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"}}}}, + {"action":"logPolicy","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"}]},"d":{"fallbackErrors":["local"]}}}, + {"action":"dumpFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["redis_error"]}}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"2"},"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"}},"d":{"configErrors":{"#bigint":"1"}}}}, + {"action":"invalidate","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{"o":{"invalidations":{"#bigint":"1"},"maintenance":["ok"]}}}, + {"action":"advance","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"rejectLoader","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"}]},"d":{"fallbackErrors":["local","local"]}}}, + {"action":"invalidate","choice":{"tag":"Some","value":{"#bigint":"20"}},"statePatch":{"o":{"invalidations":{"#bigint":"2"},"maintenance":["ok","ok"]}}}, + {"action":"shadowPolicy","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{}}, + {"action":"dumpFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["redis_error","redis_error"]}}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"dumpFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"0"}],"loaders":{"#bigint":"3"},"policyCalls":{"#bigint":"3"}},"d":{"configErrors":{"#bigint":"2"}}}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"2"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"}]}}}, + {"action":"loadFault","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{}}, + {"action":"logPolicy","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"rollbackWall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{}}, + {"action":"seedUnicode","choice":{"tag":"Some","value":{"#bigint":"7"}},"statePatch":{}}, + {"action":"beginCall","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"0"}],"loaders":{"#bigint":"4"},"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"3"}}}}, + {"action":"invalidate","choice":{"tag":"Some","value":{"#bigint":"20"}},"statePatch":{"o":{"invalidations":{"#bigint":"3"},"maintenance":["ok","ok","ok"]}}}, + {"action":"releaseRead","choice":{"tag":"None","value":{"#tup":[]}},"statePatch":{"o":{"shadow":["redis_error","redis_error","redis_error"]}}}, + {"action":"writeFault","choice":{"tag":"Some","value":{"#bigint":"0"}},"statePatch":{}}, + {"action":"resolveLoader","choice":{"tag":"Some","value":{"#bigint":"1"}},"statePatch":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"3"},{"#bigint":"2"},{"#bigint":"1"}]}}} ] } ] diff --git a/test/fixtures/independent-shadow-witnesses.json b/test/fixtures/independent-shadow-witnesses.json new file mode 100644 index 00000000..17c31cd1 --- /dev/null +++ b/test/fixtures/independent-shadow-witnesses.json @@ -0,0 +1,43 @@ +{ + "shadowWalk": { + "source": { + "model": "formal/dialcache-independent-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/independent-shadow-witnesses.json/shadowWalk" + }, + "states": [ + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"deadlines":[],"drained":[],"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"loaders":[],"loads":[],"now":{"#bigint":"0"},"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"5000"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"deadlines":[],"drained":[],"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"loaders":[],"loads":[],"now":{"#bigint":"0"},"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[],"readBudget":{"#bigint":"10"},"reads":[],"retained":[],"sources":[],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"5000"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"deadlines":[{"at":{"#bigint":"10"},"index":{"#bigint":"0"},"kind":{"#bigint":"0"}}],"drained":[],"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"loaders":[],"loads":[],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"}],"readBudget":{"#bigint":"10"},"reads":[{"flight":{"#bigint":"0"},"read":{"#bigint":"0"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"5000"}}}],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"5000"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"deadlines":[{"at":{"#bigint":"10"},"index":{"#bigint":"0"},"kind":{"#bigint":"0"}}],"drained":[],"io":{"aborted":[],"budgets":[{"#bigint":"10"}],"sourceErrors":[{"#bigint":"0"}]},"loaders":[],"loads":[],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"}],"readBudget":{"#bigint":"5"},"reads":[{"flight":{"#bigint":"0"},"read":{"#bigint":"0"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"5000"}}}],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"deadlines":[{"at":{"#bigint":"10"},"index":{"#bigint":"0"},"kind":{"#bigint":"0"}},{"at":{"#bigint":"5"},"index":{"#bigint":"1"},"kind":{"#bigint":"0"}}],"drained":[],"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[],"loads":[],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"}],"readBudget":{"#bigint":"5"},"reads":[{"flight":{"#bigint":"0"},"read":{"#bigint":"0"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"5000"}}},{"flight":{"#bigint":"1"},"read":{"#bigint":"1"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"deadlines":[{"at":{"#bigint":"10"},"index":{"#bigint":"0"},"kind":{"#bigint":"0"}},{"at":{"#bigint":"5"},"index":{"#bigint":"1"},"kind":{"#bigint":"0"}},{"at":{"#bigint":"5"},"index":{"#bigint":"2"},"kind":{"#bigint":"0"}}],"drained":[],"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[],"loads":[],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"readBudget":{"#bigint":"5"},"reads":[{"flight":{"#bigint":"0"},"read":{"#bigint":"0"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"5000"}}},{"flight":{"#bigint":"1"},"read":{"#bigint":"1"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}},{"flight":{"#bigint":"2"},"read":{"#bigint":"2"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"deadlines":[{"at":{"#bigint":"5"},"index":{"#bigint":"1"},"kind":{"#bigint":"0"}},{"at":{"#bigint":"5"},"index":{"#bigint":"2"},"kind":{"#bigint":"0"}},{"at":{"#bigint":"10"},"index":{"#bigint":"0"},"kind":{"#bigint":"1"}}],"drained":[false],"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"}],"loads":[],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"readBudget":{"#bigint":"5"},"reads":[{"flight":{"#bigint":"1"},"read":{"#bigint":"1"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}},{"flight":{"#bigint":"2"},"read":{"#bigint":"2"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}],"retained":[{"candidate":{"#bigint":"1"},"classifier":{"#bigint":"1"},"created":{"#bigint":"99000"},"flight":{"#bigint":"0"},"maximum":{"#bigint":"5000"}}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"failRead"},"mbt::actionTaken":"failRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"deadlines":[{"at":{"#bigint":"5"},"index":{"#bigint":"2"},"kind":{"#bigint":"0"}},{"at":{"#bigint":"10"},"index":{"#bigint":"0"},"kind":{"#bigint":"1"}},{"at":{"#bigint":"10"},"index":{"#bigint":"1"},"kind":{"#bigint":"1"}}],"drained":[false,false],"io":{"aborted":[],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"}],"loads":[],"now":{"#bigint":"0"},"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"readBudget":{"#bigint":"5"},"reads":[{"flight":{"#bigint":"2"},"read":{"#bigint":"2"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}],"retained":[{"candidate":{"#bigint":"1"},"classifier":{"#bigint":"1"},"created":{"#bigint":"99000"},"flight":{"#bigint":"0"},"maximum":{"#bigint":"5000"}}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"deadlines":[{"at":{"#bigint":"10"},"index":{"#bigint":"0"},"kind":{"#bigint":"1"}},{"at":{"#bigint":"10"},"index":{"#bigint":"1"},"kind":{"#bigint":"1"}},{"at":{"#bigint":"15"},"index":{"#bigint":"2"},"kind":{"#bigint":"1"}}],"drained":[false,false,false],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"loads":[],"now":{"#bigint":"5"},"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"readBudget":{"#bigint":"5"},"reads":[{"flight":{"#bigint":"-1"},"read":{"#bigint":"2"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}],"retained":[{"candidate":{"#bigint":"1"},"classifier":{"#bigint":"1"},"created":{"#bigint":"99000"},"flight":{"#bigint":"0"},"maximum":{"#bigint":"5000"}}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"deadlines":[{"at":{"#bigint":"10"},"index":{"#bigint":"1"},"kind":{"#bigint":"1"}},{"at":{"#bigint":"15"},"index":{"#bigint":"2"},"kind":{"#bigint":"1"}}],"drained":[true,false,false],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"loads":[{"flight":{"#bigint":"0"},"load":{"#bigint":"0"},"recovery":true,"ttls":{"freshMs":{"#bigint":"0"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"0"}},"value":{"#bigint":"1"}}],"now":{"#bigint":"5"},"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"readBudget":{"#bigint":"5"},"reads":[{"flight":{"#bigint":"-1"},"read":{"#bigint":"2"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}],"retained":[{"candidate":{"#bigint":"1"},"classifier":{"#bigint":"1"},"created":{"#bigint":"99000"},"flight":{"#bigint":"0"},"maximum":{"#bigint":"5000"}}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"deadlines":[{"at":{"#bigint":"10"},"index":{"#bigint":"1"},"kind":{"#bigint":"1"}},{"at":{"#bigint":"15"},"index":{"#bigint":"2"},"kind":{"#bigint":"1"}}],"drained":[true,false,false],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"loads":[{"flight":{"#bigint":"0"},"load":{"#bigint":"0"},"recovery":true,"ttls":{"freshMs":{"#bigint":"0"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"0"}},"value":{"#bigint":"1"}}],"now":{"#bigint":"5"},"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"readBudget":{"#bigint":"5"},"reads":[{"flight":{"#bigint":"-1"},"read":{"#bigint":"2"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}],"retained":[{"candidate":{"#bigint":"1"},"classifier":{"#bigint":"1"},"created":{"#bigint":"99000"},"flight":{"#bigint":"0"},"maximum":{"#bigint":"5000"}}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"deadlines":[{"at":{"#bigint":"10"},"index":{"#bigint":"1"},"kind":{"#bigint":"1"}},{"at":{"#bigint":"15"},"index":{"#bigint":"2"},"kind":{"#bigint":"1"}}],"drained":[true,false,false],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"loads":[],"now":{"#bigint":"5"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"readBudget":{"#bigint":"5"},"reads":[{"flight":{"#bigint":"-1"},"read":{"#bigint":"2"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"deadlines":[{"at":{"#bigint":"15"},"index":{"#bigint":"2"},"kind":{"#bigint":"1"}}],"drained":[true,false,false],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"loads":[],"now":{"#bigint":"10"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"readBudget":{"#bigint":"5"},"reads":[{"flight":{"#bigint":"-1"},"read":{"#bigint":"2"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"deadlines":[{"at":{"#bigint":"15"},"index":{"#bigint":"2"},"kind":{"#bigint":"1"}}],"drained":[true,false,false],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"loads":[],"now":{"#bigint":"10"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"deadlines":[{"at":{"#bigint":"15"},"index":{"#bigint":"2"},"kind":{"#bigint":"1"}}],"drained":[true,false,false],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"loads":[],"now":{"#bigint":"10"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"deadlines":[],"drained":[true,false,true],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"loads":[],"now":{"#bigint":"10"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"deadlines":[],"drained":[true,true,true],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"loads":[],"now":{"#bigint":"10"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"deadlines":[{"at":{"#bigint":"15"},"index":{"#bigint":"3"},"kind":{"#bigint":"0"}}],"drained":[true,true,true],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"}],"loads":[],"now":{"#bigint":"10"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"}],"readBudget":{"#bigint":"5"},"reads":[{"flight":{"#bigint":"3"},"read":{"#bigint":"3"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"deadlines":[{"at":{"#bigint":"20"},"index":{"#bigint":"3"},"kind":{"#bigint":"1"}}],"drained":[true,true,true,false],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"}],"loads":[],"now":{"#bigint":"10"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[{"candidate":{"#bigint":"0"},"classifier":{"#bigint":"1"},"created":{"#bigint":"99010"},"flight":{"#bigint":"3"},"maximum":{"#bigint":"2000"}}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"8"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"deadlines":[],"drained":[true,true,true,true],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"}],"loads":[],"now":{"#bigint":"10"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"4"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"deadlines":[{"at":{"#bigint":"15"},"index":{"#bigint":"4"},"kind":{"#bigint":"0"}}],"drained":[true,true,true,true],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"}],"loads":[],"now":{"#bigint":"10"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"}],"readBudget":{"#bigint":"5"},"reads":[{"flight":{"#bigint":"4"},"read":{"#bigint":"4"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"deadlines":[],"drained":[true,true,true,true],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"}],"loads":[{"flight":{"#bigint":"4"},"load":{"#bigint":"1"},"recovery":false,"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}},"value":{"#bigint":"2"}}],"now":{"#bigint":"10"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"2"},"maintenance":["ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"deadlines":[],"drained":[true,true,true,true],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"}],"loads":[{"flight":{"#bigint":"4"},"load":{"#bigint":"1"},"recovery":false,"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}},"value":{"#bigint":"2"}}],"now":{"#bigint":"10"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"2"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"1000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1000"}}},"s":{"deadlines":[],"drained":[true,true,true,true],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"}],"loads":[{"flight":{"#bigint":"4"},"load":{"#bigint":"1"},"recovery":false,"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}},"value":{"#bigint":"2"}}],"now":{"#bigint":"1010"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"2"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"deadlines":[],"drained":[true,true,true,true],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"}],"loads":[{"flight":{"#bigint":"4"},"load":{"#bigint":"1"},"recovery":false,"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}},"value":{"#bigint":"2"}}],"now":{"#bigint":"1015"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"2"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"failLoad"},"mbt::actionTaken":"failLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"deadlines":[{"at":{"#bigint":"1025"},"index":{"#bigint":"4"},"kind":{"#bigint":"1"}}],"drained":[true,true,true,true,false],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"}],"loads":[],"now":{"#bigint":"1015"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"2"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"deadlines":[{"at":{"#bigint":"1025"},"index":{"#bigint":"4"},"kind":{"#bigint":"1"}}],"drained":[true,true,true,true,false],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"}],"loads":[],"now":{"#bigint":"1015"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"2"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"5"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"deadlines":[{"at":{"#bigint":"1025"},"index":{"#bigint":"4"},"kind":{"#bigint":"1"}},{"at":{"#bigint":"1020"},"index":{"#bigint":"5"},"kind":{"#bigint":"0"}}],"drained":[true,true,true,true,false],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"}],"loads":[],"now":{"#bigint":"1015"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"2"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"5"}],"readBudget":{"#bigint":"5"},"reads":[{"flight":{"#bigint":"5"},"read":{"#bigint":"5"},"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"deadlines":[{"at":{"#bigint":"1025"},"index":{"#bigint":"4"},"kind":{"#bigint":"1"}},{"at":{"#bigint":"1025"},"index":{"#bigint":"5"},"kind":{"#bigint":"1"}}],"drained":[true,true,true,true,false,false],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"5"}],"loads":[],"now":{"#bigint":"1015"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"2"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"5"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[{"candidate":{"#bigint":"1"},"classifier":{"#bigint":"1"},"created":{"#bigint":"100015"},"flight":{"#bigint":"5"},"maximum":{"#bigint":"2000"}}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"deadlines":[{"at":{"#bigint":"1025"},"index":{"#bigint":"4"},"kind":{"#bigint":"1"}}],"drained":[true,true,true,true,false,true],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"5"}],"loads":[{"flight":{"#bigint":"5"},"load":{"#bigint":"2"},"recovery":true,"ttls":{"freshMs":{"#bigint":"0"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"0"}},"value":{"#bigint":"1"}}],"now":{"#bigint":"1015"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"3"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"5"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[{"candidate":{"#bigint":"1"},"classifier":{"#bigint":"1"},"created":{"#bigint":"100015"},"flight":{"#bigint":"5"},"maximum":{"#bigint":"2000"}}],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"2000"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"failLoad"},"mbt::actionTaken":"failLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"deadlines":[{"at":{"#bigint":"1025"},"index":{"#bigint":"4"},"kind":{"#bigint":"1"}}],"drained":[true,true,true,true,false,true],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"5"}],"loads":[],"now":{"#bigint":"1015"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"3"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"3"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["served","deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"5"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"2000"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"deadlines":[],"drained":[true,true,true,true,false,true],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"5"}],"loads":[],"now":{"#bigint":"1025"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"3"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"3"},"maintenance":["ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["served","deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"5"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"2000"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"deadlines":[],"drained":[true,true,true,true,false,true],"io":{"aborted":[{"#bigint":"2"}],"budgets":[{"#bigint":"10"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"6"}]},"loaders":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"5"}],"loads":[],"now":{"#bigint":"1025"},"o":{"calls":[{"#bigint":"1"},{"#bigint":"4"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"4"},{"#bigint":"3"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"3"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"3"},"maintenance":["ok","ok","ok"],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"6"},"recovery":["served","deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"0"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"4"},{"#bigint":"5"}],"readBudget":{"#bigint":"5"},"reads":[],"retained":[],"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"5000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"0"},"shared":false},{"fence":{"#bigint":"100005"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"2"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"4"},"retentionMs":{"#bigint":"2000"},"shared":false},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"localMs":{"#bigint":"0"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"2000"},"shared":false}],"ttls":{"freshMs":{"#bigint":"1000"},"localMs":{"#bigint":"0"},"retentionMs":{"#bigint":"2000"}}}} + ] + } +} diff --git a/test/fixtures/independent-witnesses.json b/test/fixtures/independent-witnesses.json new file mode 100644 index 00000000..064c9f8f --- /dev/null +++ b/test/fixtures/independent-witnesses.json @@ -0,0 +1,167 @@ +{ + "staggeredSourceStartsKeepIndependentBudgetsTest": { + "source": { + "model": "formal/dialcache-independent-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/independent-witnesses.json/staggeredSourceStartsKeepIndependentBudgetsTest" + }, + "states": [ + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"5"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"5"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"4"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"2"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}} + ] + }, + "staggeredSourcesExpireAtTheirOwnDeadlineTest": { + "source": { + "model": "formal/dialcache-independent-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/independent-witnesses.json/staggeredSourcesExpireAtTheirOwnDeadlineTest" + }, + "states": [ + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"5"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"5"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}} + ] + }, + "independentReadDeadlinesStartSeparateSourcesTest": { + "source": { + "model": "formal/dialcache-independent-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/independent-witnesses.json/independentReadDeadlinesStartSeparateSourcesTest" + }, + "states": [ + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"0"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"0"},{"#bigint":"1"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}} + ] + }, + "timedOutReadCannotAffectAnotherCallTest": { + "source": { + "model": "formal/dialcache-independent-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/independent-witnesses.json/timedOutReadCannotAffectAnotherCallTest" + }, + "states": [ + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"5"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"0"}],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"0"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"0"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"0"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}} + ] + }, + "readFailureCannotBorrowAnotherCallsRefillTest": { + "source": { + "model": "formal/dialcache-independent-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/independent-witnesses.json/readFailureCannotBorrowAnotherCallsRefillTest" + }, + "states": [ + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"failRead"},"mbt::actionTaken":"failRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"4"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}} + ] + }, + "independentRecoveryAtCapturedAgeBoundaryTest": { + "source": { + "model": "formal/dialcache-independent-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/independent-witnesses.json/independentRecoveryAtCapturedAgeBoundaryTest" + }, + "states": [ + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1000"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"3"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"2"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss","served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"2"}]}}} + ] + }, + "independentRecoveriesServeDistinctAcquiredSnapshotsTest": { + "source": { + "model": "formal/dialcache-independent-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/independent-witnesses.json/independentRecoveriesServeDistinctAcquiredSnapshotsTest" + }, + "states": [ + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"2"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"2"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"2"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["served","served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}} + ] + }, + "acquiredFreshDecodeSurvivesInvalidation": { + "source": { + "model": "formal/dialcache-independent-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/independent-witnesses.json/acquiredFreshDecodeSurvivesInvalidation" + }, + "states": [ + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}} + ] + }, + "lateSourceDoesNotAffectOtherCall": { + "source": { + "model": "formal/dialcache-independent-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/independent-witnesses.json/lateSourceDoesNotAffectOtherCall" + }, + "states": [ + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[{"#bigint":"1"}],"budgets":[{"#bigint":"5"},{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]}}} + ] + }, + "failedRecoveryKeepsSourceError": { + "source": { + "model": "formal/dialcache-independent-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/independent-witnesses.json/failedRecoveryKeepsSourceError" + }, + "states": [ + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"0"}]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"failLoad"},"mbt::actionTaken":"failLoad","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"5"}],"sourceErrors":[{"#bigint":"1"}]}}} + ] + } +} diff --git a/test/fixtures/kernel/budgeted-local.qnt b/test/fixtures/kernel/budgeted-local.qnt index 63bbbb20..fbd36bd7 100644 --- a/test/fixtures/kernel/budgeted-local.qnt +++ b/test/fixtures/kernel/budgeted-local.qnt @@ -19,8 +19,8 @@ module budgeted_local { pure val BUDGET = 10 pure val LOCAL_TTL_MS = 1000 pure val START = 10000 - pure val LAYOUT: Serving::Layout = { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: false } - pure val TWO_KEYS: Serving::Layout = { keysPerInstance: 2, keysPerScope: 2, persistentContexts: 2, operationsPerEntity: 2, probeSourceScope: false } + pure val LAYOUT: Serving::Layout = { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } + pure val TWO_KEYS: Serving::Layout = { keysPerInstance: 2, keysPerScope: 2, persistentContexts: 2, operationsPerEntity: 2, probeSourceScope: false, policyProvider: true } pure val LOCAL: Resolution = { layers: { request: false, local: true, remote: false }, coalesce: true } pure val TTLS: Ttls = { localMs: LOCAL_TTL_MS, freshMs: 0, retentionMs: 0 } @@ -42,7 +42,7 @@ module budgeted_local { closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], localValues: List[int], localExpires: List[int], lru: List[List[int]], sources: List[Serving::LocalSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], - started: List[int], budgets: List[int], settledAt: List[int], drained: List[bool] + deadlines: List[Deadlines::Due], started: List[int], budgets: List[int], settledAt: List[int], drained: List[bool] } var s: State var input: { name: str, choice: int } @@ -52,7 +52,7 @@ module budgeted_local { closed: List(false, false), memo: List(NO_VALUE, NO_VALUE), requestFlights: List(NO_OWNER, NO_OWNER), processFlights: List(NO_OWNER), localValues: List(NO_VALUE), localExpires: List(0), lru: List(List()), sources: List(), owners: List(), memoSlots: List(), held: List(), - started: List(), budgets: List(), settledAt: List(), drained: List() }, + deadlines: List(), started: List(), budgets: List(), settledAt: List(), drained: List() }, input' = { name: "init", choice: budget } } action init = initialize(BUDGET) @@ -62,7 +62,7 @@ module budgeted_local { closed: List(false, false), memo: List(NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE), requestFlights: List(NO_OWNER, NO_OWNER, NO_OWNER, NO_OWNER), processFlights: List(NO_OWNER, NO_OWNER), localValues: List(NO_VALUE, NO_VALUE), localExpires: List(0, 0), lru: List(List()), sources: List(), owners: List(), memoSlots: List(), held: List(), - started: List(), budgets: List(), settledAt: List(), drained: List() }, + deadlines: List(), started: List(), budgets: List(), settledAt: List(), drained: List() }, input' = { name: "init", choice: 2 } } action admit(kind: int): bool = all { diff --git a/test/fixtures/kernel/fractional-clock.qnt b/test/fixtures/kernel/fractional-clock.qnt new file mode 100644 index 00000000..04d65b30 --- /dev/null +++ b/test/fixtures/kernel/fractional-clock.qnt @@ -0,0 +1,88 @@ +// The fractional clock over the local projection with inline sources: two +// default instances, one key each, a one-second local TTL, environment time +// in microsecond ticks. Pins that an advance moves the monotonic clock only +// across a millisecond boundary, that a fill at a fractional instant expires +// at the whole-millisecond boundary its grid instant plus the TTL names, that +// an inline call either serves a live entry without a source or runs and +// settles its source in one step, that construction is bookkeeping the clock +// never reads, and that no policy call is counted without a provider. +module fractional_clock { + import conformance_observations.* from "../../../formal/conformance-observations" + import encodings.* from "../../../formal/kernel/encodings" + import calls.* from "../../../formal/kernel/calls" + import layer_policy.* from "../../../formal/kernel/layer-policy" + import serving as Serving from "../../../formal/kernel/serving" + import clock as Clock from "../../../formal/kernel/clock" + import instances as Instances from "../../../formal/kernel/instances" + import policy_gate as Gate from "../../../formal/kernel/policy-gate" + + pure val TICKS_PER_MS = 1000 + pure val TTL_MS = 1000 + pure val LAYOUT: Serving::Layout = + { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 1, probeSourceScope: false, policyProvider: false } + pure val LOCAL: Resolution = { layers: { request: false, local: true, remote: false }, coalesce: true } + pure val TTLS: Ttls = { localMs: TTL_MS, freshMs: 0, retentionMs: 0 } + pure def callOn(instance: int): Call = { instance: instance, key: 0, context: 0, enabled: true, keyFailed: false } + + type State = { + o: Observation, now: int, ticks: int, capacity: int, constructed: List[bool], + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + sources: List[Serving::LocalSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held] + } + var s: State + var input: { name: str, choice: int } + + action init = all { + s' = { + o: empty, now: 0, ticks: 0, capacity: 1, constructed: List(false, false), + closed: List(), memo: List(), requestFlights: List(), processFlights: List(NO_OWNER, NO_OWNER), + localValues: List(NO_VALUE, NO_VALUE), localExpires: List(0, 0), lru: List(List(), List()), + sources: List(), owners: List(), memoSlots: List(), held: List() + }, + input' = { name: "init", choice: -1 } + } + action construct(instance: int): bool = all { + s' = Instances::construct(s, instance), input' = { name: "constructInstance", choice: instance } + } + action elapse(ticks: int): bool = all { + s' = Clock::advanceTicks(s, ticks, TICKS_PER_MS), input' = { name: "advanceTicks", choice: ticks } + } + action call(instance: int, offered: int): bool = all { + s' = Serving::callLocal(s, LAYOUT, callOn(instance), LOCAL, TTLS, offered), + input' = { name: "call", choice: instance * 2 + offered - 1 } + } + + // The clock moves only across a millisecond boundary; the raw ticks keep the fraction. + run advanceMovesTheClockOnTheGridTest = init + .then(elapse(700)).expect(s.now == 0 and s.ticks == 700) + .then(elapse(299)).expect(s.now == 0 and s.ticks == 999) + .then(elapse(1)).expect(s.now == 1 and s.ticks == 1000) + .then(elapse(1500)).expect(s.now == 2 and s.ticks == 2500) + + // A fill at 0.7 ms is stamped from grid instant 0 and expires at 1000 ms: + // live at 999.9 ms, gone at 1000.0 ms; the miss runs and settles its source + // in the one call, with no policy call counted for a default instance. + run fractionalFillExpiresAtTheWholeMillisecondTest = init + .then(construct(0)).then(elapse(700)).then(call(0, VALUE_ONE)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.loaders == 1 and s.o.policyCalls == 0 + and s.localValues == List(VALUE_ONE, NO_VALUE) and s.localExpires == List(TTL_MS, 0) + and s.sources.nth(0).result == VALUE_ONE and s.owners == List(0) and s.held == List()) + .then(elapse(999200)).then(call(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loaders == 1 and s.owners == List(0, NO_OWNER) + and s.localExpires == List(TTL_MS, 0)) + .then(elapse(100)).then(call(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_TWO) and s.o.loaders == 2 + and s.localValues == List(VALUE_TWO, NO_VALUE) and s.localExpires == List(2 * TTL_MS, 0)) + + // Construction at a fractional instant is bookkeeping: both instances share + // the grid, so fills at 0.4 ms and 0.7 ms both expire at 1000 ms. + run constructionPhaseDoesNotMoveTheGridTest = init + .then(construct(0)).then(elapse(400)).then(construct(1)).then(elapse(300)) + .then(call(0, VALUE_ONE)).then(call(1, VALUE_ONE)) + .expect(s.constructed == List(true, true) and s.localExpires == List(TTL_MS, TTL_MS)) + .then(elapse(999200)).then(call(0, VALUE_TWO)).then(call(1, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_ONE, VALUE_ONE) and s.o.loaders == 2) + .then(elapse(100)).then(call(0, VALUE_TWO)).then(call(1, VALUE_TWO)) + .expect(s.o.loaders == 4 and s.localExpires == List(2 * TTL_MS, 2 * TTL_MS)) +} diff --git a/test/fixtures/kernel/frame-clocks.qnt b/test/fixtures/kernel/frame-clocks.qnt index 5c6d1ae1..6e5b8d8b 100644 --- a/test/fixtures/kernel/frame-clocks.qnt +++ b/test/fixtures/kernel/frame-clocks.qnt @@ -4,7 +4,10 @@ // scheduled profiles hold fixed (their wall skew is 0 and their replies carry // constant TTLs): the retention and freshness boundaries, per-reply freshness, // writes and fences with the two clocks apart, unfenced refills at a wall -// clock of zero, and a watermark stamped with the wall clock that never lowers. +// clock of zero, a watermark stamped with the wall clock that no invalidation +// lowers (only a marker's expiry does, `markers`), and the fence of an atomic +// miss (C58): none after a visible frame the read declined, the watermark +// after a frame it fenced. module frame_clocks { import conformance_observations.* from "../../../formal/conformance-observations" import encodings.* from "../../../formal/kernel/encodings" @@ -26,7 +29,7 @@ module frame_clocks { pure val ROLLBACK_MS = 1000 pure val KEY = 0 pure val LAYOUT: Serving::Layout = - { keysPerInstance: 2, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 2, probeSourceScope: false } + { keysPerInstance: 2, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 2, probeSourceScope: false, policyProvider: true } // The fixture's TTLs: a 1 s freshness, a 1 s retention and a 1 s local TTL. pure val TTLS: Ttls = { localMs: LOCAL_MS, freshMs: FRESH_MS, retentionMs: RETENTION_MS } pure val REMOTE_ONLY: Resolution = { layers: { request: false, local: false, remote: true }, coalesce: true } @@ -79,7 +82,7 @@ module frame_clocks { input' = { name: "shiftWall", choice: ms } } action invalidate = all { - s' = Serving::invalidate(s, 0), + s' = Serving::invalidate(s, 0, 0), input' = { name: "invalidate", choice: 0 } } @@ -249,7 +252,34 @@ module frame_clocks { .then(begin(TTLS)) .expect(s.o.calls == List(VALUE_ONE) and s.o.reads == 1 and s.o.loads == 1 and s.o.loaders == 0) - // A watermark never lowers: an invalidation after a wall rollback keeps the + // C58 on the atomic path: a visible frame the read declined as stale + // (stamped after the watermark, past the reply's freshness) carries no + // fence, so the refill is written at the very wall instant the read observed. + run visibleStaleMissCarriesNoFenceTest = trackedInit + .then(invalidate) + .then(elapse(1)) + .then(seed(VALUE_ONE, LONG_RETENTION_MS)) + .then(elapse(FRESH_MS)) + .then(begin(TTLS)) + .expect(s.o.reads == 1 and s.o.loads == 0 and s.o.loaders == 1 and s.sources.nth(0).fence == NO_FENCE + and Remote::visible(s, KEY, LAYOUT.operationsPerEntity) and not(Remote::fresh(s, KEY, FRESH_MS))) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.dumps == 1 and s.o.writes == 1 and s.remoteValues == List(VALUE_TWO, NO_VALUE) + and s.created == List(INITIAL_TIME_MS + 1 + FRESH_MS, 0)) + + // A frame stamped at the watermark is not visible to a tracked reader: the + // miss carries the watermark as its fence, and the refill at that same wall + // instant is refused while the fenced frame stays stored. + run frameAtTheWatermarkKeepsTheMissFenceTest = trackedInit + .then(seed(VALUE_ONE, LONG_RETENTION_MS)) + .then(invalidate) + .then(begin(TTLS)) + .expect(s.watermark == List(INITIAL_TIME_MS) and not(Remote::visible(s, KEY, LAYOUT.operationsPerEntity)) + and s.o.loads == 0 and s.o.loaders == 1 and s.sources.nth(0).fence == INITIAL_TIME_MS) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.dumps == 0 and s.o.writes == 0 and s.remoteValues == List(VALUE_ONE, NO_VALUE)) + + // An invalidation never lowers a watermark: one after a wall rollback keeps the // earlier watermark, its fenced refill is not stored, and once the wall // clock is past the frame's stamp again the frame is still fenced although // it is retained and fresh. diff --git a/test/fixtures/kernel/frames-and-faults.qnt b/test/fixtures/kernel/frames-and-faults.qnt index 1f406de4..74e9d405 100644 --- a/test/fixtures/kernel/frames-and-faults.qnt +++ b/test/fixtures/kernel/frames-and-faults.qnt @@ -4,8 +4,9 @@ // the local-and-remote runs pass through local storage on the way. Exercises // the seams the scheduled profiles hold fixed (their replies carry constant // TTLs and their faults are off): a layer turned off by a zero TTL, each fault -// along a refill with and without a local layer, and sources started under -// different replies publishing with the TTLs each captured. +// along a refill with and without a local layer, an invalidation under a write +// fault, and sources started under different replies publishing with the TTLs +// each captured. module frames_and_faults { import conformance_observations.* from "../../../formal/conformance-observations" import encodings.* from "../../../formal/kernel/encodings" @@ -14,6 +15,7 @@ module frames_and_faults { import serving as Serving from "../../../formal/kernel/serving" import remote_frames as Remote from "../../../formal/kernel/remote-frames" import clock as Clock from "../../../formal/kernel/clock" + import flights as Flights from "../../../formal/kernel/flights" import policy_gate as Gate from "../../../formal/kernel/policy-gate" pure val INITIAL_TIME_MS = 10000 @@ -25,7 +27,7 @@ module frames_and_faults { pure val KEY = 0 pure val OTHER_KEY = 1 pure val LAYOUT: Serving::Layout = - { keysPerInstance: 2, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 2, probeSourceScope: false } + { keysPerInstance: 2, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 2, probeSourceScope: false, policyProvider: true } // The fixture's TTLs: a 1 s freshness, a 1 s retention and a 1 s local TTL. pure val TTLS: Ttls = { localMs: LOCAL_MS, freshMs: FRESH_MS, retentionMs: RETENTION_MS } pure val NO_REMOTE_TTLS: Ttls = { localMs: LOCAL_MS, freshMs: 0, retentionMs: RETENTION_MS } @@ -70,6 +72,11 @@ module frames_and_faults { s' = Serving::settle(s, LAYOUT, index, value), input' = { name: "resolveLoader", choice: index } } + // A source no caller owns, started beside the traversal. + action startDetached(key: int): bool = all { + s' = Serving::startDetachedSource(s, LAYOUT, call(key)), + input' = { name: "detached", choice: key } + } action seed(key: int, value: int, retentionMs: int): bool = all { s' = Remote::seedFrame(s, key, value, retentionMs), input' = { name: "seed", choice: key * 2 + value } @@ -84,6 +91,10 @@ module frames_and_faults { else { writeFailed: failed, ...s }, input' = { name: name, choice: if (failed) 1 else 0 } } + action invalidate = all { + s' = Serving::invalidate(s, 0, 0), + input' = { name: "invalidate", choice: 0 } + } // -- A zero TTL turns its layer off ------------------------------------------ @@ -191,6 +202,23 @@ module frames_and_faults { .expect(s.o.calls == List(VALUE_ONE) and s.o.dumps == 1 and s.o.writes == 1 and s.o.writeTtls == List(RETENTION_MS) and s.remoteValues == List(NO_VALUE, NO_VALUE) and s.created == List(0, 0) and s.expires == List(0, 0)) + // An invalidation under a write fault is counted and reports the mutation + // error, and the watermark does not move although the wall clock is ahead of + // it; once the fault clears, the next invalidation reports ok and raises the + // watermark to the wall clock. + run writeFaultInvalidationIsCountedAndKeepsTheWatermarkTest = trackedInit + .then(invalidate) + .then(elapse(1000)) + .then(fault("writeFault", true)) + .expect(not(Serving::maintains(s)) and Clock::wallOf(s) > s.watermark.nth(0)) + .then(invalidate) + .expect(s.o.invalidations == 2 and s.o.maintenance == List("ok", "mutation_error") and s.watermark == List(INITIAL_TIME_MS)) + .then(fault("writeFault", false)) + .expect(Serving::maintains(s)) + .then(invalidate) + .expect(s.o.invalidations == 3 and s.o.maintenance == List("ok", "mutation_error", "ok") + and s.watermark == List(INITIAL_TIME_MS + 1000)) + // -- Each source publishes with the TTLs of the reply that started it ---------- // Two sources started under replies with different retentions each write @@ -246,4 +274,12 @@ module frames_and_faults { .then(begin(KEY, LOCAL_AND_REMOTE, TTLS)) .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_ONE) and s.o.reads == 2 and s.o.loads == 2 and s.o.loaders == 0 and s.localExpires == List(INITIAL_TIME_MS + SHORT_LOCAL_MS + LOCAL_MS, 0)) + // A detached source counts against the profile, owns nobody and carries no + // authority: its settlement completes no caller, warms nothing, refills nothing. + run detachedSourceOwnsNobodyTest = trackedInit.then(startDetached(KEY)) + .expect(s.o.loaders == 1 and s.o.calls == List() and Flights::ownedBy(s, 0) == Set() + and s.sources.nth(0).localMs == 0 and s.sources.nth(0).retentionMs == 0 and s.sources.nth(0).fence == NO_FENCE) + .then(settle(0, VALUE_ONE)) + .expect(s.o.calls == List() and s.o.dumps == 0 and s.o.writes == 0 and s.sources.nth(0).result == VALUE_ONE + and s.localValues == List(NO_VALUE, NO_VALUE) and s.remoteValues == List(NO_VALUE, NO_VALUE)) } diff --git a/test/fixtures/kernel/held-dark-shadow.qnt b/test/fixtures/kernel/held-dark-shadow.qnt new file mode 100644 index 00000000..e505e3cf --- /dev/null +++ b/test/fixtures/kernel/held-dark-shadow.qnt @@ -0,0 +1,117 @@ +// Dark jobs (shadow) over the diagnosed budgeted held remote lifecycle +// (deadlines, remote_io, diagnostics): one instance, two keys, no request +// scope, one job slot, replies immediate, a 100 ms job budget and a 100 ms +// source budget. Pins the seams the shadow profile (one caller at a time) +// cannot reach: a second dark job dropped for a live identity or a full +// instance while the first still holds its C0 read (the read a remote_io +// record over the job's source, budgeted on the io channel and never +// deadline-registered); a caller's source deadline delivered while the job's +// C0 read is held (the job times out in the same round and its late read +// drains); a job whose budget outlives nothing; a job budget above the source +// budget, where the caller's deadline alone ends a waiting job `timeout` at +// its delivery and a reading job at its read's settlement. +module held_dark_shadow { + import conformance_observations.* from "../../../formal/conformance-observations" + import encodings.* from "../../../formal/kernel/encodings" + import calls.* from "../../../formal/kernel/calls" + import layer_policy.* from "../../../formal/kernel/layer-policy" + import serving as Serving from "../../../formal/kernel/serving" + import remote_io as RemoteIO from "../../../formal/kernel/remote-io" + import remote_frames as Remote from "../../../formal/kernel/remote-frames" + import remote_writes as Writes from "../../../formal/kernel/remote-writes" + import shadow as Shadow from "../../../formal/kernel/shadow" + import deadlines as Deadlines from "../../../formal/kernel/deadlines" + import diagnostics as Diagnostics from "../../../formal/kernel/diagnostics" + import recovery as Recovery from "../../../formal/kernel/recovery" + import policy_gate as Gate from "../../../formal/kernel/policy-gate" + + pure val LAYOUT: Serving::Layout = { keysPerInstance: 2, keysPerScope: 2, persistentContexts: 0, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } + pure val DARK: Resolution = { layers: { request: false, local: false, remote: false }, coalesce: false } + pure val TTLS: Ttls = { localMs: 0, freshMs: 1000, retentionMs: 5000 } + pure val SHADOWING: Shadow::Shadowing = { hook: true, selected: true, capacity: 1, budgetMs: 100, logging: false } + // The same policy with a job budget above the source budget and two slots. + pure val LONG_SHADOWING: Shadow::Shadowing = { capacity: 2, budgetMs: 200, ...SHADOWING } + pure def call(key: int): Call = { instance: 0, key: key, context: 0, enabled: true, keyFailed: false } + + type State = { + o: Observation, d: { configErrors: int, warnings: int, ages: List[int], coalesced: List[str], fallbackErrors: List[str], futureOffsets: List[Diagnostics::FutureOffset] }, + io: RemoteIO::IO, now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], loaders: List[int], retained: List[Recovery::Snapshot], + sourceBudget: int, deadlines: List[Deadlines::Due], drained: List[bool], sourceLayers: List[str], + dumps: List[Writes::HeldDump], writes: List[Writes::HeldWrite], jobs: List[Shadow::Job] + } + var s: State + var input: { name: str, choice: int } + + action init = all { + input' = { name: "init", choice: -1 }, + s' = { + o: empty, d: { configErrors: 0, warnings: 0, ages: List(), coalesced: List(), fallbackErrors: List(), futureOffsets: List() }, + io: RemoteIO::NO_IO, now: 0, skew: 100000, remoteAvailable: true, tracked: true, capacity: 0, + readFailed: false, dumpFailed: false, writeFailed: false, + closed: List(), memo: List(), requestFlights: List(), processFlights: List(NO_OWNER, NO_OWNER), + localValues: List(NO_VALUE, NO_VALUE), localExpires: List(0, 0), lru: List(List()), + remoteValues: List(NO_VALUE, NO_VALUE), created: List(0, 0), expires: List(0, 0), watermark: List(0, 0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + reads: List(), loads: List(), loaders: List(), retained: List(), + sourceBudget: 100, deadlines: List(), drained: List(), sourceLayers: List(), + dumps: List(), writes: List(), jobs: List() + } + } + action begin(key: int): bool = all { + input' = { name: "beginCall", choice: key }, + s' = Shadow::beginDark(s, LAYOUT, call(key), DARK, TTLS, Deadlines::UNBOUNDED, SHADOWING, Shadow::WELL_FORMED, 0) + } + action beginLong(key: int): bool = all { + input' = { name: "beginCall", choice: key }, + s' = Shadow::beginDark(s, LAYOUT, call(key), DARK, TTLS, Deadlines::UNBOUNDED, LONG_SHADOWING, Shadow::WELL_FORMED, 0) + } + action resolve(ordinal: int, value: int): bool = all { + input' = { name: "resolveLoader", choice: ordinal }, s' = Shadow::settleHeld(s, LAYOUT, ordinal, value, false) + } + action releaseRead(read: int): bool = all { input' = { name: "releaseRead", choice: read }, s' = Shadow::releaseRead(s, LAYOUT, read, false) } + action advanceBy(ms: int): bool = all { input' = { name: "advance", choice: ms }, s' = Shadow::advanceHeld(s, LAYOUT, ms) } + action step = any { begin(0), resolve(0, VALUE_ONE), releaseRead(0), advanceBy(1) } + + // A second dark job for the same identity is dropped while the first still + // holds its C0 read; another key on the full instance is dropped too, and a + // job for it is admitted once the first job's slot is released. + run heldDarkJobIsDroppedForALiveIdentityTest = init.then(begin(0)) + .expect(s.o.reads == 1 and s.jobs.length() == 1 and s.jobs.nth(0).phase == Shadow::READING_C0 and Shadow::holdsRead(s, 0) + and s.reads.nth(0).flight == 0 and s.io.budgets == List(Deadlines::UNBOUNDED) and s.deadlines.length() == 2) + .then(begin(0)) + .expect(s.o.calls == List(CALL_PENDING, CALL_PENDING) and s.o.loaders == 2 and s.o.reads == 1 and s.o.shadow == List("dropped")) + run heldDarkJobIsDroppedWhenTheInstanceIsFullTest = init.then(begin(0)).then(begin(1)) + .expect(s.o.reads == 1 and s.o.shadow == List("dropped") and s.jobs.length() == 1) + .then(releaseRead(0)).then(resolve(0, VALUE_ONE)) + .expect(s.o.calls == List(VALUE_ONE, CALL_PENDING) and s.o.dumps == 1 and s.jobs.nth(0).phase == Shadow::SERIALIZING) + .then(advanceBy(100)).expect(s.o.shadow == List("dropped", "timeout") and s.o.calls == List(VALUE_ONE, DEADLINE_ERROR)) + // The caller's source deadline and the job's budget are delivered in one + // round: the caller completes with a deadline error attributed to the local + // layer, the job says `timeout` once, and its late C0 read drains silently. + run sourceDeadlineAndJobBudgetExpireTogetherTest = init.then(begin(0)).then(advanceBy(100)) + .expect(s.o.calls == List(DEADLINE_ERROR) and s.o.shadow == List("timeout") and s.d.fallbackErrors == List("local") + and s.jobs.length() == 1 and s.jobs.nth(0).timedOut and s.deadlines == List()) + .then(releaseRead(0)) + .expect(s.jobs == List() and s.o.shadow == List("timeout") and s.o.loads == 0 and s.o.dumps == 0) + .then(resolve(0, VALUE_ONE)) + .expect(s.o.calls == List(DEADLINE_ERROR) and s.o.shadow == List("timeout") and s.o.dumps == 0) + // A job budget above the source budget: the caller's deadline alone ends + // the job `timeout`, at its delivery for a job waiting on the source (key + // 0, its slot released at once) and at the read's settlement for one still + // holding its C0 read (key 1); the job budgets due later find nothing. + run sourceDeadlineAloneEndsTheJobTest = init.then(beginLong(0)).then(releaseRead(0)).then(beginLong(1)) + .expect(s.jobs.length() == 2 and s.jobs.nth(0).phase == Shadow::WAITING_SOURCE and s.jobs.nth(1).phase == Shadow::READING_C0 + and s.deadlines.length() == 4) + .then(advanceBy(100)) + .expect(s.o.calls == List(DEADLINE_ERROR, DEADLINE_ERROR) and s.o.shadow == List("timeout") and s.d.fallbackErrors == List("local", "local") + and s.jobs.length() == 1 and s.jobs.nth(0).source == 1 and not(s.jobs.nth(0).timedOut) and s.deadlines.length() == 1) + .then(releaseRead(1)) + .expect(s.o.shadow == List("timeout", "timeout") and s.jobs == List() and s.deadlines == List() and s.o.loads == 0 and s.o.dumps == 0) + .then(advanceBy(100)).expect(s.o.shadow == List("timeout", "timeout")) +} diff --git a/test/fixtures/kernel/held-diagnostics.qnt b/test/fixtures/kernel/held-diagnostics.qnt new file mode 100644 index 00000000..2e29bb9d --- /dev/null +++ b/test/fixtures/kernel/held-diagnostics.qnt @@ -0,0 +1,170 @@ +// The budgeted held remote lifecycle with a read settled in the step that +// admits the caller (deadlines::beginRead) and the +// diagnosed variants of that lifecycle (diagnostics): one key, one instance, +// two persistent contexts, immediate replies, decodes and loaders held. +// Pins the seams the recovery profile reaches only through its own fixtures +// and the ones it never reaches: a memo hit dispatches no read and records +// nothing; a fresh frame holds a decode and starts no loader; a stale frame +// retains its snapshot and starts the loader under the source budget; a +// follower joining the flight records the singleflight it coalesced into +// (the process registry, then the request registry of a scope that joined +// before); a failed loader is attributed to the remote layer once, a late +// result that drains records nothing, a deadline delivered inside an advance +// records the same; a served recovery decode samples the candidate's age at +// the settlement's wall clock; a source a release starts without the remote +// layer is attributed to the request memo or the shared layers' fallback, a +// bypass source started at admission to no layer; every ordinal maps to its flight. +module held_diagnostics { + import conformance_observations.* from "../../../formal/conformance-observations" + import encodings.* from "../../../formal/kernel/encodings" + import calls.* from "../../../formal/kernel/calls" + import layer_policy.* from "../../../formal/kernel/layer-policy" + import serving as Serving from "../../../formal/kernel/serving" + import remote_io as RemoteIO from "../../../formal/kernel/remote-io" + import recovery as Recovery from "../../../formal/kernel/recovery" + import deadlines as Deadlines from "../../../formal/kernel/deadlines" + import diagnostics as Diagnostics from "../../../formal/kernel/diagnostics" + import remote_frames as Remote from "../../../formal/kernel/remote-frames" + import clock as Clock from "../../../formal/kernel/clock" + import policy_gate as Gate from "../../../formal/kernel/policy-gate" + + pure val LAYOUT: Serving::Layout = { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } + pure val SHARED: Resolution = { layers: { request: true, local: false, remote: true }, coalesce: true } + pure val PROCESS_ONLY: Resolution = { layers: { request: false, local: false, remote: true }, coalesce: true } + pure val LOCAL_ALONE: Resolution = { layers: { request: true, local: true, remote: false }, coalesce: true } + pure val TTLS: Ttls = { localMs: 0, freshMs: 1000, retentionMs: 5000 } + pure val LOCAL_TTLS: Ttls = { localMs: 1000, freshMs: 1000, retentionMs: 5000 } + pure val SOURCE_BUDGET = 10 + pure def call(context: int): Call = { instance: 0, key: 0, context: context, enabled: true, keyFailed: false } + pure def bypass: Call = { instance: 0, key: 0, context: 0, enabled: false, keyFailed: false } + + type State = { + o: Observation, d: Diagnostics, io: RemoteIO::IO, now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], loaders: List[int], retained: List[Recovery::Snapshot], + sourceBudget: int, deadlines: List[Deadlines::Due], drained: List[bool], sourceLayers: List[str] + } + var s: State + var input: { name: str, choice: int } + + // A stale frame (age 1000 at freshness 1000) above the zero watermark. + action init = all { + s' = { + o: empty, d: noDiagnostics, io: RemoteIO::NO_IO, now: 0, skew: 100000, remoteAvailable: true, tracked: true, capacity: 1, + readFailed: false, dumpFailed: false, writeFailed: false, + closed: List(false, false), memo: List(NO_VALUE, NO_VALUE), requestFlights: List(NO_OWNER, NO_OWNER), processFlights: List(NO_OWNER), + localValues: List(NO_VALUE), localExpires: List(0), lru: List(List()), + remoteValues: List(VALUE_ONE), created: List(99000), expires: List(60000), watermark: List(0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + reads: List(), loads: List(), loaders: List(), retained: List(), + sourceBudget: SOURCE_BUDGET, deadlines: List(), drained: List(), sourceLayers: List() + }, + input' = { name: "init", choice: -1 } + } + // Every flight has a layer and every ordinal a flight, after every step. + val consistent = s.sourceLayers.length() == s.sources.length() and s.loaders.length() == s.o.loaders and s.reads.length() == 0 + + action beginWith(context: int, resolved: Resolution, ttls: Ttls, classifier: int): bool = all { + s' = Diagnostics::beginRead(s, LAYOUT, call(context), resolved, ttls, Deadlines::UNBOUNDED, classifier), + input' = { name: "beginCall", choice: context } + }.expect(consistent) + action begin(context: int): bool = beginWith(context, SHARED, TTLS, Recovery::ALLOW) + action beginBypass = all { + s' = Diagnostics::beginRead(s, LAYOUT, bypass, SHARED, TTLS, Deadlines::UNBOUNDED, Recovery::ALLOW), + input' = { name: "beginCall", choice: -1 } + }.expect(consistent) + // The plain budgeted form, without the channel: the same lifecycle. + action beginPlain(context: int): bool = all { + s' = Deadlines::beginRead(s, LAYOUT, call(context), SHARED, TTLS, Deadlines::UNBOUNDED, Recovery::ALLOW), + input' = { name: "beginCall", choice: context } + } + action load(failed: bool): bool = all { + s' = Diagnostics::settleLoad(s, LAYOUT, RemoteIO::latestLoad(s).load, failed), + input' = { name: "releaseLoad", choice: -1 } + }.expect(consistent) + action settle(ordinal: int, value: int): bool = all { + s' = Diagnostics::settleLoader(s, LAYOUT, ordinal, value, false), + input' = { name: "resolveLoader", choice: ordinal } + }.expect(consistent) + action advance(ms: int): bool = all { s' = Diagnostics::advance(s, LAYOUT, ms), input' = { name: "advance", choice: ms } }.expect(consistent) + action seedFresh = all { s' = Remote::seedAged(s, 0, VALUE_ONE, 0, 60000), input' = { name: "seed", choice: 0 } } + action closeScope(context: int): bool = all { s' = Serving::closeScope(s, LAYOUT, context), input' = { name: "closeScope", choice: context } } + action rollback(ms: int): bool = all { s' = Clock::shiftWall(s, -ms), input' = { name: "rollbackWall", choice: ms } } + + // The read is counted, settled and gone in one step: a stale frame retains + // its snapshot and starts the loader with its deadline at now + budget. + run staleReadRetainsAndStartsTheLoaderAtOnceTest = init.then(begin(0)) + .expect(s.o.reads == 1 and s.reads == List() and s.o.loaders == 1 and s.o.loads == 0 + and s.retained.length() == 1 and s.retained.nth(0).candidate == VALUE_ONE and s.retained.nth(0).created == 99000 + and Deadlines::deadlineOf(s, Deadlines::SOURCE, 0) == SOURCE_BUDGET and s.sourceLayers == List("remote") and s.d.coalesced == List()) + // A fresh frame holds its decode and starts no loader; the decode completes + // the caller without a recovery label or an age. + run freshReadHoldsADecodeTest = init.then(seedFresh).then(begin(0)) + .expect(s.o.reads == 1 and s.o.loads == 1 and s.o.loaders == 0 and s.retained == List()) + .then(load(false)).expect(s.o.calls == List(VALUE_ONE) and s.o.recovery == List() and s.d.ages == List()) + // A memo hit dispatches no read and records nothing. + run memoHitDispatchesNoReadTest = init.then(seedFresh).then(begin(0)).then(load(false)).then(begin(0)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.reads == 1 and s.d.coalesced == List() and s.sourceLayers == List("remote")) + // A follower from another scope joins the process flight and records it; a + // follower from a scope that already joined records the request flight. + run followersRecordTheSingleflightTheyJoinedTest = init.then(begin(0)).then(begin(1)).then(begin(0)).then(begin(1)) + .expect(s.o.reads == 1 and s.o.calls == List(CALL_PENDING, CALL_PENDING, CALL_PENDING, CALL_PENDING) + and s.d.coalesced == List("process", "request_local", "request_local")) + // Without the request layer every follower records the process flight. + run processOnlyFollowersRecordTheProcessFlightTest = init.then(beginWith(0, PROCESS_ONLY, TTLS, Recovery::ALLOW)) + .then(beginWith(0, PROCESS_ONLY, TTLS, Recovery::ALLOW)).then(beginWith(1, PROCESS_ONLY, TTLS, Recovery::ALLOW)) + .expect(s.d.coalesced == List("process", "process") and s.memoSlots == List(NO_OWNER, NO_OWNER, NO_OWNER)) + // A failed loader is attributed to the remote layer once; the recovery + // decode it holds serves and samples the candidate's age at that wall clock. + run failedLoaderIsAttributedOnceAndTheRecoveryAgeIsSampledTest = init.then(begin(0)).then(settle(0, SOURCE_ERROR)) + .expect(s.d.fallbackErrors == List("remote") and s.o.loads == 1 and s.o.calls == List(CALL_PENDING)) + .then(rollback(500)).then(load(false)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.recovery == List("served") and s.d.ages == List(500) and s.d.fallbackErrors == List("remote")) + // A missed recovery decode samples no age; a failed one neither. + run missedRecoverySamplesNoAgeTest = init.then(begin(0)).then(settle(0, SOURCE_ERROR)).then(advance(4000)).then(load(false)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.o.recovery == List("miss") and s.d.ages == List()) + run failedRecoveryDecodeSamplesNoAgeTest = init.then(begin(0)).then(settle(0, SOURCE_ERROR)).then(load(true)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.o.recovery == List("deserialization_error") and s.d.ages == List()) + // A deadline delivered inside an advance attributes the failure like a + // rejection; the late result then drains and records nothing more. + run deliveredDeadlineIsAttributedOnceTest = init.then(begin(0)).then(advance(10)) + .expect(s.o.loads == 1 and s.d.fallbackErrors == List("remote")) + .then(settle(0, VALUE_TWO)) + .expect(s.d.fallbackErrors == List("remote") and s.o.writes == 0 and Deadlines::pending(s, 0) == false) + .then(load(false)).expect(s.o.calls == List(VALUE_ONE) and s.d.ages == List(1010)) + // An accepted settlement records no fallback error. + run acceptedSettlementRecordsNoErrorTest = init.then(begin(0)).then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 1 and s.d.fallbackErrors == List()) + // A source a release starts without the remote layer is attributed to the + // request memo when the call memoizes; its failure names that layer. + run sourceWithoutRemoteLayerIsAttributedToTheRequestMemoTest = init.then(beginWith(0, LOCAL_ALONE, LOCAL_TTLS, Recovery::ALLOW)) + .expect(s.o.reads == 0 and s.o.loaders == 1 and s.sourceLayers == List("request_local")) + .then(settle(0, SOURCE_ERROR)).expect(s.d.fallbackErrors == List("request_local") and s.o.classifications == 0) + // A bypass source started at admission has no layer and its failure records none. + run bypassSourceRecordsNoLayerTest = init.then(beginBypass) + .expect(s.o.loaders == 1 and s.sourceLayers == List("") and s.o.policyCalls == 0) + .then(settle(0, SOURCE_ERROR)).expect(s.o.calls == List(SOURCE_ERROR) and s.d.fallbackErrors == List()) + // A failed fresh decode restarts the loader; its later failure is + // attributed to the remote layer and, without a snapshot, unclassified. + run failedFreshDecodeRestartsAnAttributedLoaderTest = init.then(seedFresh).then(begin(0)).then(load(true)) + .expect(s.o.loaders == 1 and s.o.loads == 1 and s.sourceLayers == List("remote")) + .then(settle(0, SOURCE_ERROR)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.d.fallbackErrors == List("remote") and s.o.classifications == 0 and s.o.recovery == List()) + // A read that fails observes nothing: no snapshot, the loader is + // attributed to the remote layer all the same, its failure unclassified. + run failedReadIsStillAttributedToTheRemoteLayerTest = init.then(all { s' = { readFailed: true, ...s }, input' = { name: "readFault", choice: 1 } }) + .then(begin(0)).expect(s.o.reads == 1 and s.retained == List() and s.sourceLayers == List("remote")) + .then(settle(0, SOURCE_ERROR)).expect(s.o.calls == List(SOURCE_ERROR) and s.d.fallbackErrors == List("remote") and s.o.classifications == 0) + // The plain budgeted form behaves as the diagnosed one, without the channel. + run plainBeginReadMatchesTheDiagnosedLifecycleTest = init.then(beginPlain(0)) + .expect(s.o.reads == 1 and s.reads == List() and s.o.loaders == 1 and s.retained.length() == 1 + and Deadlines::deadlineOf(s, Deadlines::SOURCE, 0) == SOURCE_BUDGET and s.d == noDiagnostics and s.sourceLayers == List()) + // A closed scope's follower joins nothing: the bypass source it starts at + // admission is attributed to no layer. + run closedScopeCallerStartsAnUnattributedSourceTest = init.then(closeScope(0)).then(begin(0)) + .expect(s.o.reads == 0 and s.o.loaders == 1 and s.sourceLayers == List("")) +} diff --git a/test/fixtures/kernel/held-remote.qnt b/test/fixtures/kernel/held-remote.qnt new file mode 100644 index 00000000..87248dc2 --- /dev/null +++ b/test/fixtures/kernel/held-remote.qnt @@ -0,0 +1,410 @@ +// The held remote traversal (remote_io) with its recovery snapshots and +// budgeted variants (deadlines): one key, one instance, two persistent +// contexts, replies immediate unless a run holds one, reads and decodes held +// and released by index, loaders settled by ordinal. Pins the seams the +// scheduled profiles reach only through their own fixtures: the read counted +// at dispatch and the frame judged at settlement; a follower joining a +// pending read, or a flight holding its recovery decode, and completing with +// its leader; a shared miss running one loader; the drivers' loader ordinal +// mapped to its flight, for a loader started at a read's settlement, for a +// source a release starts without the remote layer and for the bypass source +// of a scope closed between admission and release; a failed read denying only +// its own refill; a visible stale frame carrying no fence while an absent one +// carries the watermark; a failed fresh decode restarting a loader without +// recovery, unfenced under a watermark raised since the read so its refill +// writes; a read expiry inside an advance starting a loader whose own +// deadline the same advance delivers, the late replies draining afterwards, +// also under a zero source budget; an undelivered read deadline cancelling on +// arrival; a late result settling as a deadline error and recovering; a +// delivered loader deadline holding a recovery decode; a failed recovery +// decode completing with the loader's own error; an overdue deadline +// delivered at the next visited instant; the timeout-only, DENY and NONE +// classifiers, a deadline error counting as a timeout for the timeout-only +// one whether delivered (`deliveredDeadlineIsATimeoutForTimeoutOnlyTest`) or +// arriving late (`lateResultIsATimeoutForTimeoutOnlyTest`); a recovery decode +// released at exactly the captured maximum; a held decode and an untracked +// loader warming local storage for the reply's local TTL while a tracked +// loader waits for a validated read, and warming nothing under a reply that +// leaves the local layer off (`replyWithoutLocalLayerWarmsNothingTest`); a +// bypass admission source taking an ordinal. Every step keeps the drivers' +// loader ordinals aligned with the flights they run for +// (`ordinalsMatchLoaders`). +module held_remote { + import conformance_observations.* from "../../../formal/conformance-observations" + import encodings.* from "../../../formal/kernel/encodings" + import calls.* from "../../../formal/kernel/calls" + import layer_policy.* from "../../../formal/kernel/layer-policy" + import serving as Serving from "../../../formal/kernel/serving" + import remote_io as RemoteIO from "../../../formal/kernel/remote-io" + import recovery as Recovery from "../../../formal/kernel/recovery" + import deadlines as Deadlines from "../../../formal/kernel/deadlines" + import remote_frames as Remote from "../../../formal/kernel/remote-frames" + import clock as Clock from "../../../formal/kernel/clock" + import policy_gate as Gate from "../../../formal/kernel/policy-gate" + + pure val LAYOUT: Serving::Layout = { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } + pure val SHARED: Resolution = { layers: { request: true, local: false, remote: true }, coalesce: true } + pure val ALONE: Resolution = { layers: { request: false, local: false, remote: true }, coalesce: false } + // Replies with the local layer on: over every layer, and without the remote layer. + pure val WITH_LOCAL: Resolution = { layers: { request: true, local: true, remote: true }, coalesce: true } + pure val LOCAL_ALONE: Resolution = { layers: { request: false, local: true, remote: false }, coalesce: false } + pure val TTLS: Ttls = { localMs: 0, freshMs: 1000, retentionMs: 5000 } + pure val LOCAL_TTLS: Ttls = { localMs: 1000, freshMs: 1000, retentionMs: 5000 } + pure val READ_BUDGET = 5 + pure val SOURCE_BUDGET = 10 + pure def call(context: int): Call = { instance: 0, key: 0, context: context, enabled: true, keyFailed: false } + // A caller that makes no policy call: a disabled context, or a key that failed to construct. + pure def bypass(keyFailed: bool): Call = { instance: 0, key: 0, context: 0, enabled: false, keyFailed: keyFailed } + + type State = { + o: Observation, io: RemoteIO::IO, now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], loaders: List[int], retained: List[Recovery::Snapshot], + sourceBudget: int, deadlines: List[Deadlines::Due], drained: List[bool] + } + var s: State + var input: { name: str, choice: int } + + // A stale frame (age 1000 at freshness 1000, stamped above the zero + // watermark) is present at init: visible, never fresh. The tracked + // reader has no local capacity; `localInit` and `untrackedLocalInit` give + // it one slot; `zeroBudgetInit` starts every loader with a zero budget. + pure def initial(tracked: bool, capacity: int, sourceBudget: int): State = { + o: empty, io: RemoteIO::NO_IO, now: 0, skew: 100000, remoteAvailable: true, tracked: tracked, capacity: capacity, + readFailed: false, dumpFailed: false, writeFailed: false, + closed: List(false, false), memo: List(NO_VALUE, NO_VALUE), requestFlights: List(NO_OWNER, NO_OWNER), processFlights: List(NO_OWNER), + localValues: List(NO_VALUE), localExpires: List(0), lru: List(List()), + remoteValues: List(VALUE_ONE), created: List(99000), expires: List(60000), watermark: List(0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + reads: List(), loads: List(), loaders: List(), retained: List(), + sourceBudget: sourceBudget, deadlines: List(), drained: List() + } + action initialize(tracked: bool, capacity: int, sourceBudget: int): bool = all { + s' = initial(tracked, capacity, sourceBudget), input' = { name: "init", choice: -1 } + } + action init = initialize(true, 0, SOURCE_BUDGET) + action localInit = initialize(true, 1, SOURCE_BUDGET) + action untrackedLocalInit = initialize(false, 1, SOURCE_BUDGET) + action zeroBudgetInit = initialize(true, 0, 0) + + // The drivers' loader ordinals are the flights' loaders: one ordinal and one + // drained flag per counted loader, after every step. + val ordinalsMatchLoaders = s.loaders.length() == s.o.loaders and s.drained.length() == s.o.loaders + + action beginWith(context: int, resolved: Resolution, ttls: Ttls): bool = all { + s' = Deadlines::begin(s, LAYOUT, call(context), resolved, ttls, READ_BUDGET), + input' = { name: "beginCall", choice: context } + }.expect(ordinalsMatchLoaders) + action begin(context: int, resolved: Resolution): bool = beginWith(context, resolved, TTLS) + action beginBypass(keyFailed: bool): bool = all { + s' = Deadlines::begin(s, LAYOUT, bypass(keyFailed), ALONE, TTLS, READ_BUDGET), + input' = { name: "beginCall", choice: if (keyFailed) 1 else 0 } + }.expect(ordinalsMatchLoaders) + // A policy reply the drivers hold: admission alone, then the release by its + // policy call (the drivers' `release policy `). + action admitHeld(context: int): bool = all { + s' = Deadlines::admit(s, LAYOUT, call(context)), + input' = { name: "beginCall", choice: context } + }.expect(ordinalsMatchLoaders) + action releaseHeld(policyCall: int, resolved: Resolution): bool = all { + s' = Deadlines::release(s, LAYOUT, policyCall, resolved, TTLS, READ_BUDGET), + input' = { name: "releasePolicy", choice: policyCall } + }.expect(ordinalsMatchLoaders) + action closeScope(context: int): bool = all { + s' = Serving::closeScope(s, LAYOUT, context), + input' = { name: "closeScope", choice: context } + }.expect(ordinalsMatchLoaders) + action readWith(index: int, failed: bool, classifier: int): bool = all { + s' = Deadlines::settleRead(s, LAYOUT, index, failed, classifier), + input' = { name: if (failed) "failRead" else "releaseRead", choice: index } + }.expect(ordinalsMatchLoaders) + action read(index: int, failed: bool): bool = readWith(index, failed, Recovery::ALLOW) + action load(index: int, failed: bool): bool = all { + s' = Deadlines::settleLoad(s, LAYOUT, index, failed), + input' = { name: if (failed) "failLoad" else "releaseLoad", choice: index } + }.expect(ordinalsMatchLoaders) + action settle(ordinal: int, value: int): bool = all { + s' = Deadlines::settleLoader(s, LAYOUT, ordinal, value, false), + input' = { name: "resolveLoader", choice: ordinal } + }.expect(ordinalsMatchLoaders) + // A propagated timeout the profile names (the recovery drivers' rejectTimeout). + action timeout(ordinal: int): bool = all { + s' = Deadlines::settleLoader(s, LAYOUT, ordinal, SOURCE_ERROR, true), + input' = { name: "rejectTimeout", choice: ordinal } + }.expect(ordinalsMatchLoaders) + action advance(ms: int): bool = all { s' = Deadlines::advance(s, LAYOUT, ms), input' = { name: "advance", choice: ms } }.expect(ordinalsMatchLoaders) + // A clock move without timer delivery (effects' jumpClock). + action jump(ms: int): bool = all { s' = Clock::advance(s, ms), input' = { name: "jumpClock", choice: ms } } + action seed(value: int, age: int): bool = all { s' = Remote::seedAged(s, 0, value, age, 60000), input' = { name: "seed", choice: value } } + action invalidate = all { s' = Serving::invalidate(s, 0, 0), input' = { name: "invalidate", choice: -1 } } + + // The read is counted at dispatch with its budget and registers its flight + // without a loader; the frame is judged at settlement, so a fresh seed + // between the two turns the stale read into a held decode, whose value is + // the one it was held with whatever is stored when it settles. + run frameIsJudgedAtSettlementTest = init.then(begin(0, ALONE)) + .expect(s.o.reads == 1 and s.o.loads == 0 and s.io.budgets == List(READ_BUDGET) and s.sources.length() == 1 and s.o.loaders == 0 + and RemoteIO::holdsRead(s, 0) and Deadlines::bounded(s, Deadlines::READ, 0)) + .then(seed(VALUE_TWO, 0)).then(read(0, false)) + .expect(s.o.loads == 1 and s.o.loaders == 0 and RemoteIO::heldLoad(s, 0).value == VALUE_TWO and not(RemoteIO::holdsRead(s, 0)) and s.deadlines == List()) + .then(seed(VALUE_ONE, 0)).then(load(0, false)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 0 and not(RemoteIO::holdsLoad(s, 0))) + // A follower released while the leader's read is pending joins its flight + // (no read of its own) and completes with it at decode settlement; both + // memoize into their scopes and the flight leaves the registries. + run followerJoinsPendingReadTest = init.then(seed(VALUE_ONE, 0)).then(begin(0, SHARED)).then(begin(1, SHARED)) + .expect(s.o.reads == 1 and s.o.policyCalls == 2 and s.o.calls == List(CALL_PENDING, CALL_PENDING) and s.owners == List(0, 0) + and s.processFlights == List(0) and s.sources.length() == 1) + .then(read(0, false)).expect(s.o.loads == 1 and s.o.loaders == 0) + .then(load(0, false)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.memo == List(VALUE_ONE, VALUE_ONE) and s.processFlights == List(NO_OWNER) and s.o.loaders == 0) + // A shared miss starts one loader when its read settles, bounded from then; + // its settlement completes every joined caller and writes once. + run sharedMissStartsOneLoaderTest = init.then(begin(0, SHARED)).then(begin(1, SHARED)).then(read(0, false)) + .expect(s.o.loaders == 1 and s.loaders == List(0) and s.sources.length() == 1 and s.sources.nth(0).retentionMs == TTLS.retentionMs + and Deadlines::bounded(s, Deadlines::SOURCE, 0) and Deadlines::deadlineOf(s, Deadlines::SOURCE, 0) == SOURCE_BUDGET) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.writes == 1 and s.memo == List(VALUE_TWO, VALUE_TWO) and s.retained == List()) + // A hit flight runs no loader, so the next flight's loader is ordinal 0 and + // maps to flight 1: settling ordinal 0 completes flight 1. + run ordinalMapsToFlightTest = init.then(seed(VALUE_ONE, 0)).then(begin(0, SHARED)).then(read(0, false)).then(load(0, false)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.loaders == 0 and s.sources.length() == 1) + .then(advance(1000)).then(begin(1, SHARED)).then(read(1, false)) + .expect(s.o.loaders == 1 and s.loaders == List(1) and s.sources.length() == 2 and s.sources.nth(1).result == CALL_PENDING) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_TWO) and s.o.writes == 1 and s.sources.nth(1).result == VALUE_TWO) + // A failed read denies its own flight's refill and nothing else. + run failedReadDeniesOnlyItsRefillTest = init.then(begin(0, ALONE)).then(begin(0, ALONE)) + .expect(s.o.reads == 2 and s.io.budgets == List(READ_BUDGET, READ_BUDGET)) + .then(read(0, true)).then(read(1, false)) + .expect(s.o.loaders == 2 and s.loaders == List(0, 1) and s.sources.nth(0).retentionMs == 0 + and s.sources.nth(1).retentionMs == TTLS.retentionMs and s.sources.nth(1).fence == NO_FENCE + and Recovery::retainedFor(s, 1).candidate == VALUE_ONE and Recovery::retainedFor(s, 0).flight == NO_OWNER) + .then(settle(1, VALUE_TWO)).then(settle(0, VALUE_ONE)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_TWO) and s.o.writes == 1 and s.o.writeTtls == List(TTLS.retentionMs) + and s.remoteValues == List(VALUE_TWO) and s.retained == List()) + // A visible stale frame (stamped after the watermark, past freshness) + // carries no fence and is the recovery candidate; an absent frame's read + // carries the watermark it observed, which refuses a write at that same + // wall instant, and retains no candidate. + run visibleStaleMissCarriesNoFenceTest = init.then(invalidate).then(advance(1500)).then(seed(VALUE_ONE, 1000)) + .then(begin(0, ALONE)).then(read(0, false)) + .expect(s.o.loaders == 1 and s.sources.nth(0).fence == NO_FENCE and s.sources.nth(0).retentionMs == TTLS.retentionMs + and Recovery::retainedFor(s, 0).candidate == VALUE_ONE) + .then(advance(1)).then(invalidate).then(begin(0, ALONE)).then(read(1, false)) + .expect(s.watermark == List(101501) and s.sources.nth(1).fence == 101501 and Recovery::retainedFor(s, 1).candidate == NO_VALUE) + .then(settle(1, VALUE_TWO)).expect(s.o.calls == List(CALL_PENDING, VALUE_TWO) and s.o.writes == 0) + .then(settle(0, VALUE_TWO)).expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.writes == 1 and s.o.writeTtls == List(TTLS.retentionMs)) + // A failed fresh decode starts a loader on the same flight with refill + // allowed, unfenced (the frame it decoded was visible) and without a + // snapshot: under a watermark raised between the read and the decode, its + // refill still writes at the invalidation's own wall instant, where a miss + // fence would refuse it. Its ordinary error completes the flight + // unclassified with the loader's identity. + run failedFreshDecodeRestartsWithoutRecoveryTest = init.then(seed(VALUE_ONE, 0)).then(begin(0, ALONE)).then(read(0, false)).then(invalidate).then(load(0, true)) + .expect(s.o.loaders == 1 and s.loaders == List(0) and s.watermark == List(100000) and s.sources.nth(0).retentionMs == TTLS.retentionMs + and s.sources.nth(0).fence == NO_FENCE and s.retained == List() and Deadlines::bounded(s, Deadlines::SOURCE, 0)) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 1 and s.remoteValues == List(VALUE_TWO) and s.io.sourceErrors == List(0)) + .then(advance(1)).then(seed(VALUE_ONE, 0)).then(begin(0, ALONE)).then(read(1, false)).then(load(1, true)) + .expect(s.o.loaders == 2 and s.loaders == List(0, 1) and s.retained == List()) + .then(settle(1, SOURCE_ERROR)) + .expect(s.o.calls == List(VALUE_TWO, SOURCE_ERROR) and s.o.classifications == 0 and s.o.recovery == List() and s.io.sourceErrors == List(0, 2)) + // A read deadline delivered inside an advance aborts the read, starts a + // loader with refill denied at that instant, and the same advance delivers + // that loader's own deadline; the expired read stays until its late reply + // drains, and the loader's late result drains its work. + run readExpiryChainsIntoTheSameAdvanceTest = init.then(begin(0, ALONE)).then(advance(1000)) + .expect(s.io.aborted == List(0) and s.o.loaders == 1 and s.o.calls == List(DEADLINE_ERROR) and s.sources.nth(0).retentionMs == 0 + and s.deadlines == List() and RemoteIO::holdsRead(s, 0) and Deadlines::pending(s, 0) and s.now == 1000 and s.o.classifications == 0) + .then(read(0, false)).expect(not(RemoteIO::holdsRead(s, 0)) and s.o.loads == 0 and s.o.loaders == 1) + .then(settle(0, VALUE_ONE)).expect(s.o.calls == List(DEADLINE_ERROR) and s.o.writes == 0 and not(Deadlines::pending(s, 0))) + // A read deadline the clock passed without delivery cancels the read when + // its reply arrives: the reply drains and the loader starts with refill denied. + run undeliveredReadDeadlineCancelsOnArrivalTest = init.then(begin(0, ALONE)).then(jump(5)).then(read(0, false)) + .expect(s.io.aborted == List(0) and s.o.loaders == 1 and s.o.loads == 0 and s.sources.nth(0).retentionMs == 0 + and not(RemoteIO::holdsRead(s, 0)) and Deadlines::deadlineOf(s, Deadlines::SOURCE, 0) == 5 + SOURCE_BUDGET) + // A result arriving after a deadline the clock passed without delivery is a + // deadline error, classified once and recovered from the retained candidate; + // the flight's recorded outcome stays the loader's. + run lateResultIsADeadlineErrorTest = init.then(begin(0, ALONE)).then(read(0, false)).then(jump(10)).then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(CALL_PENDING) and s.sources.nth(0).result == DEADLINE_ERROR and s.o.classifications == 1 and s.o.loads == 1 + and s.o.writes == 0 and not(Deadlines::pending(s, 0))) + .then(load(0, false)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.recovery == List("served") and s.o.writes == 0 and s.retained == List() + and s.sources.nth(0).result == DEADLINE_ERROR and s.io.sourceErrors == List(0)) + // A deadline the clock passed without delivery is delivered at the first + // instant the next advance visits, not before the move: the candidate that + // was still within its maximum at the jump has aged out by then. + run overdueDeadlineDeliversAtTheNextInstantTest = init.then(seed(VALUE_ONE, 4982)).then(begin(0, ALONE)).then(read(0, false)) + .expect(Recovery::retainedFor(s, 0).candidate == VALUE_ONE and Deadlines::deadlineOf(s, Deadlines::SOURCE, 0) == SOURCE_BUDGET) + .then(jump(15)).then(advance(5)) + .expect(s.now == 20 and s.o.calls == List(DEADLINE_ERROR) and s.o.classifications == 1 and s.o.recovery == List("miss") and s.o.loads == 0 + and s.deadlines == List()) + // The timeout-only classifier recovers a propagated timeout but not an + // ordinary error, and is never counted. + run timeoutOnlyClassifierTest = init.then(begin(0, ALONE)).then(readWith(0, false, Recovery::TIMEOUT_ONLY)).then(settle(0, SOURCE_ERROR)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.o.classifications == 0 and s.o.recovery == List() and s.io.sourceErrors == List(1)) + .then(begin(0, ALONE)).then(readWith(1, false, Recovery::TIMEOUT_ONLY)).then(timeout(1)) + .expect(s.o.calls == List(SOURCE_ERROR, CALL_PENDING) and s.o.classifications == 0 and s.o.loads == 1) + .then(load(0, false)) + .expect(s.o.calls == List(SOURCE_ERROR, VALUE_ONE) and s.o.recovery == List("served") and s.io.sourceErrors == List(1, 0)) + // A deadline error is a timeout for the recovery rules: under the + // timeout-only classifier a delivered loader deadline holds a recovery + // decode, uncounted, and the candidate serves. + run deliveredDeadlineIsATimeoutForTimeoutOnlyTest = init.then(begin(0, ALONE)).then(readWith(0, false, Recovery::TIMEOUT_ONLY)).then(advance(SOURCE_BUDGET)) + .expect(s.now == SOURCE_BUDGET and s.o.calls == List(CALL_PENDING) and s.o.loads == 1 and s.o.classifications == 0 + and s.sources.nth(0).result == DEADLINE_ERROR and Deadlines::pending(s, 0)) + .then(load(0, false)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.recovery == List("served") and s.o.classifications == 0 and s.io.sourceErrors == List(0)) + // So does a result arriving after a deadline the clock passed undelivered. + run lateResultIsATimeoutForTimeoutOnlyTest = init.then(begin(0, ALONE)).then(readWith(0, false, Recovery::TIMEOUT_ONLY)).then(jump(SOURCE_BUDGET)).then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(CALL_PENDING) and s.o.loads == 1 and s.o.classifications == 0 and s.sources.nth(0).result == DEADLINE_ERROR + and s.o.writes == 0 and not(Deadlines::pending(s, 0))) + .then(load(0, false)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.recovery == List("served") and s.o.classifications == 0 and s.io.sourceErrors == List(0)) + // A recovery decode released at exactly the captured maximum misses and + // keeps the loader's error and identity. + run recoveryAtCapturedMaximumMissesTest = init.then(begin(0, ALONE)).then(read(0, false)).then(settle(0, SOURCE_ERROR)) + .expect(s.o.loads == 1 and s.o.classifications == 1) + .then(advance(1000)).then(advance(1000)).then(advance(1000)).then(advance(1000)).then(load(0, false)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.o.recovery == List("miss") and s.io.sourceErrors == List(1) and s.retained == List()) + // An expired read released later drains: no second effect. + run expiredReadDrainsTest = init.then(begin(0, ALONE)).then(advance(5)).then(read(0, false)) + .expect(s.o.loaders == 1 and s.o.loads == 0 and s.o.reads == 1 and s.io.aborted == List(0) and not(RemoteIO::holdsRead(s, 0)) and s.sources.length() == 1) + // A profile without stale-on-error passes NONE: a stale visible frame is + // never retained, and the loader's error completes without classification + // or a miss. + run noneClassifierNeverRetainsTest = init.then(begin(0, ALONE)).then(readWith(0, false, Recovery::NONE)) + .expect(s.o.loaders == 1 and s.retained == List()) + .then(settle(0, SOURCE_ERROR)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.o.classifications == 0 and s.o.recovery == List() and s.io.sourceErrors == List(1)) + // A DENY classifier retains the candidate and counts its classification, + // but never recovers and reports no miss: the flight completes with the + // loader's error and identity, for an ordinary error and for a propagated + // timeout alike. + run denyClassifierClassifiesWithoutRecoveringTest = init.then(begin(0, ALONE)).then(readWith(0, false, Recovery::DENY)) + .expect(s.o.loaders == 1 and Recovery::retainedFor(s, 0).candidate == VALUE_ONE) + .then(settle(0, SOURCE_ERROR)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.o.classifications == 1 and s.o.recovery == List() and s.o.loads == 0 + and s.retained == List() and s.io.sourceErrors == List(1)) + .then(begin(0, ALONE)).then(readWith(1, false, Recovery::DENY)).then(timeout(1)) + .expect(s.o.calls == List(SOURCE_ERROR, SOURCE_ERROR) and s.o.classifications == 2 and s.o.recovery == List() and s.o.loads == 0 + and s.retained == List() and s.io.sourceErrors == List(1, 2)) + // A follower released while the leader's flight holds its recovery decode + // joins the flight (still registered, no read of its own) and completes + // with the recovered value; both memoize and the flight then leaves the + // registries. + run followerJoinsRecoveringFlightTest = init.then(begin(0, SHARED)).then(read(0, false)).then(settle(0, SOURCE_ERROR)) + .expect(s.o.calls == List(CALL_PENDING) and s.o.loads == 1 and s.o.classifications == 1 and s.processFlights == List(0) + and s.sources.nth(0).result == SOURCE_ERROR and RemoteIO::heldLoad(s, 0).recovery and RemoteIO::heldLoad(s, 0).ttls == NO_TTLS) + .then(begin(1, SHARED)) + .expect(s.o.reads == 1 and s.o.loaders == 1 and s.owners == List(0, 0) and s.o.calls == List(CALL_PENDING, CALL_PENDING)) + .then(load(0, false)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.recovery == List("served") and s.processFlights == List(NO_OWNER) + and s.memo == List(VALUE_ONE, VALUE_ONE) and s.io.sourceErrors == List(0, 0) and s.o.writes == 0) + // A delivered loader deadline is a timeout the flight recovers from: the + // decode is held with the callers pending and the work undrained; the late + // result then drains without effect. + run deliveredDeadlineHoldsRecoveryDecodeTest = init.then(begin(0, ALONE)).then(read(0, false)).then(advance(SOURCE_BUDGET)) + .expect(s.now == SOURCE_BUDGET and s.o.calls == List(CALL_PENDING) and s.o.loads == 1 and s.o.classifications == 1 + and s.sources.nth(0).result == DEADLINE_ERROR and s.deadlines == List() and Deadlines::pending(s, 0)) + .then(load(0, false)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.recovery == List("served") and s.io.sourceErrors == List(0) and s.retained == List()) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.writes == 0 and not(Deadlines::pending(s, 0))) + // A failed recovery decode completes the flight with the outcome its source + // recorded: the loader's ordinary error with its identity, or the deadline + // error of a late result without one. + run failedRecoveryDecodeKeepsLoaderErrorTest = init.then(begin(0, ALONE)).then(read(0, false)).then(settle(0, SOURCE_ERROR)) + .expect(s.o.loads == 1 and s.o.calls == List(CALL_PENDING)) + .then(load(0, true)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.o.recovery == List("deserialization_error") and s.io.sourceErrors == List(1) and s.retained == List()) + .then(begin(0, ALONE)).then(read(1, false)).then(jump(SOURCE_BUDGET)).then(settle(1, VALUE_TWO)) + .expect(s.o.calls == List(SOURCE_ERROR, CALL_PENDING) and s.o.loads == 2 and s.sources.nth(1).result == DEADLINE_ERROR) + .then(load(1, true)) + .expect(s.o.calls == List(SOURCE_ERROR, DEADLINE_ERROR) and s.o.recovery == List("deserialization_error", "deserialization_error") + and s.io.sourceErrors == List(1, 0)) + // A held fresh decode warms local storage for the reply's local TTL, and the + // next caller is served locally without a read. + run heldDecodeWarmsLocalForTheReplysLocalTtlTest = localInit.then(seed(VALUE_TWO, 0)).then(beginWith(0, WITH_LOCAL, LOCAL_TTLS)) + .expect(s.o.reads == 1 and RemoteIO::heldRead(s, 0).ttls == LOCAL_TTLS) + .then(read(0, false)).expect(s.o.loads == 1 and s.localValues == List(NO_VALUE)) + .then(load(0, false)) + .expect(s.o.calls == List(VALUE_TWO) and s.localValues == List(VALUE_TWO) and s.localExpires == List(LOCAL_TTLS.localMs) and s.o.loaders == 0) + .then(beginWith(1, WITH_LOCAL, LOCAL_TTLS)) + .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.reads == 1 and s.o.loads == 1) + // A tracked flight that read the remote layer may not warm local storage + // from its loader; the next caller's validated remote hit does. + run trackedLoaderWaitsForAValidatedReadToWarmLocalTest = localInit.then(beginWith(0, WITH_LOCAL, LOCAL_TTLS)).then(read(0, false)) + .expect(s.o.loaders == 1 and s.sources.nth(0).localMs == 0 and s.sources.nth(0).retentionMs == LOCAL_TTLS.retentionMs) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 1 and s.localValues == List(NO_VALUE)) + .then(beginWith(1, WITH_LOCAL, LOCAL_TTLS)).then(read(1, false)).then(load(0, false)) + .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.reads == 2 and s.o.loads == 1 and s.localValues == List(VALUE_TWO)) + // An untracked flight's loader warms local storage for the reply's local TTL. + run untrackedLoaderWarmsLocalForTheReplysLocalTtlTest = untrackedLocalInit.then(beginWith(0, WITH_LOCAL, LOCAL_TTLS)).then(read(0, false)) + .expect(s.o.loaders == 1 and s.sources.nth(0).localMs == LOCAL_TTLS.localMs) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 1 and s.localValues == List(VALUE_TWO)) + .then(beginWith(1, WITH_LOCAL, LOCAL_TTLS)) + .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.reads == 1) + // A reply that leaves the local layer off resolves its held read to a zero + // local TTL whatever the policy's (`effectiveTtls`): neither the held fresh + // decode nor the untracked loader of the next miss warms local storage. + run replyWithoutLocalLayerWarmsNothingTest = untrackedLocalInit.then(seed(VALUE_TWO, 0)).then(beginWith(0, ALONE, LOCAL_TTLS)) + .expect(RemoteIO::heldRead(s, 0).ttls == { localMs: 0, freshMs: LOCAL_TTLS.freshMs, retentionMs: LOCAL_TTLS.retentionMs }) + .then(read(0, false)).then(load(0, false)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.loaders == 0 and s.localValues == List(NO_VALUE)) + .then(advance(1000)).then(beginWith(1, ALONE, LOCAL_TTLS)).then(read(1, false)) + .expect(s.o.loaders == 1 and s.sources.nth(1).localMs == 0 and s.sources.nth(1).retentionMs == LOCAL_TTLS.retentionMs) + .then(settle(0, VALUE_ONE)) + .expect(s.o.calls == List(VALUE_TWO, VALUE_ONE) and s.o.writes == 1 and s.localValues == List(NO_VALUE)) + // A loader started by a read expiry under a zero source budget is due at + // the instant it starts and is delivered inside the same advance, at the + // next instant the fold visits. + run zeroBudgetLoaderStartedByExpiryDeliversInTheSameAdvanceTest = zeroBudgetInit.then(begin(0, ALONE)).then(advance(READ_BUDGET)) + .expect(s.now == READ_BUDGET and s.io.aborted == List(0) and s.o.loaders == 1 and s.o.calls == List(DEADLINE_ERROR) + and s.o.classifications == 0 and s.o.recovery == List() and s.deadlines == List() and Deadlines::pending(s, 0)) + // A reply without the remote layer starts its source at release under the + // next loader ordinal, bounded by the source budget from its own start: + // each such source expires at its own deadline, and a settled one completes + // its caller and warms local storage for the reply's local TTL. + run releaseWithoutRemoteTakesAnOrdinalTest = localInit.then(beginWith(0, LOCAL_ALONE, LOCAL_TTLS)) + .expect(s.o.loaders == 1 and s.loaders == List(0) and s.o.reads == 0 and s.sources.nth(0).localMs == LOCAL_TTLS.localMs + and s.sources.nth(0).retentionMs == 0 and Deadlines::deadlineOf(s, Deadlines::SOURCE, 0) == SOURCE_BUDGET) + .then(advance(5)).then(beginWith(0, LOCAL_ALONE, LOCAL_TTLS)) + .expect(s.o.loaders == 2 and s.loaders == List(0, 1) and Deadlines::deadlineOf(s, Deadlines::SOURCE, 1) == 5 + SOURCE_BUDGET) + .then(advance(5)) + .expect(s.o.calls == List(DEADLINE_ERROR, CALL_PENDING) and s.deadlines == List({ kind: Deadlines::SOURCE, index: 1, at: 5 + SOURCE_BUDGET })) + .then(settle(1, VALUE_ONE)) + .expect(s.o.calls == List(DEADLINE_ERROR, VALUE_ONE) and s.o.writes == 0 and s.localValues == List(VALUE_ONE) + and s.localExpires == List(SOURCE_BUDGET + LOCAL_TTLS.localMs)) + // A scope closed between admission and a held release resolves to the + // bypass reply: the source starts unshared under the next ordinal with no + // publication authority, bounded like every release-started source, and + // its value completes the caller without memoizing into the closed scope. + run closedScopeReleaseBypassesWithAnOrdinalTest = init.then(admitHeld(1)) + .expect(s.o.policyCalls == 1 and Gate::holds(s, 0) and s.o.loaders == 0) + .then(closeScope(1)).then(releaseHeld(0, SHARED)) + .expect(s.o.loaders == 1 and s.loaders == List(0) and s.o.reads == 0 and not(Gate::holding(s)) + and s.sources.nth(0).retentionMs == 0 and s.sources.nth(0).localMs == 0 and not(s.sources.nth(0).shared) + and Deadlines::deadlineOf(s, Deadlines::SOURCE, 0) == SOURCE_BUDGET) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 0 and s.memo == List(NO_VALUE, NO_VALUE) and s.remoteValues == List(VALUE_ONE)) + // A caller that makes no policy call starts its bypass source at admission: + // the source takes the next loader ordinal, no read, and the admission + // budget (unbounded unless its key failed to construct). + run admissionSourceHasAnOrdinalTest = init.then(beginBypass(false)) + .expect(s.o.loaders == 1 and s.loaders == List(0) and s.o.reads == 0 and s.o.policyCalls == 0 and s.deadlines == List() + and Deadlines::pending(s, 0) and s.io.sourceErrors == List(0)) + .then(beginBypass(true)) + .expect(s.o.loaders == 2 and s.loaders == List(0, 1) and Deadlines::deadlineOf(s, Deadlines::SOURCE, 1) == SOURCE_BUDGET + and not(Deadlines::bounded(s, Deadlines::SOURCE, 0))) + .then(settle(1, SOURCE_ERROR)).expect(s.o.calls == List(CALL_PENDING, SOURCE_ERROR) and s.io.sourceErrors == List(0, 2)) + .then(settle(0, VALUE_ONE)).expect(s.o.calls == List(VALUE_ONE, SOURCE_ERROR) and s.o.writes == 0) +} diff --git a/test/fixtures/kernel/held-replies.qnt b/test/fixtures/kernel/held-replies.qnt index 5fbc407a..b8fd027d 100644 --- a/test/fixtures/kernel/held-replies.qnt +++ b/test/fixtures/kernel/held-replies.qnt @@ -16,7 +16,7 @@ module held_replies { import policy_gate as Gate from "../../../formal/kernel/policy-gate" pure val LAYOUT: Serving::Layout = - { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: false } + { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } pure val ALL: Resolution = { layers: { request: true, local: true, remote: true }, coalesce: true } pure val UNCOALESCED: Resolution = { layers: { request: true, local: true, remote: true }, coalesce: false } pure val REQUEST_ONLY: Resolution = { layers: { request: true, local: false, remote: false }, coalesce: true } diff --git a/test/fixtures/kernel/held-shadow.qnt b/test/fixtures/kernel/held-shadow.qnt new file mode 100644 index 00000000..9248b175 --- /dev/null +++ b/test/fixtures/kernel/held-shadow.qnt @@ -0,0 +1,185 @@ +// The served job registry (shadow) over the held remote lifecycle +// (remote_io): one instance, two keys, no persistent context, one job slot, +// replies immediate unless a run holds one, reads and decodes held and +// released by index, loaders settled by ordinal. Pins the seams the admission +// profile reaches only through its own fixtures or cannot reach: the cohort +// selection captured when the caller's read is dispatched and consulted when +// its decode completes the hit, so a policy change in between neither revokes +// nor grants an admission; a selection forgotten when the read settles +// without a decode (a miss) or the decode fails (the loader restarts), so the +// flight's later completion admits nothing; a held policy reply released +// capturing the selection the same way; the job's decode held when its source +// settles and its confirmation read held when the decode disagrees, each +// counted and released by the drivers' index (the read budgeted on the io +// channel like every held read); `match` without a read when the C0 agrees; +// `mismatch` when the confirmation read finds the C0 bytes, `superseded` when +// a seed replaced them; `confirmation_error` when that read fails and +// `deserialization_error` when the job's decode fails; a timed-out served +// job ending silently at whichever step finds it so while its slot stays +// owned until then; the one slot dropping a second key's hit while a job is +// live and readmitting once it finished. +module held_shadow { + import conformance_observations.* from "../../../formal/conformance-observations" + import encodings.* from "../../../formal/kernel/encodings" + import calls.* from "../../../formal/kernel/calls" + import layer_policy.* from "../../../formal/kernel/layer-policy" + import serving as Serving from "../../../formal/kernel/serving" + import remote_io as RemoteIO from "../../../formal/kernel/remote-io" + import remote_writes as Writes from "../../../formal/kernel/remote-writes" + import shadow as Shadow from "../../../formal/kernel/shadow" + import deadlines as Deadlines from "../../../formal/kernel/deadlines" + import recovery as Recovery from "../../../formal/kernel/recovery" + import remote_frames as Remote from "../../../formal/kernel/remote-frames" + import policy_gate as Gate from "../../../formal/kernel/policy-gate" + + pure val LAYOUT: Serving::Layout = { keysPerInstance: 2, keysPerScope: 2, persistentContexts: 1, operationsPerEntity: 1, probeSourceScope: true, policyProvider: true } + pure val REMOTE: Resolution = { layers: { request: false, local: false, remote: true }, coalesce: true } + pure val TTLS: Ttls = { localMs: 0, freshMs: 1000, retentionMs: 5000 } + pure val SHADOWING: Shadow::Shadowing = { hook: true, selected: true, capacity: 1, budgetMs: 100, logging: false } + pure val READ_BUDGET = 50 + pure def call(key: int): Call = { instance: 0, key: key, context: 1, enabled: true, keyFailed: false } + // A call inside the one persistent scope, the one a run can hold a reply for. + pure def scopedCall(key: int): Call = { instance: 0, key: key, context: 0, enabled: true, keyFailed: false } + + type State = { + o: Observation, io: RemoteIO::IO, now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], loaders: List[int], retained: List[Recovery::Snapshot], + dumps: List[Writes::HeldDump], writes: List[Writes::HeldWrite], + jobs: List[Shadow::Job], deadlines: List[Deadlines::Due], selected: List[int] + } + var s: State + var input: { name: str, choice: int } + + // Key 0 holds a fresh value 1; key 1 holds nothing. + action init = all { + input' = { name: "init", choice: -1 }, + s' = { + o: empty, io: RemoteIO::NO_IO, now: 0, skew: 100000, remoteAvailable: true, tracked: true, capacity: 0, + readFailed: false, dumpFailed: false, writeFailed: false, + closed: List(false), memo: List(NO_VALUE, NO_VALUE), requestFlights: List(NO_OWNER, NO_OWNER), processFlights: List(NO_OWNER, NO_OWNER), + localValues: List(), localExpires: List(), lru: List(List()), + remoteValues: List(VALUE_ONE, NO_VALUE), created: List(100000, 0), expires: List(5000, 0), watermark: List(0, 0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + reads: List(), loads: List(), loaders: List(), retained: List(), + dumps: List(), writes: List(), jobs: List(), deadlines: List(), selected: List() + } + } + action beginWith(key: int, selected: bool): bool = all { + input' = { name: "beginCall", choice: key }, + s' = Shadow::beginHeld(s, LAYOUT, call(key), REMOTE, TTLS, READ_BUDGET, selected) + } + action releaseRead(read: int): bool = all { input' = { name: "releaseRead", choice: read }, s' = Shadow::settleRead(s, LAYOUT, read, false, Recovery::NONE) } + action failRead(read: int): bool = all { input' = { name: "failRead", choice: read }, s' = Shadow::settleRead(s, LAYOUT, read, true, Recovery::NONE) } + action releaseLoad(load: int): bool = all { input' = { name: "releaseLoad", choice: load }, s' = Shadow::settleLoad(s, LAYOUT, load, false, READ_BUDGET, SHADOWING) } + action failLoad(load: int): bool = all { input' = { name: "failLoad", choice: load }, s' = Shadow::settleLoad(s, LAYOUT, load, true, READ_BUDGET, SHADOWING) } + action resolve(ordinal: int, value: int): bool = all { input' = { name: "resolveLoader", choice: ordinal }, s' = Shadow::settleLoader(s, LAYOUT, ordinal, value, false) } + action reject(ordinal: int): bool = all { input' = { name: "rejectLoader", choice: ordinal }, s' = Shadow::settleLoader(s, LAYOUT, ordinal, SOURCE_ERROR, false) } + action advanceBy(ms: int): bool = all { input' = { name: "advance", choice: ms }, s' = Shadow::advance(s, ms) } + action seed(key: int, value: int): bool = all { input' = { name: "seed", choice: key }, s' = Remote::seedFrame(s, key, value, 5000) } + // A policy reply the drivers hold: admission alone, then the release by its policy call. + action admitHeld(key: int): bool = all { input' = { name: "beginCall", choice: key }, s' = RemoteIO::admit(s, LAYOUT, scopedCall(key)) } + action releaseHeld(policyCall: int, selected: bool): bool = all { + input' = { name: "releasePolicy", choice: policyCall }, + s' = Shadow::releaseHeld(s, LAYOUT, policyCall, REMOTE, TTLS, READ_BUDGET, selected) + } + action step = any { beginWith(0, true), releaseRead(0), releaseLoad(0), advanceBy(1) } + + // The selection is captured at dispatch and consulted at the decode: a + // selected caller's hit admits its job however the policy reads then, an + // unselected caller's hit admits none and says nothing. + run capturedSelectionOutlivesThePolicyTest = init + .then(beginWith(0, true)) + .expect(s.o.reads == 1 and s.selected == List(0) and s.io.budgets == List(READ_BUDGET)) + .then(releaseRead(0)).expect(s.o.loads == 1 and s.selected == List(0)) + .then(releaseLoad(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.loaders == 1 and s.o.sourceScopes == List(false) and s.loaders == List(1) + and s.jobs.length() == 1 and s.jobs.nth(0).cached == VALUE_ONE and s.jobs.nth(0).source == 1 and s.selected == List() + and Deadlines::deadlinesOf(s, Deadlines::JOB, 1).length() == 1 and s.o.shadow == List()) + .then(resolve(0, VALUE_ONE)) + .expect(s.o.loads == 2 and RemoteIO::holdsLoad(s, 1) and Shadow::holdsLoad(s, 1) and s.jobs.nth(0).phase == Shadow::DECODING and s.o.shadow == List()) + .then(releaseLoad(1)).expect(s.o.shadow == List("match") and s.o.reads == 1 and s.jobs == List()) + .then(beginWith(0, false)).expect(s.selected == List()) + .then(releaseRead(1)).then(releaseLoad(2)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loaders == 1 and s.jobs == List() and s.o.shadow == List("match")) + // A follower joining the pending flight shares its one admission. + run followerSharesTheLeadersAdmissionTest = init + .then(beginWith(0, true)).then(beginWith(0, true)) + .expect(s.o.reads == 1 and s.selected == List(0) and s.owners == List(0, 0)) + .then(releaseRead(0)).then(releaseLoad(0)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.o.loaders == 1 and s.jobs.length() == 1 and s.selected == List()) + // A read that holds no decode (a miss) forgets the selection: the loader + // runs the caller's source and its completion admits nothing. + run missedReadForgetsTheSelectionTest = init + .then(beginWith(1, true)).expect(s.selected == List(0)) + .then(releaseRead(0)) + .expect(s.o.loads == 0 and s.o.loaders == 1 and s.selected == List() and s.loaders == List(0)) + .then(resolve(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.jobs == List() and s.o.shadow == List() and s.o.writes == 1) + // A caller's decode that fails restarts the loader and forgets the + // selection: no hit was served, so nothing is admitted. + run failedCallerDecodeAdmitsNothingTest = init + .then(beginWith(0, true)).then(releaseRead(0)).then(failLoad(0)) + .expect(s.o.loaders == 1 and s.selected == List() and s.jobs == List()) + .then(resolve(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.jobs == List() and s.o.shadow == List()) + // A held policy reply released captures the selection like an immediate one. + run heldReplyReleaseCapturesTheSelectionTest = init + .then(admitHeld(0)).expect(s.o.policyCalls == 1 and s.o.reads == 0 and s.selected == List()) + .then(releaseHeld(0, true)).expect(s.o.reads == 1 and s.selected == List(0)) + .then(releaseRead(0)).then(releaseLoad(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.jobs.length() == 1 and s.selected == List()) + // The job's decode is held when its source settles with another value, the + // confirmation read when the decode disagrees, each under the drivers' + // next index and the read budgeted; the C0 bytes still current are a mismatch. + run disagreeingSourceHoldsTheDecodeThenTheConfirmationTest = init + .then(beginWith(0, true)).then(releaseRead(0)).then(releaseLoad(0)) + .then(resolve(0, VALUE_TWO)) + .expect(s.o.loads == 2 and RemoteIO::holdsLoad(s, 1) and s.loads.nth(0).flight == 1 and s.loads.nth(0).value == VALUE_ONE + and s.jobs.nth(0).phase == Shadow::DECODING and s.o.shadow == List()) + .then(releaseLoad(1)) + .expect(s.o.reads == 2 and RemoteIO::holdsRead(s, 1) and Shadow::holdsRead(s, 1) and s.reads.nth(0).flight == 1 and s.io.budgets == List(READ_BUDGET, READ_BUDGET) + and s.jobs.nth(0).phase == Shadow::CONFIRMING and s.o.shadow == List()) + .then(releaseRead(1)) + .expect(s.o.shadow == List("mismatch") and s.jobs == List() and s.reads == List() and s.deadlines == List() + and s.o.calls == List(VALUE_ONE) and s.o.writes == 0) + run replacedC0IsSupersededAtTheConfirmationTest = init + .then(beginWith(0, true)).then(releaseRead(0)).then(releaseLoad(0)).then(resolve(0, VALUE_TWO)).then(releaseLoad(1)) + .then(seed(0, VALUE_TWO)).then(releaseRead(1)) + .expect(s.o.shadow == List("superseded") and s.o.calls == List(VALUE_ONE)) + run failedConfirmationReadEndsConfirmationErrorTest = init + .then(beginWith(0, true)).then(releaseRead(0)).then(releaseLoad(0)).then(resolve(0, VALUE_TWO)).then(releaseLoad(1)) + .then(failRead(1)) + .expect(s.o.shadow == List("confirmation_error") and s.jobs == List() and s.reads == List()) + run failedJobDecodeEndsDeserializationErrorTest = init + .then(beginWith(0, true)).then(releaseRead(0)).then(releaseLoad(0)).then(resolve(0, VALUE_TWO)) + .then(failLoad(1)) + .expect(s.o.shadow == List("deserialization_error") and s.o.reads == 1 and s.jobs == List() and s.loads == List()) + run failedSourceEndsSourceErrorTest = init + .then(beginWith(0, true)).then(releaseRead(0)).then(releaseLoad(0)).then(reject(0)) + .expect(s.o.shadow == List("source_error") and s.o.loads == 1 and s.o.calls == List(VALUE_ONE) and s.jobs == List()) + // A timed-out served job ends silently at whichever step finds it so, and + // owns its slot until then: a second key's hit is dropped meanwhile. + run timedOutJobEndsSilentlyAtItsDecodeTest = init + .then(beginWith(0, true)).then(releaseRead(0)).then(releaseLoad(0)).then(resolve(0, VALUE_TWO)) + .then(advanceBy(100)) + .expect(s.o.shadow == List("timeout") and s.jobs.length() == 1 and s.jobs.nth(0).timedOut and s.deadlines == List()) + .then(seed(1, VALUE_ONE)).then(beginWith(1, true)).then(releaseRead(1)).then(releaseLoad(2)) + .expect(s.o.shadow == List("timeout", "dropped") and s.o.loaders == 1) + .then(releaseLoad(1)) + .expect(s.o.shadow == List("timeout", "dropped") and s.jobs == List() and s.o.reads == 2) + .then(beginWith(1, true)).then(releaseRead(2)).then(releaseLoad(3)) + .expect(s.o.loaders == 2 and s.o.shadow == List("timeout", "dropped")) + run timedOutJobEndsSilentlyAtItsConfirmationTest = init + .then(beginWith(0, true)).then(releaseRead(0)).then(releaseLoad(0)).then(resolve(0, VALUE_TWO)).then(releaseLoad(1)) + .then(advanceBy(100)).expect(s.o.shadow == List("timeout") and s.jobs.length() == 1 and s.jobs.nth(0).timedOut) + .then(releaseRead(1)).expect(s.o.shadow == List("timeout") and s.jobs == List()) + run timedOutJobEndsSilentlyAtItsSourceTest = init + .then(beginWith(0, true)).then(releaseRead(0)).then(releaseLoad(0)).then(advanceBy(100)) + .then(resolve(0, VALUE_TWO)) + .expect(s.o.shadow == List("timeout") and s.o.loads == 1 and s.jobs == List()) +} diff --git a/test/fixtures/kernel/held-writes.qnt b/test/fixtures/kernel/held-writes.qnt new file mode 100644 index 00000000..aa5c9510 --- /dev/null +++ b/test/fixtures/kernel/held-writes.qnt @@ -0,0 +1,177 @@ +// The held remote lifecycle with held refills, queued adapter replies and the +// metric events (remote_writes over deadlines, adapter_replies, metrics): one +// tracked key on one instance, no request scope, replies immediate, reads, +// decodes, dumps and writes held. Pins the seams the effects profile reaches +// only through its own fixtures and the ones it never reaches: an accepted +// loader that refills holds its dump and completes nobody until the write is +// released; the pre-serialization fence check reads the wall clock it sampled +// (`HeldDump.sampled`) and a rollback before the release lets the second check +// stop the write; a queued miss reply is consumed by the next successful read +// completion, owning or abandoned, and left by a failed one; a fenced reply's +// fence is kept only on a tracked key; a frame reply is a hit while fresh, a +// declined future frame when its stamp is ahead of the wall clock and an +// expired miss once its age reaches the freshness; a stored frame the +// watermark hides is a `watermark_fenced` miss and an absent one `value_absent`; +// a late loader result reports its duration and its failure once and a +// drained one nothing; the read's duration includes its fresh decode; an +// invalidation with a buffer proposes the wall clock plus the buffer. +module held_writes { + import conformance_observations.* from "../../../formal/conformance-observations" + import encodings.* from "../../../formal/kernel/encodings" + import calls.* from "../../../formal/kernel/calls" + import layer_policy.* from "../../../formal/kernel/layer-policy" + import serving as Serving from "../../../formal/kernel/serving" + import remote_io as RemoteIO from "../../../formal/kernel/remote-io" + import remote_writes as Writes from "../../../formal/kernel/remote-writes" + import recovery as Recovery from "../../../formal/kernel/recovery" + import deadlines as Deadlines from "../../../formal/kernel/deadlines" + import diagnostics as Diagnostics from "../../../formal/kernel/diagnostics" + import adapter_replies as Replies from "../../../formal/kernel/adapter-replies" + import metrics as Metrics from "../../../formal/kernel/metrics" + import remote_frames as Remote from "../../../formal/kernel/remote-frames" + import clock as Clock from "../../../formal/kernel/clock" + import policy_gate as Gate from "../../../formal/kernel/policy-gate" + + pure val LAYOUT: Serving::Layout = { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } + pure val REMOTE_SHARED: Resolution = { layers: { request: false, local: false, remote: true }, coalesce: true } + pure val TTLS: Ttls = { localMs: 0, freshMs: 60000, retentionMs: 60000 } + pure val READ_BUDGET = 10 + pure val SOURCE_BUDGET = 10 + pure val BUFFER = 20 + pure val CALL: Call = { instance: 0, key: 0, context: 0, enabled: true, keyFailed: false } + + type State = { + o: Observation, d: Diagnostics, io: RemoteIO::IO, events: List[Metrics::Event], + now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], loaders: List[int], retained: List[Recovery::Snapshot], + sourceBudget: int, deadlines: List[Deadlines::Due], drained: List[bool], sourceLayers: List[str], + dumps: List[Writes::HeldDump], writes: List[Writes::HeldWrite], reply: int, replyAt: int, + readStarted: List[int], decodeStarted: List[int], sourceStarted: List[int], dumpStarted: List[int] + } + var s: State + var input: { name: str, choice: int } + + pure def initial(tracked: bool): State = { + o: empty, d: noDiagnostics, io: RemoteIO::NO_IO, events: List(), + now: 10000, skew: 90000, remoteAvailable: true, tracked: tracked, capacity: 0, + readFailed: false, dumpFailed: false, writeFailed: false, + closed: List(), memo: List(), requestFlights: List(), processFlights: List(NO_OWNER), + localValues: List(NO_VALUE), localExpires: List(0), lru: List(List()), + remoteValues: List(NO_VALUE), created: List(0), expires: List(0), watermark: List(0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + reads: List(), loads: List(), loaders: List(), retained: List(), + sourceBudget: SOURCE_BUDGET, deadlines: List(), drained: List(), sourceLayers: List(), + dumps: List(), writes: List(), reply: Replies::NO_REPLY, replyAt: 0, + readStarted: List(), decodeStarted: List(), sourceStarted: List(), dumpStarted: List() + } + action init = all { s' = initial(true), input' = { name: "init", choice: -1 } } + action untrackedInit = all { s' = initial(false), input' = { name: "init", choice: 5 } } + // Every step keeps the drivers' counts aligned with the records. + val consistent = s.loaders.length() == s.o.loaders and s.sourceStarted.length() == s.o.loaders and + s.sources.length() == s.readStarted.length() and s.dumpStarted.length() == s.o.dumps + + action begin = all { s' = Metrics::begin(s, LAYOUT, CALL, REMOTE_SHARED, TTLS, READ_BUDGET), input' = { name: "beginCall", choice: -1 } }.expect(consistent) + action read(index: int, failed: bool): bool = all { + s' = Metrics::settleRead(s, LAYOUT, index, failed, Recovery::NONE, BUFFER), input' = { name: "releaseRead", choice: index } + }.expect(consistent) + action load(failed: bool): bool = all { s' = Metrics::settleLoad(s, LAYOUT, RemoteIO::latestLoad(s).load, failed), input' = { name: "releaseLoad", choice: -1 } }.expect(consistent) + action settle(ordinal: int, value: int): bool = all { s' = Metrics::settleLoader(s, LAYOUT, ordinal, value, false), input' = { name: "resolveLoader", choice: ordinal } }.expect(consistent) + action dump(failed: bool): bool = all { s' = Metrics::releaseDump(s, LAYOUT, Writes::latestDump(s).dump, failed, 1), input' = { name: "releaseDump", choice: -1 } }.expect(consistent) + action write(failed: bool): bool = all { s' = Metrics::releaseWrite(s, LAYOUT, Writes::latestWrite(s).write, failed), input' = { name: "releaseWrite", choice: -1 } }.expect(consistent) + action advance(ms: int): bool = all { s' = Metrics::advance(s, LAYOUT, ms), input' = { name: "tick", choice: ms } }.expect(consistent) + action jump(ms: int): bool = all { s' = Clock::advance(s, ms), input' = { name: "jumpClock", choice: ms } } + action rollback(ms: int): bool = all { s' = Clock::shiftWall(s, -ms), input' = { name: "rollbackWall", choice: ms } } + action seed = all { s' = Remote::seedFrame(s, 0, VALUE_ONE, 60000), input' = { name: "seedRemote", choice: -1 } } + action invalidate(bufferMs: int): bool = all { s' = Metrics::invalidate(s, 0, bufferMs), input' = { name: "invalidate", choice: bufferMs } } + action reply(code: int): bool = all { s' = Replies::queue(s, code), input' = { name: "adapterReply", choice: code } } + def names = s.events.foldl(List(), (out, e) => out.append(e.event)) + def details = s.events.foldl(List(), (out, e) => out.append(e.detail)) + def amounts(name: str): List[int] = s.events.select(e => e.event == name).foldl(List(), (out, e) => out.append(e.amount)) + def missReasons = s.events.select(e => e.event == "miss").foldl(List(), (out, e) => out.append(e.detail)) + + // A refill holds its dump at acceptance and completes the callers at the write. + run heldRefillCompletesAtTheWriteTest = init.then(begin).then(begin).then(read(0, false)).then(settle(0, VALUE_ONE)) + .expect(s.o.dumps == 1 and s.dumps.length() == 1 and s.o.calls == List(CALL_PENDING, CALL_PENDING) and s.sources.nth(0).result == VALUE_ONE) + .then(dump(false)).expect(s.o.writes == 1 and s.writes.length() == 1 and s.o.calls == List(CALL_PENDING, CALL_PENDING)) + .then(write(false)).expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.remoteValues == List(VALUE_ONE) and s.processFlights == List(NO_OWNER)) + // The dump's fence was cleared at the sampled wall clock; a rollback before + // the release makes the second check stop the write, and the callers complete. + run rollbackBeforeReleaseStopsTheWriteTest = init.then(invalidate(0)).then(advance(10)).then(begin).then(read(0, false)).then(settle(0, VALUE_ONE)) + .expect(s.dumps.nth(0).fence == 100000 and s.dumps.nth(0).sampled == 100010) + .then(rollback(1000)).then(dump(false)) + .expect(s.o.writes == 0 and s.o.calls == List(VALUE_ONE) and s.dumps == List() + and names == List("invalidation", "disabled", "request", "miss", "get", "fallback", "serialization", "size", "storedSize")) + // A source fenced at acceptance (the miss observed a watermark ahead of the + // wall clock) is served without a dump: the first fence check. + run fencedAcceptanceHoldsNoDumpTest = init.then(invalidate(BUFFER)).then(begin).then(read(0, false)).then(settle(0, VALUE_ONE)) + .expect(s.o.dumps == 0 and s.o.calls == List(VALUE_ONE) and missReasons == List("value_absent") and s.sources.nth(0).fence == 100020) + // A dump fault dispatches no write; a write fault stores nothing; both complete. + run dumpFaultCompletesWithoutWriteTest = init.then(begin).then(read(0, false)).then(settle(0, VALUE_ONE)).then(dump(true)) + .expect(s.o.writes == 0 and s.o.calls == List(VALUE_ONE) and details.select(d => d == "serialization_dump").length() == 1) + run writeFaultStoresNothingTest = init.then(begin).then(read(0, false)).then(settle(0, VALUE_ONE)).then(dump(false)).then(write(true)) + .expect(s.remoteValues == List(NO_VALUE) and s.o.calls == List(VALUE_ONE) and details.select(d => d == "cache_write").length() == 1) + // A queued miss reply is consumed by a successful completion, owning or + // abandoned, and left queued by a failed one. + run failedReadLeavesTheReplyQueuedTest = init.then(reply(1)).then(begin).then(read(0, true)) + .expect(Replies::queued(s) and details.select(d => d == "cache_read").length() == 1) + .then(settle(0, VALUE_ONE)).then(begin).then(read(1, false)) + .expect(not(Replies::queued(s)) and details.select(d => d == "unclassified").length() == 1) + run abandonedReadConsumesTheReplyTest = init.then(begin).then(advance(10)).then(reply(1)).then(read(0, false)) + .expect(not(Replies::queued(s)) and s.o.loaders == 1 and names.select(n => n == "miss").length() == 0) + // A fenced reply keeps its fence only on a tracked key; the untracked read + // demotes it to an unclassified miss without a fence. + run fencedReplyKeepsItsFenceOnATrackedKeyTest = init.then(reply(Replies::FENCED_WITH_FENCE)).then(begin).then(read(0, false)) + .expect(s.sources.nth(0).fence == 100000 + BUFFER and missReasons == List("watermark_fenced")) + run untrackedReplyCarriesNoFenceTest = untrackedInit.then(reply(Replies::FENCED_WITH_FENCE)).then(begin).then(read(0, false)) + .expect(s.sources.nth(0).fence == NO_FENCE and missReasons == List("unclassified")) + // A frame reply is a hit when its stamp is not in the future and a declined + // future frame (offset, unclassified, no fence) otherwise; the frames are untouched. + run frameReplyIsAHitTest = init.then(reply(Replies::FRAME_WITH_MISS_FIELDS)).then(begin).then(read(0, false)) + .expect(s.o.loads == 1 and s.o.loaders == 0 and s.remoteValues == List(NO_VALUE)) + .then(load(false)).expect(s.o.calls == List(VALUE_ONE) and names == List("disabled", "request", "serialization", "get")) + run futureFrameReplyIsDeclinedTest = init.then(reply(Replies::FRAME_WITH_MISS_FIELDS)).then(rollback(1000)).then(begin).then(read(0, false)) + .expect(s.o.loads == 0 and s.o.loaders == 1 and s.sources.nth(0).fence == NO_FENCE and names == List("disabled", "request", "futureOffset", "miss", "get") + and amounts("futureOffset") == List(1000) and missReasons == List("unclassified")) + // A frame reply is judged by its stamp like a stored frame, the freshness + // boundary inclusive: at the last fresh millisecond it is a hit, one + // millisecond later an expired miss with no offset and no fence, and stamped + // one millisecond ahead of the wall clock an unclassified miss after its offset. + run staleFrameReplyMissIsExpiredTest = init.then(reply(Replies::FRAME_WITH_MISS_FIELDS)).then(jump(TTLS.freshMs - 1)).then(begin).then(read(0, false)) + .expect(s.o.loads == 1 and s.o.loaders == 0).then(load(false)).expect(s.o.calls == List(VALUE_ONE)) + .then(reply(Replies::FRAME_WITH_MISS_FIELDS)).then(jump(TTLS.freshMs)).then(begin).then(read(1, false)) + .expect(s.o.loads == 1 and s.o.loaders == 1 and s.sources.nth(1).fence == NO_FENCE and s.remoteValues == List(NO_VALUE) + and names == List("disabled", "request", "serialization", "get", "disabled", "request", "miss", "get") and missReasons == List("expired")) + run futureDatedFrameReplyMissIsUnclassifiedTest = init.then(reply(Replies::FRAME_WITH_MISS_FIELDS)).then(rollback(1)).then(begin).then(read(0, false)) + .expect(s.o.loads == 0 and s.o.loaders == 1 and s.sources.nth(0).fence == NO_FENCE + and names == List("disabled", "request", "futureOffset", "miss", "get") and amounts("futureOffset") == List(1) and missReasons == List("unclassified")) + // A stored frame the watermark hides is a fenced miss carrying the + // watermark; an absent frame is a plain miss. + run hiddenFrameIsAFencedMissTest = init.then(seed).then(invalidate(0)).then(begin).then(read(0, false)) + .expect(missReasons == List("watermark_fenced") and s.sources.nth(0).fence == 100000) + run absentFrameIsAValueAbsentMissTest = init.then(begin).then(read(0, false)) + .expect(missReasons == List("value_absent") and s.sources.nth(0).fence == NO_FENCE) + // A late result is a deadline error reported once with its duration; the + // drained settlement of an already delivered loader reports nothing. + run lateResultReportsOnceTest = init.then(begin).then(read(0, false)).then(jump(10)).then(settle(0, VALUE_ONE)) + .expect(s.o.calls == List(DEADLINE_ERROR) and amounts("fallback") == List(10) and details.select(d => d == "fallback").length() == 1) + run drainedResultReportsNothingTest = init.then(begin).then(read(0, false)).then(advance(10)) + .expect(s.o.calls == List(DEADLINE_ERROR) and amounts("fallback") == List(10)) + .then(settle(0, VALUE_ONE)).expect(amounts("fallback") == List(10) and s.o.calls == List(DEADLINE_ERROR) and s.o.dumps == 0) + // The read's duration includes the fresh decode it held. + run readDurationIncludesTheDecodeTest = init.then(seed).then(begin).then(read(0, false)).then(advance(10)).then(load(false)) + .expect(amounts("get") == List(10) and names == List("disabled", "request", "serialization", "get")) + // A read expired inside an advance reports the deadline error and its duration at the due instant. + run expiredReadReportsAtItsDueInstantTest = init.then(begin).then(advance(30)) + .expect(s.io.aborted == List(0) and amounts("get") == List(10) and details.select(d => d == "cache_read_timeout").length() == 1 and s.o.loaders == 1) + // A follower reports the singleflight it joined; a leader its read. + run followerReportsTheScopeItJoinedTest = init.then(begin).then(begin) + .expect(names == List("disabled", "request", "disabled", "coalesced") and s.events.nth(3).location == "process" and s.d.coalesced == List("process")) + // An invalidation with a buffer proposes the wall clock plus the buffer. + run bufferedInvalidationProposesAheadTest = init.then(invalidate(BUFFER)).expect(s.watermark == List(100020) and names == List("invalidation")) + .then(invalidate(0)).expect(s.watermark == List(100020) and s.o.invalidations == 2) +} diff --git a/test/fixtures/kernel/local-faults.qnt b/test/fixtures/kernel/local-faults.qnt new file mode 100644 index 00000000..1de176be --- /dev/null +++ b/test/fixtures/kernel/local-faults.qnt @@ -0,0 +1,130 @@ +// The local storage fault switch over the layered traversal with immediate +// replies: one key on one instance, one persistent scope and a transient +// context, an untracked remote layer. Pins that a call admitted under an +// armed fault reads no local entry and starts a source without a local TTL +// (so a settlement after the fault clears publishes nothing locally while +// memoizing and refilling), that a remote hit under the fault warms nothing, +// that a settlement under the fault stores nothing locally while its callers +// receive the value and the remote refill proceeds, that a healthy call +// after the fault clears publishes again, and that the fault leaves the +// layers and the coalescing as the reply resolved them: two callers under +// the fault share one source exactly as two healthy callers do. +module local_faults_fixture { + import conformance_observations.* from "../../../formal/conformance-observations" + import encodings.* from "../../../formal/kernel/encodings" + import calls.* from "../../../formal/kernel/calls" + import layer_policy.* from "../../../formal/kernel/layer-policy" + import serving as Serving from "../../../formal/kernel/serving" + import local_faults as Faults from "../../../formal/kernel/local-faults" + import remote_frames as Remote from "../../../formal/kernel/remote-frames" + import flights as Flights from "../../../formal/kernel/flights" + import policy_gate as Gate from "../../../formal/kernel/policy-gate" + + pure val TTL_MS = 60000 + pure val LAYOUT: Serving::Layout = + { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 1, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } + pure val TTLS: Ttls = { localMs: TTL_MS, freshMs: TTL_MS, retentionMs: TTL_MS } + pure val SCOPED: Call = { instance: 0, key: 0, context: 0, enabled: true, keyFailed: false } + pure val TRANSIENT: Call = { instance: 0, key: 0, context: 1, enabled: true, keyFailed: false } + + type State = { + o: Observation, now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, localFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held] + } + var s: State + var input: { name: str, choice: int } + + action init = all { + s' = { + o: empty, now: 0, skew: 0, remoteAvailable: true, tracked: false, capacity: 1, + readFailed: false, dumpFailed: false, writeFailed: false, localFailed: false, + closed: List(false), memo: List(NO_VALUE), requestFlights: List(NO_OWNER), processFlights: List(NO_OWNER), + localValues: List(NO_VALUE), localExpires: List(0), lru: List(List()), + remoteValues: List(NO_VALUE), created: List(0), expires: List(0), watermark: List(0), + sources: List(), owners: List(), memoSlots: List(), held: List() + }, + input' = { name: "init", choice: -1 } + } + action begin(call: Call, policy: int): bool = all { + s' = Faults::begin(s, LAYOUT, call, resolution(policy, true), TTLS), + input' = { name: "beginCall", choice: call.context } + } + action settle(value: int): bool = all { + s' = Faults::settle(s, LAYOUT, Flights::latest(s), value), + input' = { name: "resolveLoader", choice: value } + } + action fault(armed: bool): bool = all { + s' = { localFailed: armed, ...s }, + input' = { name: "localFault", choice: if (armed) 1 else 0 } + } + action seed(value: int): bool = all { + s' = Remote::seedFrame(s, 0, value, TTL_MS), + input' = { name: "seed", choice: value } + } + + // A read under the fault skips a present local entry and reads remote; the + // source it starts carries no local TTL, and its settlement after the fault + // clears memoizes and refills but publishes nothing locally. + run faultedReadStartsASourceWithoutLocalTtlTest = init + .then(begin(TRANSIENT, ALL_LAYERS)).then(settle(VALUE_ONE)) + .expect(s.localValues == List(VALUE_ONE) and s.o.writes == 1) + .then(fault(true)).then(begin(SCOPED, NO_REMOTE_LAYER)) + .expect(s.o.calls == List(VALUE_ONE, CALL_PENDING) and s.o.reads == 1 and s.o.loaders == 2 + and s.sources.nth(1).localMs == 0 and s.sources.nth(1).retentionMs == 0) + .then(fault(false)).then(settle(VALUE_TWO)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_TWO) and s.localValues == List(VALUE_ONE) + and s.memo == List(VALUE_TWO) and s.o.writes == 1) + + // A remote hit under the fault serves the frame and warms nothing. + run faultedReadRemoteHitWarmsNothingTest = init + .then(seed(VALUE_TWO)).then(fault(true)) + .then(begin(TRANSIENT, ALL_LAYERS)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.reads == 1 and s.o.loads == 1 and s.o.loaders == 0 + and s.localValues == List(NO_VALUE)) + .then(fault(false)).then(begin(TRANSIENT, ALL_LAYERS)) + .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.reads == 2 and s.localValues == List(VALUE_TWO)) + + // A settlement under the fault stores nothing locally: the source keeps its + // callers' result, memoizes it and refills the remote layer. + run faultedSettlementKeepsResultAndRefillsTest = init + .then(begin(SCOPED, ALL_LAYERS)).then(fault(true)).then(settle(VALUE_ONE)) + .expect(s.o.calls == List(VALUE_ONE) and s.memo == List(VALUE_ONE) and s.o.writes == 1 + and s.remoteValues == List(VALUE_ONE) and s.localValues == List(NO_VALUE) + and s.sources.nth(0).localMs == 0) + .then(fault(false)).then(begin(TRANSIENT, NO_REMOTE_LAYER)) + .expect(s.o.calls == List(VALUE_ONE, CALL_PENDING) and s.o.loaders == 2) + .then(settle(VALUE_TWO)) + .expect(s.localValues == List(VALUE_TWO)) + + // The fault hides the local value for the read and withdraws the warm, not + // the layer or the coalescing: with the remote layer off, two transient + // callers under the fault join one shared source (owners equal, one + // loader) exactly as two healthy callers do, over a present local entry + // neither faulted caller reads; the faulted source captures no local TTL, + // so its settlement after the fault clears leaves the entry as it was. + run faultedCallersShareOneSourceTest = init + .then(begin(TRANSIENT, NO_REMOTE_LAYER)).then(begin(TRANSIENT, NO_REMOTE_LAYER)) + .expect(s.o.calls == List(CALL_PENDING, CALL_PENDING) and s.o.loaders == 1 + and s.owners == List(0, 0) and s.sources.nth(0).shared and s.sources.nth(0).localMs == TTL_MS) + .then(settle(VALUE_ONE)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE) and s.localValues == List(VALUE_ONE)) + .then(fault(true)).then(begin(TRANSIENT, NO_REMOTE_LAYER)).then(begin(TRANSIENT, NO_REMOTE_LAYER)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE, CALL_PENDING, CALL_PENDING) and s.o.loaders == 2 + and s.owners == List(0, 0, 1, 1) and s.sources.nth(1).shared and s.sources.nth(1).localMs == 0 + and s.o.reads == 0) + .then(fault(false)).then(settle(VALUE_TWO)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_ONE, VALUE_TWO, VALUE_TWO) and s.localValues == List(VALUE_ONE) + and s.o.writes == 0) + + // A rejected source under the fault publishes nothing anywhere and leaves + // the entry the fault protected. + run faultedRejectionPublishesNothingTest = init + .then(begin(TRANSIENT, NO_REMOTE_LAYER)).then(settle(VALUE_ONE)) + .then(fault(true)).then(begin(SCOPED, NO_REMOTE_LAYER)).then(settle(SOURCE_ERROR)) + .expect(s.o.calls == List(VALUE_ONE, SOURCE_ERROR) and s.localValues == List(VALUE_ONE) + and s.memo == List(NO_VALUE)) +} diff --git a/test/fixtures/kernel/local-projection.qnt b/test/fixtures/kernel/local-projection.qnt index c22bdd65..21cbd4d5 100644 --- a/test/fixtures/kernel/local-projection.qnt +++ b/test/fixtures/kernel/local-projection.qnt @@ -18,7 +18,7 @@ module local_projection { pure val LOCAL_MS = 1000 pure val SHORT_LOCAL_MS = 250 pure val LAYOUT: Serving::Layout = - { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 1, probeSourceScope: false } + { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 0, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } pure val LOCAL: Resolution = { layers: { request: false, local: true, remote: false }, coalesce: true } pure val TTLS: Ttls = { localMs: LOCAL_MS, freshMs: 0, retentionMs: 0 } pure val SHORT_TTLS: Ttls = { localMs: SHORT_LOCAL_MS, freshMs: 0, retentionMs: 0 } diff --git a/test/fixtures/kernel/markers.qnt b/test/fixtures/kernel/markers.qnt new file mode 100644 index 00000000..5c66b654 --- /dev/null +++ b/test/fixtures/kernel/markers.qnt @@ -0,0 +1,217 @@ +// Invalidation markers (markers) over the held remote traversal (remote_io, +// replies immediate through `RemoteIO::begin`): one key, one entity, one +// instance, two persistent contexts, a tracked reader whose wall clock runs +// ahead of the monotonic one by the drivers' origin. Pins the schedules a +// scheduled profile cannot reach (its seeds never outlive the two-hour floor +// and its wall never rolls back): the floor lifetime; the lifetime covering +// the cap past a cutoff left ahead of the wall by a rollback; the longer +// remaining lifetime kept when a later invalidation asks for less; an expired +// marker un-fencing a day-retained frame under a long maximum, having fenced +// it until its last millisecond, so the frame becomes a recovery candidate; a +// write fault (`mutation_error`) and a missing remote layer (`missing_remote`) +// stamping no marker; a frame stamped at the cutoff fenced while stored and +// visible and retained after expiry; and `observe` reporting NO_MARKER after +// expiry and a floor marker on the next invalidation. Every held step keeps +// the drivers' loader ordinals aligned with the flights they run for +// (`ordinalsMatchLoaders`). +module marker_lifetimes { + import conformance_observations.* from "../../../formal/conformance-observations" + import encodings.* from "../../../formal/kernel/encodings" + import calls.* from "../../../formal/kernel/calls" + import layer_policy.* from "../../../formal/kernel/layer-policy" + import serving as Serving from "../../../formal/kernel/serving" + import remote_io as RemoteIO from "../../../formal/kernel/remote-io" + import recovery as Recovery from "../../../formal/kernel/recovery" + import remote_frames as Remote from "../../../formal/kernel/remote-frames" + import markers as Markers from "../../../formal/kernel/markers" + import clock as Clock from "../../../formal/kernel/clock" + import policy_gate as Gate from "../../../formal/kernel/policy-gate" + + pure val LAYOUT: Serving::Layout = { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } + pure val ALONE: Resolution = { layers: { request: false, local: false, remote: true }, coalesce: false } + pure val HOUR_MS = 3600000 + pure val DAY_MS = 86400000 + // A reply whose retention (the recovery maximum) is a day, far above the cap. + pure val TTLS: Ttls = { localMs: 0, freshMs: 1000, retentionMs: DAY_MS } + pure val READ_BUDGET = 5 + // The wall clock runs this far ahead of the monotonic clock; the drivers + // report cutoffs against it. + pure val WALL_ORIGIN_MS = 100000 + pure val KEY = 0 + pure val ENTITY = 0 + pure def call(context: int): Call = { instance: 0, key: KEY, context: context, enabled: true, keyFailed: false } + + type State = { + o: Observation, io: RemoteIO::IO, now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], loaders: List[int], retained: List[Recovery::Snapshot], + markerExpires: List[int], markers: List[Markers::Marker] + } + var s: State + var input: { name: str, choice: int } + + // No frame, no watermark and no marker at init. + pure def initial(remoteAvailable: bool, writeFailed: bool): State = { + o: empty, io: RemoteIO::NO_IO, now: 0, skew: WALL_ORIGIN_MS, remoteAvailable: remoteAvailable, tracked: true, capacity: 0, + readFailed: false, dumpFailed: false, writeFailed: writeFailed, + closed: List(false, false), memo: List(NO_VALUE, NO_VALUE), requestFlights: List(NO_OWNER, NO_OWNER), processFlights: List(NO_OWNER), + localValues: List(NO_VALUE), localExpires: List(0), lru: List(List()), + remoteValues: List(NO_VALUE), created: List(0), expires: List(0), watermark: List(0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + reads: List(), loads: List(), loaders: List(), retained: List(), + markerExpires: List(0), markers: List() + } + action initialize(remoteAvailable: bool, writeFailed: bool): bool = all { + s' = initial(remoteAvailable, writeFailed), input' = { name: "init", choice: -1 } + } + action init = initialize(true, false) + action noRemoteInit = initialize(false, false) + action writeFaultInit = initialize(true, true) + + // The drivers' loader ordinals are the flights' loaders after every held step. + val ordinalsMatchLoaders = s.loaders.length() == s.o.loaders + + // -- The held path ------------------------------------------------------------- + + action begin(context: int): bool = all { + s' = RemoteIO::begin(s, LAYOUT, call(context), ALONE, TTLS, READ_BUDGET), + input' = { name: "beginCall", choice: context } + }.expect(ordinalsMatchLoaders) + action read(index: int): bool = all { + s' = RemoteIO::settleRead(s, LAYOUT, index, false, Recovery::ALLOW), + input' = { name: "releaseRead", choice: index } + }.expect(ordinalsMatchLoaders) + action load(index: int): bool = all { + s' = RemoteIO::settleLoad(s, LAYOUT, index, false), + input' = { name: "releaseLoad", choice: index } + }.expect(ordinalsMatchLoaders) + action settle(ordinal: int, value: int): bool = all { + s' = RemoteIO::settleLoader(s, LAYOUT, ordinal, value, false), + input' = { name: "resolveLoader", choice: ordinal } + }.expect(ordinalsMatchLoaders) + + // -- Markers and maintenance ----------------------------------------------------- + + action invalidate = all { s' = Markers::invalidate(s, ENTITY, 0), input' = { name: "invalidate", choice: ENTITY } } + action observe = all { s' = Markers::observe(s, ENTITY, WALL_ORIGIN_MS), input' = { name: "observeMarker", choice: ENTITY } } + + // -- Environment ----------------------------------------------------------------- + + // Time passes through the markers' advance, which expires lapsed markers. + action advance(ms: int): bool = all { s' = Markers::advance(s, ms), input' = { name: "advance", choice: ms } } + // A wall-clock jump; negative is a rollback. + action shiftWall(ms: int): bool = all { s' = Clock::shiftWall(s, ms), input' = { name: "shiftWall", choice: ms } } + // A frame stamped at an age, retained for the given TTL. + action seed(value: int, age: int, retentionMs: int): bool = all { + s' = Remote::seedAged(s, KEY, value, age, retentionMs), input' = { name: "seed", choice: value } + } + + // -- Lifetimes --------------------------------------------------------------------- + + // An invalidation at the wall clock asks for the floor: twice the tracked + // cap, two hours, which the marker reports in force from the cutoff. + run floorLifetimeTest = init + .expect(Markers::MARKER_FLOOR_MS == 2 * HOUR_MS and Markers::lifetime(WALL_ORIGIN_MS, WALL_ORIGIN_MS) == Markers::MARKER_FLOOR_MS + and not(Markers::inForce(s, ENTITY))) + .then(invalidate) + .expect(s.o.invalidations == 1 and s.o.maintenance == List("ok") and s.watermark == List(WALL_ORIGIN_MS) + and s.markerExpires == List(Markers::MARKER_FLOOR_MS) and Markers::inForce(s, ENTITY)) + .then(observe) + .expect(s.markers == List({ cutoffMs: 0, ttlMs: 2 * HOUR_MS })) + // After a two-hour wall rollback the watermark stays two hours ahead of the + // wall (an invalidation never lowers it); the lifetime then covers the cap + // past the cutoff, two hours plus the cap plus the margin, above the floor. + run lifetimeCoversTheCapPastACutoffAheadOfTheWallTest = init.then(invalidate).then(shiftWall(-2 * HOUR_MS)).then(invalidate) + .expect(s.o.invalidations == 2 and s.watermark == List(WALL_ORIGIN_MS) and Clock::wallOf(s) == WALL_ORIGIN_MS - 2 * HOUR_MS + and Markers::lifetime(WALL_ORIGIN_MS, Clock::wallOf(s)) == 2 * HOUR_MS + Remote::TRACKED_RETENTION_CAP_MS + Markers::MARKER_MARGIN_MS + and s.markerExpires == List(10860000)) + .then(observe) + .expect(s.markers == List({ cutoffMs: 0, ttlMs: 10860000 })) + // A later invalidation that asks for the floor keeps the longer remaining + // lifetime, as the script keeps the larger existing PTTL, while the + // watermark still rises to the wall. + run longerRemainingLifetimeIsKeptWhenALaterInvalidationAsksForLessTest = init.then(invalidate).then(shiftWall(-2 * HOUR_MS)).then(invalidate) + .then(shiftWall(2 * HOUR_MS)).then(advance(1000)).then(invalidate) + .expect(s.o.invalidations == 3 and s.watermark == List(WALL_ORIGIN_MS + 1000) + and Markers::lifetime(WALL_ORIGIN_MS + 1000, Clock::wallOf(s)) == Markers::MARKER_FLOOR_MS and s.markerExpires == List(10860000)) + .then(observe) + .expect(s.markers == List({ cutoffMs: 1000, ttlMs: 10860000 - 1000 })) + + // -- Expiry and the fence ---------------------------------------------------------- + + // A frame retained for a day is fenced by a watermark stamped a millisecond + // after it until the marker's last millisecond (a miss retaining no + // candidate, refilling under the watermark's fence), and un-fenced by the + // marker's expiry: the read then finds it visible and stale inside the + // day's maximum, retains it as the candidate with no fence, and the flight + // recovers it when its loader fails. + run expiredMarkerUnfencesADayRetainedFrameUnderALongMaximumTest = init.then(seed(VALUE_ONE, 0, DAY_MS)).then(advance(1)).then(invalidate) + .expect(s.watermark == List(WALL_ORIGIN_MS + 1) and s.markerExpires == List(1 + 2 * HOUR_MS) and not(Remote::visible(s, KEY, LAYOUT.operationsPerEntity))) + .then(advance(2 * HOUR_MS - 1)) + .expect(s.now == 2 * HOUR_MS and Markers::inForce(s, ENTITY) and Remote::retained(s, KEY) and not(Remote::visible(s, KEY, LAYOUT.operationsPerEntity))) + .then(begin(0)).then(read(0)) + .expect(s.o.loaders == 1 and Recovery::retainedFor(s, 0).flight == 0 and Recovery::retainedFor(s, 0).candidate == NO_VALUE + and s.sources.nth(0).fence == WALL_ORIGIN_MS + 1 and s.sources.nth(0).retentionMs == Remote::TRACKED_RETENTION_CAP_MS) + .then(advance(1)) + .expect(not(Markers::inForce(s, ENTITY)) and s.watermark == List(0) and Remote::visible(s, KEY, LAYOUT.operationsPerEntity) + and Remote::retained(s, KEY) and s.remoteValues == List(VALUE_ONE)) + .then(begin(1)).then(read(1)) + .expect(s.o.loaders == 2 and Recovery::retainedFor(s, 1).candidate == VALUE_ONE and Recovery::retainedFor(s, 1).maximum == DAY_MS + and s.sources.nth(1).fence == NO_FENCE and s.sources.nth(1).retentionMs == Remote::TRACKED_RETENTION_CAP_MS) + .then(settle(1, SOURCE_ERROR)) + .expect(s.o.loads == 1 and RemoteIO::latestLoad(s).recovery and s.o.calls == List(CALL_PENDING, CALL_PENDING)) + .then(load(0)) + .expect(s.o.calls == List(CALL_PENDING, VALUE_ONE) and s.o.recovery == List("served") and s.o.writes == 0) + .then(settle(0, SOURCE_ERROR)) + .expect(s.o.calls == List(SOURCE_ERROR, VALUE_ONE) and s.o.recovery == List("served", "miss") and s.io.sourceErrors == List(1, 0)) + // A frame stamped at the cutoff is fenced while stored (the fence is strict + // against the watermark) and visible, retained, once the marker expires. + run frameStampedAtTheCutoffIsFencedWhileStoredAndVisibleAfterExpiryTest = init.then(seed(VALUE_ONE, 0, DAY_MS)).then(invalidate) + .expect(s.remoteValues == List(VALUE_ONE) and s.created == List(WALL_ORIGIN_MS) and s.watermark == List(WALL_ORIGIN_MS) + and Remote::retained(s, KEY) and not(Remote::fenceCleared(s, KEY, LAYOUT.operationsPerEntity)) and not(Remote::visible(s, KEY, LAYOUT.operationsPerEntity))) + .then(advance(2 * HOUR_MS)) + .expect(not(Markers::inForce(s, ENTITY)) and s.watermark == List(0) and Remote::retained(s, KEY) and Remote::visible(s, KEY, LAYOUT.operationsPerEntity)) + .then(begin(0)).then(read(0)) + .expect(Recovery::retainedFor(s, 0).candidate == VALUE_ONE and s.sources.nth(0).fence == NO_FENCE) + + // -- Outcomes that stamp nothing --------------------------------------------------- + + // Under a write fault the invalidation is counted and reports the mutation + // error; the watermark does not move and no marker is stamped. + run mutationErrorStampsNoMarkerTest = writeFaultInit + .expect(not(Serving::maintains(s))) + .then(invalidate) + .expect(s.o.invalidations == 1 and s.o.maintenance == List("mutation_error") and s.watermark == List(0) and s.markerExpires == List(0) + and not(Markers::inForce(s, ENTITY))) + .then(observe) + .expect(s.markers == List(Markers::NO_MARKER)) + // Without remote storage the request reports the missing layer, counts + // nothing and stamps nothing. + run missingRemoteStampsNoMarkerTest = noRemoteInit + .expect(not(Serving::maintains(s))) + .then(invalidate) + .expect(s.o.invalidations == 0 and s.o.maintenance == List("missing_remote") and s.watermark == List(0) and s.markerExpires == List(0)) + .then(observe) + .expect(s.markers == List(Markers::NO_MARKER)) + + // -- The observed marker ------------------------------------------------------------- + + // The marker reports its cutoff against the origin and its remaining + // lifetime down to the last millisecond, NO_MARKER once expired (PTTL -2 on + // a missing key), and a fresh floor marker from the zero baseline on the + // next invalidation. + run observeReportsNoMarkerAfterExpiryTest = init.then(observe) + .expect(s.markers == List(Markers::NO_MARKER)) + .then(invalidate).then(observe).then(advance(1000)).then(observe).then(advance(2 * HOUR_MS - 1000 - 1)).then(observe) + .expect(s.markers == List(Markers::NO_MARKER, { cutoffMs: 0, ttlMs: 2 * HOUR_MS }, { cutoffMs: 0, ttlMs: 2 * HOUR_MS - 1000 }, { cutoffMs: 0, ttlMs: 1 }) + and s.watermark == List(WALL_ORIGIN_MS)) + .then(advance(1)).then(observe) + .expect(s.markers.nth(4) == Markers::NO_MARKER and s.watermark == List(0) and s.markerExpires == List(2 * HOUR_MS)) + .then(invalidate).then(observe) + .expect(s.o.invalidations == 2 and s.watermark == List(WALL_ORIGIN_MS + 2 * HOUR_MS) and s.markerExpires == List(4 * HOUR_MS) + and s.markers.nth(5) == { cutoffMs: 2 * HOUR_MS, ttlMs: 2 * HOUR_MS }) +} diff --git a/test/fixtures/kernel/payload-classes.qnt b/test/fixtures/kernel/payload-classes.qnt new file mode 100644 index 00000000..1754e738 --- /dev/null +++ b/test/fixtures/kernel/payload-classes.qnt @@ -0,0 +1,379 @@ +// Payload validity classes on both remote paths and the tracked retention +// cap, over the held remote traversal (remote_io, replies immediate through +// `RemoteIO::begin`) and the atomic one (serving): one key, one instance, two +// persistent contexts. Pins what the payloads module says once for both +// paths: a compressed fresh frame decodes to its value at the held decode and +// warms local with it; a corrupt fresh frame fails its decode by its code +// alone and restarts the loader unfenced; a corrupt recovery candidate keeps +// the loader's error with the deserialization label; a code of a class the +// module names no rule for is readable but decodes to nothing, so a stale +// frame storing it is no recovery candidate and the flight misses; a bare +// class code (Payloads::CORRUPT, value 0) decodes to nothing and is routed +// as a declined visible frame, the constraint the payloads header states; an +// unsupported encoding fails the held read like an adapter fault (no +// snapshot, no refill, no fence, while an untracked loader still warms +// local), so the loader failure that follows is unclassified and reports no +// recovery label, but a fenced or expired one is never seen and misses like +// an absent frame; the atomic read of an unsupported encoding denies the refill +// (`readOk`) and the atomic release serves a compressed frame's decoded +// value; and the documented +// limit that the atomic release, having no decode step, serves the value a +// fresh corrupt frame would have carried. The cap: a tracked refill is +// written with the capped retention while the recovery snapshot keeps the +// reply's maximum, an untracked refill is not capped, an atomic tracked +// refill is, and a candidate older than the cap but inside the maximum still +// serves. The compression channel (compression): the variants of the two +// transitions that hold a decode report the outcome its payload code decodes +// with, "decompressed" for a fresh compressed read and "fallback_raw" for a +// corrupt recovery candidate at the loader's failure, nothing for an +// uncompressed decode or a step that holds none. The held runs keep the +// drivers' loader ordinals aligned with the flights they run for +// (`ordinalsMatchLoaders`); the atomic runs settle a source by its index and +// hold no effect, so the loader map is not kept there. +module payload_classes { + import conformance_observations.* from "../../../formal/conformance-observations" + import encodings.* from "../../../formal/kernel/encodings" + import calls.* from "../../../formal/kernel/calls" + import layer_policy.* from "../../../formal/kernel/layer-policy" + import serving as Serving from "../../../formal/kernel/serving" + import remote_io as RemoteIO from "../../../formal/kernel/remote-io" + import recovery as Recovery from "../../../formal/kernel/recovery" + import remote_frames as Remote from "../../../formal/kernel/remote-frames" + import payloads as Payloads from "../../../formal/kernel/payloads" + import compression as Compression from "../../../formal/kernel/compression" + import clock as Clock from "../../../formal/kernel/clock" + import policy_gate as Gate from "../../../formal/kernel/policy-gate" + + pure val LAYOUT: Serving::Layout = { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: false, policyProvider: true } + pure val ALONE: Resolution = { layers: { request: false, local: false, remote: true }, coalesce: false } + pure val WITH_LOCAL: Resolution = { layers: { request: true, local: true, remote: true }, coalesce: true } + pure val TTLS: Ttls = { localMs: 0, freshMs: 1000, retentionMs: 5000 } + pure val LOCAL_TTLS: Ttls = { localMs: 1000, freshMs: 1000, retentionMs: 5000 } + // A reply whose retention lies above the tracked cap. + pure val LONG_RETENTION_MS = 7200000 + pure val LONG_TTLS: Ttls = { localMs: 0, freshMs: 1000, retentionMs: LONG_RETENTION_MS } + pure val READ_BUDGET = 5 + // The band's codes for the fixture's bytes: a compressed and a corrupt frame + // carrying VALUE_ONE, and a code of a class the module names no rule for + // (the hundred above UNSUPPORTED_ENCODING). + pure val COMPRESSED_ONE = Payloads::COMPRESSED + VALUE_ONE + pure val CORRUPT_ONE = Payloads::CORRUPT + VALUE_ONE + pure val UNNAMED_CLASS = Payloads::UNSUPPORTED_ENCODING + 100 + pure val WALL_SKEW_MS = 100000 + pure val KEY = 0 + pure def call(context: int): Call = { instance: 0, key: KEY, context: context, enabled: true, keyFailed: false } + + type State = { + o: Observation, io: RemoteIO::IO, now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + reads: List[RemoteIO::HeldRead], loads: List[RemoteIO::HeldLoad], loaders: List[int], retained: List[Recovery::Snapshot], + compression: List[str] + } + var s: State + var input: { name: str, choice: int } + + // A stale VALUE_ONE frame (age 1000 at freshness 1000, stamped above the + // zero watermark) is present at init: visible, never fresh, a recovery + // candidate. The tracked reader has no local capacity; `localInit` and + // `untrackedLocalInit` give it one slot. + pure def initial(tracked: bool, capacity: int): State = { + o: empty, io: RemoteIO::NO_IO, now: 0, skew: WALL_SKEW_MS, remoteAvailable: true, tracked: tracked, capacity: capacity, + readFailed: false, dumpFailed: false, writeFailed: false, + closed: List(false, false), memo: List(NO_VALUE, NO_VALUE), requestFlights: List(NO_OWNER, NO_OWNER), processFlights: List(NO_OWNER), + localValues: List(NO_VALUE), localExpires: List(0), lru: List(List()), + remoteValues: List(VALUE_ONE), created: List(WALL_SKEW_MS - 1000), expires: List(60000), watermark: List(0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + reads: List(), loads: List(), loaders: List(), retained: List(), + compression: List() + } + action initialize(tracked: bool, capacity: int): bool = all { + s' = initial(tracked, capacity), input' = { name: "init", choice: -1 } + } + action init = initialize(true, 0) + action localInit = initialize(true, 1) + action untrackedInit = initialize(false, 0) + action untrackedLocalInit = initialize(false, 1) + + // The drivers' loader ordinals are the flights' loaders after every held step. + val ordinalsMatchLoaders = s.loaders.length() == s.o.loaders + + // -- The held path ------------------------------------------------------------- + + action beginWith(context: int, resolved: Resolution, ttls: Ttls): bool = all { + s' = RemoteIO::begin(s, LAYOUT, call(context), resolved, ttls, READ_BUDGET), + input' = { name: "beginCall", choice: context } + }.expect(ordinalsMatchLoaders) + action begin(context: int, resolved: Resolution): bool = beginWith(context, resolved, TTLS) + // The drivers release a read or a decode by its index without a fault of + // their own: whatever fails is the payload's doing. + action read(index: int): bool = all { + s' = RemoteIO::settleRead(s, LAYOUT, index, false, Recovery::ALLOW), + input' = { name: "releaseRead", choice: index } + }.expect(ordinalsMatchLoaders) + action load(index: int): bool = all { + s' = RemoteIO::settleLoad(s, LAYOUT, index, false), + input' = { name: "releaseLoad", choice: index } + }.expect(ordinalsMatchLoaders) + action settle(ordinal: int, value: int): bool = all { + s' = RemoteIO::settleLoader(s, LAYOUT, ordinal, value, false), + input' = { name: "resolveLoader", choice: ordinal } + }.expect(ordinalsMatchLoaders) + // The same two settlements through the compression variants, which report + // the outcome of the decode a step holds. + action readReported(index: int): bool = all { + s' = Compression::settleRead(s, LAYOUT, index, false, Recovery::ALLOW), + input' = { name: "releaseRead", choice: index } + }.expect(ordinalsMatchLoaders) + action settleReported(ordinal: int, value: int): bool = all { + s' = Compression::settleLoader(s, LAYOUT, ordinal, value, false), + input' = { name: "resolveLoader", choice: ordinal } + }.expect(ordinalsMatchLoaders) + + // -- The atomic path ------------------------------------------------------------- + + action atomicBeginWith(resolved: Resolution, ttls: Ttls): bool = all { + s' = Serving::begin(s, LAYOUT, call(0), resolved, ttls), + input' = { name: "beginCall", choice: 0 } + } + action atomicBegin = atomicBeginWith(ALONE, TTLS) + action atomicSettle(index: int, value: int): bool = all { + s' = Serving::settle(s, LAYOUT, index, value), + input' = { name: "resolveLoader", choice: index } + } + + // -- Environment ----------------------------------------------------------------- + + action advance(ms: int): bool = all { s' = Clock::advance(s, ms), input' = { name: "advance", choice: ms } } + // A seed stores a payload code at an age, retained for the given TTL. + action seedWith(payload: int, age: int, retentionMs: int): bool = all { + s' = Remote::seedAged(s, KEY, payload, age, retentionMs), input' = { name: "seed", choice: payload } + } + action seed(payload: int, age: int): bool = seedWith(payload, age, 60000) + action invalidate = all { s' = Serving::invalidate(s, 0, 0), input' = { name: "invalidate", choice: -1 } } + + // -- Payload classes on the held path -------------------------------------------- + + // A compressed fresh frame is held for decoding with its code; the decode + // completes the caller with the value the bytes decode to and warms local + // storage with that value, not the code. + run compressedFreshFrameDecodesToItsValueTest = localInit.then(seed(COMPRESSED_ONE, 0)).then(beginWith(0, WITH_LOCAL, LOCAL_TTLS)) + .expect(s.o.reads == 1 and s.o.loads == 0 and RemoteIO::latestRead(s).read == 0 and RemoteIO::latestRead(s).flight == 0 + and RemoteIO::latestOrdinal(s) == NO_OWNER) + .then(read(0)) + .expect(s.o.loads == 1 and s.o.loaders == 0 and RemoteIO::latestLoad(s).value == COMPRESSED_ONE + and not(RemoteIO::latestLoad(s).recovery) and s.localValues == List(NO_VALUE)) + .then(load(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.localValues == List(VALUE_ONE) and s.localExpires == List(LOCAL_TTLS.localMs) + and s.o.writes == 0 and s.o.loaders == 0 and s.memo == List(VALUE_ONE, NO_VALUE)) + // A corrupt fresh frame is held like any fresh frame; its decode fails by + // its code alone (the drivers release it without a fault) and restarts the + // flight's loader with refill allowed, unfenced under a watermark raised + // since the read, and without a snapshot; the loader's value refills. + run corruptFreshFrameFailsItsDecodeAndRestartsUnfencedTest = init.then(seed(CORRUPT_ONE, 0)).then(begin(0, ALONE)).then(read(0)) + .expect(s.o.loads == 1 and s.o.loaders == 0 and RemoteIO::latestLoad(s).value == CORRUPT_ONE and not(RemoteIO::latestLoad(s).recovery)) + .then(invalidate).then(load(0)) + .expect(s.o.loaders == 1 and s.loaders == List(0) and RemoteIO::latestOrdinal(s) == 0 and s.watermark == List(WALL_SKEW_MS) and s.retained == List() + and s.sources.nth(0).retentionMs == TTLS.retentionMs and s.sources.nth(0).fence == NO_FENCE and s.o.calls == List(CALL_PENDING)) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 1 and s.remoteValues == List(VALUE_TWO) and s.o.recovery == List() + and s.o.classifications == 0 and s.io.sourceErrors == List(0)) + // A stale corrupt frame is the recovery candidate; the recovery decode + // fails by its code and the flight completes with the loader's own error + // and identity under the deserialization label. + run corruptRecoveryCandidateKeepsTheLoadersErrorTest = init.then(seed(CORRUPT_ONE, 1000)).then(begin(0, ALONE)).then(read(0)) + .expect(s.o.loaders == 1 and s.o.loads == 0 and Recovery::retainedFor(s, 0).candidate == CORRUPT_ONE + and s.sources.nth(0).retentionMs == TTLS.retentionMs and s.sources.nth(0).fence == NO_FENCE) + .then(settle(0, SOURCE_ERROR)) + .expect(s.o.calls == List(CALL_PENDING) and s.o.loads == 1 and s.o.classifications == 1 and RemoteIO::latestLoad(s).recovery) + .then(load(0)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.o.recovery == List("deserialization_error") and s.io.sourceErrors == List(1) + and s.retained == List() and s.o.writes == 0) + // A code of a class the module names no rule for (UNNAMED_CLASS) is + // readable and fails no decode, but decodes to nothing: a stale frame + // storing it is no recovery candidate, so the loader's failure is classified + // and reports a miss with the loader's own error and identity, holding no + // recovery decode; no caller completes with the NO_VALUE it decodes to. + run codeWithoutADecodedValueIsNoRecoveryCandidateTest = init + .expect(Payloads::valueOf(UNNAMED_CLASS) == NO_VALUE and not(Payloads::readFails(UNNAMED_CLASS)) and not(Payloads::decodeFails(UNNAMED_CLASS))) + .then(seed(UNNAMED_CLASS, 1000)).then(begin(0, ALONE)).then(read(0)) + .expect(s.o.loaders == 1 and s.o.loads == 0 and Recovery::retainedFor(s, 0).flight == 0 and Recovery::retainedFor(s, 0).candidate == NO_VALUE + and s.sources.nth(0).retentionMs == TTLS.retentionMs and s.sources.nth(0).fence == NO_FENCE) + .then(settle(0, SOURCE_ERROR)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.o.loads == 0 and s.o.classifications == 1 and s.o.recovery == List("miss") + and s.io.sourceErrors == List(1) and s.retained == List() and s.o.writes == 0) + // A bare class code carries no value: a fresh frame spelled Payloads::CORRUPT + // (value 0) decodes to NO_VALUE, so `observe` routes it as a visible frame + // the traversal declined, not as a decode that fails: no decode is held, no + // compression outcome is reported, the snapshot's candidate is NO_VALUE and + // the loader starts with refill allowed and no fence; its value refills. The + // constraint the payloads header states: a compressed or corrupt code + // reaches a decode step only with a positive value. + run bareCorruptCodeIsADeclinedFrameTest = init + .expect(Payloads::valueOf(Payloads::CORRUPT) == NO_VALUE and Payloads::decodeFails(Payloads::CORRUPT)) + .then(seed(Payloads::CORRUPT, 0)).then(begin(0, ALONE)).then(readReported(0)) + .expect(s.o.loads == 0 and s.o.loaders == 1 and s.compression == List() and Recovery::retainedFor(s, 0).candidate == NO_VALUE + and s.sources.nth(0).retentionMs == TTLS.retentionMs and s.sources.nth(0).fence == NO_FENCE) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 1 and s.remoteValues == List(VALUE_TWO) and s.o.recovery == List() + and s.o.classifications == 0 and s.compression == List()) + // A visible frame whose encoding the adapter does not know fails the read + // like an adapter fault: nothing is held, no snapshot is retained, and the + // loader starts with refill denied and no fence, where a miss under the + // same watermark would carry it. The frame stays as it was. + run unsupportedEncodingFailsTheHeldReadTest = init.then(invalidate).then(advance(1)).then(seed(Payloads::UNSUPPORTED_ENCODING, 0)).then(begin(0, ALONE)) + .expect(s.o.reads == 1 and s.watermark == List(WALL_SKEW_MS) and Remote::visible(s, KEY, LAYOUT.operationsPerEntity)) + .then(read(0)) + .expect(s.o.loaders == 1 and s.o.loads == 0 and s.retained == List() and s.sources.nth(0).retentionMs == 0 + and s.sources.nth(0).fence == NO_FENCE and s.io.sourceErrors == List(0)) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 0 and s.remoteValues == List(Payloads::UNSUPPORTED_ENCODING)) + // The failed read denies the refill only: an untracked flight's loader + // still warms local storage for the reply's local TTL. + run unsupportedEncodingWithAnUntrackedLoaderStillWarmsLocalTest = untrackedLocalInit.then(seed(Payloads::UNSUPPORTED_ENCODING, 0)) + .then(beginWith(0, WITH_LOCAL, LOCAL_TTLS)).then(read(0)) + .expect(s.o.loaders == 1 and s.o.loads == 0 and s.sources.nth(0).localMs == LOCAL_TTLS.localMs and s.sources.nth(0).retentionMs == 0 + and s.retained == List()) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 0 and s.localValues == List(VALUE_TWO) and s.localExpires == List(LOCAL_TTLS.localMs)) + // The failed read retains no snapshot, so the loader failure that follows + // is unclassified: the caller completes with the loader's own error, no + // recovery label is reported, no decode is held and nothing is written. + run encodingFailedReadLeavesNoCandidateForTheLoadersFailureTest = init.then(seed(Payloads::UNSUPPORTED_ENCODING, 0)).then(begin(0, ALONE)).then(read(0)) + .expect(s.o.loaders == 1 and s.o.loads == 0 and s.retained == List() and s.sources.nth(0).retentionMs == 0) + .then(settle(0, SOURCE_ERROR)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.io.sourceErrors == List(1) and s.o.classifications == 0 and s.o.recovery == List() + and s.o.loads == 0 and s.o.writes == 0 and s.retained == List() and s.remoteValues == List(Payloads::UNSUPPORTED_ENCODING)) + // The class is judged only on a frame the adapter returns: a fenced + // unsupported frame, and an expired one, are ordinary misses, whose reads + // complete, retain an empty snapshot and refill under the watermark's fence. + run fencedOrExpiredUnsupportedFrameIsAnOrdinaryMissTest = init.then(seed(Payloads::UNSUPPORTED_ENCODING, 0)).then(advance(1)).then(invalidate) + .expect(s.watermark == List(WALL_SKEW_MS + 1) and not(Remote::visible(s, KEY, LAYOUT.operationsPerEntity))) + .then(begin(0, ALONE)).then(read(0)) + .expect(s.o.loaders == 1 and s.o.loads == 0 and s.sources.nth(0).retentionMs == TTLS.retentionMs and s.sources.nth(0).fence == WALL_SKEW_MS + 1 + and Recovery::retainedFor(s, 0).flight == 0 and Recovery::retainedFor(s, 0).candidate == NO_VALUE) + .then(advance(1)).then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 1 and s.remoteValues == List(VALUE_TWO)) + .then(seedWith(Payloads::UNSUPPORTED_ENCODING, 0, 1000)).then(advance(1000)) + .expect(not(Remote::retained(s, KEY)) and s.remoteValues == List(Payloads::UNSUPPORTED_ENCODING)) + .then(begin(0, ALONE)).then(read(1)) + .expect(s.o.loaders == 2 and s.o.loads == 0 and RemoteIO::latestOrdinal(s) == 1 and s.sources.nth(1).retentionMs == TTLS.retentionMs + and s.sources.nth(1).fence == WALL_SKEW_MS + 1 and Recovery::retainedFor(s, 1).candidate == NO_VALUE) + .then(settle(1, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.writes == 2 and s.remoteValues == List(VALUE_TWO)) + + // -- Payload classes on the atomic path ------------------------------------------ + + // The same judgment at the atomic release: a stale frame's miss refills, + // an unsupported encoding's read counts, fails and denies its refill. + run atomicReadOfAnUnsupportedEncodingDeniesTheRefillTest = init.then(atomicBegin) + .expect(s.o.reads == 1 and s.o.loads == 0 and s.o.loaders == 1 and s.o.calls == List(CALL_PENDING) and s.sources.nth(0).retentionMs == TTLS.retentionMs) + .then(seed(Payloads::UNSUPPORTED_ENCODING, 0)).then(atomicBegin) + .expect(s.o.reads == 2 and s.o.loads == 0 and s.o.loaders == 2 and s.sources.nth(1).retentionMs == 0 and s.sources.nth(1).fence == NO_FENCE) + .then(atomicSettle(1, VALUE_TWO)) + .expect(s.o.calls == List(CALL_PENDING, VALUE_TWO) and s.o.writes == 0 and s.remoteValues == List(Payloads::UNSUPPORTED_ENCODING)) + .then(atomicSettle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO, VALUE_TWO) and s.o.writes == 1 and s.o.writeTtls == List(TTLS.retentionMs) and s.remoteValues == List(VALUE_TWO)) + // The atomic release serves a fresh compressed frame's decoded value, its + // decode counted. + run atomicReleaseServesACompressedFramesDecodedValueTest = init.then(seed(COMPRESSED_ONE, 0)).then(atomicBegin) + .expect(s.o.calls == List(VALUE_ONE) and s.o.reads == 1 and s.o.loads == 1 and s.o.loaders == 0 and s.remoteValues == List(COMPRESSED_ONE)) + // The documented limit (payloads.qnt): the atomic release has no decode + // step, so a fresh corrupt frame serves the value its bytes would have + // carried; a profile composed over the atomic path must not seed + // decode-fault payloads. + run atomicReleaseOfAFreshCorruptFrameServesWithoutADecodeStepTest = init.then(seed(CORRUPT_ONE, 0)).then(atomicBegin) + .expect(s.o.calls == List(VALUE_ONE) and s.o.reads == 1 and s.o.loads == 1 and s.o.loaders == 0) + + // -- The tracked retention cap ----------------------------------------------------- + + // A tracked flight's refill is written with the capped retention while its + // snapshot keeps the reply's maximum. + run trackedRefillIsCappedWhileTheSnapshotMaximumIsNotTest = init.then(beginWith(0, ALONE, LONG_TTLS)).then(read(0)) + .expect(s.o.loaders == 1 and s.sources.nth(0).retentionMs == Remote::TRACKED_RETENTION_CAP_MS + and Recovery::retainedFor(s, 0).maximum == LONG_RETENTION_MS and Recovery::retainedFor(s, 0).candidate == VALUE_ONE) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writeTtls == List(Remote::TRACKED_RETENTION_CAP_MS) and s.expires == List(Remote::TRACKED_RETENTION_CAP_MS)) + // An untracked flight's refill is retained for the reply's full retention. + run untrackedRefillIsNotCappedTest = untrackedInit.then(beginWith(0, ALONE, LONG_TTLS)).then(read(0)) + .expect(s.o.loaders == 1 and s.sources.nth(0).retentionMs == LONG_RETENTION_MS and Recovery::retainedFor(s, 0).maximum == LONG_RETENTION_MS) + .then(settle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writeTtls == List(LONG_RETENTION_MS) and s.expires == List(LONG_RETENTION_MS)) + // The atomic path caps the same way. + run atomicTrackedRefillIsCappedTest = init.then(atomicBeginWith(ALONE, LONG_TTLS)) + .expect(s.o.loaders == 1 and s.sources.nth(0).retentionMs == Remote::TRACKED_RETENTION_CAP_MS) + .then(atomicSettle(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writeTtls == List(Remote::TRACKED_RETENTION_CAP_MS) and s.expires == List(Remote::TRACKED_RETENTION_CAP_MS)) + // The cap is physical: a candidate one millisecond older than the cap but + // inside the reply's maximum still serves, and nothing is written. + run capDoesNotClampTheRecoveryMaximumTest = init.then(beginWith(0, ALONE, LONG_TTLS)).then(read(0)).then(settle(0, SOURCE_ERROR)) + .expect(s.o.loads == 1 and s.o.classifications == 1 and RemoteIO::latestLoad(s).recovery) + .then(advance(Remote::TRACKED_RETENTION_CAP_MS + 1 - 1000)) + .expect(Clock::wallOf(s) - s.retained.nth(0).created == 3600001 and s.retained.nth(0).maximum == 7200000 and s.sources.nth(0).retentionMs == 3600000) + .then(load(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.recovery == List("served") and s.o.writeTtls == List() and s.o.writes == 0 and s.retained == List()) + + // -- The judgments themselves -------------------------------------------------------- + + // The compression outcome a decode reports, the value each class decodes + // to, and which classes fail the read or the decode; the class is the + // code's hundred, the value its remainder. + run decodeOutcomeAndValueOfTest = init + .expect(Payloads::decodeOutcome(COMPRESSED_ONE) == List("decompressed") and Payloads::decodeOutcome(CORRUPT_ONE) == List("fallback_raw") + and Payloads::decodeOutcome(VALUE_ABSENT) == List() and Payloads::decodeOutcome(Payloads::UNSUPPORTED_ENCODING) == List() + and Payloads::valueOf(VALUE_ABSENT) == VALUE_ABSENT and Payloads::valueOf(NO_VALUE) == NO_VALUE + and Payloads::valueOf(COMPRESSED_ONE) == VALUE_ONE and Payloads::valueOf(CORRUPT_ONE) == VALUE_ONE + and Payloads::valueOf(Payloads::UNSUPPORTED_ENCODING) == NO_VALUE + and Payloads::readFails(Payloads::UNSUPPORTED_ENCODING) and not(Payloads::readFails(CORRUPT_ONE)) + and Payloads::decodeFails(CORRUPT_ONE) and not(Payloads::decodeFails(COMPRESSED_ONE)) + and Payloads::classOf(VALUE_ONE) == 0 and Payloads::classOf(COMPRESSED_ONE) == 1 and Payloads::classOf(CORRUPT_ONE) == 2 + and Payloads::classOf(Payloads::UNSUPPORTED_ENCODING) == 3 and Payloads::valueOf(Payloads::COMPRESSED) == NO_VALUE) + // The class rules do not depend on the value: a compressed frame carrying + // VALUE_TWO is judged like one carrying VALUE_ONE, and its held decode + // completes the caller with VALUE_TWO and warms local with it. + run compressedFrameCarryingAnotherValueDecodesToItTest = init + .expect(Payloads::valueOf(Payloads::COMPRESSED + VALUE_TWO) == VALUE_TWO and Payloads::valueOf(Payloads::CORRUPT + VALUE_TWO) == VALUE_TWO + and Payloads::decodeOutcome(Payloads::COMPRESSED + VALUE_TWO) == List("decompressed") and Payloads::decodeOutcome(Payloads::CORRUPT + VALUE_TWO) == List("fallback_raw") + and not(Payloads::decodeFails(Payloads::COMPRESSED + VALUE_TWO)) and Payloads::decodeFails(Payloads::CORRUPT + VALUE_TWO) + and not(Payloads::readFails(Payloads::COMPRESSED + VALUE_TWO)) and not(Payloads::readFails(Payloads::CORRUPT + VALUE_TWO))) + .then(localInit).then(seed(Payloads::COMPRESSED + VALUE_TWO, 0)).then(beginWith(0, WITH_LOCAL, LOCAL_TTLS)).then(read(0)) + .expect(s.o.loads == 1 and RemoteIO::latestLoad(s).value == Payloads::COMPRESSED + VALUE_TWO) + .then(load(0)) + .expect(s.o.calls == List(VALUE_TWO) and s.localValues == List(VALUE_TWO) and s.o.writes == 0 and s.o.loaders == 0) + + // -- The compression channel ----------------------------------------------------- + + // A read that holds a fresh compressed frame's decode reports "decompressed" + // as the decode is held, once; the decode's settlement adds nothing, an + // uncompressed fresh frame's decode reports nothing, and a read that holds + // no decode (a stale frame's miss) reports nothing. + run freshCompressedReadReportsDecompressedTest = init.then(seed(COMPRESSED_ONE, 0)).then(begin(0, ALONE)).then(readReported(0)) + .expect(s.o.loads == 1 and s.compression == List("decompressed") and RemoteIO::latestLoad(s).value == COMPRESSED_ONE) + .then(load(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.compression == List("decompressed")) + .then(seed(VALUE_TWO, 0)).then(begin(1, ALONE)).then(readReported(1)) + .expect(s.o.loads == 2 and s.compression == List("decompressed")) + .then(load(1)) + .expect(s.o.calls == List(VALUE_ONE, VALUE_TWO)) + .then(seed(VALUE_TWO, 1000)).then(begin(0, ALONE)).then(readReported(2)) + .expect(s.o.loads == 2 and s.o.loaders == 1 and s.compression == List("decompressed") and Recovery::retainedFor(s, 2).candidate == VALUE_TWO) + // A recovery decode's outcome is reported at the loader's failure that + // holds it, not at the read that retained the candidate: "fallback_raw" for + // a corrupt candidate, nothing for an uncompressed one; the failed recovery + // decode's settlement adds nothing. + run corruptRecoveryCandidateReportsFallbackRawAtTheLoadersFailureTest = init.then(begin(0, ALONE)).then(readReported(0)).then(settleReported(0, SOURCE_ERROR)) + .expect(s.o.loads == 1 and RemoteIO::latestLoad(s).recovery and s.compression == List()) + .then(load(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.recovery == List("served") and s.compression == List()) + .then(seed(CORRUPT_ONE, 1000)).then(begin(1, ALONE)).then(readReported(1)) + .expect(s.o.loads == 1 and s.compression == List() and Recovery::retainedFor(s, 1).candidate == CORRUPT_ONE) + .then(settleReported(1, SOURCE_ERROR)) + .expect(s.o.loads == 2 and s.compression == List("fallback_raw") and RemoteIO::latestLoad(s).recovery + and RemoteIO::latestLoad(s).value == CORRUPT_ONE) + .then(load(1)) + .expect(s.o.calls == List(VALUE_ONE, SOURCE_ERROR) and s.o.recovery == List("served", "deserialization_error") + and s.compression == List("fallback_raw") and s.io.sourceErrors == List(0, 2)) +} diff --git a/test/fixtures/kernel/request-only.qnt b/test/fixtures/kernel/request-only.qnt index dbea2e91..574e3c40 100644 --- a/test/fixtures/kernel/request-only.qnt +++ b/test/fixtures/kernel/request-only.qnt @@ -13,7 +13,7 @@ module request_only { import diagnostics as Diag from "../../../formal/kernel/diagnostics" import policy_gate as Gate from "../../../formal/kernel/policy-gate" - pure val LAYOUT: Serving::Layout = { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: true } + pure val LAYOUT: Serving::Layout = { keysPerInstance: 1, keysPerScope: 1, persistentContexts: 2, operationsPerEntity: 1, probeSourceScope: true, policyProvider: true } pure val ALL: Resolution = { layers: { request: true, local: true, remote: true }, coalesce: true } pure val NO_REQUEST: Resolution = { layers: { request: false, local: true, remote: true }, coalesce: true } diff --git a/test/fixtures/kernel/shadow-jobs.qnt b/test/fixtures/kernel/shadow-jobs.qnt new file mode 100644 index 00000000..c337181f --- /dev/null +++ b/test/fixtures/kernel/shadow-jobs.qnt @@ -0,0 +1,242 @@ +// The shadow job registry (shadow) over the atomic remote lifecycle with held +// writes and atomic stale-on-error (remote_writes): one instance, two keys, one +// persistent context, one job slot, replies immediate. Pins the seams the +// shadow-layers profile excludes or cannot reach: a failed source recovering +// at once from the candidate its atomic read retained (the decode counted, the +// value served, `served`), a miss reported without a candidate, DENY never +// recovering; a caller's held dump fenced by a wall rollback completing the +// caller without a write; a dark job's fill carrying the fence its C0 read +// observed (C58) and ending `fill_fenced` under a watermark the wall does not +// clear, at settlement before any dump and again at dump release after a wall +// rollback; a dark C0 read that fails ending `redis_error` with nothing filled +// and a confirmation read that fails ending `confirmation_error`; a scope +// closed between admission and release admitting no job; a dump released +// after the job's budget dispatching no write while a write released after it +// still stores; a detached source owning nobody. +module shadow_jobs { + import conformance_observations.* from "../../../formal/conformance-observations" + import encodings.* from "../../../formal/kernel/encodings" + import calls.* from "../../../formal/kernel/calls" + import layer_policy.* from "../../../formal/kernel/layer-policy" + import serving as Serving from "../../../formal/kernel/serving" + import remote_frames as Remote from "../../../formal/kernel/remote-frames" + import remote_writes as Writes from "../../../formal/kernel/remote-writes" + import shadow as Shadow from "../../../formal/kernel/shadow" + import deadlines as Deadlines from "../../../formal/kernel/deadlines" + import recovery as Recovery from "../../../formal/kernel/recovery" + import flights as Flights from "../../../formal/kernel/flights" + import clock as Clock from "../../../formal/kernel/clock" + import policy_gate as Gate from "../../../formal/kernel/policy-gate" + + pure val LAYOUT: Serving::Layout = { keysPerInstance: 2, keysPerScope: 2, persistentContexts: 1, operationsPerEntity: 1, probeSourceScope: true, policyProvider: true } + pure val SERVING: Resolution = { layers: { request: false, local: false, remote: true }, coalesce: false } + pure val DARK: Resolution = { layers: { request: false, local: false, remote: false }, coalesce: false } + pure val TTLS: Ttls = { localMs: 0, freshMs: 1000, retentionMs: 5000 } + pure val SHADOWING: Shadow::Shadowing = { hook: true, selected: true, capacity: 1, budgetMs: 100, logging: false } + pure val UNSELECTED: Shadow::Shadowing = { hook: true, selected: false, capacity: 1, budgetMs: 100, logging: false } + pure def call(key: int): Call = { instance: 0, key: key, context: 1, enabled: true, keyFailed: false } + // A call inside the one persistent scope, the scope a run can close. + pure def scopedCall(key: int): Call = { instance: 0, key: key, context: 0, enabled: true, keyFailed: false } + + type State = { + o: Observation, now: int, skew: int, remoteAvailable: bool, tracked: bool, capacity: int, + readFailed: bool, dumpFailed: bool, writeFailed: bool, + closed: List[bool], memo: List[int], requestFlights: List[int], processFlights: List[int], + localValues: List[int], localExpires: List[int], lru: List[List[int]], + remoteValues: List[int], created: List[int], expires: List[int], watermark: List[int], + sources: List[Serving::LayeredSource], owners: List[int], memoSlots: List[int], held: List[Gate::Held], + dumps: List[Writes::HeldDump], writes: List[Writes::HeldWrite], retained: List[Recovery::Snapshot], + jobs: List[Shadow::Job], deadlines: List[Deadlines::Due] + } + var s: State + var input: { name: str, choice: int } + + action init = all { + input' = { name: "init", choice: -1 }, + s' = { + o: empty, now: 0, skew: 100000, remoteAvailable: true, tracked: true, capacity: 0, + readFailed: false, dumpFailed: false, writeFailed: false, + closed: List(false), memo: List(NO_VALUE, NO_VALUE), requestFlights: List(NO_OWNER, NO_OWNER), processFlights: List(NO_OWNER, NO_OWNER), + localValues: List(NO_VALUE, NO_VALUE), localExpires: List(0, 0), lru: List(List()), + remoteValues: List(NO_VALUE, NO_VALUE), created: List(0, 0), expires: List(0, 0), watermark: List(0, 0), + sources: List(), owners: List(), memoSlots: List(), held: List(), + dumps: List(), writes: List(), retained: List(), jobs: List(), deadlines: List() + } + } + action beginWith(key: int, resolved: Resolution, classifier: int, shadowing: Shadow::Shadowing): bool = all { + input' = { name: "beginCall", choice: key }, + s' = Shadow::begin(s, LAYOUT, call(key), resolved, TTLS, classifier, shadowing) + } + action resolve(source: int, value: int): bool = all { + input' = { name: "resolveLoader", choice: source }, s' = Shadow::settle(s, LAYOUT, source, value, false) + } + action reject(source: int): bool = all { + input' = { name: "rejectLoader", choice: source }, s' = Shadow::settle(s, LAYOUT, source, SOURCE_ERROR, false) + } + action releaseDump(dump: int): bool = all { input' = { name: "releaseDump", choice: dump }, s' = Shadow::releaseDump(s, LAYOUT, dump, false) } + action releaseWrite(write: int): bool = all { input' = { name: "releaseWrite", choice: write }, s' = Shadow::releaseWrite(s, LAYOUT, write, false) } + action failDump(dump: int): bool = all { input' = { name: "failDump", choice: dump }, s' = Shadow::releaseDump(s, LAYOUT, dump, true) } + action failWrite(write: int): bool = all { input' = { name: "failWrite", choice: write }, s' = Shadow::releaseWrite(s, LAYOUT, write, true) } + // The adapter's read fault, in force for every read until switched off. + action readFault(failed: bool): bool = all { input' = { name: "readFault", choice: if (failed) 1 else 0 }, s' = { readFailed: failed, ...s } } + // A policy reply the drivers hold: admission alone, then the release by its + // policy call, with the scope closed in between. + action admitHeld(key: int): bool = all { input' = { name: "beginCall", choice: key }, s' = Serving::admit(s, LAYOUT, scopedCall(key)) } + action releaseHeld(policyCall: int, resolved: Resolution): bool = all { + input' = { name: "releasePolicy", choice: policyCall }, + s' = Shadow::release(s, LAYOUT, policyCall, resolved, TTLS, Recovery::ALLOW, SHADOWING) + } + action closeScope(context: int): bool = all { input' = { name: "closeScope", choice: context }, s' = Serving::closeScope(s, LAYOUT, context) } + // A reply whose retention exceeds the tracked cap. + pure val LONG_TTLS: Ttls = { localMs: 0, freshMs: 1000, retentionMs: Remote::TRACKED_RETENTION_CAP_MS * 2 } + action beginLong(key: int, resolved: Resolution, shadowing: Shadow::Shadowing): bool = all { + input' = { name: "beginCall", choice: key }, + s' = Shadow::begin(s, LAYOUT, call(key), resolved, LONG_TTLS, Recovery::ALLOW, shadowing) + } + action advanceBy(ms: int): bool = all { input' = { name: "advance", choice: ms }, s' = Shadow::advance(s, ms) } + action seedAged(key: int, value: int, age: int): bool = all { + input' = { name: "seed", choice: key }, s' = Remote::seedAged(s, key, value, age, 60000) + } + action invalidate(entity: int): bool = all { input' = { name: "invalidate", choice: entity }, s' = Serving::invalidate(s, entity, 0) } + action rollback(ms: int): bool = all { input' = { name: "rollback", choice: ms }, s' = Clock::shiftWall(s, -ms) } + action step = any { beginWith(0, DARK, Recovery::ALLOW, SHADOWING), resolve(0, VALUE_ONE), advanceBy(1) } + + // A visible frame past the reply's freshness is retained at the atomic read + // and served when the source fails: classified once, decoded once, `served`. + run atomicRecoveryServesARetainedCandidateTest = init.then(seedAged(0, VALUE_ONE, 2000)) + .then(beginWith(0, SERVING, Recovery::ALLOW, UNSELECTED)) + .expect(s.o.calls == List(CALL_PENDING) and s.o.reads == 1 and s.o.loads == 0 and s.retained.length() == 1) + .then(reject(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.classifications == 1 and s.o.recovery == List("served") + and s.o.loads == 1 and s.o.dumps == 0 and s.retained == List()) + run atomicRecoveryWithoutACandidateReportsAMissTest = init + .then(beginWith(0, SERVING, Recovery::ALLOW, UNSELECTED)).then(reject(0)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.o.classifications == 1 and s.o.recovery == List("miss") and s.o.loads == 0) + run deniedClassifierNeverRecoversTest = init.then(seedAged(0, VALUE_ONE, 2000)) + .then(beginWith(0, SERVING, Recovery::DENY, UNSELECTED)).then(reject(0)) + .expect(s.o.calls == List(SOURCE_ERROR) and s.o.classifications == 1 and s.o.recovery == List() and s.o.loads == 0) + run noClassifierRetainsNothingTest = init.then(seedAged(0, VALUE_ONE, 2000)) + .then(beginWith(0, SERVING, Recovery::NONE, UNSELECTED)).expect(s.retained == List()) + .then(reject(0)).expect(s.o.calls == List(SOURCE_ERROR) and s.o.classifications == 0 and s.o.recovery == List()) + // A caller's refill: the dump held at settlement, the write dispatched at + // its release with the retention captured and stamped then, the frame + // stored and the caller completed at the write's release. + run heldRefillCompletesTheCallerAtItsWriteTest = init + .then(beginWith(0, SERVING, Recovery::ALLOW, UNSELECTED)).then(resolve(0, VALUE_TWO)) + .expect(s.o.calls == List(CALL_PENDING) and s.o.dumps == 1 and s.o.writes == 0 and Writes::holdsDump(s, 0)) + .then(advanceBy(7)).then(releaseDump(0)) + .expect(s.o.writes == 1 and s.o.writeTtls == List(5000) and Writes::holdsWrite(s, 0) and s.writes.nth(0).stamp == 100007) + .then(releaseWrite(0)) + .expect(s.o.calls == List(VALUE_TWO) and s.remoteValues == List(VALUE_TWO, NO_VALUE) and s.created == List(100007, 0) + and s.expires == List(5007, 0) and s.writes == List()) + // A wall rollback below the fence the miss observed stops the write at the + // dump's release; the caller completes with its value all the same. + run rolledBackWallFencesAHeldDumpTest = init.then(invalidate(0)).then(advanceBy(1)) + .then(beginWith(0, SERVING, Recovery::ALLOW, UNSELECTED)) + .expect(s.sources.nth(0).fence == 100000) + .then(resolve(0, VALUE_ONE)).expect(s.o.dumps == 1 and s.o.calls == List(CALL_PENDING)) + .then(rollback(1)).then(releaseDump(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.writes == 0 and s.dumps == List() and s.remoteValues == List(NO_VALUE, NO_VALUE)) + // A dark job's fill carries the fence its C0 read observed: under a + // watermark the wall does not yet clear the fill is fenced at settlement, + // before it serializes: no dump, no write, `fill_fenced` at once. + run darkFillCarriesTheC0FenceTest = init.then(invalidate(0)) + .then(beginWith(0, DARK, Recovery::ALLOW, SHADOWING)) + .expect(s.o.reads == 1 and s.jobs.length() == 1 and s.jobs.nth(0).fence == 100000 and s.sources.nth(0).fence == NO_FENCE) + .then(resolve(0, VALUE_ONE)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.dumps == 0 and s.o.writes == 0 and s.dumps == List() + and s.o.shadow == List("fill_fenced") and s.jobs == List()) + // The fence is judged again when the dump is released: a wall rollback below + // the watermark between settlement and release fences the write. + run rolledBackWallFencesADarkFillAtDumpReleaseTest = init.then(invalidate(0)).then(advanceBy(1)) + .then(beginWith(0, DARK, Recovery::ALLOW, SHADOWING)).then(resolve(0, VALUE_ONE)) + .expect(s.o.dumps == 1 and s.jobs.nth(0).phase == Shadow::SERIALIZING) + .then(rollback(1)).then(releaseDump(0)) + .expect(s.o.writes == 0 and s.o.shadow == List("fill_fenced") and s.jobs == List() and s.dumps == List()) + // The same fill a millisecond later clears the watermark and writes. + run darkFillClearsTheWatermarkAfterItTest = init.then(invalidate(0)).then(advanceBy(1)) + .then(beginWith(0, DARK, Recovery::ALLOW, SHADOWING)).then(resolve(0, VALUE_ONE)).then(releaseDump(0)) + .expect(s.o.writes == 1 and s.o.shadow == List()) + .then(releaseWrite(0)).expect(s.o.shadow == List("filled") and s.remoteValues == List(VALUE_ONE, NO_VALUE)) + // A dump released after the job's budget dispatches no write; a write + // released after it still stores; neither adds a label after `timeout`. + run dumpReleasedAfterTheBudgetDispatchesNoWriteTest = init + .then(beginWith(0, DARK, Recovery::ALLOW, SHADOWING)).then(resolve(0, VALUE_ONE)) + .expect(s.o.dumps == 1 and s.jobs.nth(0).phase == Shadow::SERIALIZING) + .then(advanceBy(100)).expect(s.o.shadow == List("timeout") and s.jobs.nth(0).timedOut and s.deadlines == List()) + .then(releaseDump(0)) + .expect(s.o.writes == 0 and s.o.shadow == List("timeout") and s.jobs == List() and s.dumps == List()) + run writeReleasedAfterTheBudgetStillStoresTest = init + .then(beginWith(0, DARK, Recovery::ALLOW, SHADOWING)).then(resolve(0, VALUE_ONE)).then(releaseDump(0)) + .expect(s.o.writes == 1 and s.jobs.nth(0).phase == Shadow::WRITING) + .then(advanceBy(100)).expect(s.o.shadow == List("timeout")) + .then(releaseWrite(0)) + .expect(s.remoteValues == List(VALUE_ONE, NO_VALUE) and s.o.shadow == List("timeout") and s.jobs == List()) + // A dump fault along a caller's held refill dispatches no write and completes + // the caller; a write fault stores nothing and completes it all the same. + run heldRefillDumpFaultCompletesWithoutWriteTest = init + .then(beginWith(0, SERVING, Recovery::ALLOW, UNSELECTED)).then(resolve(0, VALUE_TWO)).then(failDump(0)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.dumps == 1 and s.o.writes == 0 and s.dumps == List() and s.remoteValues == List(NO_VALUE, NO_VALUE)) + run heldRefillWriteFaultStoresNothingTest = init + .then(beginWith(0, SERVING, Recovery::ALLOW, UNSELECTED)).then(resolve(0, VALUE_TWO)).then(releaseDump(0)).then(failWrite(0)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.writes == 1 and s.writes == List() and s.remoteValues == List(NO_VALUE, NO_VALUE)) + // A dark fill whose dump or write fails ends `fill_error` with nothing written. + run darkFillDumpFaultEndsFillErrorTest = init + .then(beginWith(0, DARK, Recovery::ALLOW, SHADOWING)).then(resolve(0, VALUE_ONE)).then(failDump(0)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.writes == 0 and s.o.shadow == List("fill_error") and s.jobs == List() and s.dumps == List()) + run darkFillWriteFaultEndsFillErrorTest = init + .then(beginWith(0, DARK, Recovery::ALLOW, SHADOWING)).then(resolve(0, VALUE_ONE)).then(releaseDump(0)).then(failWrite(0)) + .expect(s.o.writes == 1 and s.o.shadow == List("fill_error") and s.remoteValues == List(NO_VALUE, NO_VALUE) and s.writes == List()) + // A dark C0 read that fails ends the job at once: the read counted, no fill + // authority captured, no budget pending, the slot released (the next same-key + // dark job is admitted), the caller's source running on to complete it alone. + run failedDarkC0ReadEndsRedisErrorTest = init.then(readFault(true)) + .then(beginWith(0, DARK, Recovery::ALLOW, SHADOWING)) + .expect(s.o.calls == List(CALL_PENDING) and s.o.reads == 1 and s.o.shadow == List("redis_error") + and s.jobs == List() and s.deadlines == List()) + .then(readFault(false)).then(beginWith(0, DARK, Recovery::ALLOW, SHADOWING)) + .expect(s.o.reads == 2 and s.jobs.length() == 1 and s.jobs.nth(0).source == 1 and s.o.shadow == List("redis_error")) + .then(resolve(0, VALUE_ONE)) + .expect(s.o.calls == List(VALUE_ONE, CALL_PENDING) and s.o.dumps == 0 and s.o.writes == 0 and s.o.shadow == List("redis_error")) + // A confirmation read that fails ends `confirmation_error`: the decode and + // the read counted, no verdict on the bytes, nothing written. + run failedConfirmationReadEndsConfirmationErrorTest = init.then(seedAged(0, VALUE_ONE, 0)) + .then(beginWith(0, DARK, Recovery::ALLOW, SHADOWING)) + .expect(s.o.reads == 1 and s.jobs.nth(0).cached == VALUE_ONE) + .then(readFault(true)).then(resolve(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_TWO) and s.o.loads == 1 and s.o.reads == 2 and s.o.dumps == 0 + and s.o.shadow == List("confirmation_error") and s.jobs == List()) + // A scope closed between admission and release resolves to the bypass + // reply: the caller's own unshared source, no job, no read, no label. + run closedScopeReleaseAdmitsNoJobTest = init.then(admitHeld(0)) + .expect(s.o.policyCalls == 1 and s.o.loaders == 0) + .then(closeScope(0)).then(releaseHeld(0, DARK)) + .expect(s.o.calls == List(CALL_PENDING) and s.o.loaders == 1 and s.o.reads == 0 and s.jobs == List() and s.o.shadow == List()) + .then(resolve(0, VALUE_ONE)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.dumps == 0 and s.jobs == List()) + // A job's fill authority is a tracked flight's: a retention above the cap is + // captured capped and the fill is written with the cap (C18 through + // `serving::authority`, one statement for callers and jobs). + run darkFillRetentionIsCappedForATrackedWriteTest = init + .then(beginLong(0, DARK, SHADOWING)) + .expect(s.jobs.nth(0).ttls.retentionMs == Remote::TRACKED_RETENTION_CAP_MS * 2 and s.sources.nth(0).retentionMs == 0) + .then(resolve(0, VALUE_ONE)).then(releaseDump(0)) + .expect(s.o.writeTtls == List(Remote::TRACKED_RETENTION_CAP_MS) and s.writes.nth(0).retentionMs == Remote::TRACKED_RETENTION_CAP_MS) + // A served job's detached source owns nobody, publishes nothing, is probed + // as not participating; its settlement ends the job and completes no caller. + run servedJobsDetachedSourceCompletesNobodyTest = init.then(seedAged(0, VALUE_ONE, 0)) + .then(beginWith(0, SERVING, Recovery::ALLOW, SHADOWING)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.loaders == 1 and s.o.sourceScopes == List(false) + and Flights::ownedBy(s, 0) == Set() and s.sources.nth(0).retentionMs == 0 and s.jobs.nth(0).cached == VALUE_ONE) + .then(resolve(0, VALUE_TWO)) + .expect(s.o.calls == List(VALUE_ONE) and s.o.shadow == List("mismatch") and s.o.loads == 2 and s.o.reads == 2 and s.o.dumps == 0) + // A budget delivered inside an advance is delivered at its own instant, in + // registration order, before the clock reaches the target. + run budgetsDeliverInRegistrationOrderTest = init + .then(beginWith(0, DARK, Recovery::ALLOW, { hook: true, selected: true, capacity: 2, budgetMs: 100, logging: false })).then(advanceBy(10)) + .then(beginWith(1, DARK, Recovery::ALLOW, { hook: true, selected: true, capacity: 2, budgetMs: 100, logging: false })) + .expect(s.deadlines.length() == 2) + .then(advanceBy(1000)) + .expect(s.o.shadow == List("timeout", "timeout") and s.now == 1010 and s.deadlines == List() + and s.jobs == List() and s.o.calls == List(CALL_PENDING, CALL_PENDING)) +} diff --git a/test/fixtures/layers-witnesses.json b/test/fixtures/layers-witnesses.json new file mode 100644 index 00000000..09ef5b5f --- /dev/null +++ b/test/fixtures/layers-witnesses.json @@ -0,0 +1,14 @@ +{ + "trackedWithoutRemotePublishesReusableLocalTest": { + "source": { + "model": "formal/dialcache-layers-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/layers-witnesses.json/trackedWithoutRemotePublishesReusableLocalTest" + }, + "states": [ + {"input":{"choice":{"#bigint":"5"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"12"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"12"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} + ] + } +} diff --git a/test/fixtures/local-failure-witnesses.json b/test/fixtures/local-failure-witnesses.json index 2e642f6f..cf9075c3 100644 --- a/test/fixtures/local-failure-witnesses.json +++ b/test/fixtures/local-failure-witnesses.json @@ -7,573 +7,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/local-failure-witnesses.json/localReadFailureFallsThroughAndPreservesOldLocalTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "localFault" - }, - "mbt::actionTaken": "localFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "localFault" - }, - "mbt::actionTaken": "localFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"localFault"},"mbt::actionTaken":"localFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"localFault"},"mbt::actionTaken":"localFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} ] } }, @@ -585,638 +27,16 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/local-failure-witnesses.json/localReadFailureSkipsSourcePublicationButMemoizesTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "localFault" - }, - "mbt::actionTaken": "localFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "localFault" - }, - "mbt::actionTaken": "localFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"localFault"},"mbt::actionTaken":"localFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"localFault"},"mbt::actionTaken":"localFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} ] } }, @@ -1228,634 +48,16 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/local-failure-witnesses.json/localWriteFailureKeepsSourceAndRequestMemoTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "localFault" - }, - "mbt::actionTaken": "localFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "localFault" - }, - "mbt::actionTaken": "localFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"localFault"},"mbt::actionTaken":"localFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"localFault"},"mbt::actionTaken":"localFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} ] } }, @@ -1867,567 +69,30 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/local-failure-witnesses.json/sourceFailureKeepsPreviouslyAcceptedStorageTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "localFault" - }, - "mbt::actionTaken": "localFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "localFault" - }, - "mbt::actionTaken": "localFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"localFault"},"mbt::actionTaken":"localFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"localFault"},"mbt::actionTaken":"localFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}}}} + ] + } + }, + { + "regression": "rejectedSourceDoesNotSeedLocalTest", + "trace": { + "source": { + "model": "formal/dialcache-local-failure-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/local-failure-witnesses.json/rejectedSourceDoesNotSeedLocalTest" + }, + "states": [ + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } } diff --git a/test/fixtures/policy-shadow-witnesses.json b/test/fixtures/policy-shadow-witnesses.json index 0e0d35c7..12e5c69d 100644 --- a/test/fixtures/policy-shadow-witnesses.json +++ b/test/fixtures/policy-shadow-witnesses.json @@ -5,3183 +5,25 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-shadow-witnesses.json/shadowWalk" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "created": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [] - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [], - "policy": { - "#bigint": "0" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "-1" - }, - "key": { - "#bigint": "-1" - }, - "layer": { - "#bigint": "0" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [] - ], - "now": { - "#bigint": "0" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [], - "policy": { - "#bigint": "0" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "-1" - }, - "key": { - "#bigint": "-1" - }, - "layer": { - "#bigint": "0" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "500" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "500" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [], - "policy": { - "#bigint": "0" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "-1" - }, - "key": { - "#bigint": "-1" - }, - "layer": { - "#bigint": "0" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "-1" - }, - "key": { - "#bigint": "-1" - }, - "layer": { - "#bigint": "0" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [ - { - "call": { - "context": { - "#bigint": "0" - }, - "enabled": true, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "keyFailed": false - }, - "caller": { - "#bigint": "0" - }, - "policyCall": { - "#bigint": "0" - } - } - ], - "localExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "-1" - }, - "key": { - "#bigint": "-1" - }, - "layer": { - "#bigint": "0" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "2500" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "3" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "100000" - }, - "sources": [], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "2500" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "3" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "99000" - }, - "sources": [], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "2500" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": true, - "receipt": { - "caller": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "3" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "99000" - }, - "sources": [], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "dumpFault" - }, - "mbt::actionTaken": "dumpFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": true, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "2500" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": true, - "receipt": { - "caller": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "3" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "99000" - }, - "sources": [], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "writeFault" - }, - "mbt::actionTaken": "writeFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": true, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "2500" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": true, - "receipt": { - "caller": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "3" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "99000" - }, - "sources": [], - "writeFailed": true - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": true, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [ - { - "call": { - "context": { - "#bigint": "0" - }, - "enabled": true, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "1" - }, - "keyFailed": false - }, - "caller": { - "#bigint": "1" - }, - "policyCall": { - "#bigint": "1" - } - } - ], - "localExpires": [ - { - "#bigint": "2500" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": true, - "receipt": { - "caller": { - "#bigint": "0" - }, - "key": { - "#bigint": "0" - }, - "layer": { - "#bigint": "3" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "99000" - }, - "sources": [], - "writeFailed": true - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": true, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "2500" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - }, - { - "#bigint": "0" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "0" - } - ], - "providerFailed": false, - "readFailed": true, - "receipt": { - "caller": { - "#bigint": "1" - }, - "key": { - "#bigint": "1" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "99000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "1" - }, - "localMs": { - "#bigint": "2000" - }, - "result": { - "#bigint": "0" - }, - "retentionMs": { - "#bigint": "0" - }, - "shared": true - } - ], - "writeFailed": true - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": true, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "2500" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - }, - { - "#bigint": "0" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": true, - "receipt": { - "caller": { - "#bigint": "1" - }, - "key": { - "#bigint": "1" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "99000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "1" - }, - "localMs": { - "#bigint": "2000" - }, - "result": { - "#bigint": "3" - }, - "retentionMs": { - "#bigint": "0" - }, - "shared": true - } - ], - "writeFailed": true - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": true, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "2500" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - }, - { - "#bigint": "0" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "1" - }, - "key": { - "#bigint": "1" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "99000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "1" - }, - "localMs": { - "#bigint": "2000" - }, - "result": { - "#bigint": "3" - }, - "retentionMs": { - "#bigint": "0" - }, - "shared": true - } - ], - "writeFailed": true - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "dumpFault" - }, - "mbt::actionTaken": "dumpFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "2500" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - }, - { - "#bigint": "0" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "1" - }, - "key": { - "#bigint": "1" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "99000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "1" - }, - "localMs": { - "#bigint": "2000" - }, - "result": { - "#bigint": "3" - }, - "retentionMs": { - "#bigint": "0" - }, - "shared": true - } - ], - "writeFailed": true - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "writeFault" - }, - "mbt::actionTaken": "writeFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "2500" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - }, - { - "#bigint": "0" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "1" - }, - "key": { - "#bigint": "1" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "99000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "1" - }, - "localMs": { - "#bigint": "2000" - }, - "result": { - "#bigint": "3" - }, - "retentionMs": { - "#bigint": "0" - }, - "shared": true - } - ], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [ - { - "call": { - "context": { - "#bigint": "0" - }, - "enabled": true, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "1" - }, - "keyFailed": false - }, - "caller": { - "#bigint": "2" - }, - "policyCall": { - "#bigint": "2" - } - } - ], - "localExpires": [ - { - "#bigint": "2500" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "-1" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "1" - }, - "key": { - "#bigint": "1" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "99000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "1" - }, - "localMs": { - "#bigint": "2000" - }, - "result": { - "#bigint": "3" - }, - "retentionMs": { - "#bigint": "0" - }, - "shared": true - } - ], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "0" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "0" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "2500" - }, - { - "#bigint": "0" - } - ], - "localValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "lru": [ - [ - { - "#bigint": "0" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "owners": [ - { - "#bigint": "-1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "2" - }, - "key": { - "#bigint": "1" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "skew": { - "#bigint": "99000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "1" - }, - "localMs": { - "#bigint": "2000" - }, - "result": { - "#bigint": "3" - }, - "retentionMs": { - "#bigint": "0" - }, - "shared": true - }, - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "1" - }, - "localMs": { - "#bigint": "2000" - }, - "result": { - "#bigint": "0" - }, - "retentionMs": { - "#bigint": "5000" - }, - "shared": true - } - ], - "writeFailed": false - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "created": [ - { - "#bigint": "100000" - }, - { - "#bigint": "99500" - } - ], - "dumpFailed": false, - "expires": [ - { - "#bigint": "5000" - }, - { - "#bigint": "5500" - } - ], - "held": [], - "localExpires": [ - { - "#bigint": "0" - }, - { - "#bigint": "2500" - } - ], - "localValues": [ - { - "#bigint": "0" - }, - { - "#bigint": "1" - } - ], - "lru": [ - [ - { - "#bigint": "1" - } - ] - ], - "now": { - "#bigint": "500" - }, - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "3" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "owners": [ - { - "#bigint": "-1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "1" - } - ], - "policy": { - "#bigint": "1" - }, - "policyErrors": [], - "processFlights": [ - { - "#bigint": "-1" - }, - { - "#bigint": "-1" - } - ], - "providerFailed": false, - "readFailed": false, - "receipt": { - "caller": { - "#bigint": "2" - }, - "key": { - "#bigint": "1" - }, - "layer": { - "#bigint": "4" - }, - "localExpires": { - "#bigint": "0" - }, - "localValue": { - "#bigint": "0" - } - }, - "remoteValues": [ - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "skew": { - "#bigint": "99000" - }, - "sources": [ - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "1" - }, - "localMs": { - "#bigint": "2000" - }, - "result": { - "#bigint": "3" - }, - "retentionMs": { - "#bigint": "0" - }, - "shared": true - }, - { - "fence": { - "#bigint": "0" - }, - "instance": { - "#bigint": "0" - }, - "key": { - "#bigint": "1" - }, - "localMs": { - "#bigint": "2000" - }, - "result": { - "#bigint": "1" - }, - "retentionMs": { - "#bigint": "5000" - }, - "shared": true - } - ], - "writeFailed": false - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"created":[{"#bigint":"0"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"0"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"0"},{"#bigint":"0"}],"localValues":[{"#bigint":"0"},{"#bigint":"0"}],"lru":[[]],"now":{"#bigint":"0"},"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[],"policy":{"#bigint":"0"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"-1"},"key":{"#bigint":"-1"},"layer":{"#bigint":"0"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"0"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"1"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"0"},{"#bigint":"0"}],"localValues":[{"#bigint":"0"},{"#bigint":"0"}],"lru":[[]],"now":{"#bigint":"0"},"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[],"policy":{"#bigint":"0"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"-1"},"key":{"#bigint":"-1"},"layer":{"#bigint":"0"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"500"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"500"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"0"},{"#bigint":"0"}],"localValues":[{"#bigint":"0"},{"#bigint":"0"}],"lru":[[]],"now":{"#bigint":"500"},"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[],"policy":{"#bigint":"0"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"-1"},"key":{"#bigint":"-1"},"layer":{"#bigint":"0"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"0"},{"#bigint":"0"}],"localValues":[{"#bigint":"0"},{"#bigint":"0"}],"lru":[[]],"now":{"#bigint":"500"},"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"-1"},"key":{"#bigint":"-1"},"layer":{"#bigint":"0"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[{"call":{"context":{"#bigint":"0"},"enabled":true,"instance":{"#bigint":"0"},"key":{"#bigint":"0"},"keyFailed":false},"caller":{"#bigint":"0"},"policyCall":{"#bigint":"0"}}],"localExpires":[{"#bigint":"0"},{"#bigint":"0"}],"localValues":[{"#bigint":"0"},{"#bigint":"0"}],"lru":[[]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"-1"},"key":{"#bigint":"-1"},"layer":{"#bigint":"0"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"2500"},{"#bigint":"0"}],"localValues":[{"#bigint":"2"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"0"},"key":{"#bigint":"0"},"layer":{"#bigint":"3"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"100000"},"sources":[],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"2500"},{"#bigint":"0"}],"localValues":[{"#bigint":"2"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"0"},"key":{"#bigint":"0"},"layer":{"#bigint":"3"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"99000"},"sources":[],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"1"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"2500"},{"#bigint":"0"}],"localValues":[{"#bigint":"2"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":true,"receipt":{"caller":{"#bigint":"0"},"key":{"#bigint":"0"},"layer":{"#bigint":"3"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"99000"},"sources":[],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"1"},"name":"dumpFault"},"mbt::actionTaken":"dumpFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":true,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"2500"},{"#bigint":"0"}],"localValues":[{"#bigint":"2"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":true,"receipt":{"caller":{"#bigint":"0"},"key":{"#bigint":"0"},"layer":{"#bigint":"3"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"99000"},"sources":[],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"1"},"name":"writeFault"},"mbt::actionTaken":"writeFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":true,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"2500"},{"#bigint":"0"}],"localValues":[{"#bigint":"2"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":true,"receipt":{"caller":{"#bigint":"0"},"key":{"#bigint":"0"},"layer":{"#bigint":"3"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"99000"},"sources":[],"writeFailed":true}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":true,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[{"call":{"context":{"#bigint":"0"},"enabled":true,"instance":{"#bigint":"0"},"key":{"#bigint":"1"},"keyFailed":false},"caller":{"#bigint":"1"},"policyCall":{"#bigint":"1"}}],"localExpires":[{"#bigint":"2500"},{"#bigint":"0"}],"localValues":[{"#bigint":"2"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"},{"#bigint":"-1"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":true,"receipt":{"caller":{"#bigint":"0"},"key":{"#bigint":"0"},"layer":{"#bigint":"3"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"99000"},"sources":[],"writeFailed":true}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":true,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"2500"},{"#bigint":"0"}],"localValues":[{"#bigint":"2"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"},{"#bigint":"0"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"0"}],"providerFailed":false,"readFailed":true,"receipt":{"caller":{"#bigint":"1"},"key":{"#bigint":"1"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"99000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"1"},"localMs":{"#bigint":"2000"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"0"},"shared":true}],"writeFailed":true}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":true,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"2500"},{"#bigint":"0"}],"localValues":[{"#bigint":"2"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"},{"#bigint":"0"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":true,"receipt":{"caller":{"#bigint":"1"},"key":{"#bigint":"1"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"99000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"1"},"localMs":{"#bigint":"2000"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"0"},"shared":true}],"writeFailed":true}}, + {"input":{"choice":{"#bigint":"0"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":true,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"2500"},{"#bigint":"0"}],"localValues":[{"#bigint":"2"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"},{"#bigint":"0"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"1"},"key":{"#bigint":"1"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"99000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"1"},"localMs":{"#bigint":"2000"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"0"},"shared":true}],"writeFailed":true}}, + {"input":{"choice":{"#bigint":"0"},"name":"dumpFault"},"mbt::actionTaken":"dumpFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"2500"},{"#bigint":"0"}],"localValues":[{"#bigint":"2"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"},{"#bigint":"0"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"1"},"key":{"#bigint":"1"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"99000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"1"},"localMs":{"#bigint":"2000"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"0"},"shared":true}],"writeFailed":true}}, + {"input":{"choice":{"#bigint":"0"},"name":"writeFault"},"mbt::actionTaken":"writeFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"2500"},{"#bigint":"0"}],"localValues":[{"#bigint":"2"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"},{"#bigint":"0"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"1"},"key":{"#bigint":"1"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"99000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"1"},"localMs":{"#bigint":"2000"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"0"},"shared":true}],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[{"call":{"context":{"#bigint":"0"},"enabled":true,"instance":{"#bigint":"0"},"key":{"#bigint":"1"},"keyFailed":false},"caller":{"#bigint":"2"},"policyCall":{"#bigint":"2"}}],"localExpires":[{"#bigint":"2500"},{"#bigint":"0"}],"localValues":[{"#bigint":"2"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"},{"#bigint":"0"},{"#bigint":"-1"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"1"},"key":{"#bigint":"1"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"99000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"1"},"localMs":{"#bigint":"2000"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"0"},"shared":true}],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"0"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"0"}],"held":[],"localExpires":[{"#bigint":"2500"},{"#bigint":"0"}],"localValues":[{"#bigint":"2"},{"#bigint":"0"}],"lru":[[{"#bigint":"0"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"owners":[{"#bigint":"-1"},{"#bigint":"0"},{"#bigint":"1"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"2"},"key":{"#bigint":"1"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"0"}],"skew":{"#bigint":"99000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"1"},"localMs":{"#bigint":"2000"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"0"},"shared":true},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"1"},"localMs":{"#bigint":"2000"},"result":{"#bigint":"0"},"retentionMs":{"#bigint":"5000"},"shared":true}],"writeFailed":false}}, + {"input":{"choice":{"#bigint":"8"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"created":[{"#bigint":"100000"},{"#bigint":"99500"}],"dumpFailed":false,"expires":[{"#bigint":"5000"},{"#bigint":"5500"}],"held":[],"localExpires":[{"#bigint":"0"},{"#bigint":"2500"}],"localValues":[{"#bigint":"0"},{"#bigint":"1"}],"lru":[[{"#bigint":"1"}]],"now":{"#bigint":"500"},"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"owners":[{"#bigint":"-1"},{"#bigint":"0"},{"#bigint":"1"}],"policy":{"#bigint":"1"},"policyErrors":[],"processFlights":[{"#bigint":"-1"},{"#bigint":"-1"}],"providerFailed":false,"readFailed":false,"receipt":{"caller":{"#bigint":"2"},"key":{"#bigint":"1"},"layer":{"#bigint":"4"},"localExpires":{"#bigint":"0"},"localValue":{"#bigint":"0"}},"remoteValues":[{"#bigint":"2"},{"#bigint":"1"}],"skew":{"#bigint":"99000"},"sources":[{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"1"},"localMs":{"#bigint":"2000"},"result":{"#bigint":"3"},"retentionMs":{"#bigint":"0"},"shared":true},{"fence":{"#bigint":"0"},"instance":{"#bigint":"0"},"key":{"#bigint":"1"},"localMs":{"#bigint":"2000"},"result":{"#bigint":"1"},"retentionMs":{"#bigint":"5000"},"shared":true}],"writeFailed":false}} ] } } diff --git a/test/fixtures/policy-witnesses.json b/test/fixtures/policy-witnesses.json index e1b4b054..11a454b6 100644 --- a/test/fixtures/policy-witnesses.json +++ b/test/fixtures/policy-witnesses.json @@ -5,668 +5,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/localHitDoesNotRenewInsertionTtlTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "500" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "500" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "500" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "500" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"4"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"500"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"500"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"500"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"500"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}} ] }, "wallRollbackDoesNotExtendLocalTtlTest": { @@ -675,668 +24,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/wallRollbackDoesNotExtendLocalTtlTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"4"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1000"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}} ] }, "wallRollbackRejectsFutureRemoteFrameTest": { @@ -1345,492 +43,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/wallRollbackRejectsFutureRemoteFrameTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}} ] }, "exactRemoteFreshBoundaryStartsSourceTest": { @@ -1839,492 +59,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/exactRemoteFreshBoundaryStartsSourceTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1000"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}} ] }, "increasedFreshTtlCanReusePhysicallyRetainedValueTest": { @@ -2333,555 +75,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/increasedFreshTtlCanReusePhysicallyRetainedValueTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1000"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}} ] }, "increasedFreshTtlCannotResurrectExpiredStorageTest": { @@ -2890,555 +92,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/increasedFreshTtlCannotResurrectExpiredStorageTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "7" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "7" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "2000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "2000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "2000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "2000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "2000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"7"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"7"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"2000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2000"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"9"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"2000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}} ] }, "remoteHitStartsFullLocalInsertionTtlTest": { @@ -3447,759 +109,18 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/remoteHitStartsFullLocalInsertionTtlTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "500" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "500" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "500" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "500" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"500"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"500"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"500"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"500"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}} ] }, "providerFailureBypassesAndPreservesExistingLocalTest": { @@ -4208,732 +129,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/providerFailureBypassesAndPreservesExistingLocalTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "providerFault" - }, - "mbt::actionTaken": "providerFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [ - { - "errorType": "config_resolution", - "layer": "noop" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [ - { - "errorType": "config_resolution", - "layer": "noop" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "providerFault" - }, - "mbt::actionTaken": "providerFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [ - { - "errorType": "config_resolution", - "layer": "noop" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [ - { - "errorType": "config_resolution", - "layer": "noop" - } - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [ - { - "errorType": "config_resolution", - "layer": "noop" - } - ] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"providerFault"},"mbt::actionTaken":"providerFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[{"errorType":"config_resolution","layer":"noop"}]}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[{"errorType":"config_resolution","layer":"noop"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"providerFault"},"mbt::actionTaken":"providerFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[{"errorType":"config_resolution","layer":"noop"}]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[{"errorType":"config_resolution","layer":"noop"}]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[{"errorType":"config_resolution","layer":"noop"}]}} ] }, "disablingServingKeepsExistingLocalForReenablementTest": { @@ -4942,707 +148,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/disablingServingKeepsExistingLocalForReenablementTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"8"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}} ] }, "untrackedReadFailureStillWarmsActiveLocalTest": { @@ -5651,417 +167,13 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/untrackedReadFailureStillWarmsActiveLocalTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "readFault" - }, - "mbt::actionTaken": "readFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"readFault"},"mbt::actionTaken":"readFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}} ] }, "independentLocalPublicationUsesLastCompletionTest": { @@ -6070,612 +182,34 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/independentLocalPublicationUsesLastCompletionTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "14" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "14" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"14"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"14"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}} + ] + }, + "independentFailureKeepsSettledLocalValueTest": { + "source": { + "model": "formal/dialcache-policy-conformance.qnt", + "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/independentFailureKeepsSettledLocalValueTest" + }, + "states": [ + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"14"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"14"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}} ] }, "independentRemotePublicationUsesLastCompletionTest": { @@ -6684,637 +218,16 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/independentRemotePublicationUsesLastCompletionTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "13" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "13" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "2" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - }, - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "2" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "2" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - }, - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "2" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "2" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - }, - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "2" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"13"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"13"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"9"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"},{"#bigint":"5000"}],"writes":{"#bigint":"2"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"},{"#bigint":"5000"}],"writes":{"#bigint":"2"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"2"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"3"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"},{"#bigint":"5000"}],"writes":{"#bigint":"2"}},"policyErrors":[]}} ] }, "inactiveLayersStartIndependentSources": { @@ -7323,358 +236,12 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/inactiveLayersStartIndependentSources" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"8"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}} ] }, "expiredLocalEntryMissesAfterRollback": { @@ -7683,535 +250,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/expiredLocalEntryMissesAfterRollback" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"4"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1000"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}} ] }, "rollbackWithinElapsedTimeServesFrame": { @@ -8220,555 +267,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/rollbackWithinElapsedTimeServesFrame" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1000"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}} ] }, "staleFrameMissesAfterRollback": { @@ -8777,555 +284,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/policy-witnesses.json/staleFrameMissesAfterRollback" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "policyErrors": [] - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"2000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2000"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"policyErrors":[]}} ] } } diff --git a/test/fixtures/profile-lint/composition-alias-typed-operator-position.qnt b/test/fixtures/profile-lint/composition-alias-typed-operator-position.qnt new file mode 100644 index 00000000..e3ee554a --- /dev/null +++ b/test/fixtures/profile-lint/composition-alias-typed-operator-position.qnt @@ -0,0 +1,39 @@ +// A composed profile that instantiates kernel folds whose operator parameter +// is declared through a type alias (`Step[r]`) and through a chain of aliases +// (`Chained[r] = Step[r]`). The definition takes an operator whatever spelling +// the library chose, so each instantiation is reported, the one passing the +// kernel's own step included. +module composition_alias_typed_operator_position { + import library_alias as L from "./library-alias" + + var s: { count: int, label: str } + var input: { name: str, choice: int } + + action init = all { s' = { count: 0, label: "start" }, input' = { name: "init", choice: -1 } } + + action bumpWrapper = { + nondet choice = 1.to(2).oneOf() + all { + s' = L::repeatVia(s, choice, (current, step) => L::bump(current, step * 3)), + input' = { name: "bump", choice: choice } + } + } + action chainedWrapper = { + nondet choice = 1.to(2).oneOf() + all { + s' = L::repeatChained(s, choice, (current, step) => L::bump(current, step * 3)), + input' = { name: "chained", choice: choice } + } + } + action kernelStepWrapper = { + nondet choice = 1.to(2).oneOf() + all { + s' = L::repeatVia(s, choice, L::bump), + input' = { name: "kernelStep", choice: choice } + } + } + + action step = any { bumpWrapper, chainedWrapper, kernelStepWrapper } + + val countWithinBound = s.count <= 60 +} diff --git a/test/fixtures/profile-lint/composition-aliased-transition.qnt b/test/fixtures/profile-lint/composition-aliased-transition.qnt new file mode 100644 index 00000000..ee1435a7 --- /dev/null +++ b/test/fixtures/profile-lint/composition-aliased-transition.qnt @@ -0,0 +1,36 @@ +// A composed profile that applies kernel definitions through aliases of its +// own: `bumpAlias` and `repeatAlias` are parameterless definitions whose body +// is the kernel name. The lint follows the callee to the kernel, so each +// application is judged and recorded as the kernel's: `bumpAlias(s, choice)` +// records `library::bump` and reports nothing, and `repeatAlias(...)` +// instantiates the higher-order fold and is reported whatever it passes. +module composition_aliased_transition { + import library as L from "./library" + + var s: { count: int, label: str } + var input: { name: str, choice: int } + + pure def bumpAlias = L::bump + pure def repeatAlias = L::repeat + + action init = all { s' = { count: 0, label: "start" }, input' = { name: "init", choice: -1 } } + + action bumpWrapper = { + nondet choice = 1.to(2).oneOf() + all { + s' = bumpAlias(s, choice), + input' = { name: "bump", choice: choice } + } + } + action repeatWrapper = { + nondet choice = 1.to(2).oneOf() + all { + s' = repeatAlias(s, choice, L::bump), + input' = { name: "repeat", choice: choice } + } + } + + action step = any { bumpWrapper, repeatWrapper } + + val countWithinBound = s.count <= 30 +} diff --git a/test/fixtures/profile-lint/composition-lambda-argument.qnt b/test/fixtures/profile-lint/composition-lambda-argument.qnt new file mode 100644 index 00000000..2d6f14ea --- /dev/null +++ b/test/fixtures/profile-lint/composition-lambda-argument.qnt @@ -0,0 +1,24 @@ +// A composed profile that instantiates a kernel fold with an operator written +// in the profile. The library's fold would run the profile's step where the +// lint cannot follow it, so the call to the higher-order definition is +// reported, whatever the lambda's body does. +module composition_lambda_argument { + import library as L from "./library" + + var s: { count: int, label: str } + var input: { name: str, choice: int } + + action init = all { s' = { count: 0, label: "start" }, input' = { name: "init", choice: -1 } } + + action bumpWrapper = { + nondet choice = 1.to(2).oneOf() + all { + s' = L::repeat(s, choice, (current, step) => L::bump(current, step)), + input' = { name: "bump", choice: choice } + } + } + + action step = bumpWrapper + + val countWithinBound = s.count <= 30 +} diff --git a/test/fixtures/profile-lint/composition-lambda-through-helper.qnt b/test/fixtures/profile-lint/composition-lambda-through-helper.qnt new file mode 100644 index 00000000..8f7ac8ca --- /dev/null +++ b/test/fixtures/profile-lint/composition-lambda-through-helper.qnt @@ -0,0 +1,25 @@ +// A composed profile that instantiates a kernel fold inside a helper of its +// own, forwarding the wrapper's lambda as a parameter. The higher-order call +// is the helper's, so it is reported there with the chain from the wrapper. +module composition_lambda_through_helper { + import library as L from "./library" + + var s: { count: int, label: str } + var input: { name: str, choice: int } + + pure def repeatWith(state, times, each) = L::repeat(state, times, each) + + action init = all { s' = { count: 0, label: "start" }, input' = { name: "init", choice: -1 } } + + action bumpWrapper = { + nondet choice = 1.to(2).oneOf() + all { + s' = repeatWith(s, choice, (current, step) => L::bump(current, step)), + input' = { name: "bump", choice: choice } + } + } + + action step = bumpWrapper + + val countWithinBound = s.count <= 30 +} diff --git a/test/fixtures/profile-lint/composition-named-operator-argument.qnt b/test/fixtures/profile-lint/composition-named-operator-argument.qnt new file mode 100644 index 00000000..7462fa57 --- /dev/null +++ b/test/fixtures/profile-lint/composition-named-operator-argument.qnt @@ -0,0 +1,29 @@ +// A composed profile that instantiates a kernel fold with an operator written +// in the profile and passed by name rather than as a lambda literal. The +// library's fold would run the profile's step over cache state where the lint +// cannot follow it, so the call is reported like one with a lambda is, +// whatever the operator's body does. +module composition_named_operator_argument { + import library as L from "./library" + + var s: { count: int, label: str } + var input: { name: str, choice: int } + + // Rule logic over the state the fold hands it: invisible to a walk that + // follows the name with untainted parameters. + pure def hook(current, step) = L::bump(current, if (current.count % 2 == 0) step * 2 else step) + + action init = all { s' = { count: 0, label: "start" }, input' = { name: "init", choice: -1 } } + + action bumpWrapper = { + nondet choice = 1.to(2).oneOf() + all { + s' = L::repeat(s, choice, hook), + input' = { name: "bump", choice: choice } + } + } + + action step = bumpWrapper + + val countWithinBound = s.count <= 30 +} diff --git a/test/fixtures/profile-lint/composition-wiring-passes.qnt b/test/fixtures/profile-lint/composition-wiring-passes.qnt index abbd4e2b..ffe4a058 100644 --- a/test/fixtures/profile-lint/composition-wiring-passes.qnt +++ b/test/fixtures/profile-lint/composition-wiring-passes.qnt @@ -17,7 +17,7 @@ module composition_wiring_passes { } } - action step = any { bumpWrapper } + action step = bumpWrapper val countWithinBound = s.count <= 30 } diff --git a/test/fixtures/profile-lint/library-alias.qnt b/test/fixtures/profile-lint/library-alias.qnt new file mode 100644 index 00000000..dfa90680 --- /dev/null +++ b/test/fixtures/profile-lint/library-alias.qnt @@ -0,0 +1,15 @@ +// A kernel library module whose folds declare their operator parameter +// through a type alias rather than inline: Quint records such a position as +// the alias name, and the lint resolves the alias (and a chain of aliases) to +// the operator type before judging whether the definition takes an operator. +module library_alias { + type Counter[r] = { count: int | r } + type Step[r] = (Counter[r], int) => Counter[r] + type Chained[r] = Step[r] + + pure def bump(state: Counter[r], delta: int): Counter[r] = { count: state.count + delta, ...state } + pure def repeatVia(state: Counter[r], times: int, each: Step[r]): Counter[r] = + 1.to(times).fold(state, (current, step) => each(current, step)) + pure def repeatChained(state: Counter[r], times: int, each: Chained[r]): Counter[r] = + 1.to(times).fold(state, (current, step) => each(current, step)) +} diff --git a/test/fixtures/profile-lint/library.qnt b/test/fixtures/profile-lint/library.qnt index 584eead1..7718f703 100644 --- a/test/fixtures/profile-lint/library.qnt +++ b/test/fixtures/profile-lint/library.qnt @@ -5,4 +5,9 @@ module library { pure def bump(state: Counter[r], delta: int): Counter[r] = { count: state.count + delta, ...state } pure def reset(state: Counter[r]): Counter[r] = { count: 0, ...state } + // A fold whose step is an operator argument: only the library's own variants + // may instantiate it; a profile that does is reported whatever it passes + // (composition-lambda-argument, composition-named-operator-argument). + pure def repeat(state: Counter[r], times: int, each: (Counter[r], int) => Counter[r]): Counter[r] = + 1.to(times).fold(state, (current, step) => each(current, step)) } diff --git a/test/fixtures/recovery-admission-witnesses.json b/test/fixtures/recovery-admission-witnesses.json index 706913aa..aa2139d3 100644 --- a/test/fixtures/recovery-admission-witnesses.json +++ b/test/fixtures/recovery-admission-witnesses.json @@ -7,676 +7,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-admission-witnesses.json/recoveredAbsenceSkipsSelectedShadowTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "18" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "18" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "2" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "5" - }, - { - "#bigint": "5" - }, - { - "#bigint": "5" - } - ], - "classifications": { - "#bigint": "2" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "served", - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"18"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"18"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"5"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"5"},{"#bigint":"5"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"0"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"5"},{"#bigint":"5"},{"#bigint":"5"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":["served","served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -688,411 +29,13 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-admission-witnesses.json/recoveredValueSkipsSelectedShadowTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } } diff --git a/test/fixtures/recovery-read-witnesses.json b/test/fixtures/recovery-read-witnesses.json index b59d95e8..772e0864 100644 --- a/test/fixtures/recovery-read-witnesses.json +++ b/test/fixtures/recovery-read-witnesses.json @@ -7,587 +7,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/closedRequestCannotReceiveCompressedRecoveryTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "closeScope" - }, - "mbt::actionTaken": "closeScope", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"8"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"0"},"name":"closeScope"},"mbt::actionTaken":"closeScope","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}} ] } }, @@ -599,601 +26,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/compressedRecoveryMemoizesWithoutLocalPublicationTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"8"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}} ] } }, @@ -1205,501 +45,13 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/compressedRecoveryRechecksMaximumAfterDecodeTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "12" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "12" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"12"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"1"}]},"markers":[],"compression":["decompressed"]}} ] } }, @@ -1711,430 +63,12 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/corruptCompressedReadReportsRawFallbackTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "14" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "14" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "fallback_raw" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "fallback_raw" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "fallback_raw" - ] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"14"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"14"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["fallback_raw"]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["fallback_raw"]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["fallback_raw"]}} ] } }, @@ -2146,426 +80,12 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/corruptCompressedRecoveryKeepsOriginalSourceErrorTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "fallback_raw" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "deserialization_error" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - } - ] - }, - "markers": [], - "compression": [ - "fallback_raw" - ] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"9"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["fallback_raw"]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["deserialization_error"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"1"}]},"markers":[],"compression":["fallback_raw"]}} ] } }, @@ -2577,263 +97,10 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/failedInvalidationDoesNotCreateMarkerTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "writeFault" - }, - "mbt::actionTaken": "writeFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "mutation_error" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "observeMarker" - }, - "mbt::actionTaken": "observeMarker", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "mutation_error" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - } - ], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"writeFault"},"mbt::actionTaken":"writeFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["mutation_error"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"observeMarker"},"mbt::actionTaken":"observeMarker","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["mutation_error"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}}],"compression":[]}} ] } }, @@ -2845,500 +112,13 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/failedInvalidationPreservesExistingMarkerTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "observeMarker" - }, - "mbt::actionTaken": "observeMarker", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1000" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "writeFault" - }, - "mbt::actionTaken": "writeFault", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "mutation_error" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "observeMarker" - }, - "mbt::actionTaken": "observeMarker", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "2" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok", - "mutation_error" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199000" - } - } - ], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"observeMarker"},"mbt::actionTaken":"observeMarker","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"1000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1000"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"writeFault"},"mbt::actionTaken":"writeFault","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok","mutation_error"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"observeMarker"},"mbt::actionTaken":"observeMarker","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"2"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok","mutation_error"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199000"}}],"compression":[]}} ] } }, @@ -3350,351 +130,11 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/freshCompressedReadReportsDecompressionTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "13" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "13" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"13"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"13"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}} ] } }, @@ -3706,495 +146,13 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/freshnessAfterHeldReadTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"1000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1000"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}} ] } }, @@ -4206,420 +164,12 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/heldReadJustBeforeFreshnessBoundaryStillHitsTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "999" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "999" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"999"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"999"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}} ] } }, @@ -4631,633 +181,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/laterInvalidationDoesNotRewriteObservedMissFenceTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ] - }, - "markers": [], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"3"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"2"}]},"markers":[],"compression":[]}} ] } }, @@ -5269,422 +200,12 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/maximumAgeBeforeDecodeKeepsOriginalErrorTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "12" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "12" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "1" - } - ] - }, - "markers": [], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"12"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"1"}]},"markers":[],"compression":[]}} ] } }, @@ -5696,901 +217,16 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/ordinaryValueWorkDoesNotCreateMarkerTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "observeMarker" - }, - "mbt::actionTaken": "observeMarker", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "observeMarker" - }, - "mbt::actionTaken": "observeMarker", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - }, - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - }, - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - }, - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - }, - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "observeMarker" - }, - "mbt::actionTaken": "observeMarker", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - }, - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - }, - { - "cutoffMs": { - "#bigint": "-1" - }, - "ttlMs": { - "#bigint": "-2" - } - } - ], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"observeMarker"},"mbt::actionTaken":"observeMarker","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"observeMarker"},"mbt::actionTaken":"observeMarker","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}},{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}},{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}},{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}},{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"observeMarker"},"mbt::actionTaken":"observeMarker","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}},{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}},{"cutoffMs":{"#bigint":"-1"},"ttlMs":{"#bigint":"-2"}}],"compression":[]}} ] } }, @@ -6602,1231 +238,20 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/ordinaryValueWorkDoesNotExtendMarkerTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "observeMarker" - }, - "mbt::actionTaken": "observeMarker", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "observeMarker" - }, - "mbt::actionTaken": "observeMarker", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199999" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199999" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199999" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199999" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "999" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "999" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199999" - } - } - ], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "observeMarker" - }, - "mbt::actionTaken": "observeMarker", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [ - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7200000" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199999" - } - }, - { - "cutoffMs": { - "#bigint": "0" - }, - "ttlMs": { - "#bigint": "7199000" - } - } - ], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"observeMarker"},"mbt::actionTaken":"observeMarker","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"observeMarker"},"mbt::actionTaken":"observeMarker","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199999"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199999"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199999"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199999"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"999"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"999"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199999"}}],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"observeMarker"},"mbt::actionTaken":"observeMarker","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7200000"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199999"}},{"cutoffMs":{"#bigint":"0"},"ttlMs":{"#bigint":"7199000"}}],"compression":[]}} ] } }, @@ -7838,483 +263,13 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/physicalCapDoesNotClampLogicalRecoveryTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"5"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}} ] } }, @@ -8326,873 +281,17 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/retainedCompressedRecoverySurvivesInvalidationTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "invalidate" - }, - "mbt::actionTaken": "invalidate", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "2" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "1" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [ - "ok" - ], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "served", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"8"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"invalidate"},"mbt::actionTaken":"invalidate","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"1"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":["ok"],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":["served","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"2"}]},"markers":[],"compression":["decompressed"]}} ] } }, @@ -9204,748 +303,16 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/retainedSnapshotSurvivesPhysicalExpiryTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "15" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "15" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "2" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "served", - "miss" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ] - }, - "markers": [], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"15"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"15"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"1000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1000"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"2"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["served","miss"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"2"}]},"markers":[],"compression":[]}} ] } }, @@ -9957,429 +324,12 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/trackedEncodingFailureSuppressesRefillTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"10"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}} ] } }, @@ -10391,600 +341,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/trackedPhysicalRetentionExpiresAtCapTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "3600000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3600000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "3600000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"3600000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3600000"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"3600000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}} ] } }, @@ -10996,747 +360,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/trackedSourceNeedsRemoteValidationBeforeLocalReuseTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}} ] } }, @@ -11748,609 +380,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/unsafeTimestampSkipsSerializerAndAllowsRefillTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "16" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "16" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"16"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"16"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}} ] } }, @@ -12362,609 +399,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/unsupportedVersionSkipsSerializerAndAllowsRefillTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "17" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "17" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "5000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"17"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"17"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"5000"}],"writes":{"#bigint":"1"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}} ] } }, @@ -12976,512 +418,13 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/untrackedCompressedRecoveryDoesNotWarmLocalTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "served" - ], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - }, - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [ - "decompressed" - ] - } - } + {"input":{"choice":{"#bigint":"0"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"8"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["served"],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"},{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":["decompressed"]}} ] } }, @@ -13493,426 +436,12 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/recovery-read-witnesses.json/untrackedEncodingFailureStillPublishesLocalTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [], - "sourceErrors": [] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "io": { - "aborted": [], - "budgets": [ - { - "#bigint": "30000000" - } - ], - "sourceErrors": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ] - }, - "markers": [], - "compression": [] - } - } + {"input":{"choice":{"#bigint":"0"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"10"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[],"sourceErrors":[]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"-1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"}]},"markers":[],"compression":[]}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"io":{"aborted":[],"budgets":[{"#bigint":"30000000"}],"sourceErrors":[{"#bigint":"0"},{"#bigint":"0"}]},"markers":[],"compression":[]}} ] } } diff --git a/test/fixtures/shadow-diagnostics-witnesses.json b/test/fixtures/shadow-diagnostics-witnesses.json index c20953ab..a8968fc0 100644 --- a/test/fixtures/shadow-diagnostics-witnesses.json +++ b/test/fixtures/shadow-diagnostics-witnesses.json @@ -7,494 +7,13 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-diagnostics-witnesses.json/omittedLoggingKeepsMismatchMetricsOnlyTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"1"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"1"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}} ] } }, @@ -506,560 +25,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-diagnostics-witnesses.json/explicitFalseLoggingOverridesEnabledDefaultTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "6" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "logPolicy" - }, - "mbt::actionTaken": "logPolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - } + {"input":{"choice":{"#bigint":"6"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"6"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"0"},"name":"logPolicy"},"mbt::actionTaken":"logPolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"1"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"1"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}} ] } }, @@ -1071,564 +44,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-diagnostics-witnesses.json/confirmationPastFreshnessKeepsOriginalPayloadAndAgeTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "6" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "60000" - }, - "name": "advanceWall" - }, - "mbt::actionTaken": "advanceWall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "60000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "60000" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "1" - }, - "futureOffsets": [] - } - } - } + {"input":{"choice":{"#bigint":"6"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"6"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"1"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"60000"},"name":"advanceWall"},"mbt::actionTaken":"advanceWall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"60000"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"1"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"1"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"60000"}],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"1"},"futureOffsets":[]}}} ] } }, @@ -1640,571 +63,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-diagnostics-witnesses.json/confirmationRollbackKeepsPayloadAndClampsAgeTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "6" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseLoad" - }, - "mbt::actionTaken": "releaseLoad", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "1" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "mismatch" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [ - { - "#bigint": "0" - } - ], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "1" - }, - "futureOffsets": [ - { - "layer": "remote_shadow", - "offsetMs": { - "#bigint": "1000" - } - } - ] - } - } - } + {"input":{"choice":{"#bigint":"6"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"6"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseLoad"},"mbt::actionTaken":"releaseLoad","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"1"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"1"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"1"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["mismatch"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[{"#bigint":"0"}],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"1"},"futureOffsets":[{"layer":"remote_shadow","offsetMs":{"#bigint":"1000"}}]}}} ] } }, @@ -2216,592 +82,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-diagnostics-witnesses.json/futureDarkAcquisitionReportsOffsetAndFillsMissTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [ - { - "layer": "remote_shadow", - "offsetMs": { - "#bigint": "1000" - } - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [ - { - "layer": "remote_shadow", - "offsetMs": { - "#bigint": "1000" - } - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseDump" - }, - "mbt::actionTaken": "releaseDump", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [ - { - "layer": "remote_shadow", - "offsetMs": { - "#bigint": "1000" - } - } - ] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseWrite" - }, - "mbt::actionTaken": "releaseWrite", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "filled" - ], - "sourceScopes": [], - "writeTtls": [ - { - "#bigint": "60000" - } - ], - "writes": { - "#bigint": "1" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [ - { - "layer": "remote_shadow", - "offsetMs": { - "#bigint": "1000" - } - } - ] - } - } - } + {"input":{"choice":{"#bigint":"0"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[{"layer":"remote_shadow","offsetMs":{"#bigint":"1000"}}]}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[{"layer":"remote_shadow","offsetMs":{"#bigint":"1000"}}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseDump"},"mbt::actionTaken":"releaseDump","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[{"layer":"remote_shadow","offsetMs":{"#bigint":"1000"}}]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseWrite"},"mbt::actionTaken":"releaseWrite","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["filled"],"sourceScopes":[],"writeTtls":[{"#bigint":"60000"}],"writes":{"#bigint":"1"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[{"layer":"remote_shadow","offsetMs":{"#bigint":"1000"}}]}}} ] } }, @@ -2813,429 +101,12 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-diagnostics-witnesses.json/futureLateDarkReadKeepsTimeoutAndReportsOffsetTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "rollbackWall" - }, - "mbt::actionTaken": "rollbackWall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [ - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [] - } - } - }, - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "releaseRead" - }, - "mbt::actionTaken": "releaseRead", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - }, - "d": { - "ages": [], - "coalesced": [], - "configErrors": { - "#bigint": "0" - }, - "fallbackErrors": [ - "local" - ], - "warnings": { - "#bigint": "0" - }, - "futureOffsets": [ - { - "layer": "remote_shadow", - "offsetMs": { - "#bigint": "990" - } - } - ] - } - } - } + {"input":{"choice":{"#bigint":"0"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"1"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"rollbackWall"},"mbt::actionTaken":"rollbackWall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":[],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"4"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["timeout"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":["local"],"warnings":{"#bigint":"0"},"futureOffsets":[]}}}, + {"input":{"choice":{"#bigint":"-1"},"name":"releaseRead"},"mbt::actionTaken":"releaseRead","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[{"#bigint":"4"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["timeout"],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}},"d":{"ages":[],"coalesced":[],"configErrors":{"#bigint":"0"},"fallbackErrors":["local"],"warnings":{"#bigint":"0"},"futureOffsets":[{"layer":"remote_shadow","offsetMs":{"#bigint":"990"}}]}}} ] } } diff --git a/test/fixtures/shadow-layers-witnesses.json b/test/fixtures/shadow-layers-witnesses.json index 2d17bfe8..5e94a1e2 100644 --- a/test/fixtures/shadow-layers-witnesses.json +++ b/test/fixtures/shadow-layers-witnesses.json @@ -7,559 +7,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/acquiredMissDoesNotRereadBeforeFillTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseDump" - }, - "mbt::actionTaken": "releaseDump", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseWrite" - }, - "mbt::actionTaken": "releaseWrite", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "filled" - ], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "filled" - ], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "filled" - ], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseDump"},"mbt::actionTaken":"releaseDump","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseWrite"},"mbt::actionTaken":"releaseWrite","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["filled"],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["filled"],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["filled"],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}} ] } }, @@ -571,290 +27,11 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/darkFailureDoesNotUseEligibleStaleBytesTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "source_error" - ], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["source_error"],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -866,758 +43,18 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/darkFillRetainsPolicyThroughSerializationTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "8" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "8" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "13" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "13" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseDump" - }, - "mbt::actionTaken": "releaseDump", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseWrite" - }, - "mbt::actionTaken": "releaseWrite", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "filled" - ], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "120000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "120000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "filled" - ], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "13" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "13" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "filled" - ], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "filled" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "rejectLoader" - }, - "mbt::actionTaken": "rejectLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "1" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [ - "miss" - ], - "shadow": [ - "filled" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"8"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"8"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"13"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"13"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseDump"},"mbt::actionTaken":"releaseDump","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseWrite"},"mbt::actionTaken":"releaseWrite","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["filled"],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"120000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"120000"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["filled"],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"13"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"13"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["filled"],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["filled"],"sourceScopes":[true,true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"rejectLoader"},"mbt::actionTaken":"rejectLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"3"}],"classifications":{"#bigint":"1"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":["miss"],"shadow":["filled"],"sourceScopes":[true,true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}} ] } }, @@ -1629,498 +66,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/darkPresentC0NeverBecomesLocalPublicationTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "dropped" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "dropped", - "mismatch" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "12" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "12" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "dropped", - "mismatch" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "dropped", - "mismatch" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["dropped"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["dropped","mismatch"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"12"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["dropped","mismatch"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["dropped","mismatch"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -2132,642 +85,16 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/darkPresentC0NeverBecomesRequestPublicationTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "dropped" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "dropped", - "mismatch" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "12" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "12" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "dropped", - "mismatch" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "dropped", - "mismatch" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "dropped", - "mismatch" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [ - "dropped", - "mismatch" - ], - "sourceScopes": [ - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["dropped"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["dropped","mismatch"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"12"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["dropped","mismatch"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["dropped","mismatch"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["dropped","mismatch"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"3"},"recovery":[],"shadow":["dropped","mismatch"],"sourceScopes":[true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -2779,236 +106,10 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/darkPropagatedTimeoutIsSourceFailureTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "rejectTimeout" - }, - "mbt::actionTaken": "rejectTimeout", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "3" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "source_error" - ], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectTimeout"},"mbt::actionTaken":"rejectTimeout","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"3"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["source_error"],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -3020,357 +121,12 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/darkSourcePublishesLocalBeforeShadowWriteTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "12" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "12" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"12"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -3382,489 +138,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/darkSourcePublishesRequestBeforeShadowWriteTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "12" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "12" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "dropped" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"12"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["dropped"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -3876,658 +157,16 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/deduplicatedJobKeepsIndependentCallerSourcesTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "dropped" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "dropped" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "dropped" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseDump" - }, - "mbt::actionTaken": "releaseDump", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "dropped" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseWrite" - }, - "mbt::actionTaken": "releaseWrite", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "dropped", - "filled" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "dropped", - "filled" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "dropped", - "filled" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["dropped"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["dropped"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["dropped"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseDump"},"mbt::actionTaken":"releaseDump","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["dropped"],"sourceScopes":[true,true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseWrite"},"mbt::actionTaken":"releaseWrite","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["dropped","filled"],"sourceScopes":[true,true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["dropped","filled"],"sourceScopes":[true,true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["dropped","filled"],"sourceScopes":[true,true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}} ] } }, @@ -4539,553 +178,15 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/expiredC0CanFillAndServeNewValueTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseDump" - }, - "mbt::actionTaken": "releaseDump", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseWrite" - }, - "mbt::actionTaken": "releaseWrite", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "filled" - ], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "filled" - ], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "filled" - ], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseDump"},"mbt::actionTaken":"releaseDump","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseWrite"},"mbt::actionTaken":"releaseWrite","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["filled"],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["filled"],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["filled"],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}} ] } }, @@ -5097,496 +198,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/fullMixedInstanceDoesNotBlockAnotherInstanceTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "11" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "11" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "dropped" - ], - "sourceScopes": [ - false, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "14" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "14" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [ - "dropped" - ], - "sourceScopes": [ - false, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[false,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"11"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"11"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["dropped"],"sourceScopes":[false,true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"14"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"14"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"3"},"recovery":[],"shadow":["dropped"],"sourceScopes":[false,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -5598,357 +217,12 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/invalidShadowKeepsLocalPublicationTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "7" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "7" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "12" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "12" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"7"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"7"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"12"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -5960,493 +234,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/ordinaryServingMissDoesNotAdmitDiagnosticSourceTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseDump" - }, - "mbt::actionTaken": "releaseDump", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releaseWrite" - }, - "mbt::actionTaken": "releaseWrite", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "5" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "5" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [ - { - "#bigint": "120000" - } - ], - "writes": { - "#bigint": "1" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseDump"},"mbt::actionTaken":"releaseDump","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releaseWrite"},"mbt::actionTaken":"releaseWrite","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"5"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"5"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[{"#bigint":"120000"}],"writes":{"#bigint":"1"}}}} ] } }, @@ -6458,350 +253,12 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/retainedFreshC0StillComparesAfterFreshnessBoundaryTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "mismatch" - ], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["mismatch"],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -6813,902 +270,19 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/servedAndDarkJobsShareCapacityButNotSourceOwnershipTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "11" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "11" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "dropped" - ], - "sourceScopes": [ - false, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "60000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "60000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "dropped", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "11" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "11" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "4" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "4" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [ - "dropped", - "timeout", - "timeout" - ], - "sourceScopes": [ - false, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [ - "dropped", - "timeout", - "timeout", - "dropped" - ], - "sourceScopes": [ - false, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "5" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "5" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [ - "dropped", - "timeout", - "timeout", - "dropped" - ], - "sourceScopes": [ - false, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [ - "dropped", - "timeout", - "timeout", - "dropped" - ], - "sourceScopes": [ - false, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "6" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "6" - }, - "reads": { - "#bigint": "4" - }, - "recovery": [], - "shadow": [ - "dropped", - "timeout", - "timeout", - "dropped" - ], - "sourceScopes": [ - false, - true, - true, - true, - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":[],"sourceScopes":[false,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"11"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"11"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["dropped"],"sourceScopes":[false,true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"60000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"60000"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["dropped","timeout","timeout"],"sourceScopes":[false,true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"11"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"11"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"4"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"4"},"reads":{"#bigint":"3"},"recovery":[],"shadow":["dropped","timeout","timeout"],"sourceScopes":[false,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"3"},"recovery":[],"shadow":["dropped","timeout","timeout","dropped"],"sourceScopes":[false,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"5"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"5"},"reads":{"#bigint":"3"},"recovery":[],"shadow":["dropped","timeout","timeout","dropped"],"sourceScopes":[false,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"4"},"recovery":[],"shadow":["dropped","timeout","timeout","dropped"],"sourceScopes":[false,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"6"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"6"},"reads":{"#bigint":"4"},"recovery":[],"shadow":["dropped","timeout","timeout","dropped"],"sourceScopes":[false,true,true,true,true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -7720,418 +294,13 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/servedDiagnosticSourceDoesNotPopulateLocalTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "mismatch" - ], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "mismatch" - ], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "3" - }, - "recovery": [], - "shadow": [ - "mismatch" - ], - "sourceScopes": [ - false, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["mismatch"],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["mismatch"],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"3"},"recovery":[],"shadow":["mismatch"],"sourceScopes":[false,true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -8143,290 +312,11 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/servedPropagatedTimeoutPreservesHitTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "rejectTimeout" - }, - "mbt::actionTaken": "rejectTimeout", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "source_error" - ], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"rejectTimeout"},"mbt::actionTaken":"rejectTimeout","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["source_error"],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -8438,234 +328,10 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/shadowCohortAboveAdmitsTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "11" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "11" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"11"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"11"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -8677,234 +343,10 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/shadowCohortBelowDoesNotAdmitTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -8916,234 +358,10 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/shadowCohortEqualityDoesNotAdmitTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -9155,434 +373,13 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/unboundedCallerSurvivesDarkJobDeadlineTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "60000" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "60000" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [ - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "1" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "timeout" - ], - "sourceScopes": [ - true, - true - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"60000"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"60000"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":["timeout"],"sourceScopes":[true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["timeout"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["timeout"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"1"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["timeout"],"sourceScopes":[true,true],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -9594,424 +391,13 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/shadow-layers-witnesses.json/validatedRemoteHitStopsFurtherShadowTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "-1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "None", - "value": { - "#tup": [] - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "seed" - }, - "mbt::actionTaken": "seed", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "12" - }, - "name": "policy" - }, - "mbt::actionTaken": "policy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "12" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "1" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "1" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "mismatch" - ], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "2" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "2" - }, - "recovery": [], - "shadow": [ - "mismatch" - ], - "sourceScopes": [ - false - ], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"-1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"None","value":{"#tup":[]}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"seed"},"mbt::actionTaken":"seed","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"12"},"name":"policy"},"mbt::actionTaken":"policy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"12"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"1"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"1"},"recovery":[],"shadow":[],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["mismatch"],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"2"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"2"},"recovery":[],"shadow":["mismatch"],"sourceScopes":[false],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } } diff --git a/test/fixtures/source-budgets-witnesses.json b/test/fixtures/source-budgets-witnesses.json index ebc1ab84..27fe711a 100644 --- a/test/fixtures/source-budgets-witnesses.json +++ b/test/fixtures/source-budgets-witnesses.json @@ -7,606 +7,16 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/source-budgets-witnesses.json/abandonedSourceCannotReplaceSuccessfulRetryTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "10" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "10" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "2" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "3" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"10"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"10"}}},"s":{"o":{"calls":[{"#bigint":"4"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"2"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"3"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -618,472 +28,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/source-budgets-witnesses.json/defaultSourceBudgetExpiresAtSixtySecondsTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "59999" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "59999" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"0"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"59999"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"59999"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -1095,472 +47,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/source-budgets-witnesses.json/heldPolicyDoesNotSpendSourceBudgetTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "100" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "100" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"100"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"100"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -1572,414 +66,13 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/source-budgets-witnesses.json/invalidKeyStillKeepsEnabledSourceDeadlineTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "9" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "9" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"2"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"9"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"9"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -1991,478 +84,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/source-budgets-witnesses.json/lateFollowerUsesLeadersRemainingBudgetTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "6" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "6" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "4" - }, - { - "#bigint": "4" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"6"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"6"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"4"},{"#bigint":"4"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -2474,490 +103,14 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/source-budgets-witnesses.json/outsideAndInvalidOutsideCallsIgnoreDeadlineAndSharingTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "2" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "2" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "3" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "3" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "100" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "100" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "4" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "4" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "2" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "2" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "3" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"2"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"2"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"3"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"3"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"100"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"100"}}},"s":{"o":{"calls":[{"#bigint":"0"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"4"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"4"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"2"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"2"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"3"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } }, @@ -2969,414 +122,13 @@ "recipe": "formal/fixture-recipes.json#test/fixtures/source-budgets-witnesses.json/unboundedEnabledSourcePublishesAfterSixtySecondsTest" }, "states": [ - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "init" - }, - "mbt::actionTaken": "init", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "0" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "0" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "60001" - }, - "name": "advance" - }, - "mbt::actionTaken": "advance", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "60001" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "resolveLoader" - }, - "mbt::actionTaken": "resolveLoader", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "1" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "0" - }, - "name": "beginCall" - }, - "mbt::actionTaken": "beginCall", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "0" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "0" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - }, - { - "input": { - "choice": { - "#bigint": "1" - }, - "name": "releasePolicy" - }, - "mbt::actionTaken": "releasePolicy", - "mbt::nondetPicks": { - "choice": { - "tag": "Some", - "value": { - "#bigint": "1" - } - } - }, - "s": { - "o": { - "calls": [ - { - "#bigint": "1" - }, - { - "#bigint": "1" - } - ], - "classifications": { - "#bigint": "0" - }, - "comparisons": { - "#bigint": "0" - }, - "dumps": { - "#bigint": "0" - }, - "invalidations": { - "#bigint": "0" - }, - "loaders": { - "#bigint": "1" - }, - "loads": { - "#bigint": "0" - }, - "maintenance": [], - "policyCalls": { - "#bigint": "2" - }, - "reads": { - "#bigint": "0" - }, - "recovery": [], - "shadow": [], - "sourceScopes": [], - "writeTtls": [], - "writes": { - "#bigint": "0" - } - } - } - } + {"input":{"choice":{"#bigint":"1"},"name":"init"},"mbt::actionTaken":"init","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"0"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"0"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"60001"},"name":"advance"},"mbt::actionTaken":"advance","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"60001"}}},"s":{"o":{"calls":[{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"resolveLoader"},"mbt::actionTaken":"resolveLoader","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"1"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"0"},"name":"beginCall"},"mbt::actionTaken":"beginCall","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"0"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"0"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}}, + {"input":{"choice":{"#bigint":"1"},"name":"releasePolicy"},"mbt::actionTaken":"releasePolicy","mbt::nondetPicks":{"choice":{"tag":"Some","value":{"#bigint":"1"}}},"s":{"o":{"calls":[{"#bigint":"1"},{"#bigint":"1"}],"classifications":{"#bigint":"0"},"comparisons":{"#bigint":"0"},"dumps":{"#bigint":"0"},"invalidations":{"#bigint":"0"},"loaders":{"#bigint":"1"},"loads":{"#bigint":"0"},"maintenance":[],"policyCalls":{"#bigint":"2"},"reads":{"#bigint":"0"},"recovery":[],"shadow":[],"sourceScopes":[],"writeTtls":[],"writes":{"#bigint":"0"}}}} ] } } diff --git a/test/formal-case-audit.test.ts b/test/formal-case-audit.test.ts deleted file mode 100644 index 94fa21d8..00000000 --- a/test/formal-case-audit.test.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { execFileSync } from "node:child_process"; -import { readFileSync } from "node:fs"; -import { fileURLToPath } from "node:url"; -import { describe, expect, it } from "vitest"; - -const checker = fileURLToPath(new URL("../formal/check-semantic-coverage.mjs", import.meta.url)); -type Entry = { case: string; reference: string; kind: string; scope: string }; -type Audit = { checks: Entry[]; definitions: Entry[] }; -const freshAudit = (): Audit => JSON.parse(readFileSync( - new URL("../formal/quint-case-audit.json", import.meta.url), "utf8", -)) as Audit; -const check = (audit: Audit): string => execFileSync(process.execPath, [checker, "--audit-stdin"], { - input: JSON.stringify(audit), encoding: "utf8", stdio: ["pipe", "pipe", "pipe"], -}); - -describe("Quint case applicability metadata", () => { - it("validates checked scopes separately from transition definitions without Quint", () => { - const result = JSON.parse(check(freshAudit())) as { scopedChecks: number; definitions: number }; - expect(result.scopedChecks).toBeGreaterThan(0); - expect(result.definitions).toBeGreaterThan(0); - }); - - it("rejects a cited check without its reviewed scope", () => { - const audit = freshAudit(); - audit.checks[0]!.scope = " "; - expect(() => check(audit)).toThrow(/Invalid\/duplicate Quint case audit entry/); - audit.checks.shift(); - expect(() => check(audit)).toThrow(/Missing Quint case applicability scope/); - }); - - it("rejects attaching a scheduled property to a case that does not cite it", () => { - const audit = freshAudit(); - audit.checks[0]!.case = "C01.no-deadline"; - expect(() => check(audit)).toThrow(/not a cited scheduled/); - }); - - it("rejects claiming a transition helper as an independently scheduled check", () => { - const audit = freshAudit(); - audit.checks[0]!.reference = "formal/dialcache-core.qnt:localWriteEligible"; - expect(() => check(audit)).toThrow(/not a cited scheduled/); - }); - - it("rejects mislabeled or missing transition definitions", () => { - const audit = freshAudit(); - audit.definitions[0]!.kind = "invariant"; - expect(() => check(audit)).toThrow(/not a transition\/helper\/predicate/); - audit.definitions[0]!.kind = "transition"; - audit.definitions[0]!.reference = "formal/dialcache-core.qnt:missingAction"; - expect(() => check(audit)).toThrow(/not a transition\/helper\/predicate/); - }); -}); diff --git a/test/formal-conformance.test.ts b/test/formal-conformance.test.ts index 79e12ade..c4355d9d 100644 --- a/test/formal-conformance.test.ts +++ b/test/formal-conformance.test.ts @@ -12,6 +12,11 @@ import { DialCache, DialCacheKeyConfig, type DialCacheConfig } from "../src/inde import { record } from "./formal/itf.js"; import { FakeRedis } from "./fake-redis.js"; +// The exported core regressions are the model's public-only runs, read from its Quint text. +const { scheduleExecution } = await import(new URL("../formal/execution.mjs", import.meta.url).href) as { + scheduleExecution(): { models: Array<{ profile?: string; replayRegressions?: string[] }> }; +}; + class ConformanceDriver { readonly redis = new FakeRedis(); readonly dialcache: DialCache; @@ -126,10 +131,7 @@ function loadTraces(generatedDir: string | undefined): Trace[] { const root = resolve(generatedDir); const paths = readdirSync(root).filter((name) => name.endsWith(".itf.json")).sort(); if (paths.length === 0) throw new Error(`${root}: no .itf.json conformance traces found`); - const execution = JSON.parse(readFileSync(resolve("formal/execution.json"), "utf8")) as { - models: Array<{ profile?: string; replayRegressions?: string[] }>; - }; - const regressions = execution.models.find(model => model.profile === "core")?.replayRegressions ?? []; + const regressions = scheduleExecution().models.find(model => model.profile === "core")?.replayRegressions ?? []; return [ ...paths.map((name) => readItfTrace(resolve(root, name))), ...regressions.map(name => readItfTrace(resolve(root, "..", "regressions", "core", `${name}.itf.json`))), diff --git a/test/formal-differential.test.ts b/test/formal-differential.test.ts index 07294cb7..66698600 100644 --- a/test/formal-differential.test.ts +++ b/test/formal-differential.test.ts @@ -1,5 +1,5 @@ import { spawnSync } from "node:child_process"; -import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; +import { mkdirSync, mkdtempSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join, resolve } from "node:path"; import { fileURLToPath } from "node:url"; @@ -10,10 +10,10 @@ type History = { path: string; steps: Step[] }; type Verdict = { path: string; agree: boolean; step?: number; action?: string; choice?: number; reason?: string; fields?: string[] }; type Manifests = { execution: { settings: Record; models: Array> }; registry: { profiles: Array<{ id: string; version?: number }> } }; type Model = { path: string; generate: { outputDirectory: string; traces: number }; invariants: string[]; replayRegressions?: string[]; settings: { backend: string; seed: string }; - behaviorVersion: number; schemaVersion: number | null }; + behaviorVersion: number; maxBytesPerStateRatio: number | null; schemaVersion: number | null }; type Plan = { action: "skip" | "compare"; reason?: string; reference?: Model; candidate: Model; descriptor: unknown }; type Report = { profile: string; skipped?: string; forward: { disagreed: number }; reverse: { disagreed: number }; - generation: { bytesPerStateRatio: number | null; maxBytesPerStateRatio: number; wallRatio: number | null } }; + generation: { bytesPerStateRatio: number | null; maxBytesPerStateRatio: number; maxBytesPerStateRatioSource?: string; wallRatio: number | null } }; const differential = await import(new URL("../formal/differential.mjs", import.meta.url).href) as { compareHistory(reference: History, replayed: History): { agree: boolean; step?: number; action?: string; choice?: number; reason?: string; fields?: string[] }; chunked(items: T[], size: number): T[][]; @@ -26,10 +26,15 @@ const differential = await import(new URL("../formal/differential.mjs", import.m readManifests(directory: string): Manifests; replayHistories(tree: string, model: Model, descriptor: unknown, histories: History[], options: { chunk: number; output: string; concurrency: number }): Promise; composedProfiles(manifest: { models: Array<{ path: string; profile?: string }> }, options?: { cwd?: string }): string[]; + prepare(reference: string, options?: { cwd?: string; output?: string }): { reference: { revision: string; tree: string; manifests: Manifests }; candidate: { tree: string; manifests: Manifests } }; selectProfiles(prepared: { reference: { manifests: Manifests; tree: string }; candidate: { manifests: Manifests; tree: string } }): string[]; + shardProfiles(names: string[], index: number, count: number): string[]; closureSkip(reference: Model, candidate: Model, referenceSources: Record, candidateSources: Record): string | null; + bytesBound(model: Pick): { maxBytesPerStateRatio: number; source: string }; verdict(report: Report): { failed: boolean; reasons: string[] }; formatReport(report: Report): string; + boundAction(declarations: Map, descriptor: unknown, action: string): string; + replayDescriptors: Record }>; defaultChunk: number; cursorVariable: string; maxBytesPerStateRatio: number; @@ -128,14 +133,38 @@ describe("corpus differential comparison", () => { .toMatchObject({ action: "skip", reason: "intended divergence: behaviorVersion 0 -> 1" }); expect(differential.differentialPlan(manifests([layersModel()], 2), manifests([layersModel()], 3), "layers")) .toMatchObject({ action: "skip", reason: "intended divergence: observation schema version 2 -> 3" }); + // A model's own bytes-per-state bound travels with the plan; without one the lane's default applies. + expect(differential.differentialPlan(manifests([layersModel()]), manifests([layersModel({ differential: { maxBytesPerStateRatio: 1.4 } })]), "layers")) + .toMatchObject({ action: "compare", reference: { maxBytesPerStateRatio: null }, candidate: { maxBytesPerStateRatio: 1.4 } }); // A profile the candidate no longer generates is a visible removal, reported rather than compared; a profile neither revision generates is a misuse. expect(differential.differentialPlan(manifests([layersModel()]), manifests([]), "layers")).toMatchObject({ action: "skip", reason: /profile removed/ }); expect(() => differential.differentialPlan(manifests([]), manifests([]), "layers")).toThrow(/No generation profile named layers in either revision/); // A generated profile without an explicit-input driver descriptor is refused by name, not misreported. - const effects = (extra: Record = {}) => ({ path: "formal/dialcache-effects-conformance.qnt", profile: "effects", invariants: ["a"], regressions: [], - generate: { maxSamples: 4, maxSteps: 4, traces: 2, outputDirectory: ".formal-traces/effects" }, ...extra }); - const effectsManifests = (models: Array>): Manifests => ({ execution: { settings: { backend: "rust", threads: 1, seed: "0xd1a1ca", verbosity: 1 }, models }, registry: { profiles: [{ id: "effects", version: 1 }] } }); - expect(() => differential.differentialPlan(effectsManifests([effects()]), effectsManifests([effects()]), "effects")).toThrow(/effects has no explicit-input feature descriptor/); + const teleport = (extra: Record = {}) => ({ path: "formal/dialcache-teleport-conformance.qnt", profile: "teleport", invariants: ["a"], regressions: [], + generate: { maxSamples: 4, maxSteps: 4, traces: 2, outputDirectory: ".formal-traces/teleport" }, ...extra }); + const teleportManifests = (models: Array>): Manifests => ({ execution: { settings: { backend: "rust", threads: 1, seed: "0xd1a1ca", verbosity: 1 }, models }, registry: { profiles: [{ id: "teleport", version: 1 }] } }); + expect(() => differential.differentialPlan(teleportManifests([teleport()]), teleportManifests([teleport()]), "teleport")).toThrow(/teleport has no explicit-input replay descriptor/); + // The local-clock and effects profiles, whose drivers have their own runners, replay through their own descriptors beside the + // feature profiles; the effects descriptor brings its own parser for the record its drivers assert. + expect(Object.keys(differential.replayDescriptors)).toEqual(expect.arrayContaining(["layers", "policy", "local-clock", "effects"])); + expect(differential.differentialPlan(differential.readManifests(root), differential.readManifests(root), "effects")) + .toMatchObject({ action: "compare", descriptor: { explicitInputs: true, parseTrace: expect.any(Function), actions: { adapterReply: { choices: Array.from({ length: 16 }, (_, i) => i + 1) }, releaseRead: { choices: "index" }, tick: {} } } }); + expect(differential.differentialPlan(differential.readManifests(root), differential.readManifests(root), "local-clock")) + .toMatchObject({ action: "compare", descriptor: { explicitInputs: true, actions: { call: { choices: [0, 1, 2, 3] } }, actionBindings: { call: "callCache" } } }); + }); + + it("schedules an input through the descriptor binding only where the tree declares the input name as a parametrized action", () => { + const lambda = { name: "call", kind: "def", qualifier: "action", expr: { kind: "lambda" } }; + const wrapper = { name: "callCache", kind: "def", qualifier: "action", expr: { kind: "app" } }; + const descriptor = { actionBindings: { call: "callCache" } }; + // A reference text from before the wrapper was renamed: `call` is its parametrized action, `callCache` the public one. + expect(differential.boundAction(new Map([["call", lambda], ["callCache", wrapper]]), descriptor, "call")).toBe("callCache"); + // A tree whose `call` is public schedules it directly; the binding is not consulted. + expect(differential.boundAction(new Map([["call", { ...wrapper, name: "call" }], ["callCache", wrapper]]), descriptor, "call")).toBe("call"); + // Without a binding, or without the bound declaration, the name stands and the schedule refuses it as any parametrized declaration. + expect(differential.boundAction(new Map([["call", lambda]]), undefined, "call")).toBe("call"); + expect(differential.boundAction(new Map([["call", lambda]]), descriptor, "call")).toBe("call"); + expect(differential.boundAction(new Map(), descriptor, "teleport")).toBe("teleport"); }); it("fails the run on a disagreement in either direction or trace growth beyond the bound; wall time is advisory", () => { @@ -147,7 +176,16 @@ describe("corpus differential comparison", () => { expect(differential.verdict(report({ forward: { disagreed: 2 } }))).toMatchObject({ failed: true, reasons: ["2 forward disagreement(s)"] }); expect(differential.verdict(report({ reverse: { disagreed: 1 } }))).toMatchObject({ failed: true, reasons: ["1 reverse disagreement(s)"] }); expect(differential.maxBytesPerStateRatio).toBe(1.2); - expect(differential.verdict(report({ generation: { bytesPerStateRatio: 1.25 } }))).toMatchObject({ failed: true, reasons: [expect.stringMatching(/x1\.250, above the bound x1\.2/)] }); + expect(differential.verdict(report({ generation: { bytesPerStateRatio: 1.25 } }))).toMatchObject({ failed: true, reasons: [expect.stringMatching(/x1\.250, above the bound x1\.20 \(default\)/)] }); + // A model's declared bound replaces the default, and the report names where the bound came from. + expect(differential.bytesBound({ maxBytesPerStateRatio: null })).toEqual({ maxBytesPerStateRatio: 1.2, source: "default" }); + expect(differential.bytesBound({ maxBytesPerStateRatio: 1.4 })).toEqual({ maxBytesPerStateRatio: 1.4, source: "model" }); + const declared = { maxBytesPerStateRatio: 1.4, maxBytesPerStateRatioSource: "model" }; + expect(differential.verdict(report({ generation: { bytesPerStateRatio: 1.3, ...declared } }))).toEqual({ failed: false, reasons: [] }); + expect(differential.verdict(report({ generation: { bytesPerStateRatio: 1.45, ...declared } }))).toMatchObject({ failed: true, reasons: [expect.stringMatching(/x1\.450, above the bound x1\.40 \(model\)/)] }); + const full = { profile: "layers", forward: { agreed: 2, sampled: 1, regressions: 1, disagreed: 0, disagreements: [] }, reverse: { agreed: 2, sampled: 1, regressions: 1, disagreed: 0, disagreements: [] }, + replay: { chunk: 16, wallMs: 1000 }, generation: { referenceMs: 1000, candidateMs: 1000, wallRatio: 1, reference: { bytesPerState: 100 }, candidate: { bytesPerState: 130 }, bytesPerStateRatio: 1.3, ...declared } }; + expect(differential.formatReport(full as unknown as Report)).toContain("(x1.300, bound x1.40 (model))"); expect(differential.verdict(report({ generation: { wallRatio: 2 } }))).toEqual({ failed: false, reasons: [expect.stringMatching(/^advisory: generation wall time x2\.00/)] }); expect(differential.verdict({ profile: "layers", skipped: "new profile" } as unknown as Report)).toEqual({ failed: false, reasons: ["skipped: new profile"] }); expect(differential.formatReport({ profile: "layers", skipped: "intended divergence: behaviorVersion 0 -> 1" } as unknown as Report)).toBe("layers: not compared (intended divergence: behaviorVersion 0 -> 1)."); @@ -161,12 +199,29 @@ describe("corpus differential comparison", () => { expect(differential.closureSkip(model(), model(), sources, { ...sources })).toBe("identical import closure and generation settings"); expect(differential.closureSkip(model(), model(), sources, { ...sources, "formal/kernel/serving.qnt": "cc" })).toBeNull(); expect(differential.closureSkip(model(), model({ invariants: ["a", "b"] }), sources, { ...sources })).toBeNull(); + expect(differential.closureSkip(model({ replayRegressions: ["bTest", "aTest"] }), model({ replayRegressions: ["aTest", "bTest"] }), sources, { ...sources })).toBe("identical import closure and generation settings"); + expect(differential.closureSkip(model({ replayRegressions: ["aTest"] }), model({ replayRegressions: ["aTest", "bTest"] }), sources, { ...sources })).toBeNull(); expect(differential.closureSkip(model(), model({ generate: { outputDirectory: "x", traces: 4 } }), sources, { ...sources })).toBeNull(); expect(differential.closureSkip(model(), model({ settings: { backend: "rust", seed: "0x1" } }), sources, { ...sources })).toBeNull(); }); + // A fixture-export test, not a unit test: prepare spawns about 65 git processes, and hosted runners are slower. + it("validates the working tree's manifest as written and derives the schedule of both revisions", () => { + const output = mkdtempSync(join(tmpdir(), "differential-prepare-")); + try { + const prepared = differential.prepare("HEAD", { output }); + expect(prepared.reference.revision).toMatch(/^[0-9a-f]{40}$/); + for (const side of [prepared.reference, prepared.candidate]) { + expect(readFileSync(join(side.tree, "formal/dialcache-layers-conformance.qnt"), "utf8")).toContain("module dialcache_layers_conformance"); + const layers = side.manifests.execution.models.find(model => model.profile === "layers") as { regressions?: string[]; replayRegressions?: string[] }; + expect(layers.regressions?.length).toBeGreaterThan(0); + expect(layers.replayRegressions?.length).toBeGreaterThan(0); + } + } finally { rmSync(output, { recursive: true, force: true }); } + }, 30_000); + it("selects the composed profiles by their kernel imports in either revision, following helper libraries, and lists every Quint source", () => { - expect(differential.composedProfiles(readExecution())).toEqual(["policy", "scope", "layers", "runtime-boundaries", "source-budgets"]); + expect(differential.composedProfiles(readExecution())).toEqual(["effects", "recovery", "policy", "shadow", "scope", "admission", "layers", "independent", "recovery-read", "local-failure", "runtime-boundaries", "shadow-layers", "local-clock", "source-budgets"]); // A profile composed only at the reference (a rewrite off the library) is still selected. const referenceTree = mkdtempSync(join(tmpdir(), "differential-reference-")); const candidateTree = mkdtempSync(join(tmpdir(), "differential-candidate-")); @@ -203,6 +258,50 @@ describe("corpus differential comparison", () => { expect(sources).toContain("formal/kernel/serving.qnt"); expect([...sources].sort()).toEqual(sources); }); + + it("deals the composed profiles round-robin into shards by sorted name, every profile in exactly one shard, and refuses an index outside 1..count", () => { + const names = ["shadow", "admission", "recovery-read", "effects", "layers", "recovery", "scope"]; + const sorted = [...names].sort(); + for (const count of [1, 2, 3, 4, 7, 9]) { + const shards = Array.from({ length: count }, (_, position) => differential.shardProfiles(names, position + 1, count)); + // The union is the input with no name repeated, whatever the input's order. + expect(shards.flat().sort(), `${count} shards`).toEqual(sorted); + expect(shards.flat(), `${count} shards`).toHaveLength(names.length); + expect(shards, `${count} shards`).toEqual(Array.from({ length: count }, (_, position) => differential.shardProfiles(sorted, position + 1, count))); + } + // Round-robin, not contiguous slices: alphabetical neighbours (recovery, recovery-read) part ways. + expect(differential.shardProfiles(names, 1, 4)).toEqual(["admission", "recovery-read"]); + expect(differential.shardProfiles(names, 2, 4)).toEqual(["effects", "scope"]); + expect(differential.shardProfiles(names, 3, 4)).toEqual(["layers", "shadow"]); + expect(differential.shardProfiles(names, 4, 4)).toEqual(["recovery"]); + expect(differential.shardProfiles(names, 1, 1)).toEqual(sorted); + // A shard past the number of profiles is empty, not an error. + expect(differential.shardProfiles(["a", "b"], 3, 3)).toEqual([]); + expect(differential.shardProfiles([], 1, 4)).toEqual([]); + const refused: Array<[number, number]> = [[0, 4], [5, 4], [-1, 4], [1.5, 4], [1, 2.5], [Number.NaN, 4], [1, 0], [1, Number.POSITIVE_INFINITY]]; + for (const [index, count] of refused) { + expect(() => differential.shardProfiles(names, index, count), `${index}/${count}`).toThrow(/Shard (index|count) must be a positive integer|exceeds the shard count/); + } + }); + + it("refuses --shard outside --composed and a malformed shard before preparing any tree", () => { + const output = mkdtempSync(join(tmpdir(), "differential-shard-")); + try { + const run = (...args: string[]) => spawnSync(process.execPath, [resolve(root, "formal/differential.mjs"), ...args, `--out=${output}`], { cwd: root, encoding: "utf8" }); + for (const args of [["layers", "--shard=1/4"], ["--shard=1/4", "--reference=HEAD"]]) { + const result = run(...args); + expect(result.status, args.join(" ")).toBe(1); + expect(result.stderr, args.join(" ")).toMatch(/--shard applies to --composed only/); + } + for (const value of ["0/4", "5/4", "2", "a/b", "1/4/2"]) { + const result = run("--composed", `--shard=${value}`); + expect(result.status, value).toBe(1); + expect(result.stderr, value).toMatch(/--shard must be \/ with 1 <= index <= count/); + } + // Refused before any tree is exported: nothing is written under --out. + expect(readdirSync(output)).toEqual([]); + } finally { rmSync(output, { recursive: true, force: true }); } + }); }); describe.skipIf(!quintAvailable)("corpus differential replay through a tree", () => { @@ -261,6 +360,29 @@ describe.skipIf(!quintAvailable)("corpus differential replay through a tree", () expect(verdict!.fields).toEqual(["expected.loaders"]); }, 180_000); + it("replays a local-clock history through a reference text whose call is the parametrized action, through the descriptor binding", async () => { + const plan = differential.differentialPlan(differential.readManifests(root), differential.readManifests(root), "local-clock"); + const model = plan.candidate; + const descriptor = plan.descriptor as { explicitInputs: true; actions: Record; actionBindings: Record }; + const reference = copyTree(join(output, "pre-rename")); + const profile = join(reference, model.path); + const renamed = readFileSync(profile, "utf8"); + expect(renamed).toContain("action callWith(instance: int, offered: int)"); + // The text before the wrapper was renamed: `call` parametrized, `callCache` the public wrapper `step` selects. + const older = renamed.replaceAll("callWith", "call").replace("action call = {", "action callCache = {").replace("advanceTicks, call }", "advanceTicks, callCache }"); + expect(older).toContain("action call(instance: int, offered: int)"); + expect(older).toContain("action step = any { constructInstance, advanceTicks, callCache }"); + writeFileSync(profile, older); + const smoke = parseTrace(JSON.parse(readFileSync(resolve(root, "formal/local-clock-smoke.itf.json"), "utf8")), "local-clock-smoke", descriptor); + expect(smoke.steps.filter(entry => entry.action === "call").length).toBeGreaterThan(0); + const [verdict] = await differential.replayHistories(reference, model, descriptor, [smoke], { chunk: 16, output: join(output, "pre-rename-out"), concurrency: 1 }); + expect(verdict).toEqual({ path: "local-clock-smoke", agree: true }); + // Without the binding the older text declares `call` as a parametrized action no schedule can select. + const { actionBindings: _bindings, ...unbound } = descriptor; + await expect(differential.replayHistories(reference, model, unbound, [smoke], { chunk: 16, output: join(output, "pre-rename-unbound"), concurrency: 1 })) + .rejects.toThrow(/parameterless public action/); + }, 180_000); + it("names the input a candidate refuses, with the evaluator's diagnostic", async () => { const { model, descriptor } = layers(); const candidate = copyTree(join(output, "refusing")); diff --git a/test/formal-effects-authority-witnesses.test.ts b/test/formal-effects-authority-witnesses.test.ts index 2428bb73..c4dd13d8 100644 --- a/test/formal-effects-authority-witnesses.test.ts +++ b/test/formal-effects-authority-witnesses.test.ts @@ -1,46 +1,46 @@ import { readFileSync } from "node:fs"; import { describe, expect, it } from "vitest"; +import { parseTrace, type Trace } from "../formal/replay/effects.mjs"; import { effectsAuthorityRules, effectsAuthorityWitnesses } from "../formal/replay/witnesses/effects-authority.mjs"; // Public excerpts of real Quint regressions, used solely as classifier controls. // These tests do not add behavioral examples or mutation assertion detections. +// The controls parse each excerpt as the classifiers do and edit the asserted +// observation (`expected`), the record every rule reads. const fixtures = JSON.parse(readFileSync(new URL("./fixtures/effects-authority-witnesses.json", import.meta.url), "utf8")) as Array<{ - regression: string; trace: { states: Array<{ input: unknown; s: Record }> }; + regression: string; trace: unknown; }>; -function traceFor(name: string) { - return structuredClone(fixtures.find(fixture => fixture.regression === effectsAuthorityRules.find(rule => rule.name === name)!.regression)!.trace); -} -function classify(trace: { states: unknown[] }) { - return effectsAuthorityWitnesses([{ path: "trace.itf.json", states: trace.states }]); +function traceFor(name: string): Trace { + const regression = effectsAuthorityRules.find(rule => rule.name === name)!.regression; + return parseTrace(structuredClone(fixtures.find(fixture => fixture.regression === regression)!.trace), "trace.itf.json"); } +const classify = (trace: Trace) => effectsAuthorityWitnesses([trace]); describe("effects authority witness controls", () => { for (const rule of effectsAuthorityRules) it(`requires the actual consequence for ${rule.name}`, () => { const trace = traceFor(rule.name); expect(classify(trace).has(rule.name)).toBe(true); - trace.states.at(-1)!.s.calls = [{ "#bigint": "0" }]; + trace.steps.at(-1)!.expected.calls = [0]; expect(classify(trace).has(rule.name)).toBe(false); }); it("requires a cache hit after the intervening fence, even when the initial source succeeds", () => { const name = "write-stamp-after-serialization", trace = traceFor(name); - trace.states.at(-1)!.s.loaders = { "#bigint": "2" }; - trace.states.at(-1)!.s.loads = { "#bigint": "0" }; + trace.steps.at(-1)!.expected.loaders = 2; + trace.steps.at(-1)!.expected.loads = 0; expect(classify(trace).has(name)).toBe(false); }); it("rejects a wrong observing layer with the same positive offset", () => { const name = "future-offset-observing-layer-positive-seconds", trace = traceFor(name); - const events = trace.states.at(-1)!.s.events as Array>; - events.find(event => event.event === "futureOffset")!.location = "remote_shadow"; + trace.steps.at(-1)!.expected.events.find(event => event.event === "futureOffset")!.location = "remote_shadow"; expect(classify(trace).has(name)).toBe(false); }); it("rejects a zero offset at the right observing layer", () => { const name = "future-offset-observing-layer-positive-seconds", trace = traceFor(name); - const events = trace.states.at(-1)!.s.events as Array>; - events.find(event => event.event === "futureOffset")!.amount = { "#bigint": "0" }; + trace.steps.at(-1)!.expected.events.find(event => event.event === "futureOffset")!.amount = 0; expect(classify(trace).has(name)).toBe(false); }); it("rejects duplicated leader errors despite matching caller errors", () => { const name = "shared-failure-preserves-leader-and-follower-trail", trace = traceFor(name); - const events = trace.states.at(-1)!.s.events as Array>; + const events = trace.steps.at(-1)!.expected.events; events.push(structuredClone(events.find(event => event.event === "error")!)); expect(classify(trace).has(name)).toBe(false); }); diff --git a/test/formal-effects.test.ts b/test/formal-effects.test.ts index 9e8f8b2d..003144c6 100644 --- a/test/formal-effects.test.ts +++ b/test/formal-effects.test.ts @@ -1,4 +1,5 @@ import { parseTrace, fixtureFor, inputsFor, project, expectedObservations, type Trace } from "../formal/replay/effects.mjs"; +import { SettlementLedger } from "../formal/replay/settlement.mjs"; import { checkCorpus, loadCorpus } from "../formal/replay/witnesses/index.mjs"; import { readFileSync, readdirSync } from "node:fs"; @@ -6,9 +7,13 @@ import { resolve } from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { BehaviorDriver } from "./formal/behavior-driver.js"; +import { BehaviorDriver, type Input } from "./formal/behavior-driver.js"; import { assertEffectsHistory } from "./formal/effects-contract.js"; +// The exported effects regressions are the model's public-only runs, read from its Quint text. +const { scheduleExecution } = await import(new URL("../formal/execution.mjs", import.meta.url).href) as { + scheduleExecution(): { models: Array<{ profile?: string; replayRegressions?: string[] }> }; +}; const singleFile = process.env.DIALCACHE_EFFECTS_TRACE_FILE; const directory = process.env.DIALCACHE_EFFECTS_TRACE_DIR; function loadTraces(): { traces: Trace[]; missing: string[] | undefined } { @@ -17,10 +22,7 @@ function loadTraces(): { traces: Trace[]; missing: string[] | undefined } { else if (directory === undefined) paths = [resolve("formal/effects-smoke.itf.json")]; else { paths = readdirSync(directory).filter((name) => name.endsWith(".itf.json")).sort().map((name) => resolve(directory, name)); - const execution = JSON.parse(readFileSync(new URL("../formal/execution.json", import.meta.url), "utf8")) as { - models: Array<{ profile?: string; replayRegressions?: string[] }>; - }; - for (const name of execution.models.find(model => model.profile === "effects")?.replayRegressions ?? []) { + for (const name of scheduleExecution().models.find(model => model.profile === "effects")?.replayRegressions ?? []) { paths.push(resolve(directory, "..", "regressions", "effects", `${name}.itf.json`)); } } @@ -40,26 +42,45 @@ beforeEach(() => { }); afterEach(() => { vi.useRealTimers(); vi.restoreAllMocks(); }); -async function replay(trace: Trace) { +// `settle: false` is the harness control of the negative below only; +// conformance replays never pass it. +async function replay(trace: Trace, harness: { settle?: boolean } = {}) { // Configuration is an explicit initial input, independent of expected state. - const driver = new BehaviorDriver(fixtureFor(trace.steps[0]!.choice!)); + const fixture = fixtureFor(trace.steps[0]!.choice!); + const driver = new BehaviorDriver(fixture, {}, harness); + const setup: Input[] = [{ op: "faults", value: { holdReads: true, holdLoads: true, holdDumps: true, holdWrites: true } }]; + // The ledger the coordinator keeps for a session: every command issued here, + // checked against the driver's receipt before each observation is compared. + const ledger = new SettlementLedger(fixture, setup); try { - await driver.apply({ op: "faults", value: { holdReads: true, holdLoads: true, holdDumps: true, holdWrites: true } }); + for (const input of setup) await driver.apply(input); const expectations = expectedObservations(trace); + // One snapshot per step: the inputs of the next step are derived from the + // observation the previous step was asserted against. + let observed = driver.snapshot(); for (const [index, step] of trace.steps.entries()) { const context = `${trace.path} step ${index} action ${step.action}`; const expected = expectations[index]; + const mismatch = (cause: unknown) => new Error(`${context}\nexpected: ${JSON.stringify(expected)}\nactual: ${JSON.stringify(driver.snapshot())}\nreceipt: ${JSON.stringify(driver.receipt())}\nreplay: DIALCACHE_EFFECTS_TRACE_FILE=${JSON.stringify(trace.path)} corepack pnpm exec vitest run test/formal-effects.test.ts`, { cause }); + let inputs: Input[] = []; try { // Only the action/choice and independently observed effect index enter execution. - const inputs = inputsFor({ action: step.action, ...(step.choice === undefined ? {} : { choice: step.choice }) }, driver.snapshot(), { wallMs: Date.now() }); + inputs = inputsFor({ action: step.action, choice: step.choice }, observed, { wallMs: Date.now() }); for (const input of inputs) await driver.apply(input); + } catch (cause) { throw mismatch(cause); } + ledger.issue(inputs); + observed = driver.snapshot(); + // Settlement is checked first and outside the comparison wrapper: a + // violation is the driver's own infrastructure failure and must never + // carry the expected/actual markers the mutation lanes credit. + try { ledger.assert(driver.receipt(), observed, { wallMs: Date.now() }); } + catch (cause) { throw new Error([`${context}: ${(cause as Error).message}`, driver.settlementDiagnostic()].filter(Boolean).join("\n"), { cause }); } + try { // Check C23/C25/C26 directly on observed history, independently of // expected Quint phases, timestamps, and outcome predictions. assertEffectsHistory(driver.contractHistory()); - expect(project(driver.snapshot()), context).toEqual(expected); - } catch (cause) { - throw new Error(`${context}\nexpected: ${JSON.stringify(expected)}\nactual: ${JSON.stringify(driver.snapshot())}\nreplay: DIALCACHE_EFFECTS_TRACE_FILE=${JSON.stringify(trace.path)} corepack pnpm exec vitest run test/formal-effects.test.ts`, { cause }); - } + expect(project(observed), context).toEqual(expected); + } catch (cause) { throw mismatch(cause); } } } finally { await driver.dispose(); } } @@ -78,10 +99,17 @@ describe("generated pending-effect conformance", () => { delete raw.states[0].s.events; expect(() => parseTrace(raw, "missing-events")).toThrow(); const trace = structuredClone(traces[0]!); - trace.steps[1]!.state.events.push({ event: "miss", location: "remote", detail: "value_absent", amount: 0 }); + trace.steps[1]!.expected.events.push({ event: "miss", location: "remote", detail: "value_absent", amount: 0 }); await expect(replay(trace)).rejects.toThrow(/step 1 action.*\nexpected:.*\nactual:/s); }); + it("fails a driver that skips settlement by settlement violation, never by mismatch", async () => { + const path = resolve("formal/effects-smoke.itf.json"); + const error = await replay(parseTrace(JSON.parse(readFileSync(path, "utf8")), path), { settle: false }).then(() => "passed", (cause: unknown) => String(cause)); + expect(error).toMatch(/Settlement violation: \d+ runnable task\(s\) at observation/); + expect(error).not.toMatch(/expected:[\s\S]*actual:/); + }); + it("rejects missing choices and precision loss", () => { const raw = JSON.parse(readFileSync(traces[0]!.path, "utf8")); raw.states[1].input = { name: "resolveLoader", choice: { "#bigint": "-1" } }; diff --git a/test/formal-execution.test.ts b/test/formal-execution.test.ts index d60fb41b..88211017 100644 --- a/test/formal-execution.test.ts +++ b/test/formal-execution.test.ts @@ -4,36 +4,50 @@ import { fileURLToPath } from "node:url"; import { describe, expect, it } from "vitest"; type Reproducer = { kind: string; run: string; model?: string; failure: string; family: string; profiles: string[]; exclusions: Record; scope?: string }; -type Challenge = { id: string; contract: string; source: string; model: string; invariant: string; before: string; after: string; measures?: string; reproducer?: Reproducer }; +type NativeMutants = { kind: string; text: string; mutant?: string; crossContract?: string }; +type Challenge = { id: string; contract: string; source: string; model: string; invariant: string; before: string; after: string; measures?: string; reproducer?: Reproducer; nativeMutants?: NativeMutants }; type Manifest = { check: { maxSamples: number; maxSteps: number; outputDirectory: string }; - libraries: string[]; challenges: Challenge[]; reproducerBacklog: string[]; + nativeMutantBacklog: string[]; models: Array<{ path: string; invariants: string[]; - regressions: string[]; - replayRegressions?: string[]; profile?: string; challengeWaiver?: string; generate?: { maxSamples: number; maxSteps: number; traces: number; outputDirectory: string }; vectorExport?: { generator: string; artifact: string; kind: string; cases: number; sources: string[] }; }>; }; +// The manifest with the schedule its Quint text states: every declared run is a regression, a profile's public-only runs are its replay regressions, and the libraries are the sources no model claims. +type Scheduled = Omit & { libraries: string[]; models: Array }; type Command = { command: string; args: string[]; outputDirectory?: string; expectedTraces?: number; explicitInputs?: boolean; expectedFiles?: string[]; profile?: string }; const manifest = () => JSON.parse(readFileSync(new URL("../formal/execution.json", import.meta.url), "utf8")) as Manifest; const moduleUrl = new URL("../formal/execution.mjs", import.meta.url).href; const runner = fileURLToPath(new URL("../formal/run-models.mjs", import.meta.url)); -const { root, scanDeclarations, scanDeclarationBodies, classifyRuns, reproducerCheckpoint, validateExecution, grandfatheredReproducerBacklog, quintSources } = await import(moduleUrl) as { +type PortSection = { edits?: unknown[]; requiredDetections: string[] }; +type MutantEntry = { id: string; case: string; description?: string; rationale?: string; typescript: PortSection; go: PortSection }; +type Catalog = { mutations: Map; caseContracts: Map }; +type Summary = { [key: string]: unknown; nativeMutants: { mapped: number; unobservable: number; modelOnly: number; backlog: number }; unmappedMutants: number }; +type Declarations = Map }>; +type Options = { readSource?(path: string): string; scanSource?(source: string): Declarations; grandfathered?: readonly string[]; grandfatheredNative?: readonly string[]; catalog?: Catalog; files?: string[] }; +const { root, scanDeclarations, scanDeclarationBodies, classifyRuns, reproducerCheckpoint, validateExecution, scheduleExecution, readMutantCatalog, checkMutantAnchors, mutantsForPort, challengesByMutant, nativeMutantKinds, grandfatheredReproducerBacklog, grandfatheredNativeMutantBacklog, quintSources } = await import(moduleUrl) as { root: string; quintSources(directory?: string): string[]; + scheduleExecution(manifest?: Manifest, options?: Options): Scheduled; scanDeclarations(source: string): Map; - scanDeclarationBodies(source: string): Map }>; + scanDeclarationBodies(source: string): Declarations; classifyRuns(declarations: Map): { publicOnly: string[]; patching: string[] }; reproducerCheckpoint(source: string, run: string, failure: unknown): { before: string; through: string }; - validateExecution(value: unknown, options?: { readSource?(path: string): string; grandfathered?: readonly string[]; files?: string[] }): Record; + validateExecution(value: unknown, options?: Options): Summary; + readMutantCatalog(readText?: (path: string) => string): Catalog; + checkMutantAnchors(catalog: Catalog, readText?: (path: string) => string): Map; + mutantsForPort(catalog: Catalog, port: "typescript" | "go"): Array<{ id: string; case: string; edits: unknown[]; requiredDetections: string[] }>; + challengesByMutant(manifest: Manifest): Map; + nativeMutantKinds: readonly string[]; grandfatheredReproducerBacklog: readonly string[]; + grandfatheredNativeMutantBacklog: readonly string[]; }; const { checkSemanticCoverage } = await import(new URL("../formal/check-semantic-coverage.mjs", import.meta.url).href) as { checkSemanticCoverage(value: unknown): unknown; @@ -43,46 +57,98 @@ const { bindGeneratedTrace } = await import(new URL("../formal/run-models.mjs", }; // Exercise pure metadata checks directly: large catalogs must not depend on // synchronous stdin pipes. The CLI dry-run check below still tests the launcher. -const validate = (value: unknown, options?: { readSource?(path: string): string; grandfathered?: readonly string[]; files?: string[] }) => validateExecution(value, options); +// The many validations of one manifest share one scan per distinct source +// text; keyed by the text, so a temporary source is always scanned afresh. +const scans = new Map(); +const scanSource = (source: string): Declarations => { + let declarations = scans.get(source); + if (declarations === undefined) { declarations = scanDeclarationBodies(source); scans.set(source, declarations); } + return declarations; +}; +const validate = (value: unknown, options?: Options) => validateExecution(value, { scanSource, ...options }); +// The effects text with one state-patching run appended (an inline `s'` assignment under `input' = input`), for the +// negatives about runs that are scheduled but never exported; every run the profiles declare is public. +const withPatchingRun = (path: string) => { + const source = readFileSync(root + path, "utf8"); + if (path !== "formal/dialcache-effects-conformance.qnt") return source; + return source.replace(/\n}\s*$/, "\n run patchedBudgetTest = tenMillisecondFixture.then(all { input' = input, s' = { readBudget: 30, ...s } }).expect(s.readBudget == 30)\n}\n"); +}; +const scheduled = () => scheduleExecution(manifest(), { scanSource }); +const liveReproducers = () => manifest().challenges.filter(challenge => challenge.reproducer).length; +const sum = (values: number[]) => values.reduce((total, value) => total + value, 0); describe("formal execution schedule", () => { it("accounts for all models, selected invariants, regressions, generated traces and challenges without Quint", () => { - expect(validate(manifest())).toEqual({ models: 32, libraries: 21, profiles: 15, invariants: 219, regressions: 417, - generatedTraces: 5280, exportedRegressionTraces: 250, vectorModels: 4, generatedVectors: 1631, - challenges: 72, distinctFaults: 68, challengedModels: 32, waivedModels: 0, reproducers: 13, reproducerBacklog: 59 }); + // Every count is computed from the manifest and the Quint sources the validator reads, so a schedule change + // needs no test edit. The sums are the invariants: the exported histories are the profiles' public-only + // runs, every model is challenged or waived, and every challenge carries a reproducer or sits in that + // backlog and maps to a native mutant or sits in that one. + const raw = manifest(), current = scheduled(), catalog = readMutantCatalog(); + const registry = JSON.parse(readFileSync(new URL("../formal/profiles.json", import.meta.url), "utf8")) as { profiles: unknown[] }; + const kinds = (kind: string) => raw.challenges.filter(challenge => challenge.nativeMutants?.kind === kind).length; + const cited = new Set(raw.challenges.map(challenge => challenge.nativeMutants?.mutant).filter(mutant => mutant !== undefined)); + const challenged = new Set(raw.challenges.map(challenge => challenge.model)).size, waived = raw.models.filter(model => model.challengeWaiver !== undefined).length; + expect(validate(raw)).toEqual({ + models: raw.models.length, libraries: current.libraries.length, profiles: registry.profiles.length, + invariants: sum(raw.models.map(model => model.invariants.length)), regressions: sum(current.models.map(model => model.regressions.length)), + generatedTraces: sum(raw.models.map(model => model.generate?.traces ?? 0)), exportedRegressionTraces: sum(current.models.map(model => model.replayRegressions?.length ?? 0)), + vectorModels: raw.models.filter(model => model.vectorExport).length, generatedVectors: sum(raw.models.map(model => model.vectorExport?.cases ?? 0)), + challenges: raw.challenges.length, distinctFaults: new Set(raw.challenges.map(challenge => JSON.stringify([challenge.source, challenge.before, challenge.after]))).size, + challengedModels: challenged, waivedModels: waived, reproducers: liveReproducers(), reproducerBacklog: raw.reproducerBacklog.length, + nativeMutants: { mapped: kinds("mapped"), unobservable: kinds("unobservable"), modelOnly: kinds("model-only"), backlog: raw.nativeMutantBacklog.length }, + unmappedMutants: catalog.mutations.size - cited.size, + }); + expect(current.libraries.length + raw.models.length).toBe(quintSources().length); + expect(challenged + waived).toBe(raw.models.length); + expect(liveReproducers() + raw.reproducerBacklog.length).toBe(raw.challenges.length); + expect(kinds("mapped") + kinds("unobservable") + kinds("model-only") + raw.nativeMutantBacklog.length).toBe(raw.challenges.length); }); - it("rejects omitted models and dropped or renamed regressions", () => { + it("reads the schedule from the Quint text and refuses a manifest that lists it again or leaves a model unscheduled", () => { + const current = scheduled(); + expect(current.libraries).toEqual(quintSources().filter(path => !manifest().models.some(model => model.path === path))); + for (const model of current.models) { + const bodies = scanDeclarationBodies(readFileSync(root + model.path, "utf8")); + expect(model.regressions, model.path).toEqual([...bodies].filter(([, { kind }]) => kind === "run").map(([name]) => name)); + expect(model.regressions.every(name => name.endsWith("Test")), model.path).toBe(true); + if (model.profile === undefined) expect(model.replayRegressions, model.path).toBeUndefined(); + } + // A model dropped from the manifest still declares actions: it cannot pass as a helper library. const missingModel = manifest(); - missingModel.models.shift(); - expect(() => validate(missingModel)).toThrow(/file inventory changed/); - const hiddenModel = manifest(); - hiddenModel.libraries.push(hiddenModel.models.shift()!.path); - expect(() => validate(hiddenModel)).toThrow(/stateful model/); - const missingTest = manifest(); - missingTest.models[0]!.regressions.pop(); - expect(() => validate(missingTest)).toThrow(/regression schedule/); - const renamedTest = manifest(); - renamedTest.models[0]!.regressions[0] = "renamedWithoutSuffix"; - expect(() => validate(renamedTest)).toThrow(/Test suffix/); + const dropped = missingModel.models.shift()!; + expect(() => validate(missingModel)).toThrow(new RegExp(`${dropped.path.replace(/[./]/g, "\\$&")}: a stateful Quint source must be a scheduled model`)); + // A scheduled path the tree does not have is an inventory change. + const renamedModel = manifest(); + renamedModel.models[0]!.path = "formal/dialcache-missing.qnt"; + expect(() => validate(renamedModel)).toThrow(/file inventory changed/); + // The lists are copies of the text and are refused rather than compared. + const listed = manifest() as Manifest & { libraries?: string[] }; + listed.libraries = current.libraries; + expect(() => validate(listed)).toThrow(/libraries are read from the Quint sources/); + const recorded = manifest(); + (recorded.models[0] as Record).regressions = current.models[0]!.regressions; + expect(() => validate(recorded)).toThrow(/regressions and replayRegressions are read from the model's runs/); + const exported = manifest(); + (exported.models.find(model => model.profile) as Record).replayRegressions = []; + expect(() => validate(exported)).toThrow(/regressions and replayRegressions are read from the model's runs/); + // A run that loses the Test suffix is refused, never silently unscheduled. + const first = current.models[0]!; + expect(() => validateExecution(manifest(), { scanSource, readSource: path => { + const source = readFileSync(root + path, "utf8"); + return path === first.path ? source.replaceAll(first.regressions[0]!, `${first.regressions[0]}Probe`) : source; + } })).toThrow(/must keep the Test suffix/); }); it("inventories the kernel library modules as libraries and keeps them pure", () => { - const listed = manifest().libraries.filter(path => path.startsWith("formal/kernel/")); - expect(listed.length).toBeGreaterThanOrEqual(8); - const unlisted = manifest(); - unlisted.libraries = unlisted.libraries.filter(path => path !== "formal/kernel/serving.qnt"); - expect(() => validate(unlisted)).toThrow(/file inventory changed/); - const nested = manifest(); - nested.libraries[nested.libraries.indexOf("formal/kernel/serving.qnt")] = "formal/kernel/deep/serving.qnt"; - expect(() => validate(nested)).toThrow(/file inventory changed/); - const stateful = manifest(); + const { libraries } = scheduled(); + expect(libraries.filter(path => path.startsWith("formal/kernel/")).length).toBeGreaterThanOrEqual(8); + expect(validate(manifest()).libraries).toBe(libraries.length); const kernelSource = readFileSync(new URL("../formal/kernel/clock.qnt", import.meta.url), "utf8"); - expect(() => validate(stateful, { readSource: (path: string) => path === "formal/kernel/clock.qnt" ? kernelSource.replace("type Timed[r]", "var leaked: int\n type Timed[r]") : readFileSync(new URL(`../${path}`, import.meta.url), "utf8") })) - .toThrow(/formal\/kernel\/clock\.qnt: a stateful model cannot be classified as a pure helper library/); + expect(() => validate(manifest(), { readSource: (path: string) => path === "formal/kernel/clock.qnt" ? kernelSource.replace("type Timed[r]", "var leaked: int\n type Timed[r]") : readFileSync(new URL(`../${path}`, import.meta.url), "utf8") })) + .toThrow(/formal\/kernel\/clock\.qnt: a stateful Quint source must be a scheduled model/); }); - it("validates a composed profile's declared behavior version", () => { + it("validates a composed profile's declared behavior version and bytes-per-state bound", () => { const layers = () => { const m = manifest(); return { m, model: m.models.find(model => model.profile === "layers")! as typeof m.models[number] & { differential?: unknown } }; }; const versioned = layers(); versioned.model.differential = { behaviorVersion: 1 }; @@ -90,24 +156,40 @@ describe("formal execution schedule", () => { const zero = layers(); zero.model.differential = { behaviorVersion: 0 }; expect(() => validate(zero.m)).toThrow(/behaviorVersion must be a positive integer/); - for (const invalid of [{ preserve: true }, {}, null, { behaviorVersion: 1, maxBytesPerStateRatio: 1.3 }]) { + for (const invalid of [{ preserve: true }, {}, null, { behaviorVersion: 1, bytes: 1.3 }]) { const bad = layers(); bad.model.differential = invalid; expect(() => validate(bad.m), JSON.stringify(invalid)).toThrow(/unsupported differential settings/); } + // A model may declare its own bytes-per-state bound for the differential, alone or beside its behavior version. + const bounded = layers(); + bounded.model.differential = { behaviorVersion: 1, maxBytesPerStateRatio: 1.3 }; + expect(() => validate(bounded.m)).not.toThrow(); + const boundOnly = layers(); + boundOnly.model.differential = { maxBytesPerStateRatio: 1.4 }; + expect(() => validate(boundOnly.m)).not.toThrow(); + for (const invalid of [0.9, 0, -1, "1.4", Number.NaN, Number.POSITIVE_INFINITY, null]) { + const bad = layers(); + bad.model.differential = { maxBytesPerStateRatio: invalid }; + expect(() => validate(bad.m), String(invalid)).toThrow(/maxBytesPerStateRatio must be a finite number of at least 1/); + } const unscheduled = manifest(); (unscheduled.models.find(model => model.path === "formal/dialcache-core.qnt")! as typeof unscheduled.models[number] & { differential?: unknown }).differential = { behaviorVersion: 1 }; expect(() => validate(unscheduled)).toThrow(/unsupported differential settings/); }); - it("refuses a kernel module no scheduled model imports", () => { - const orphan = manifest(); - orphan.libraries.push("formal/kernel/orphan.qnt"); - const sources = (path: string) => path === "formal/kernel/orphan.qnt" ? "module orphan { pure def unused(n: int): int = n }" : readFileSync(new URL(`../${path}`, import.meta.url), "utf8"); - // Listed but absent from the tree: the inventory check speaks first. - expect(() => validate(orphan, { readSource: sources })).toThrow(/file inventory changed/); - // Listed and present, yet reached by no model: the orphan rule. - expect(() => validate(orphan, { readSource: sources, files: [...quintSources(), "formal/kernel/orphan.qnt"] })).toThrow(/Kernel modules no scheduled model imports: formal\/kernel\/orphan\.qnt/); + it("refuses a Quint library no scheduled model imports, at formal/ or formal/kernel/", () => { + const stateless = "module orphan { pure def unused(n: int): int = n }"; + const sources = (path: string) => ["formal/kernel/orphan.qnt", "formal/stray.qnt"].includes(path) ? stateless : readFileSync(new URL(`../${path}`, import.meta.url), "utf8"); + // Present in the tree, a library by construction, yet reached by no model: the orphan rule. + expect(() => validate(manifest(), { readSource: sources, files: [...quintSources(), "formal/kernel/orphan.qnt"] })).toThrow(/Quint libraries no scheduled model imports: formal\/kernel\/orphan\.qnt/); + // The same rule is the inventory tripwire at formal/: a stateless source the listing would otherwise admit as + // a library, and that no lane would typecheck, is refused by name rather than hashed into the evidence inputs. + expect(() => validate(manifest(), { readSource: sources, files: [...quintSources(), "formal/stray.qnt"] })).toThrow(/Quint libraries no scheduled model imports: formal\/stray\.qnt;/); + expect(() => validate(manifest(), { readSource: sources, files: [...quintSources(), "formal/kernel/orphan.qnt", "formal/stray.qnt"].sort() })) + .toThrow(/formal\/kernel\/orphan\.qnt, formal\/stray\.qnt/); + // Every library in the tree is reached, so the rule admits the current inventory. + expect(() => validate(manifest())).not.toThrow(); }); it("rejects invalid exploration bounds and unsafe generation output paths", () => { @@ -125,18 +207,10 @@ describe("formal execution schedule", () => { expect(() => validate(unsafe)).toThrow(/unsafe or duplicate/); }); - it("requires replay regressions to be scheduled tests with explicit input declarations", () => { - const unscheduled = manifest(); - unscheduled.models.find(model => model.replayRegressions)!.replayRegressions = ["inventedTest"]; - expect(() => validate(unscheduled)).toThrow(/replay regressions need declared input and scheduled tests/); - const duplicate = manifest(); - const model = duplicate.models.find(model => model.replayRegressions)!; - model.replayRegressions!.push(model.replayRegressions![0]!); - expect(() => validate(duplicate)).toThrow(/replay regressions inventory/); - const real = manifest(); - expect(() => validateExecution(real, { readSource: path => + it("requires a profile model to declare the input variable its exported regressions record", () => { + expect(() => validateExecution(manifest(), { readSource: path => readFileSync(root + path, "utf8").replace(/\bvar input\b/g, "var hiddenInput"), - })).toThrow(/replay regressions need declared input and scheduled tests/); + })).toThrow(/exported replay regressions need a declared input variable/); }); it("classifies profile runs as public-only or state-patching through fixtures, comments and strings", () => { @@ -161,25 +235,29 @@ describe("formal execution schedule", () => { publicOnly: ["publicTest", "stringTest"], patching: ["inlinePatchTest", "fixtureTest", "inlineStateOnlyTest"], }); - const current = manifest(); + const current = scheduled(); for (const model of current.models.filter(model => model.profile)) { const runs = classifyRuns(scanDeclarationBodies(readFileSync(root + model.path, "utf8"))); - expect([...runs.publicOnly].sort(), model.path).toEqual([...model.replayRegressions!].sort()); + expect(model.replayRegressions, model.path).toEqual(runs.publicOnly); } - expect(current.models.find(model => model.profile === "effects")!.replayRegressions).toHaveLength(42); - expect(current.models.find(model => model.profile === "shadow")!.replayRegressions).toHaveLength(7); - expect(current.models.find(model => model.profile === "independent")!.replayRegressions).toHaveLength(7); + // Every profile exports at least one history. + for (const model of current.models.filter(model => model.profile)) expect(model.replayRegressions!.length, model.path).toBeGreaterThan(0); }); - it("forces every public-only run to be exported and keeps state-patching runs out of replay", () => { - const unexported = manifest(); - const core = unexported.models.find(model => model.profile === "core")!; - const dropped = core.replayRegressions!.pop()!; - expect(() => validate(unexported)).toThrow(new RegExp(`public-only runs are not exported as replay regressions: ${dropped}`)); - const patched = manifest(); - const effects = patched.models.find(model => model.profile === "effects")!; - effects.replayRegressions!.push("followerKeepsAcceptedReadBudgetTest"); - expect(() => validate(patched)).toThrow(/state-patching runs cannot be replay regressions: followerKeepsAcceptedReadBudgetTest/); + it("exports every public-only run and no state-patching run, by construction of the schedule", () => { + const current = scheduled(); + for (const model of current.models.filter(model => model.profile)) { + const runs = classifyRuns(scanDeclarationBodies(readFileSync(root + model.path, "utf8"))); + expect(runs.patching.filter(name => model.replayRegressions!.includes(name)), model.path).toEqual([]); + expect(runs.publicOnly.filter(name => !model.replayRegressions!.includes(name)), model.path).toEqual([]); + expect(model.replayRegressions!.every(name => model.regressions.includes(name)), model.path).toBe(true); + } + // A reproducer may cite a state-patching run only as a model-run, never as an exported regression. No profile + // declares one any more, so the negative adds one to the effects text through the source reader. + const patching = manifest(); + const effects = patching.challenges.find(challenge => challenge.id === "effects-late-source-accepted")!; + effects.reproducer = { ...effects.reproducer!, kind: "exported-regression", run: "patchedBudgetTest", failure: "s.readBudget == 30" }; + expect(() => validate(patching, { readSource: withPatchingRun })).toThrow(/exported-regression reproducer must cite an exported public-only run of formal\/dialcache-effects-conformance\.qnt: patchedBudgetTest/); }); it("rejects a generated history whose choice leaves the driver domain at generation time", () => { @@ -240,11 +318,12 @@ describe("formal execution schedule", () => { const target = uncovered.models.find(model => model.path === "formal/dialcache-core.qnt")!; uncovered.challenges = uncovered.challenges.filter(challenge => challenge.model !== target.path); uncovered.reproducerBacklog = uncovered.reproducerBacklog.filter(id => uncovered.challenges.some(challenge => challenge.id === id)); + uncovered.nativeMutantBacklog = uncovered.nativeMutantBacklog.filter(id => uncovered.challenges.some(challenge => challenge.id === id)); expect(() => validate(uncovered)).toThrow(/dialcache-core\.qnt: scheduled invariants have no model property challenge and no challengeWaiver/); target.challengeWaiver = " "; expect(() => validate(uncovered)).toThrow(/challenge waiver must explain an unchallenged model/); target.challengeWaiver = "No compiling single-site fault is detectable by the scheduled invariants."; - expect(validate(uncovered)).toMatchObject({ challengedModels: 31, waivedModels: 1 }); + expect(validate(uncovered)).toMatchObject({ challengedModels: manifest().models.length - 1, waivedModels: 1 }); const redundantWaiver = manifest(); redundantWaiver.models[0]!.challengeWaiver = "Already challenged."; expect(() => validate(redundantWaiver)).toThrow(/challenge waiver must explain an unchallenged model/); @@ -257,14 +336,14 @@ describe("formal execution schedule", () => { const current = manifest(); const withReproducer = current.challenges.filter(challenge => challenge.reproducer); expect(withReproducer.map(challenge => challenge.id)).toEqual([ - "policy-inclusive-local-expiry", "policy-inclusive-remote-freshness", "shadow-inclusive-c0-freshness", "scope-nested-close-evicts-outer-memo", "admission-capacity-off-by-one", "local-clock-precise-ttl", "stale-recovery-future-candidate", "envelope-strips-unknown-zero-prefix", "source-budgets-accepts-at-deadline-equality", "policy-hit-before-join", "policy-join-ignores-coalesce", "source-budgets-settlement-never-replaces-local-entry", "source-budgets-failed-settlement-clears-local-entry", + "recovery-connection-inclusive-maximum", "policy-inclusive-local-expiry", "profile-recovery-wrong-snapshot", "recovery-read-wrong-admission-policy", "independent-wrong-admission-policy", "effects-wrong-acceptance-receipt", "recovery-strands-followers", "policy-inclusive-remote-freshness", "shadow-inclusive-c0-freshness", "shadow-fenced-fill-writes", "shadow-fill-before-source", "effects-fenced-source-publishes", "effects-late-source-accepted", "scope-nested-close-evicts-outer-memo", "admission-duplicate-key-admitted", "admission-capacity-off-by-one", "independent-deadline-settles-at-start", "recovery-read-inclusive-maximum", "recovery-read-recovery-warms-local", "recovery-read-tracked-retention-uncapped", "local-failure-write-fault-publishes", "local-failure-source-error-published", "shadow-layers-inclusive-c0-freshness", "shadow-layers-fill-uses-current-retention", "local-clock-precise-ttl", "local-clock-hit-renews-insertion", "stale-recovery-future-candidate", "envelope-strips-unknown-zero-prefix", "source-budgets-accepts-at-deadline-equality", "policy-hit-before-join", "policy-join-ignores-coalesce", "source-budgets-settlement-never-replaces-local-entry", "source-budgets-failed-settlement-clears-local-entry", ]); expect(withReproducer.map(challenge => challenge.reproducer!.kind)).toEqual([ - "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "model-run", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", + "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "model-run", "exported-regression", "exported-regression", "exported-regression", "exported-regression", "exported-regression", ]); // The shared-rule fault of a verification model is pinned by a profile's exported regression. expect(withReproducer.find(challenge => challenge.id === "stale-recovery-future-candidate")!.reproducer).toMatchObject({ - model: "formal/dialcache-policy-conformance.qnt", run: "wallRollbackRejectsFutureRemoteFrameTest", profiles: ["formal/dialcache-stale-recovery.qnt", "recovery", "policy", "shadow"], + model: "formal/dialcache-policy-conformance.qnt", run: "wallRollbackRejectsFutureRemoteFrameTest", profiles: ["formal/dialcache-stale-recovery.qnt", "recovery", "policy", "shadow", "recovery-read", "effects"], }); expect([...current.reproducerBacklog].sort()).toEqual(current.challenges.filter(challenge => !challenge.reproducer).map(challenge => challenge.id).sort()); const unlisted = manifest(); @@ -292,6 +371,173 @@ describe("formal execution schedule", () => { expect(() => validate(missing)).toThrow(/reproducer backlog is missing/); }); + // Explicit budget: the hosted runner is about six times slower under coverage than a local run. + it("maps every challenge to a native mutant in the catalog or an enumerated explanation, and freezes the backlog", () => { + // A small catalog fixture: M01 and M11 require generated detection in both + // ports, M40 sits on a C40 case and M20 requires generated detection only in + // TypeScript. + const entry = (id: string, kase: string, typescript: string[], go = typescript): MutantEntry => ({ id, case: kase, typescript: { requiredDetections: typescript }, go: { requiredDetections: go } }); + const catalog = (): Catalog => ({ + mutations: new Map([ + ["M01", entry("M01", "C45.maximum-age-exclusive", ["ordinary", "generated", "portable"], ["generated", "portable"])], + ["M11", entry("M11", "C09.fixed-local-ttl", ["generated", "portable"])], + ["M20", entry("M20", "C11.distinct-keys", ["generated", "portable"], [])], + ["M40", entry("M40", "C40.future-rejected", ["generated", "portable"])], + ]), + caseContracts: new Map([["C45.maximum-age-exclusive", ["C45"]], ["C09.fixed-local-ttl", ["C09"]], ["C11.distinct-keys", ["C11"]], ["C40.future-rejected", ["C40"]]]), + }); + // The rules are exercised against the fixture catalog, not the live mapping: + // start from the live manifest with every challenge explained and the frozen + // backlog, then vary one challenge at a time. + const explained = () => { + const m = manifest(); + m.nativeMutantBacklog = [...grandfatheredNativeMutantBacklog]; + for (const challenge of m.challenges) { + if (m.nativeMutantBacklog.includes(challenge.id)) delete challenge.nativeMutants; + else challenge.nativeMutants = { kind: "model-only", text: "Fixture: no line in src/dialcache.ts carries this bookkeeping." }; + } + return m; + }; + const withNative = (id: string, native: NativeMutants | undefined, edit: (m: Manifest) => void = () => undefined) => { + const m = explained(); + const challenge = m.challenges.find(challenge => challenge.id === id)!; + if (native === undefined) delete challenge.nativeMutants; else challenge.nativeMutants = native; + edit(m); + return () => validate(m, { catalog: catalog() }); + }; + const mapped = (mutant: string, crossContract?: string): NativeMutants => ({ kind: "mapped", text: `Fixture mapping of ${mutant}.`, mutant, ...(crossContract === undefined ? {} : { crossContract }) }); + expect(nativeMutantKinds).toEqual(["mapped", "unobservable", "model-only"]); + expect(grandfatheredNativeMutantBacklog).toEqual(["invalidation-transition-cutoff-moves-backwards", "invalidation-transition-inclusive-buffer-limit"]); + // The mutant sits in the catalog. + expect(withNative("policy-inclusive-local-expiry", mapped("M99"))).toThrow(/policy-inclusive-local-expiry: M99 is not in the mutant catalog/); + expect(withNative("policy-inclusive-local-expiry", { kind: "mapped", text: "x" })).toThrow(/policy-inclusive-local-expiry: mapped nativeMutants need a mutant id/); + // The mutant's case lists the challenge's contract, or exactly one crossContract sentence says why not. + expect(withNative("policy-inclusive-local-expiry", mapped("M11"))().nativeMutants).toMatchObject({ mapped: 1 }); + expect(withNative("policy-inclusive-local-expiry", mapped("M01"))).toThrow(/policy-inclusive-local-expiry: M01 is on case C45.maximum-age-exclusive which does not list C09; add a crossContract reason/); + expect(withNative("policy-inclusive-local-expiry", mapped("M01", " "))).toThrow(/M01 is on case C45.maximum-age-exclusive which does not list C09/); + expect(withNative("policy-inclusive-local-expiry", mapped("M01", "The shared rule reaches the local layer too."))().nativeMutants).toMatchObject({ mapped: 1 }); + expect(withNative("policy-inclusive-local-expiry", mapped("M11", "not needed"))).toThrow(/policy-inclusive-local-expiry: crossContract note for in-contract mutant M11/); + // Kinds, text, and which kinds name a mutant. The text carries the why and stays short; the where lives on the catalog entry. + expect(withNative("policy-inclusive-local-expiry", { kind: "native", text: "x", mutant: "M11" })).toThrow(/nativeMutants kind must be one of mapped, unobservable, model-only/); + expect(withNative("policy-inclusive-local-expiry", { kind: "mapped", text: " ", mutant: "M11" })).toThrow(/nativeMutants text must say why the mutant is the same fault or explain why none exists/); + expect(withNative("policy-inclusive-local-expiry", { kind: "mapped", text: "Names no mutant.", mutant: "M11" })).toThrow(/policy-inclusive-local-expiry: nativeMutants text must name M11/); + expect(withNative("policy-inclusive-local-expiry", { kind: "mapped", text: `M11 ${"x".repeat(500)}`, mutant: "M11" })).toThrow(/policy-inclusive-local-expiry: nativeMutants text exceeds 500 characters; the port-side account belongs in the mutant's rationale/); + expect(withNative("policy-inclusive-local-expiry", { kind: "model-only", text: `src/dialcache.ts ${"x".repeat(900)}` })).toThrow(/nativeMutants text exceeds 900 characters/); + expect(withNative("policy-inclusive-local-expiry", { kind: "model-only", text: "x", mutant: "M11" })).toThrow(/model-only nativeMutants name no mutant/); + expect(withNative("policy-inclusive-local-expiry", { kind: "unobservable", text: "x", crossContract: "y" })).toThrow(/unobservable nativeMutants name no mutant/); + expect(withNative("policy-inclusive-local-expiry", { kind: "model-only", text: "No file named." })).toThrow(/model-only nativeMutants text must name the port file it examined/); + expect(withNative("policy-inclusive-local-expiry", { kind: "unobservable", text: "The read in src/context.ts checks closure again." })().nativeMutants).toMatchObject({ unobservable: 1 }); + expect(withNative("policy-inclusive-local-expiry", { ...mapped("M11"), note: "extra" } as NativeMutants)).toThrow(/policy-inclusive-local-expiry: unsupported nativeMutants field note/); + expect(withNative("policy-inclusive-local-expiry", [] as unknown as NativeMutants)).toThrow(/policy-inclusive-local-expiry: invalid nativeMutants/); + // A mapped mutant requires generated detection in both ports. + expect(withNative("layers-late-memo-into-closed-scope", mapped("M20"))).toThrow(/layers-late-memo-into-closed-scope: M20 must require generated detection in both ports/); + // A repeated fault maps the same way; the texts may differ. + const twins = ["scope-late-source-repopulates-closed-memo", "layers-late-memo-into-closed-scope"]; + const unobservable = (text: string): NativeMutants => ({ kind: "unobservable", text: `${text} The read in src/context.ts checks closure again.` }); + const agreeing = withNative(twins[0]!, unobservable("Scope wording."), m => { m.challenges.find(challenge => challenge.id === twins[1])!.nativeMutants = unobservable("Layers wording."); }); + expect(agreeing().nativeMutants).toMatchObject({ unobservable: 2 }); + expect(withNative(twins[0]!, unobservable("x"))).toThrow(/layers-late-memo-into-closed-scope: maps the fault of scope-late-source-repopulates-closed-memo differently/); + const crossOnly = withNative("recovery-inclusive-maximum", mapped("M40", "Recovery reaches the shared rule."), m => { + m.challenges.find(challenge => challenge.id === "recovery-connection-inclusive-maximum")!.nativeMutants = mapped("M40", "The recovery monitor reaches it too."); + }); + expect(crossOnly().nativeMutants).toMatchObject({ mapped: 2 }); + // The backlog is the exact set of challenges without an entry, and only the grandfathered ones may sit in it. + expect(withNative("policy-inclusive-local-expiry", undefined)).toThrow(/policy-inclusive-local-expiry: has no nativeMutants and is not listed in nativeMutantBacklog/); + expect(withNative("policy-inclusive-local-expiry", undefined, m => { m.nativeMutantBacklog.push("policy-inclusive-local-expiry"); })) + .toThrow(/policy-inclusive-local-expiry: new challenges must map to a native mutant in both ports or explain why none exists; nativeMutantBacklog only grandfathers the challenges that predate the requirement/); + // A test-only grandfather list admits it: production keeps the frozen constant. + const optedIn = explained(); + delete optedIn.challenges.find(challenge => challenge.id === "policy-inclusive-local-expiry")!.nativeMutants; + optedIn.nativeMutantBacklog.push("policy-inclusive-local-expiry"); + expect(validate(optedIn, { catalog: catalog(), grandfatheredNative: [...grandfatheredNativeMutantBacklog, "policy-inclusive-local-expiry"] }).nativeMutants).toMatchObject({ backlog: grandfatheredNativeMutantBacklog.length + 1 }); + expect(withNative("policy-inclusive-local-expiry", mapped("M11"), m => { m.nativeMutantBacklog.push("policy-inclusive-local-expiry"); })).toThrow(/policy-inclusive-local-expiry: has nativeMutants and is listed in nativeMutantBacklog/); + expect(withNative("policy-inclusive-local-expiry", mapped("M11"), m => { m.nativeMutantBacklog.push("invented-fault"); })).toThrow(/nativeMutantBacklog names an unknown challenge: invented-fault/); + expect(withNative("policy-inclusive-local-expiry", mapped("M11"), m => { m.nativeMutantBacklog.push(m.nativeMutantBacklog[0]!); })).toThrow(/Duplicate challenge ids in nativeMutantBacklog/); + expect(withNative("policy-inclusive-local-expiry", mapped("M11"), m => { delete (m as Partial).nativeMutantBacklog; })).toThrow(/Challenge native-mutant backlog is missing/); + expect(withNative("invalidation-transition-cutoff-moves-backwards", { kind: "model-only", text: "Only src/internal/redis-scripts.ts carries it." })).toThrow(/invalidation-transition-cutoff-moves-backwards: has nativeMutants and is listed in nativeMutantBacklog/); + // The summary counts every kind, the backlog and the catalog mutants no challenge cites. + const summary = withNative("policy-inclusive-local-expiry", mapped("M11"), m => { + m.challenges.find(challenge => challenge.id === twins[0])!.nativeMutants = unobservable("Scope."); + m.challenges.find(challenge => challenge.id === twins[1])!.nativeMutants = unobservable("Layers."); + })(); + expect(summary.nativeMutants).toEqual({ mapped: 1, unobservable: 2, modelOnly: manifest().challenges.length - grandfatheredNativeMutantBacklog.length - 3, backlog: grandfatheredNativeMutantBacklog.length }); + expect(summary.unmappedMutants).toBe(3); + const fixture = explained(); + expect(challengesByMutant({ ...fixture, challenges: [{ ...fixture.challenges[0]!, nativeMutants: mapped("M11") }, { ...fixture.challenges[1]!, nativeMutants: mapped("M11") }, { ...fixture.challenges[2]!, nativeMutants: mapped("M01") }, fixture.challenges[3]!] })) + .toEqual(new Map([["M11", [fixture.challenges[0]!.id, fixture.challenges[1]!.id]], ["M01", [fixture.challenges[2]!.id]]])); + }, 60_000); + + it("maps every live challenge outside the frozen native-mutant backlog, and cites only catalog mutants", () => { + const live = manifest(); + expect([...live.nativeMutantBacklog].sort()).toEqual([...grandfatheredNativeMutantBacklog].sort()); + expect(live.challenges.filter(challenge => challenge.nativeMutants === undefined).map(challenge => challenge.id).sort()).toEqual([...grandfatheredNativeMutantBacklog].sort()); + const catalog = readMutantCatalog(); + const cited = challengesByMutant(live); + for (const [mutant, ids] of cited) { + expect(catalog.mutations.has(mutant), mutant).toBe(true); + for (const id of ids) expect(live.challenges.find(challenge => challenge.id === id)!.nativeMutants!.mutant, mutant).toBe(mutant); + } + // The catalog mutants no challenge cites are reported, not gated: the summary counts them and nothing pins which they are. + expect(validate(live).unmappedMutants).toBe([...catalog.mutations.keys()].filter(id => !cited.has(id)).length); + }); + + it("validates the unified mutant catalog and anchors every edit in the port text", () => { + const live = readMutantCatalog(); + expect(live.mutations.size).toBeGreaterThanOrEqual(13); + for (const port of ["typescript", "go"] as const) { + for (const mutation of mutantsForPort(live, port)) expect(Array.isArray(mutation.edits) && mutation.edits.length > 0 && Array.isArray(mutation.requiredDetections), `${port} ${mutation.id}`).toBe(true); + } + expect(live.caseContracts.get("C45.maximum-age-exclusive")).toEqual(["C45"]); + // Every live anchor matches its port text exactly once; the originals cover every edited file. + const anchored = checkMutantAnchors(live); + for (const mutation of live.mutations.values()) for (const port of ["typescript", "go"] as const) for (const edit of mutation[port].edits as Array<{ path: string }>) expect(anchored.has(edit.path), `${mutation.id} ${edit.path}`).toBe(true); + const cases = JSON.stringify({ cases: [{ id: "C45.maximum-age-exclusive", contracts: ["C45"] }, { id: "C25.late-source-rejected", contracts: ["C25"] }] }); + type Edit = { path: string; before: string; after: string }; + type Section = { edits?: Edit[]; requiredDetections?: string[] }; + const entry = (id: string, overrides: { case?: string; description?: string; rationale?: string; typescript?: Section | null; go?: Section | null; extra?: Record } = {}) => ({ + id, case: overrides.case ?? "C45.maximum-age-exclusive", description: overrides.description ?? "d", rationale: overrides.rationale ?? "Edits src/a.ts and go/a.go.", + ...(overrides.typescript === null ? {} : { typescript: { edits: [{ path: "src/a.ts", before: "alpha", after: "beta" }], requiredDetections: ["generated", "portable"], ...overrides.typescript } }), + ...(overrides.go === null ? {} : { go: { edits: [{ path: "go/a.go", before: "alpha", after: "beta" }], requiredDetections: ["generated", "portable"], ...overrides.go } }), + ...overrides.extra, + }); + const catalogText = (mutations: unknown[], schemaVersion = 1) => JSON.stringify({ schemaVersion, mutations }); + const files: Record = { "src/a.ts": "export const alpha = 1;\n", "go/a.go": "package dialcache\n\nvar alpha = 1\n", "src/twice.ts": "alpha alpha\n" }; + const read = (text: string) => (path: string) => { + const found = ({ "formal/mutations.json": text, "formal/semantic-cases.json": cases, ...files })[path]; + if (found === undefined) throw new Error(`no such file ${path}`); + return found; + }; + const parsed = readMutantCatalog(read(catalogText([entry("M01"), entry("M02", { case: "C25.late-source-rejected" })]))); + expect([...parsed.mutations.keys()]).toEqual(["M01", "M02"]); + expect(parsed.caseContracts.get("C25.late-source-rejected")).toEqual(["C25"]); + expect(mutantsForPort(parsed, "go").map(mutation => mutation.edits)).toEqual([[{ path: "go/a.go", before: "alpha", after: "beta" }], [{ path: "go/a.go", before: "alpha", after: "beta" }]]); + const refuse = (text: string, pattern: RegExp) => expect(() => readMutantCatalog(read(text))).toThrow(pattern); + refuse(catalogText([entry("M01"), entry("M01")]), /Mutant catalog: invalid or duplicate mutant id M01/); + refuse(catalogText([entry("M1")]), /Mutant catalog: invalid or duplicate mutant id M1/); + refuse(catalogText([entry("M01", { case: "C99.invented" })]), /M01 cites unknown case C99.invented/); + refuse(catalogText([entry("M01", { description: " " })]), /M01 has no description/); + refuse(catalogText([entry("M01", { rationale: " " })]), /M01 has no rationale naming the port lines it edits/); + refuse(catalogText([entry("M01", { extra: { note: 1 } })]), /M01 has unsupported field note/); + refuse(catalogText([entry("M01", { go: null })]), /M01 has no Go section/); + refuse(catalogText([entry("M01", { typescript: { requiredDetections: ["generated", "fixed"] } })]), /M01 requires an unknown TypeScript cohort/); + refuse(catalogText([entry("M01", { go: { edits: [] } })]), /M01 has no Go edits/); + refuse(catalogText([entry("M01", { typescript: { edits: [{ path: "test/a.ts", before: "alpha", after: "beta" }] } })]), /M01 edits test\/a.ts outside the TypeScript port/); + refuse(catalogText([entry("M01", { go: { edits: [{ path: "go/a_test.go", before: "alpha", after: "beta" }] } })]), /M01 edits go\/a_test.go outside the Go port/); + refuse(catalogText([entry("M01", { typescript: { edits: [{ path: "src/a.ts", before: "alpha", after: "alpha" }] } })]), /M01 has an empty or unchanged edit in src\/a.ts/); + refuse(catalogText([entry("M01")], 2), /Mutant catalog: expected the versioned catalog formal\/mutations.json/); + refuse(catalogText([]), /Mutant catalog: expected the versioned catalog formal\/mutations.json/); + // Anchors are checked apart from the schema: edits apply in order, and every anchor must match the current text exactly once. + const anchors = (mutations: unknown[]) => { const text = catalogText(mutations); return () => checkMutantAnchors(readMutantCatalog(read(text)), read(text)); }; + const sequential = entry("M01", { typescript: { edits: [{ path: "src/a.ts", before: "alpha", after: "gamma" }, { path: "src/a.ts", before: "gamma = 1", after: "gamma = 2" }] } }); + expect([...anchors([sequential])().keys()].sort()).toEqual(["go/a.go", "src/a.ts"]); + expect(anchors([entry("M01", { typescript: { edits: [{ path: "src/a.ts", before: "omega", after: "beta" }] } })])).toThrow(/Mutant anchor drift: M01: anchor must match exactly once in src\/a.ts; review the TypeScript port or the catalog/); + expect(anchors([entry("M01", { typescript: { edits: [{ path: "src/twice.ts", before: "alpha", after: "beta" }] } })])).toThrow(/Mutant anchor drift: M01: anchor must match exactly once in src\/twice.ts/); + expect(anchors([entry("M01", { go: { edits: [{ path: "go/a.go", before: "omega", after: "beta" }] } })])).toThrow(/Mutant anchor drift: M01: anchor must match exactly once in go\/a.go; review the Go port or the catalog/); + // The catalog schema is validated for every validation of the manifest; a broken catalog fails it. + expect(() => validate(manifest(), { catalog: readMutantCatalog(read(catalogText([entry("M01", { rationale: " " })]))) })).toThrow(/Mutant catalog: M01 has no rationale/); + }); + + // Explicit budget: the hosted runner is about six times slower under coverage than a local run. it("validates reproducer kinds, cited models, declared checkpoints, profile partitions and model-only scope", () => { const exported = (edit: (reproducer: Reproducer) => void) => { const edited = manifest(); @@ -316,8 +562,8 @@ describe("formal execution schedule", () => { expect(() => validate(exported(r => { r.failure = "s.o.calls == List(CALL_PENDING, DEADLINE_ERROR) and s.o.loaders == 2"; }))) .toThrow(/defaultSourceBudgetExpiresAtSixtySecondsTest has no top-level expect whose condition is the declared failure/); expect(() => validate(exported(r => { r.failure = "s.o.loaders == 2"; }))).toThrow(/has no top-level expect whose condition is the declared failure/); - expect(validate(exported(r => { r.failure = "s.o.calls==List( DEADLINE_ERROR,CALL_PENDING )\n and s.o.loaders == 2"; })).reproducers).toBe(13); - expect(validate(exported(r => { r.failure = "s.o.calls == List(CALL_PENDING)"; })).reproducers).toBe(13); + expect(validate(exported(r => { r.failure = "s.o.calls==List( DEADLINE_ERROR,CALL_PENDING )\n and s.o.loaders == 2"; })).reproducers).toBe(liveReproducers()); + expect(validate(exported(r => { r.failure = "s.o.calls == List(CALL_PENDING)"; })).reproducers).toBe(liveReproducers()); expect(() => validate(exported(r => { r.family = "Inclusive Boundary"; }))).toThrow(/reproducer family must be a fault family slug/); expect(() => validate(exported(r => { r.profiles = []; }))).toThrow(/reproducer profiles must name known profiles and include source-budgets/); expect(() => validate(exported(r => { r.profiles = ["effects"]; }))).toThrow(/must name known profiles and include source-budgets/); @@ -328,16 +574,12 @@ describe("formal execution schedule", () => { // A shared-library fault partitions every profile between the listed and the excluded. expect(() => validate(exported(r => { r.profiles = ["source-budgets", "effects"]; r.exclusions = { independent: "Its sources settle only through explicit deadlines." }; }))) .toThrow(/a shared-library fault must list or exclude every profile; missing core/); - expect(validate(exported(r => { r.profiles = ["source-budgets", "effects"]; delete r.exclusions.effects; r.exclusions.independent = "Its sources settle only through explicit deadlines."; })).reproducers).toBe(13); + expect(validate(exported(r => { r.profiles = ["source-budgets", "effects", "shadow-layers", "recovery", "admission", "shadow"]; delete r.exclusions.effects; r.exclusions.independent = "Its sources settle only through explicit deadlines."; })).reproducers).toBe(liveReproducers()); expect(() => validate(exported(r => { r.scope = "not model-only"; }))).toThrow(/scope belongs only to a model-run reproducer/); - // Another profile model's exported run may be cited only for a fault in a shared library. - const local = (edit: (reproducer: Reproducer) => void) => { - const edited = manifest(); - edit(edited.challenges.find(challenge => challenge.id === "admission-capacity-off-by-one")!.reproducer!); - return edited; - }; + // Another profile model's exported run may be cited only for a fault in a shared library: a fault in a + // model's own file may not name one, whatever its reproducer kind. const budgetsRun = { model: "formal/dialcache-source-budgets-conformance.qnt", run: "defaultSourceBudgetExpiresAtSixtySecondsTest", failure: "s.o.calls == List(DEADLINE_ERROR, CALL_PENDING) and s.o.loaders == 2" }; - expect(() => validate(local(r => { Object.assign(r, budgetsRun); }))) + expect(() => validate(modelRun(r => { Object.assign(r, budgetsRun); }))) .toThrow(/reproducer model must name another profile model and is allowed only for an exported-regression of a shared-library fault: formal\/dialcache-source-budgets-conformance\.qnt/); expect(() => validate(shared(r => { r.model = "formal/dialcache-stale-recovery.qnt"; }))).toThrow(/reproducer model must name another profile model/); expect(() => validate(shared(r => { r.model = "formal/dialcache-core.qnt"; }))).toThrow(/reproducer model must name another profile model .*: formal\/dialcache-core\.qnt/); @@ -348,16 +590,18 @@ describe("formal execution schedule", () => { .toThrow(/must name known profiles and include formal\/dialcache-stale-recovery\.qnt and policy/); // A shared-library fault lists or excludes every known profile. expect(() => validate(shared(r => { delete r.exclusions.core; delete r.exclusions.layers; }))).toThrow(/a shared-library fault must list or exclude every profile; missing core, layers/); - expect(validate(shared(r => { delete r.exclusions.layers; r.profiles.push("layers"); })).reproducers).toBe(13); - // A state-patching run is a scheduled regression but never exported. + expect(validate(shared(r => { delete r.exclusions.layers; r.profiles.push("layers"); })).reproducers).toBe(liveReproducers()); + // A state-patching run is a scheduled regression but never exported (the run is added to the effects text + // through the source reader: no profile declares one), and an exported run may not be cited as a model-run. const patching = manifest(); const effects = patching.challenges.find(challenge => challenge.id === "effects-late-source-accepted")!; - patching.reproducerBacklog = patching.reproducerBacklog.filter(id => id !== effects.id); - const budget = "s.phase == SOURCE_RUNNING and s.deadline == 10040 and s.readAborts == 1"; - effects.reproducer = { kind: "exported-regression", run: "followerKeepsAcceptedReadBudgetTest", failure: budget, family: "late-acceptance", profiles: ["effects"], exclusions: {} }; - expect(() => validate(patching)).toThrow(/exported-regression reproducer must cite an exported public-only run of formal\/dialcache-effects-conformance\.qnt: followerKeepsAcceptedReadBudgetTest/); - effects.reproducer = { kind: "model-run", run: "followerKeepsAcceptedReadBudgetTest", failure: budget, family: "late-acceptance", profiles: ["effects"], exclusions: {}, scope: "Patches the follower budget directly." }; - expect(validate(patching)).toMatchObject({ reproducers: 14, reproducerBacklog: 58 }); + const budget = "s.readBudget == 30"; + effects.reproducer = { ...effects.reproducer!, kind: "exported-regression", run: "patchedBudgetTest", failure: budget }; + expect(() => validate(patching, { readSource: withPatchingRun })).toThrow(/exported-regression reproducer must cite an exported public-only run of formal\/dialcache-effects-conformance\.qnt: patchedBudgetTest/); + effects.reproducer = { ...effects.reproducer!, kind: "model-run", run: "patchedBudgetTest", failure: budget, scope: "Patches the read budget directly." }; + expect(validate(patching, { readSource: withPatchingRun })).toMatchObject({ reproducers: liveReproducers(), reproducerBacklog: manifest().reproducerBacklog.length }); + effects.reproducer = { ...effects.reproducer!, kind: "model-run", run: "lateSourceResultIsADeadlineErrorTest", failure: manifest().challenges.find(challenge => challenge.id === "effects-late-source-accepted")!.reproducer!.failure, scope: "Not a model-only run." }; + expect(() => validate(patching)).toThrow(/lateSourceResultIsADeadlineErrorTest is exported; cite it as an exported-regression reproducer/); expect(() => validate(modelRun(r => { delete r.scope; }))).toThrow(/model-run reproducer needs a scope/); expect(() => validate(modelRun(r => { r.profiles = ["recovery"]; }))).toThrow(/must name known profiles and include formal\/dialcache-envelope-vectors\.qnt/); const exportedAsModelRun = manifest(); @@ -370,7 +614,7 @@ describe("formal execution schedule", () => { core.reproducer = { kind: "exported-regression", run: "localReadFailureContinuesToRemoteTest", family: "unhealthy-read-served", profiles: ["formal/dialcache-core.qnt"], exclusions: {}, failure: "s.origin == RemoteValue and s.localReads == 1 and s.remoteReads == 1 and s.sourceCalls == 0 and s.localWrites == 0" }; expect(() => validate(verification)).toThrow(/exported-regression reproducer must cite an exported public-only run of formal\/dialcache-core\.qnt/); - }); + }, 60_000); it("keeps vector artifacts separate from profile histories and validates their provenance boundary", () => { for (const changed of [ @@ -466,7 +710,7 @@ describe("formal execution schedule", () => { const check = dryRun("check"); expect(check.filter(job => job.args[0] === "typecheck").map(job => job.args[1])).toEqual(manifest().models.map(model => model.path)); expect(check.filter(job => job.args[0] === "test").map(job => job.args[1])).toEqual( - manifest().models.filter(model => model.regressions.length).map(model => model.path), + scheduled().models.filter(model => model.regressions.length).map(model => model.path), ); // The catalog mutates several models; it runs once after every model has // been checked unmodified, never interleaved with a model's own schedule. @@ -494,16 +738,16 @@ describe("formal execution schedule", () => { // Every sampled corpus is bound to its driver contract before use, exactly // like the exported regressions; vector and verification jobs bind nothing. for (const job of sampled) { - const model = manifest().models.find(model => model.path === job.args[1])!; + const model = scheduled().models.find(model => model.path === job.args[1])!; expect(model.profile, job.args[1]).toBeDefined(); expect(job.profile, job.args[1]).toBe(model.profile); expect(job.explicitInputs, job.args[1]).toBe(model.replayRegressions !== undefined); } for (const job of [...vectors, ...check]) expect(job.profile, job.args.join(" ")).toBeUndefined(); const regressions = generated.filter(job => job.args[0] === "test"); - expect(regressions).toHaveLength(manifest().models.filter(model => model.replayRegressions).length); + expect(regressions).toHaveLength(scheduled().models.filter(model => model.replayRegressions).length); for (const job of regressions) { - const model = manifest().models.find(model => model.path === job.args[1])!; + const model = scheduled().models.find(model => model.path === job.args[1])!; expect(job.outputDirectory).toBe(`.formal-traces/regressions/${model.profile}`); expect(job.expectedFiles).toEqual(model.replayRegressions!.map(name => `${name}.itf.json`)); expect(job.expectedTraces).toBe(model.replayRegressions!.length); diff --git a/test/formal-features.test.ts b/test/formal-features.test.ts index 8f3c899d..ca79c38e 100644 --- a/test/formal-features.test.ts +++ b/test/formal-features.test.ts @@ -1,27 +1,46 @@ import { profiles, parseTrace, featureInput, assertFeatureObservation, type Trace } from "../formal/replay/features.mjs"; +import { SettlementLedger } from "../formal/replay/settlement.mjs"; import { checkCorpus, loadCorpus } from "../formal/replay/witnesses/index.mjs"; import { readFileSync, readdirSync } from "node:fs"; import { resolve } from "node:path"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { BehaviorDriver } from "./formal/behavior-driver.js"; +import { BehaviorDriver, type Input } from "./formal/behavior-driver.js"; import type { Profile } from "./formal/feature-profile.js"; -async function replay(profile: Profile, trace: Trace) { - const driver = new BehaviorDriver(typeof profile.fixture === "function" ? profile.fixture(trace.steps[0]!.choice) : profile.fixture); +// `settle: false` is the harness control of the negative below only; +// conformance replays never pass it. +async function replay(profile: Profile, trace: Trace, harness: { settle?: boolean } = {}) { + const fixture = typeof profile.fixture === "function" ? profile.fixture(trace.steps[0]!.choice) : profile.fixture; + const driver = new BehaviorDriver(fixture, {}, harness); + // The ledger the coordinator keeps for a session: every command issued here, + // checked against the driver's receipt before each observation is compared. + const ledger = new SettlementLedger(fixture, profile.setup); try { for (const input of profile.setup) await driver.apply(input); + // One snapshot per step: the inputs of the next step are derived from the + // observation the previous step was asserted against. + let observed = driver.snapshot(); for (const [i, step] of trace.steps.entries()) { const { action, choice } = step; + const context = `${trace.path} step ${i} action ${action} choice ${choice}`; + const mismatch = (cause: unknown) => new Error(`${context}\nexpected: ${JSON.stringify({ o: step.expected, d: step.diagnostics, io: step.io })}\nactual: ${JSON.stringify(driver.snapshot())}\nreceipt: ${JSON.stringify(driver.receipt())}\nreplay: DIALCACHE_FEATURE_TRACE_FILE=${JSON.stringify(trace.path)} corepack pnpm exec vitest run test/formal-features.test.ts --coverage.enabled=false`, { cause }); + let inputs: Input[] = []; try { // Only named actions/choices and actual effect IDs enter the driver. // The model observation and its private state cannot control execution. - if (action !== "init") await driver.apply(featureInput(profile, action, choice, driver.snapshot(), { wallMs: Date.now() })); - assertFeatureObservation(profile, step, driver.snapshot()); - } catch (cause) { - throw new Error(`${trace.path} step ${i} action ${action} choice ${choice}\nexpected: ${JSON.stringify({ o: step.expected, d: step.diagnostics, io: step.io })}\nactual: ${JSON.stringify(driver.snapshot())}\nreplay: DIALCACHE_FEATURE_TRACE_FILE=${JSON.stringify(trace.path)} corepack pnpm exec vitest run test/formal-features.test.ts --coverage.enabled=false`, { cause }); - } + if (action !== "init") inputs = [featureInput(profile, action, choice, observed, { wallMs: Date.now() })]; + for (const input of inputs) await driver.apply(input); + } catch (cause) { throw mismatch(cause); } + ledger.issue(inputs); + observed = driver.snapshot(); + // Settlement is checked first and outside the comparison wrapper: a + // violation is the driver's own infrastructure failure and must never + // carry the expected/actual markers the mutation lanes credit. + try { ledger.assert(driver.receipt(), observed, { wallMs: Date.now() }); } + catch (cause) { throw new Error([`${context}: ${(cause as Error).message}`, driver.settlementDiagnostic()].filter(Boolean).join("\n"), { cause }); } + try { assertFeatureObservation(profile, step, observed); } catch (cause) { throw mismatch(cause); } } } finally { await driver.dispose(); } } @@ -33,9 +52,11 @@ const single = process.env.DIALCACHE_FEATURE_TRACE_FILE; const directory = process.env.DIALCACHE_FEATURE_TRACE_DIR; const selectedProfile = process.env.DIALCACHE_FEATURE_PROFILE; if (selectedProfile !== undefined && !Object.hasOwn(profiles, selectedProfile)) throw new Error(`Unknown selected feature profile: ${selectedProfile}`); -const execution = JSON.parse(readFileSync(new URL("../formal/execution.json", import.meta.url), "utf8")) as { - models: Array<{ profile?: string; replayRegressions?: string[] }>; +// The exported regressions are each profile model's public-only runs, read from its Quint text. +const { scheduleExecution } = await import(new URL("../formal/execution.mjs", import.meta.url).href) as { + scheduleExecution(): { models: Array<{ profile?: string; replayRegressions?: string[] }> }; }; +const execution = scheduleExecution(); for (const [name, profile] of Object.entries(profiles)) { if (selectedProfile !== undefined && selectedProfile !== name) continue; const paths = single !== undefined ? (single.includes(`/${name}/`) || single.endsWith(`${name}-smoke.itf.json`) ? [resolve(single)] : []) @@ -98,6 +119,13 @@ for (const [name, profile] of Object.entries(profiles)) { trace.steps[1]!.expected.writes += 1; await expect(replay(profile, trace)).rejects.toThrow(/step 1 action.*\nexpected:.*\nactual:/s); }); + it("fails a driver that skips settlement by settlement violation, never by mismatch", async () => { + const path = resolve(`formal/${name}-smoke.itf.json`); + const trace = parseTrace(JSON.parse(readFileSync(path, "utf8")), path, profile); + const error = await replay(profile, trace, { settle: false }).then(() => "passed", (cause: unknown) => String(cause)); + expect(error).toMatch(/Settlement violation: \d+ runnable task\(s\) at observation/); + expect(error).not.toMatch(/expected:[\s\S]*actual:/); + }); } }); } diff --git a/test/formal-generated-fixtures.test.ts b/test/formal-generated-fixtures.test.ts index 366a96fc..0e58409b 100644 --- a/test/formal-generated-fixtures.test.ts +++ b/test/formal-generated-fixtures.test.ts @@ -5,16 +5,51 @@ const { validateRecipes, verifyFixtures, project, stateDelta, constrainAction } new URL("../formal/generated-fixtures.mjs", import.meta.url).href, ) as { validateRecipes(book: unknown): unknown; - verifyFixtures(): { artifacts: number; histories: number }; + verifyFixtures(book?: unknown, execution?: unknown): { artifacts: number; histories: number }; project(value: unknown, mask: unknown): unknown; stateDelta(before: unknown, after: unknown): unknown; constrainAction(source: string, declaration: unknown, sourceMap: unknown, choice: number): string; }; +const { encodeJson } = await import(new URL("../formal/compact-json.mjs", import.meta.url).href) as { + encodeJson(value: unknown, record?: (path: Array, node: unknown) => boolean): string; +}; +const { importClosure, readExecution } = await import(new URL("../formal/execution.mjs", import.meta.url).href) as { + importClosure(path: string): string[]; + readExecution(): { settings: { backend: string; seed: string } }; +}; +type Book = { artifacts: Array<{ path: string; format: string; model?: string; recipes: Array<{ model?: string }> }> }; +type Lock = { settings: { backend: string; seed: string }; inputs: Record; artifacts: Record }; const book = () => JSON.parse(readFileSync("formal/fixture-recipes.json", "utf8")); +const lock = (): Lock => JSON.parse(readFileSync("formal/generated-fixtures.lock.json", "utf8")) as Lock; describe("reproducible Quint fixtures", () => { it("binds every committed fixture to its recipes, models and exporter without requiring Quint", () => { - expect(verifyFixtures()).toEqual({ artifacts: 28, histories: 143 }); + const recipes = book() as Book; + expect(verifyFixtures()).toEqual({ artifacts: recipes.artifacts.length, histories: recipes.artifacts.reduce((total, artifact) => total + artifact.recipes.length, 0) }); + }); + it("pins only what the generated fixtures read: recipes, generator, encoder, the recipe models' import closures and the export settings", () => { + const recipes = book() as Book; + const models = [...new Set(recipes.artifacts.flatMap(artifact => artifact.recipes.map(recipe => recipe.model ?? artifact.model!)))]; + const expected = [...new Set(["formal/fixture-recipes.json", "formal/generated-fixtures.mjs", "formal/compact-json.mjs", ...models.flatMap(model => importClosure(model))])].sort(); + expect(Object.keys(lock().inputs)).toEqual(expected); + for (const path of ["formal/execution.json", "formal/profiles.json", "formal/execution.mjs"]) expect(lock().inputs, path).not.toHaveProperty(path); + const { settings } = readExecution(); + expect(lock().settings).toEqual({ backend: settings.backend, seed: settings.seed }); + // A seed or backend change would change every exported history: the lock must notice without a Quint run. + expect(() => verifyFixtures(undefined, { settings: { ...settings, seed: "0x1" } })).toThrow(/inputs changed/); + expect(() => verifyFixtures(undefined, { settings: { ...settings, backend: "typescript" } })).toThrow(/inputs changed/); + }); + it("writes the envelope indented and every record on one line, and matches JSON.stringify without records", () => { + const value = { a: 1, b: [1, { c: [] }, {}], d: { e: "x", f: null }, g: [] }; + expect(encodeJson(value)).toBe(JSON.stringify(value, null, 2) + "\n"); + expect(encodeJson({ states: [{ s: { o: [1] } }, { s: { o: [2] } }], meta: { x: 1 } }, path => path.at(-2) === "states")) + .toBe('{\n "states": [\n {"s":{"o":[1]}},\n {"s":{"o":[2]}}\n ],\n "meta": {\n "x": 1\n }\n}\n'); + // Every committed smoke history costs one line per state plus its envelope. + for (const artifact of (book() as Book).artifacts.filter(entry => entry.format === "smoke")) { + const text = readFileSync(artifact.path, "utf8"); + const states = (JSON.parse(text) as { states: unknown[] }).states.length; + expect(text.split("\n").length - 1, artifact.path).toBeLessThanOrEqual(states + 16); + } }); it("rejects missing fixtures, duplicate identities and expected-state recipes", () => { const missing = book(); missing.artifacts.pop(); diff --git a/test/formal-go-parity.test.ts b/test/formal-go-parity.test.ts index 30b17000..aba6f75e 100644 --- a/test/formal-go-parity.test.ts +++ b/test/formal-go-parity.test.ts @@ -7,34 +7,42 @@ type Ledger = { sourceInventory: Array<{ path: string; sha256: string; - declarations: unknown[]; candidateGoFiles: string[]; mappingReview: { goBindings: Array<{ path: string; sha256: string; symbols: string[] }> }; }>; - profiles: Array<{ id: string; version: number; status: string; scheduledRegressions: string[]; witnessSources: string[] }>; - cases: Array<{ id: string; status: string; quintReplays: string[]; generatedVectors: Array<{ artifact: string; group?: string; name: string }> }>; + cases: Array<{ id: string; kind: string; group: string; gaps: unknown[]; evidence: { nativeGo: string[]; scope: string } }>; vectorExports: Array<{ model: string; artifactSha256: string }>; sourceDeclarationScope: { limitations: string; nativeBindingAdaptations: Array<{ id: string; rationale: string }>; }; - reviewedTestAndDocumentationAudit: { limitations: string }; + reviewedTestAndDocumentationAudit: { limitations: string; sources: Array<{ path: string; rationale: string; goFiles: string[] }> }; }; +type SemanticCases = { cases: Array<{ id: string; models: string[]; quintReplays?: string[]; generatedVectors?: Array<{ artifact: string; group?: string; name: string }> }> }; +type Profiles = { profiles: Array<{ id: string; model: string; smoke: string }> }; +type Inputs = { semantic?: SemanticCases; profileManifest?: Profiles }; -const ledger = () => JSON.parse(readFileSync(new URL("../formal/go-parity.json", import.meta.url), "utf8")) as Ledger; +const formal = (name: string) => JSON.parse(readFileSync(new URL(`../formal/${name}`, import.meta.url), "utf8")); +const ledger = () => formal("go-parity.json") as Ledger; +const semantic = () => formal("semantic-cases.json") as SemanticCases; +const profiles = () => formal("profiles.json") as Profiles; const checker = new URL("../formal/check-go-parity.mjs", import.meta.url).href; -// Keep the large ledger in-process: a synchronous child reading a piped JSON -// input can stall on host pipe transfer. These assertions test the exported -// accounting checker, so a subprocess adds no behavioral coverage. +// Keep the ledger in-process: these assertions test the exported accounting +// checker, so a subprocess adds no behavioral coverage. const { checkGoParity: validate } = await import(checker) as { - checkGoParity(input: Ledger): unknown; + checkGoParity(input: Ledger, inputs?: Inputs): unknown; }; describe("Go parity ledger freshness", () => { it("validates reviewed inventory without claiming executed parity", () => { - expect(validate(ledger())).toMatchObject({ - kind: "accounting-and-freshness", sourceFiles: 27, declarations: 772, - reviewedTestsAndDocs: 44, semanticCases: 262, profiles: 15, vectorModels: 4, + const current = ledger(); + const sourceAudit = formal("source-audit.json") as { sources: unknown[] }; + const execution = formal("execution.json") as { models: Array<{ profile?: string }> }; + expect(validate(current)).toMatchObject({ + kind: "accounting-and-freshness", sourceFiles: current.sourceInventory.length, + declarations: current.inventory.sourceDeclarations, + reviewedTestsAndDocs: sourceAudit.sources.length, semanticCases: current.cases.length, + profiles: execution.models.filter(model => model.profile).length, vectorModels: current.vectorExports.length, meaning: "Fresh reviewed mappings and inventory snapshots; execution evidence remains separately assessed.", }); }); @@ -58,23 +66,49 @@ describe("Go parity ledger freshness", () => { expect(() => validate(missingSymbol)).toThrow(/no longer declares MissingPolicySymbol/); }); - it("rejects dropped declarations even when the count is adjusted", () => { + it("counts declarations scanned from src rather than stored rows", () => { const input = ledger(); - input.sourceInventory[0]!.declarations.pop(); input.inventory.sourceDeclarations--; - expect(() => validate(input)).toThrow(/declaration inventory\/navigation changed/); + expect(() => validate(input)).toThrow(/Source inventory counts are stale/); }); - it("rejects stale profile and semantic case inventories", () => { - const profile = ledger(); - profile.profiles[0]!.version++; - expect(() => validate(profile)).toThrow(/profile version\/model\/smoke differs/); + it("derives the profile schedule from execution.json and profiles.json", () => { + const dropped = profiles(); + dropped.profiles.shift(); + expect(() => validate(ledger(), { profileManifest: dropped })).toThrow(/Profile inventory differs between execution.json and profiles.json/); + const moved = profiles(); + moved.profiles[0]!.model = "formal/dialcache-missing.qnt"; + expect(() => validate(ledger(), { profileManifest: moved })).toThrow(/model differs from execution.json/); + const smoke = profiles(); + smoke.profiles[0]!.smoke = "formal/missing-smoke.itf.json"; + expect(() => validate(ledger(), { profileManifest: smoke })).toThrow(/missing or invalid repository path formal\/missing-smoke.itf.json/); const cases = ledger(); cases.cases.pop(); expect(() => validate(cases)).toThrow(/Semantic case inventory\/order differs/); - const witnesses = ledger(); - witnesses.profiles.find(row => row.witnessSources.length > 0)!.witnessSources.pop(); - expect(() => validate(witnesses)).toThrow(/witness source inventory is stale/); + }); + + it("derives each case's Quint evidence from semantic-cases.json and checks it against the schedule", () => { + const unscheduled = semantic(); + unscheduled.cases[0]!.models = ["formal/dialcache-core.qnt:unknownInvariant"]; + expect(() => validate(ledger(), { semantic: unscheduled })).toThrow(/Quint check is not independently scheduled/); + const replay = semantic(); + replay.cases.find(row => row.quintReplays?.length)!.quintReplays = ["core/doesNotExistTest"]; + expect(() => validate(ledger(), { semantic: replay })).toThrow(/Quint replay is not scheduled/); + const vector = semantic(); + vector.cases.find(row => row.generatedVectors?.length)!.generatedVectors![0]!.name = "missing vector"; + expect(() => validate(ledger(), { semantic: vector })).toThrow(/missing generated vector reference/); + }); + + it("keeps only the reviewer's classification, group, gaps and evidence per case", () => { + const kind = ledger(); + kind.cases[0]!.kind = "wire-protocol"; + expect(() => validate(kind)).toThrow(/case classification is stale/); + const group = ledger(); + group.cases[0]!.group = ""; + expect(() => validate(group)).toThrow(/case group missing/); + const native = ledger(); + native.cases[0]!.evidence.nativeGo = ["go/missing_test.go:TestMissing"]; + expect(() => validate(native)).toThrow(/missing or invalid repository path go\/missing_test.go/); }); it("requires explicit native binding rationale without upgrading prose edits to evidence", () => { @@ -82,26 +116,21 @@ describe("Go parity ledger freshness", () => { missing.sourceDeclarationScope.nativeBindingAdaptations[0]!.rationale = ""; expect(() => validate(missing)).toThrow(/native binding rationale missing/); const prose = ledger(); - const statuses = prose.cases.map(row => row.status); prose.sourceDeclarationScope.limitations += " Additional editorial clarification does not execute a test."; prose.reviewedTestAndDocumentationAudit.limitations += " Evidence is assessed separately."; expect(validate(prose)).toMatchObject({ kind: "accounting-and-freshness" }); - expect(prose.cases.map(row => row.status)).toEqual(statuses); }); - it("rejects omitted scheduled Quint regression evidence", () => { - const input = ledger(); - input.cases.find(row => row.quintReplays.length > 0)!.quintReplays.pop(); - expect(() => validate(input)).toThrow(/model-driven replay\/vector references are stale/); - const schedule = ledger(); - schedule.profiles.find(row => row.scheduledRegressions.length > 0)!.scheduledRegressions.pop(); - expect(() => validate(schedule)).toThrow(/scheduled regression histories are stale/); + it("requires a Go applicability row for every reviewed test and documentation file", () => { + const dropped = ledger(); + dropped.reviewedTestAndDocumentationAudit.sources.pop(); + expect(() => validate(dropped)).toThrow(/applicability inventory changed/); + const rationale = ledger(); + rationale.reviewedTestAndDocumentationAudit.sources[0]!.rationale = ""; + expect(() => validate(rationale)).toThrow(/Go applicability rationale missing/); }); it("rejects omitted generated primitive vectors and stale artifact identity", () => { - const input = ledger(); - input.cases.find(row => row.generatedVectors.length > 0)!.generatedVectors.pop(); - expect(() => validate(input)).toThrow(/model-driven replay\/vector references are stale/); const artifact = ledger(); artifact.vectorExports[0]!.artifactSha256 = "0".repeat(64); expect(() => validate(artifact)).toThrow(/artifact fingerprint is stale/); @@ -114,9 +143,4 @@ describe("Go parity ledger freshness", () => { const input = ledger(); input.inventory.requiredWitnesses--; expect(() => validate(input)).toThrow(/Required\/referenced witness inventory is stale/); }); - - it("does not promote executable schedules to completed run evidence", () => { - const input = ledger(); input.profiles[0]!.status = "passed-shared-corpus"; - expect(() => validate(input)).toThrow(/must not claim a completed replay/); - }); }); diff --git a/test/formal-go-replay.test.ts b/test/formal-go-replay.test.ts index d242fc60..53e3910b 100644 --- a/test/formal-go-replay.test.ts +++ b/test/formal-go-replay.test.ts @@ -12,7 +12,7 @@ type Event = { Action: string; Package: string; Test?: string }; type Result = { status: string; generatedTraces: number; quintRegressionTraces: number; fixedScenarios: number; protocolVectors: number; witnessProfiles: string[] }; type InventoryInputs = { packageName: string; - execution: { models: Array<{ profile?: string; generate?: { traces: number }; regressions?: string[]; replayRegressions?: string[] }> }; + execution: { models: Array<{ profile?: string; generate?: { traces: number }; regressions?: string[]; replayRegressions?: string[]; vectorExport?: { kind: string; cases: number } }> }; scenarios: { scenarios: Array<{ feature: string; name: string }> }; protocol: Record; }; @@ -25,6 +25,10 @@ const { checkGoReplay, loadGoReplayInventory, buildGoReplayInventory } = await i const { protocolCorpus } = await import(new URL("../formal/vector-artifacts.mjs", import.meta.url).href) as { protocolCorpus(manifest?: InventoryInputs["execution"]): InventoryInputs["protocol"]; }; +// The manifest with the schedule its Quint text states (regressions and exported replay regressions per model). +const { scheduleExecution } = await import(new URL("../formal/execution.mjs", import.meta.url).href) as { + scheduleExecution(): InventoryInputs["execution"]; +}; const inventory = loadGoReplayInventory(); const event = (Action: string, Test?: string): Event => ({ Action, Package: inventory.packageName, ...(Test ? { Test } : {}) }); const encode = (events: unknown[]): string => events.map(e => JSON.stringify(e)).join("\n") + "\n"; @@ -44,7 +48,7 @@ const check = (events: unknown[]): Result => checkGoReplay(encode(events), inven const readFixture = (path: string): unknown => JSON.parse(readFileSync(new URL(`../formal/${path}`, import.meta.url), "utf8")); const inventoryInputs = (): InventoryInputs => ({ packageName: inventory.packageName, - execution: readFixture("execution.json") as InventoryInputs["execution"], + execution: scheduleExecution(), scenarios: readFixture("behavioral-scenarios.json") as InventoryInputs["scenarios"], protocol: protocolCorpus(), }); @@ -52,9 +56,16 @@ const inventoryInputs = (): InventoryInputs => ({ describe("completed Go conformance report", () => { it("requires the exact current trace, fixed, protocol, and witness inventories", () => { const result = check(completed()); - expect(result).toMatchObject({ status: "pass", generatedTraces: 5280, quintRegressionTraces: 250, fixedScenarios: 244, protocolVectors: 1477 }); - expect(result.witnessProfiles).toEqual(["admission", "effects", "independent", "layers", "local-clock", "local-failure", "policy", - "recovery", "recovery-read", "runtime-boundaries", "scope", "shadow", "shadow-layers", "source-budgets"]); + // The inventories are the manifest's own: every sampled trace of every profile, every exported public-only + // run, every fixed scenario, every protocol row and a witness gate for every profile but core. + const inputs = inventoryInputs(); + const profiles = inputs.execution.models.filter(model => model.profile !== undefined); + expect(result).toMatchObject({ status: "pass", + generatedTraces: profiles.reduce((total, model) => total + model.generate!.traces, 0), + quintRegressionTraces: profiles.reduce((total, model) => total + (model.replayRegressions?.length ?? 0), 0), + fixedScenarios: inputs.scenarios.scenarios.length, + protocolVectors: Object.values(inputs.protocol).filter(Array.isArray).reduce((total, rows) => total + rows.length, 0) }); + expect(result.witnessProfiles).toEqual(profiles.map(model => model.profile!).filter(profile => profile !== "core").sort()); }); it("rejects a partial report even if every completed leaf passed", () => { @@ -161,7 +172,7 @@ describe("Go conformance fixture inventory boundaries", () => { const inputs = inventoryInputs(); expect(buildGoReplayInventory(inputs).required).toEqual(inventory.required); const generated = inventory.required.filter(entry => entry.category === "protocol" && entry.name.includes("/Quint")); - expect(generated).toHaveLength(1343); + expect(generated).toHaveLength(inputs.execution.models.reduce((total, model) => total + (model.vectorExport?.kind === "protocol" ? model.vectorExport.cases : 0), 0)); for (const prefix of ["TestProtocolKeys/", "TestProtocolFrames/", "TestProtocolDecoders/", "TestProtocolRemainingVectors/"]) { const leaf = generated.find(entry => entry.name.startsWith(prefix))!.name; expect(() => check(completed().filter(event => event.Test !== leaf))).toThrow(/Missing completed Go replay leaf/); diff --git a/test/formal-go-semantic-runner.test.ts b/test/formal-go-semantic-runner.test.ts index 500ae7a1..e88b725b 100644 --- a/test/formal-go-semantic-runner.test.ts +++ b/test/formal-go-semantic-runner.test.ts @@ -5,17 +5,18 @@ const { evaluateGoTestEvents } = await import(moduleUrl) as { evaluateGoTestEvents(events: string, exitCode: number): { state: string; assertionKinds: Record }; }; -function localClockFailure(output: string): string { - const parent = "TestLocalClockConformance", leaf = `${parent}/trace.itf.json`; +function replayFailure(parent: string, file: string, output: string): string { + const leaf = `${parent}/trace.itf.json`; return [ { Action: "run", Test: parent }, { Action: "run", Test: leaf }, - { Action: "output", Test: leaf, Output: ` local_clock_profile_test.go:84: ${output}\n` }, + { Action: "output", Test: leaf, Output: ` ${file}:84: ${output}\n` }, { Action: "fail", Test: leaf }, { Action: "fail", Test: parent }, { Action: "fail" }, ].map(event => JSON.stringify(event)).join("\n"); } +const localClockFailure = (output: string) => replayFailure("TestLocalClockConformance", "local_clock_profile_test.go", output); describe("Go local-clock mutation assertion attribution", () => { it("requires an observable replay mismatch for the new clock profile", () => { @@ -24,6 +25,27 @@ describe("Go local-clock mutation assertion attribution", () => { "TestLocalClockConformance/trace.itf.json": "observation-mismatch", } }); }); + it("credits the core replay's coalesced-pair assertion, which carries no expected/actual pair", () => { + const pair = replayFailure("TestCoreConformance", "core_replay_test.go", "pair returned different values"); + expect(evaluateGoTestEvents(pair, 1)).toMatchObject({ state: "detected", assertionKinds: { "TestCoreConformance/trace.itf.json": "pair-value-mismatch" } }); + const requestPair = replayFailure("TestCoreConformance", "core_replay_test.go", "request pair differs"); + expect(evaluateGoTestEvents(requestPair, 1)).toMatchObject({ state: "detected", assertionKinds: { "TestCoreConformance/trace.itf.json": "pair-value-mismatch" } }); + // The same text from another file is not the core replay's assertion. + expect(() => evaluateGoTestEvents(replayFailure("TestCoreConformance", "feature_replay_test.go", "pair returned different values"), 1)).toThrow(/replay failure lacks observation/); + }); + it("refuses a settlement violation as evidence and names the violating line", () => { + const violation = replayFailure("TestFeatureConformance", "feature_replay_test.go", + "control.itf.json step 3 action beginCall: Settlement violation: 1 runnable task(s) at observation"); + expect(() => evaluateGoTestEvents(violation, 1)).toThrow(/settlement violation under mutation is not comparison evidence/); + // The violating line travels with the error, so a mutant's cohort can be recorded against it by name. + const thrown = (() => { try { evaluateGoTestEvents(violation, 1); } catch (error) { return error as Error & { settlementViolation?: string }; } return undefined; })(); + expect(thrown?.settlementViolation).toBe("feature_replay_test.go:84: control.itf.json step 3 action beginCall: Settlement violation: 1 runnable task(s) at observation"); + // The bare phrase, or a printed expectation regex, is not a rule text: no violation is recorded and the strict rule applies. + const quoted = replayFailure("TestFeatureConformance", "feature_replay_test.go", "control did not fail through a Settlement violation: \\d+ runnable task\\(s\\) at observation"); + const strict = (() => { try { evaluateGoTestEvents(quoted, 1); } catch (error) { return error as Error & { settlementViolation?: string }; } return undefined; })(); + expect(strict?.message).toMatch(/replay failure lacks observation/); + expect(strict?.settlementViolation).toBeUndefined(); + }); it.each(["unknown trace input", "call before instance construction", "default clock started with negative elapsed time"])( "does not credit infrastructure failure: %s", message => { expect(() => evaluateGoTestEvents(localClockFailure(message), 1)).toThrow(/replay failure lacks observation/); diff --git a/test/formal-independent-witnesses.test.ts b/test/formal-independent-witnesses.test.ts new file mode 100644 index 00000000..b21e4110 --- /dev/null +++ b/test/formal-independent-witnesses.test.ts @@ -0,0 +1,357 @@ +import { readFileSync } from "node:fs"; + +import { describe, expect, it } from "vitest"; + +import { parseTrace, profiles } from "../formal/replay/features.mjs"; +import { independentSourceDeadlineWitnesses, independentWitnesses } from "../formal/replay/witnesses/independent.mjs"; +import { createWitnessRecorder, standaloneRecorder } from "../formal/replay/witnesses/recorder.mjs"; +import { witnessStates } from "../formal/replay/witnesses/trace.mjs"; + +type Integer = { "#bigint": string }; +interface Observation { calls: Integer[]; loaders: Integer; loads: Integer; writes: Integer; dumps: Integer; writeTtls: Integer[]; invalidations: Integer; maintenance: string[]; classifications: Integer; recovery: string[]; [field: string]: unknown } +interface ReadIO { budgets: Integer[]; aborted: Integer[]; sourceErrors: Integer[] } +interface State { input: { name: string; choice: Integer }; "mbt::actionTaken"?: string; "mbt::nondetPicks"?: unknown; s: { o: Observation; io: ReadIO } } +interface History { source: { model: string; recipe: string }; states: State[] } +interface PrivateState { input: { name: string; choice: Integer }; s: Record } +const fixtures = JSON.parse(readFileSync(new URL("./fixtures/independent-witnesses.json", import.meta.url), "utf8")) as Record; +// The same model's walk projected with its private layout, for the fidelity check. +const predictedFixtures = JSON.parse(readFileSync(new URL("./fixtures/independent-shadow-witnesses.json", import.meta.url), "utf8")) as Record; +const independent = profiles.independent!; +const survives = "later-source-survives-earlier-deadline", ownDeadline = "later-source-expires-at-own-deadline"; +const staggeredSettle = "staggeredSourceStartsKeepIndependentBudgetsTest", staggeredExpire = "staggeredSourcesExpireAtTheirOwnDeadlineTest"; +const separateDeadlines = "independentReadDeadlinesStartSeparateSourcesTest", timedOutRead = "timedOutReadCannotAffectAnotherCallTest"; +const refill = "readFailureCannotBorrowAnotherCallsRefillTest", ageBoundary = "independentRecoveryAtCapturedAgeBoundaryTest"; +const distinctSnapshots = "independentRecoveriesServeDistinctAcquiredSnapshotsTest", freshDecode = "acquiredFreshDecodeSurvivesInvalidation"; +const lateSource = "lateSourceDoesNotAffectOtherCall", failedRecovery = "failedRecoveryKeepsSourceError"; + +// The fixtures are public Quint runs of the independent model projected to the +// recorded inputs, the observation and the read IO a driver is asserted +// against. The classifiers have nothing else to read; a probe that changes one +// recorded input or result must lose the label, or be refused as a +// contradiction. +function history(name: string): State[] { + const fixture = fixtures[name]; + if (fixture === undefined) throw new Error(`Missing independent witness fixture ${name}`); + return structuredClone(fixture.states); +} +function witnesses(name: string, states: State[]) { + const recorder = standaloneRecorder(name); + independentSourceDeadlineWitnesses(name, parseTrace({ states }, name, independent).steps, recorder); + return { labels: recorder.labels(), provenance: recorder.provenance() }; +} +// Every independent witness of one history, loaded as the corpus evaluator +// loads it, keyed by label with the checkpoints that earned it; the action +// labels every history earns are left out. +function evaluate(name: string, states: State[]): Record { + const recorder = createWitnessRecorder(); + independentWitnesses([{ ...parseTrace({ states }, name, independent), ...witnessStates({ states }, name) }], recorder); + const checkpoints: Record = {}; + for (const [label, histories] of Object.entries(recorder.provenance())) if (!label.startsWith("action:")) checkpoints[label] = histories[0]!.checkpoints; + return checkpoints; +} +const integer = (value: number): Integer => ({ "#bigint": String(value) }); +const integers = (...values: number[]): Integer[] => values.map(integer); +const nth = (states: State[], action: string, index = 0): State => { + const state = states.filter(candidate => candidate.input.name === action)[index]; + if (state === undefined) throw new Error(`No ${action} input #${index}`); + return state; +}; +// Re-record an input's choice. The simulator annotation must agree with the record. +function rechoose(state: State, choice: number): void { + state.input.choice = integer(choice); + state["mbt::nondetPicks"] = { choice: { tag: "Some", value: integer(choice) } }; +} +// Re-record a step as another action with its choice. +function rename(state: State, action: string, choice: number): void { + state.input.name = action; + state["mbt::actionTaken"] = action; + rechoose(state, choice); +} +// Re-record one caller's result from a state onward, so the history stays settled. +function resettle(states: State[], from: State, caller: number, result: number): void { + for (const state of states.slice(states.indexOf(from))) state.s.o.calls[caller] = integer(result); +} +// Re-record public fields from a state onward, so the history stays consistent with an edited input. +function patch(states: State[], from: State, mutate: (s: State["s"]) => void): void { + for (const state of states.slice(states.indexOf(from))) mutate(state.s); +} +// Drop a recorded step; the caller re-records what it had changed in the later states. +function drop(states: State[], state: State): void { + states.splice(states.indexOf(state), 1); +} +// Record another step right after a state: its copy, re-recorded as the given action. +function insertAfter(states: State[], after: State, action: string, choice: number, mutate: (s: State["s"]) => void = () => {}): State { + const inserted = structuredClone(after); + rename(inserted, action, choice); + mutate(inserted.s); + states.splice(states.indexOf(after) + 1, 0, inserted); + return inserted; +} + +describe("independent source-budget witnesses from inputs and public observations", () => { + it("reads fixtures that carry only the recorded input, the asserted observation and read IO", () => { + for (const [name, fixture] of Object.entries(fixtures)) { + expect(fixture.source.model, name).toBe("formal/dialcache-independent-conformance.qnt"); + for (const state of fixture.states) expect(Object.keys(state.s).sort(), name).toEqual(["io", "o"]); + } + }); + + it("credits the later source that settles after the earlier deadline", () => { + const { labels, provenance } = witnesses(staggeredSettle, history(staggeredSettle)); + expect([...labels]).toEqual([survives]); + expect(provenance[survives]).toEqual([{ name: staggeredSettle, checkpoints: [9] }]); + }); + + it("credits the later source that expires at its own deadline", () => { + const { labels, provenance } = witnesses(staggeredExpire, history(staggeredExpire)); + expect([...labels]).toEqual([ownDeadline]); + expect(provenance[ownDeadline]).toEqual([{ name: staggeredExpire, checkpoints: [12] }]); + }); + + it("does not credit a later source that has not settled", () => { + const states = history(staggeredSettle); + states.pop(); + expect(witnesses("probe", states).labels.size).toBe(0); + }); + + it("does not credit a later source before the advance that delivers its own deadline", () => { + const states = history(staggeredExpire); + states.pop(); + expect(witnesses("probe", states).labels.size).toBe(0); + }); + + it("refuses a deadline error recorded ahead of the shadowed clock", () => { + const states = history(staggeredSettle); + rechoose(nth(states, "advance"), 1); + expect(() => witnesses("probe", states)).toThrow(/caller 0 deadline 10 after now 6/); + }); + + it.each([staggeredSettle, staggeredExpire])("does not treat a source error at the expiring advance as an earlier deadline: %s", name => { + const states = history(name); + resettle(states, nth(states, "advance", 1), 0, 3); + expect(witnesses("probe", states).labels.size).toBe(0); + }); + + // The independence clauses: the later source must have started inside the + // earlier budget, and its own deadline must be delivered by the advance that + // crosses it. Start the later source at the earlier deadline instead. + it.each([[staggeredExpire, ownDeadline], [staggeredSettle, survives]])("does not credit a later source that starts at the earlier deadline: %s", (name, label) => { + const states = history(name); + const first = nth(states, "advance"); + rechoose(first, 10); + resettle(states, first, 0, 4); + expect(witnesses("probe", states).labels.has(label)).toBe(false); + }); + + it("does not credit an own-deadline error that surfaces after the crossing advance", () => { + const states = history(staggeredExpire); + const crossing = states.at(-1)!; + crossing.s.o.calls = [integer(4), integer(0)]; + const late = structuredClone(crossing); + late.input = { name: "policy", choice: integer(0) }; + late["mbt::actionTaken"] = "policy"; + rechoose(late, 0); + late.s.o.calls = [integer(4), integer(4)]; + states.push(late); + expect(witnesses("probe", states).labels.has(ownDeadline)).toBe(false); + }); + + it("credits neither label when both sources start at one instant and expire in one advance", () => { + const states = history(staggeredExpire); + // Drop the stagger, so both read replies start their sources at the same + // instant, then let one advance cross both deadlines. + states.splice(states.indexOf(nth(states, "advance")), 1); + const expiry = nth(states, "advance"); + rechoose(expiry, 10); + expiry.s.o.calls = [integer(4), integer(4)]; + states.length = states.indexOf(expiry) + 1; + expect(witnesses("probe", states).labels.size).toBe(0); + }); +}); + +// The call witnesses over the shadowed schedule: each committed history earns +// exactly the labels below, at the steps that establish them. +describe("independent call witnesses from inputs and public observations", () => { + const positive: Array<[string, Record]> = [ + [staggeredSettle, { [survives]: [9], "recovery:miss": [7, 8, 9], "source-deadline": [7, 8, 9] }], + [staggeredExpire, { [ownDeadline]: [12], "recovery:miss": [7, 8, 9, 10, 11, 12], "source-deadline": [7, 8, 9, 10, 11, 12] }], + [separateDeadlines, { "independent-read-overlap": [3], "one-read-times-out-before-another": [7] }], + [timedOutRead, { "late-read-does-not-affect-other-call": [5] }], + [refill, { "independent-read-overlap": [2], "refill-authority-is-per-call": [5] }], + [ageBoundary, { "recovery:miss": [9, 10], "independent-recovery-age-boundary": [9], "recovery:served": [10] }], + [distinctSnapshots, { "recovery:served": [9, 10], "acquired-recovery-survives-invalidation": [9, 10], "distinct-retained-recovery-values": [10] }], + [freshDecode, { "acquired-fresh-decode-survives-invalidation": [5] }], + [lateSource, { "recovery:miss": [5, 6], "source-deadline": [5, 6], "late-source-does-not-affect-other-call": [6] }], + [failedRecovery, { "recovery:deserialization_error": [4], "failed-recovery-keeps-source-error": [4] }], + ]; + it.each(positive)("credits %s at the establishing steps", (name, expected) => { + expect(evaluate(name, history(name))).toEqual(expected); + }); + + it("a read that already timed out neither overlaps a later call nor leaves a read active at the later deadline", () => { + const states = history(separateDeadlines); + // Time out the first read before the second call begins; its later + // deadline then finds no other read active. + const first = nth(states, "advance"); + rechoose(first, 5); + patch(states, first, s => { s.io.aborted = integers(0); s.o.loaders = integer(1); }); + const last = states.at(-1)!; + last.s.io.aborted = integers(0, 1); + last.s.o.loaders = integer(2); + expect(evaluate("probe", states)).toEqual({}); + }); + + it("a late read reply once every call has completed shows no other call unaffected", () => { + const states = history(timedOutRead); + const late = states.at(-1)!; + const settledFirst = insertAfter(states, states[states.indexOf(late) - 1]!, "resolveLoader", 1, s => { s.o.calls = integers(1, 0); }); + const settledBoth = (s: State["s"]) => { s.o.calls = integers(1, 1); s.o.writes = integer(1); s.o.dumps = integer(1); s.o.writeTtls = integers(5000); }; + insertAfter(states, settledFirst, "resolveLoader", 3, settledBoth); + settledBoth(late.s); + expect(evaluate("probe", states)).toEqual({}); + }); + + it("refuses a reply of a read still active that leaves the observation unchanged", () => { + const states = history(timedOutRead); + const advance = nth(states, "advance"); + rechoose(advance, 1); + patch(states, advance, s => { s.io.aborted = []; s.o.loaders = integer(0); }); + patch(states, nth(states, "releaseRead"), s => { s.o.loaders = integer(1); }); + expect(() => evaluate("probe", states)).toThrow(/step 5: active read 0 replied without starting caller 0's source or fresh decode/); + }); + + it("a late settlement once every call has completed shows no other call unaffected", () => { + const states = history(lateSource); + const advance = nth(states, "advance"); + rechoose(advance, 1000); + resettle(states, advance, 1, 4); + expect(evaluate("probe", states)).toEqual({ "recovery:miss": [5, 6], "source-deadline": [5, 6] }); + }); + + it("refuses a settlement of a source still inside its budget that leaves the observation unchanged", () => { + const states = history(lateSource); + const advance = nth(states, "advance"); + rechoose(advance, 5); + patch(states, advance, s => { s.o.calls = integers(0, 0); s.o.recovery = []; s.o.classifications = integer(0); }); + expect(() => evaluate("probe", states)).toThrow(/step 6: 0 decodes started but the shadowed schedule starts 1/); + }); + + it("a write while the other running source may refill too is not per-call refill authority", () => { + const states = history(refill); + rename(nth(states, "failRead"), "releaseRead", 0); + const last = states.at(-1)!; + last.s.o.writes = integer(2); + last.s.o.dumps = integer(2); + last.s.o.writeTtls = integers(5000, 5000); + expect(evaluate("probe", states)).toEqual({ "independent-read-overlap": [2] }); + }); + + it("a settlement that does not write shows no refill authority", () => { + const states = history(refill); + const [first, second] = [nth(states, "resolveLoader"), nth(states, "resolveLoader", 1)]; + rechoose(first, 1); + Object.assign(first.s.o, { calls: integers(1, 0), writes: integer(0), dumps: integer(0), writeTtls: [] }); + rechoose(second, 4); + second.s.o.calls = integers(1, 2); + expect(evaluate("probe", states)).toEqual({ "independent-read-overlap": [2] }); + }); + + it("two recoveries serving the same acquired value are not distinct", () => { + const states = history(distinctSnapshots); + rechoose(nth(states, "seed"), 1); + resettle(states, nth(states, "releaseLoad"), 1, 1); + expect(evaluate("probe", states)).toEqual({ "recovery:served": [9, 10], "acquired-recovery-survives-invalidation": [9, 10] }); + }); + + it("a served recovery with no invalidation since its read does not survive one", () => { + const states = history(distinctSnapshots); + drop(states, nth(states, "invalidate")); + patch(states, nth(states, "releaseLoad"), s => { s.o.invalidations = integer(0); s.o.maintenance = []; }); + expect(evaluate("probe", states)).toEqual({ "recovery:served": [8, 9], "distinct-retained-recovery-values": [9] }); + }); + + it("a fresh decode with no invalidation since its read does not survive one", () => { + const states = history(freshDecode); + drop(states, nth(states, "invalidate")); + patch(states, nth(states, "releaseLoad"), s => { s.o.invalidations = integer(0); s.o.maintenance = []; }); + expect(evaluate("probe", states)).toEqual({}); + }); + + it("refuses a recovery outcome recorded for a fresh decode", () => { + const states = history(freshDecode); + nth(states, "releaseLoad").s.o.recovery = ["served"]; + expect(() => evaluate("probe", states)).toThrow(/step 5: recovery outcomes \["served"\] but the shadowed schedule records \[\]/); + }); + + it("a miss while the other pending caller captured the same recovery age is not the captured-age boundary", () => { + const states = history(ageBoundary); + // Capture the shorter age for both callers: the second decode then misses too. + insertAfter(states, states[0]!, "policy", 2); + const second = nth(states, "releaseLoad", 1); + Object.assign(second.s.o, { calls: integers(3, 3), recovery: ["miss", "miss"] }); + second.s.io.sourceErrors = integers(1, 2); + expect(evaluate("probe", states)).toEqual({ "recovery:miss": [10, 11], "independent-source-error-identities": [11] }); + }); + + it("a miss once the other caller has completed is not the captured-age boundary", () => { + const states = history(ageBoundary); + const [first, second] = [nth(states, "releaseLoad"), nth(states, "releaseLoad", 1)]; + rechoose(first, 0); + Object.assign(first.s.o, { calls: integers(1, 0), recovery: ["served"] }); + first.s.io.sourceErrors = integers(0, 0); + rechoose(second, 1); + second.s.o.recovery = ["served", "miss"]; + expect(evaluate("probe", states)).toEqual({ "recovery:served": [9, 10], "recovery:miss": [10] }); + }); + + it("a failed recovery whose recorded error identity is not the caller's own source keeps nothing", () => { + const states = history(failedRecovery); + states.at(-1)!.s.io.sourceErrors = integers(2); + expect(evaluate("probe", states)).toEqual({ "recovery:deserialization_error": [4] }); + }); + + it("a failed recovery after a source deadline keeps the deadline error, not a source error", () => { + const states = history(failedRecovery); + rename(nth(states, "rejectLoader"), "advance", 10); + const last = states.at(-1)!; + last.s.o.calls = integers(4); + last.s.io.sourceErrors = integers(0); + expect(evaluate("probe", states)).toEqual({ "recovery:deserialization_error": [4], "source-deadline": [4] }); + }); +}); + +describe("shadow fidelity against the model's private predictions", () => { + const walk = (mutate: (states: PrivateState[]) => void = () => {}) => { + const states = structuredClone(predictedFixtures.shadowWalk!.states); + mutate(states); + return { ...parseTrace({ states }, "shadowWalk", independent), ...witnessStates({ states }, "shadowWalk") }; + }; + + it("matches the model at every step of the shadow walk, which takes every action", () => { + expect(predictedFixtures.shadowWalk!.source.model).toBe("formal/dialcache-independent-conformance.qnt"); + expect(() => independentWitnesses([walk()])).not.toThrow(); + expect(new Set(predictedFixtures.shadowWalk!.states.map(state => state.input.name))).toEqual(new Set(["init", ...Object.keys(independent.actions)])); + }); + + // The layout is the composed profile's: a read's activity is its flight (a + // delivered deadline disowns it), a caller's refill authority is its flight's + // captured retention, a loader's start is its pending deadline minus the budget. + it.each([ + ["reads", 2, (s: Record) => { (s.reads as Array>)[0]!.flight = integer(-1); }, + /step 2: shadow reads \[\{"caller":0,"pending":true,"active":true\}\] differs from the model's \[\{"caller":0,"pending":true,"active":false\}\]/], + ["now", 8, (s: Record) => { s.now = integer(4); }, /step 8: shadow now 5 differs from the model's 4/], + ["calls", 7, (s: Record) => { (s.sources as Array>)[1]!.retentionMs = integer(5000); }, + /step 7: shadow calls .*"canWrite":false.* differs from the model's .*"canWrite":true/], + ["sources", 8, (s: Record) => { + const due = (s.deadlines as Array>).find(deadline => (deadline.index as Integer)["#bigint"] === "2")!; + due.at = integer(14); + }, /step 8: shadow sources .*"startedAt":5.* differs from the model's .*"startedAt":4/], + ])("names the first field the model predicts differently: %s", (_field, step, mutate, message) => { + expect(() => independentWitnesses([walk(states => mutate(states[step]!.s))])).toThrow(message); + }); + + it("requires every field of the private layout the shadow reads", () => { + expect(() => independentWitnesses([walk(states => { for (const state of states) delete state.s.deadlines; })])) + .toThrow(/step 0: private layout is missing deadlines/); + }); +}); diff --git a/test/formal-layers-witnesses.test.ts b/test/formal-layers-witnesses.test.ts new file mode 100644 index 00000000..c5705131 --- /dev/null +++ b/test/formal-layers-witnesses.test.ts @@ -0,0 +1,107 @@ +import { readFileSync } from "node:fs"; + +import { describe, expect, it } from "vitest"; + +import { parseTrace, profiles } from "../formal/replay/features.mjs"; +import { createWitnessRecorder } from "../formal/replay/witnesses/recorder.mjs"; +import { runtimeWitnesses } from "../formal/replay/witnesses/runtime.mjs"; +import { witnessStates } from "../formal/replay/witnesses/trace.mjs"; + +type Integer = { "#bigint": string }; +interface State { input: { name: string; choice: Integer }; "mbt::actionTaken"?: string; "mbt::nondetPicks"?: unknown; s: { o: Record } } +interface History { source: { model: string; recipe: string }; states: State[] } +const fixtures = JSON.parse(readFileSync(new URL("./fixtures/layers-witnesses.json", import.meta.url), "utf8")) as Record; +const layers = profiles.layers!; +const label = "tracked-local-only-hit"; +const reuse = "trackedWithoutRemotePublishesReusableLocalTest"; + +// The fixture is a public Quint run of the layers model projected to the +// recorded inputs and the observation a driver is asserted against. Without +// private predictions the runtime classifier skips its private rules, so a +// label here comes from the public rule alone. +function history(name: string): State[] { + const fixture = fixtures[name]; + if (fixture === undefined) throw new Error(`Missing layers witness fixture ${name}`); + return structuredClone(fixture.states); +} +function witnesses(name: string, states: State[]) { + const raw = { states }, recorder = createWitnessRecorder(); + const labels = runtimeWitnesses("layers", [{ ...parseTrace(raw, name, layers), ...witnessStates(raw, name) }], recorder); + return { labels, provenance: recorder.provenance() }; +} +// Re-record an input's choice. The simulator annotation must agree with the record. +function rechoose(state: State, choice: number): void { + state.input.choice = { "#bigint": String(choice) }; + state["mbt::nondetPicks"] = { choice: { tag: "Some", value: { "#bigint": String(choice) } } }; +} + +describe("layers witnesses from inputs and public observations", () => { + it("reads a fixture that carries only the recorded input and the asserted observation", () => { + for (const [name, fixture] of Object.entries(fixtures)) { + expect(fixture.source.model, name).toBe("formal/dialcache-layers-conformance.qnt"); + for (const state of fixture.states) expect(Object.keys(state.s), name).toEqual(["o"]); + } + }); + + it("credits the tracked local-only publication at the fresh-context reuse", () => { + const { labels, provenance } = witnesses(reuse, history(reuse)); + expect(labels.has(label)).toBe(true); + expect(provenance[label]).toEqual([{ name: reuse, checkpoints: [3] }]); + }); + + it("does not credit a publication before a later caller reuses it", () => { + const states = history(reuse); + states.pop(); + expect(witnesses("probe", states).labels.has(label)).toBe(false); + }); + + it("does not credit the same schedule in the untracked fixture without a remote adapter", () => { + const states = history(reuse); + rechoose(states[0]!, 4); + expect(witnesses("probe", states).labels.has(label)).toBe(false); + }); + + // One negative per discriminating clause of the rule, each on the recorded + // reuse schedule: the reuse must come from a fresh context, start no source, + // find the local layer on, return the published value, and address the + // published identity. + it("does not credit a reuse in a persistent context", () => { + const states = history(reuse); + rechoose(states[3]!, 0); + expect(witnesses("probe", states).labels.has(label)).toBe(false); + }); + + it("does not credit a reuse that starts its own source", () => { + const states = history(reuse); + states[3]!.s.o.loaders = { "#bigint": "2" }; + expect(witnesses("probe", states).labels.has(label)).toBe(false); + }); + + it("does not credit a reuse while the local layer is off", () => { + const states = history(reuse); + const off = structuredClone(states[2]!); + off.input = { name: "policy", choice: { "#bigint": "2" } }; + off["mbt::actionTaken"] = "policy"; + rechoose(off, 2); + states.splice(3, 0, off); + expect(witnesses("probe", states).labels.has(label)).toBe(false); + }); + + it("does not credit a reuse that returns a value the source did not publish", () => { + const states = history(reuse); + rechoose(states[2]!, 2); + expect(witnesses("probe", states).labels.has(label)).toBe(false); + }); + + it("does not credit a reuse of another key", () => { + const states = history(reuse); + rechoose(states[3]!, 13); + expect(witnesses("probe", states).labels.has(label)).toBe(false); + }); + + it("refuses adapter effects in the fixture without a remote adapter", () => { + const states = history(reuse); + states.at(-1)!.s.o.reads = { "#bigint": "1" }; + expect(() => witnesses("probe", states)).toThrow(/adapter effects/); + }); +}); diff --git a/test/formal-local-clock.test.ts b/test/formal-local-clock.test.ts index 2e8a1c39..7db908ea 100644 --- a/test/formal-local-clock.test.ts +++ b/test/formal-local-clock.test.ts @@ -9,6 +9,10 @@ import { localClockWitnesses } from "../formal/replay/witnesses/local-clock.mjs" import { createWitnessRecorder } from "../formal/replay/witnesses/recorder.mjs"; import { parseLocalClockTrace, replayLocalClockTrace } from "./formal/local-clock-profile.js"; +// The exported regressions are the model's public-only runs, read from its Quint text. +const { scheduleExecution } = await import(new URL("../formal/execution.mjs", import.meta.url).href) as { + scheduleExecution(): { models: Array<{ profile?: string; replayRegressions?: string[] }> }; +}; const profile = "local-clock"; const single = process.env.DIALCACHE_FEATURE_TRACE_FILE; const directory = process.env.DIALCACHE_FEATURE_TRACE_DIR; @@ -16,8 +20,7 @@ const paths = single !== undefined ? (single.includes(`/${profile}/`) || single. : directory === undefined ? [resolve(`formal/${profile}-smoke.itf.json`)] : readdirSync(resolve(directory, profile)).filter(file => file.endsWith(".itf.json")).sort().map(file => resolve(directory, profile, file)); if (directory !== undefined && single === undefined) { - const execution = JSON.parse(readFileSync("formal/execution.json", "utf8")) as { models: Array<{ profile?: string; replayRegressions?: string[] }> }; - for (const name of execution.models.find(model => model.profile === profile)?.replayRegressions ?? []) { + for (const name of scheduleExecution().models.find(model => model.profile === profile)?.replayRegressions ?? []) { paths.push(resolve(directory, "..", "regressions", profile, `${name}.itf.json`)); } } diff --git a/test/formal-mutation-shards.test.ts b/test/formal-mutation-shards.test.ts index b552f131..ee1aa020 100644 --- a/test/formal-mutation-shards.test.ts +++ b/test/formal-mutation-shards.test.ts @@ -5,24 +5,31 @@ import { join } from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; type Shard = { index: number; count: number }; -type Cohort = { state: "detected" | "survived"; passed: number; failed: number; failingTests: string[]; [key: string]: unknown }; +type Selection = { shard: Shard; only?: string[] | undefined }; +type Cohort = { state: "detected" | "survived" | "crashed"; passed: number; failed: number; failingTests: string[]; [key: string]: unknown }; type Mutation = { id: string; case: string; description: string; cohorts: Record }; type Report = Record & { shard?: Shard & { mutationIds: string[] }; baselines: Record; mutations: Mutation[] }; type CatalogEntry = { id: string; case: string; description: string; requiredDetections: string[] }; type Catalog = { mutations: CatalogEntry[] }; -type Language = { name: string; output: string; catalog: string; inputs: string[]; recordsRegressions: boolean; markdown(report: Report): string }; +type Language = { name: string; output: string; catalog: string; inputs: string[]; recordsRegressions: boolean; markdown(report: Report, directory?: string): string }; type Fingerprint = { files: number; sha256: string }; type Context = { catalog: Catalog; catalogSha256: string; inputs?: Fingerprint | undefined }; const shared = await import(new URL("../formal/mutation-reports.mjs", import.meta.url).href) as { parseShard(value?: string): Shard; - shardFromArguments(argv: string[]): Shard; + parseOnly(value?: string): string[] | undefined; + selectionFromArguments(argv: string[]): Selection; partitionMutations(mutations: T[], shard: Shard): T[]; - shardDirectory(output: string, shard: Shard): string; + selectMutations(mutations: T[], selection: Selection): T[]; + selectionDirectory(output: string, selection: Selection): string; fingerprintFiles(directory: string, paths: string[]): { files: number; sha256: string }; requiredDetectionRegressions(entries: CatalogEntry[], results: Mutation[]): string[]; goDetection(mutations: Mutation[]): Record; typescriptDetection(mutations: Mutation[], cases: { id: string; vectors: unknown[] }[]): Record; + classifyCohort(selection: { baseline: boolean; cohort: string }, evaluate: () => T): T | Cohort; + crashedCohort(reason: string): Cohort; + portableCohort(generated: Cohort, fixed: Cohort): Cohort; + noncompilingResult(mutation: CatalogEntry, cohorts: string[], reason: string): Mutation; gateDetections(language: Language, report: Report, entries: CatalogEntry[], options?: { directory?: string; summarize?: boolean }): void; languages: { ts: Language; go: Language }; }; @@ -32,15 +39,32 @@ const merge = await import(new URL("../formal/merge-mutation-reports.mjs", impor readShardReports(directory: string): Report[]; mergeMutationReports(name: string, options?: { directory?: string; shardsDirectory?: string; outputDirectory?: string }): Report; }; -const { parseShard, shardFromArguments, partitionMutations, shardDirectory, fingerprintFiles, requiredDetectionRegressions, goDetection, gateDetections, languages } = shared; +const { challengesByMutant } = await import(new URL("../formal/execution.mjs", import.meta.url).href) as { + challengesByMutant(manifest: { challenges: Array<{ id: string; nativeMutants?: { mutant?: string } }> }): Map; +}; +const { parseShard, parseOnly, selectionFromArguments, partitionMutations, selectMutations, selectionDirectory, fingerprintFiles, requiredDetectionRegressions, goDetection, typescriptDetection, gateDetections, languages, classifyCohort, crashedCohort, noncompilingResult, portableCohort } = shared; const { canonical, mergeShardReports, readShardReports, mergeMutationReports } = merge; const repo = new URL("../", import.meta.url); const readRepo = (path: string) => readFileSync(new URL(path, repo)); const sha256 = (bytes: Buffer | string) => createHash("sha256").update(bytes).digest("hex"); -const goCatalog = JSON.parse(readRepo("formal/go-mutations.json").toString()) as Catalog; -const tsCatalog = JSON.parse(readRepo("formal/semantic-mutations.json").toString()) as Catalog; +type UnifiedEntry = { id: string; case: string; description: string; typescript: { requiredDetections: string[] }; go: { requiredDetections: string[] } }; +const unified = JSON.parse(readRepo("formal/mutations.json").toString()) as { mutations: UnifiedEntry[] }; +// One catalog, two port views: each measurer applies and gates its own section. +const portView = (port: "typescript" | "go"): Catalog => ({ mutations: unified.mutations.map(mutation => ({ id: mutation.id, case: mutation.case, description: mutation.description, requiredDetections: mutation[port].requiredDetections })) }); +const goCatalog = portView("go"); +const tsCatalog = portView("typescript"); const ids = goCatalog.mutations.map(mutation => mutation.id); +// The fixtures below derive every count and slice from the catalogs, so they +// hold as the catalogs grow. A TypeScript mutant counts as a protocol mutant +// when its case carries vectors, whatever cohort detects it: W03.cohort-assignment +// (the serving ramp) is a vector case although its mutant is detected behaviorally. +const semanticCases = (JSON.parse(readRepo("formal/semantic-cases.json").toString()) as { cases: Array<{ id: string; vectors: unknown[] }> }).cases; +const protocolIds = tsCatalog.mutations.filter(mutation => semanticCases.find(entry => entry.id === mutation.case)!.vectors.length > 0).map(mutation => mutation.id); +const whole = { index: 1, count: 1 }; +const slices = (count: number) => Array.from({ length: count }, (_, position) => partitionMutations(ids, { index: position + 1, count })); +// The Challenges column names the model challenges each mutant is the native twin of. +const challengesOf = (id: string) => (challengesByMutant(JSON.parse(readRepo("formal/execution.json").toString())).get(id) ?? []).join(", ") || "none"; // Shapes follow the hosted Go report (run 34669546872) and the TypeScript // runner's report object: the same keys, small values. @@ -138,16 +162,35 @@ describe("mutation shard partition", () => { for (const value of ["0/3", "4/3", "1/0", "a/b", "1", "01/3", "1/3/", " 1/3", "1/ 3", "-1/3", ""]) { expect(() => parseShard(value), value).toThrow(/index.*count/); } - expect(shardFromArguments([])).toEqual({ index: 1, count: 1 }); - expect(shardFromArguments(["--shard=2/3"])).toEqual({ index: 2, count: 3 }); - expect(() => shardFromArguments(["--shard=1/3", "--shard=2/3"])).toThrow(/unexpected argument/); - expect(() => shardFromArguments(["--other"])).toThrow(/unexpected argument --other/); - expect(() => shardFromArguments(["2/3"])).toThrow(/unexpected argument/); + expect(selectionFromArguments([])).toEqual({ shard: { index: 1, count: 1 }, only: undefined }); + expect(selectionFromArguments(["--shard=2/3"])).toEqual({ shard: { index: 2, count: 3 }, only: undefined }); + expect(() => selectionFromArguments(["--shard=1/3", "--shard=2/3"])).toThrow(/unexpected argument/); + expect(() => selectionFromArguments(["--other"])).toThrow(/unexpected argument --other/); + expect(() => selectionFromArguments(["2/3"])).toThrow(/unexpected argument/); + }); + + it("parses --only=, as a partial selection that excludes sharding and names catalog mutants", () => { + expect(parseOnly(undefined)).toBeUndefined(); + expect(parseOnly("M14")).toEqual(["M14"]); + expect(parseOnly("M14,M15")).toEqual(["M14", "M15"]); + for (const value of ["", "M14,", "M14,M14", "m14", "14", "M14 M15", "M14;M15"]) { + expect(() => parseOnly(value), value).toThrow(/distinct mutant ids/); + } + expect(selectionFromArguments(["--only=M02,M01"])).toEqual({ shard: { index: 1, count: 1 }, only: ["M02", "M01"] }); + expect(() => selectionFromArguments(["--only=M01", "--only=M02"])).toThrow(/unexpected argument --only=M02/); + expect(() => selectionFromArguments(["--shard=1/3", "--only=M01"])).toThrow(/--shard and --only exclude each other/); + expect(() => selectionFromArguments(["--only=M01", "--shard=1/3"])).toThrow(/--shard and --only exclude each other/); + // Selection keeps catalog order whatever the argument order, and every named id must exist. + const catalog = goCatalog.mutations; + expect(selectMutations(catalog, { shard: whole, only: [ids.at(-1)!, ids[0]!] }).map(mutation => mutation.id)).toEqual([ids[0], ids.at(-1)]); + expect(selectMutations(catalog, { shard: whole, only: undefined })).toEqual(catalog); + expect(selectMutations(catalog, { shard: { index: 2, count: 3 } })).toEqual(partitionMutations(catalog, { index: 2, count: 3 })); + expect(() => selectMutations(catalog, { shard: whole, only: ["M9999", ids[0]!] })).toThrow(/Unknown mutation ids: M9999/); }); it("covers every mutation exactly once, contiguously and in catalog order, for any shard count", () => { for (let count = 1; count <= 20; count++) { - const shards = Array.from({ length: count }, (_, position) => partitionMutations(ids, { index: position + 1, count })); + const shards = slices(count); expect(shards.flat(), `count ${count}`).toEqual(ids); const sizes = shards.map(shard => shard.length); expect(Math.max(...sizes) - Math.min(...sizes), `count ${count} balance`).toBeLessThanOrEqual(1); @@ -157,17 +200,19 @@ describe("mutation shard partition", () => { expect(ids.slice(start, start + shard.length), `count ${count} contiguous`).toEqual(shard); } } - expect(Array.from({ length: 3 }, (_, position) => partitionMutations(ids, { index: position + 1, count: 3 }).length)).toEqual([5, 4, 4]); - expect(partitionMutations(ids, { index: 1, count: 1 })).toEqual(ids); + // The first (mutations mod count) shards take one mutation more. + expect(slices(3).map(shard => shard.length)).toEqual([0, 1, 2].map(position => Math.floor(ids.length / 3) + (position < ids.length % 3 ? 1 : 0))); + expect(partitionMutations(ids, whole)).toEqual(ids); // More shards than mutations: the trailing shards are empty but valid. - expect(partitionMutations(ids, { index: 13, count: 14 })).toEqual(["M13"]); - expect(partitionMutations(ids, { index: 14, count: 14 })).toEqual([]); + expect(partitionMutations(ids, { index: ids.length, count: ids.length + 1 })).toEqual([ids.at(-1)]); + expect(partitionMutations(ids, { index: ids.length + 1, count: ids.length + 1 })).toEqual([]); expect(partitionMutations([], { index: 1, count: 3 })).toEqual([]); }); - it("keeps the single run's directory and separates shards under shards/-of-", () => { - expect(shardDirectory("/out/semantic", { index: 1, count: 1 })).toBe("/out/semantic"); - expect(shardDirectory("/out/semantic", { index: 2, count: 3 })).toBe("/out/semantic/shards/2-of-3"); + it("keeps the single run's directory, separates shards under shards/-of- and partial runs under partial/", () => { + expect(selectionDirectory("/out/semantic", { shard: whole })).toBe("/out/semantic"); + expect(selectionDirectory("/out/semantic", { shard: { index: 2, count: 3 } })).toBe("/out/semantic/shards/2-of-3"); + expect(selectionDirectory("/out/semantic", { shard: whole, only: ["M14"] })).toBe("/out/semantic/partial"); }); it("gates each shard on its own catalog slice with the function the complete run uses", () => { @@ -187,7 +232,7 @@ describe("mutation shard partition", () => { }); describe("mutation shard merge", () => { - const catalogSha256 = sha256(readRepo("formal/go-mutations.json")); + const catalogSha256 = sha256(readRepo("formal/mutations.json")); const inputs = { files: 367, sha256: "56af679ac31469b1f608e8d13fa7771b762d19ccbb648987438a6d8b8f732b2e" }; const context = { catalog: goCatalog, catalogSha256, inputs }; const single = goSingleReport(catalogSha256, inputs); @@ -208,11 +253,9 @@ describe("mutation shard merge", () => { expect(report.requiredDetectionRegressions).toEqual([]); expect(report.startedAt).toBe("2026-09-12T00:20:00.000Z"); expect(report.elapsedSeconds).toBe(500 + 501 + 502); - expect(report.shards).toEqual([ - { index: 1, count: 3, mutationIds: ids.slice(0, 5), startedAt: "2026-09-12T00:20:00.000Z", elapsedSeconds: 500 }, - { index: 2, count: 3, mutationIds: ids.slice(5, 9), startedAt: "2026-09-12T00:21:00.000Z", elapsedSeconds: 501 }, - { index: 3, count: 3, mutationIds: ids.slice(9), startedAt: "2026-09-12T00:22:00.000Z", elapsedSeconds: 502 }, - ]); + expect(report.shards).toEqual(slices(3).map((slice, position) => ( + { index: position + 1, count: 3, mutationIds: slice, startedAt: `2026-09-12T00:2${position}:00.000Z`, elapsedSeconds: 500 + position } + ))); expect("shard" in report).toBe(false); // Everything but timing and the shard summary is identical to the single run. expect(canonical(without(report, "shards"))).toBe(canonical(single)); @@ -221,14 +264,62 @@ describe("mutation shard merge", () => { expect(canonical(merged(shards().reverse()))).toBe(canonical(report)); }); - it("accepts thirteen single-mutation shards and an empty trailing shard", () => { - expect(canonical(without(merged(goShardReports(single, 13)), "shards"))).toBe(canonical(single)); - const fourteen = goShardReports(single, 14); - expect(fourteen[13]!.mutations).toEqual([]); - expect(fourteen[13]!.shard!.mutationIds).toEqual([]); - const report = merged(fourteen); + it("accepts one shard per mutation and an empty trailing shard", () => { + expect(canonical(without(merged(goShardReports(single, ids.length)), "shards"))).toBe(canonical(single)); + const oneMore = goShardReports(single, ids.length + 1); + expect(oneMore.at(-1)!.mutations).toEqual([]); + expect(oneMore.at(-1)!.shard!.mutationIds).toEqual([]); + const report = merged(oneMore); expect(canonical(without(report, "shards"))).toBe(canonical(single)); - expect((report.shards as unknown[]).length).toBe(14); + expect((report.shards as unknown[]).length).toBe(ids.length + 1); + }); + + it("keeps a crashed Go cohort out of the detection total and lists it apart from survivors", () => { + const generated = goCohort(goTests.generated, [goTests.generated[0]!]); + const fixed = goCohort(goTests.fixed); + const measured: Mutation = { id: "M01", case: "c", description: "d", cohorts: { ordinary: goCohort(goTests.ordinary, [goTests.ordinary[0]!]), generated, fixed, portable: union(generated, fixed) } }; + const skipping: Mutation = { id: "M02", case: "c", description: "d", + cohorts: { ordinary: { state: "crashed", reason: "crash, timeout, race, or build error is not mutation detection", passed: 0, failed: 0, failingTests: [] }, generated, fixed, portable: union(generated, fixed) } }; + const detection = goDetection([measured, skipping]) as Record; + expect(detection.ordinary).toEqual({ detected: 1, total: 1, survivors: [], crashed: ["M02"] }); + expect(detection.generated).toEqual({ detected: 2, total: 2, survivors: [] }); + expect(detection.fixed).toEqual({ detected: 0, total: 2, survivors: ["M01", "M02"] }); + // A crashed cohort can never satisfy a required detection. + expect(requiredDetectionRegressions([{ id: "M02", case: "c", description: "d", requiredDetections: ["ordinary", "generated"] }], [skipping])).toEqual(["M02/ordinary"]); + // The TypeScript summary excludes it the same way. + const tsDetected: Cohort = { state: "detected", passed: 1, failed: 1, failingTests: ["t"] }; + const tsSurvived: Cohort = { state: "survived", passed: 2, failed: 0, failingTests: [] }; + const tsMeasured: Mutation = { id: "M01", case: "C45.maximum-age-exclusive", description: "d", cohorts: { ordinary: tsDetected, generated: tsDetected, fixed: tsSurvived, portable: tsDetected } }; + const tsCrashed: Mutation = { id: "M02", case: "C45.maximum-age-exclusive", description: "d", cohorts: { ordinary: crashedCohort("unhandled rejection with no failed assertion"), generated: tsDetected, fixed: tsSurvived, portable: tsDetected } }; + const ts = typescriptDetection([tsMeasured, tsCrashed], [{ id: "C45.maximum-age-exclusive", vectors: [] }]) as Record>; + expect(ts.all!.ordinary).toEqual({ detected: 1, total: 1, ordinaryParity: { detected: 1, total: 1 }, survivors: [], crashed: ["M02"] }); + expect(ts.all!.generated).toEqual({ detected: 2, total: 2, ordinaryParity: { detected: 1, total: 1 }, survivors: [] }); + }); + + it("records a crashed unit cohort for a mutant and rethrows for baselines and replay cohorts", () => { + const evaluate = () => { throw new Error("crash, timeout, race, or build error is not mutation detection"); }; + expect(classifyCohort({ baseline: false, cohort: "ordinary" }, evaluate)).toEqual({ state: "crashed", reason: "crash, timeout, race, or build error is not mutation detection", passed: 0, failed: 0, failingTests: [] }); + expect(() => classifyCohort({ baseline: true, cohort: "ordinary" }, evaluate)).toThrow(/crash, timeout, race, or build error/); + for (const cohort of ["generated", "fixed"]) expect(() => classifyCohort({ baseline: false, cohort }, evaluate), cohort).toThrow(/crash, timeout, race, or build error/); + const measured = { state: "survived", passed: 3, failed: 0, failingTests: [] }; + expect(classifyCohort({ baseline: false, cohort: "ordinary" }, () => measured)).toBe(measured); + // A settlement violation under a mutant is recorded against it in any cohort, naming the history and rule; the baseline keeps the strict rule. + const violation = "trace_11.itf.json step 25 action beginCall choice 0: Settlement violation: 1 runnable task(s) at observation"; + const violated = () => { throw Object.assign(new Error("M37/generated: infrastructure/import error"), { settlementViolation: violation }); }; + for (const cohort of ["ordinary", "generated", "fixed"]) expect(classifyCohort({ baseline: false, cohort }, violated), cohort).toEqual(crashedCohort(`settlement violation: ${violation}`)); + expect(() => classifyCohort({ baseline: true, cohort: "generated" }, violated)).toThrow(/infrastructure\/import error \(settlement violation: trace_11/); + // Portable is unmeasured whenever one of its components is, in both runners. + const detected: Cohort = { state: "detected", passed: 2, failed: 1, failingTests: ["t"] }; + expect(portableCohort(crashedCohort(`settlement violation: ${violation}`), detected)).toEqual(crashedCohort(`generated: settlement violation: ${violation}`)); + expect(portableCohort(detected, crashedCohort("panic"))).toEqual(crashedCohort("fixed: panic")); + expect(portableCohort(measured as Cohort, detected)).toEqual({ state: "detected", passed: 5, failed: 1, failingTests: ["t"], components: ["generated", "fixed"] }); + // A noncompiling mutant is recorded with every cohort crashed, so the gate names it. + const entry: CatalogEntry = { id: "M03", case: "c", description: "d", requiredDetections: ["generated", "portable"] }; + const result = noncompilingResult(entry, ["ordinary", "generated", "fixed", "portable"], "M03: noncompiling mutant"); + expect(Object.keys(result.cohorts)).toEqual(["ordinary", "generated", "fixed", "portable"]); + expect(result.cohorts.generated).toEqual(crashedCohort("M03: noncompiling mutant")); + expect(requiredDetectionRegressions([entry], [result])).toEqual(["M03/generated", "M03/portable"]); + expect((goDetection([result]) as Record).generated).toEqual({ detected: 0, total: 0, survivors: [], crashed: ["M03"] }); }); it("refuses a missing, duplicated or miscounted shard", () => { @@ -252,9 +343,10 @@ describe("mutation shard merge", () => { [swapped[1]!.shard!.mutationIds, swapped[2]!.shard!.mutationIds] = [swapped[2]!.shard!.mutationIds, swapped[1]!.shard!.mutationIds]; refuse(swapped, /catalog in order/); const duplicated = shards(); - duplicated[2]!.mutations.unshift(clone(duplicated[1]!.mutations[0]!)); - duplicated[2]!.shard!.mutationIds.unshift(duplicated[1]!.mutations[0]!.id); - refuse(duplicated, /M06 appears in shards 2 and 3/); + const twice = duplicated[1]!.mutations[0]!; + duplicated[2]!.mutations.unshift(clone(twice)); + duplicated[2]!.shard!.mutationIds.unshift(twice.id); + refuse(duplicated, new RegExp(`${twice.id} appears in shards 2 and 3`)); const undeclared = shards(); undeclared[0]!.shard!.mutationIds = undeclared[0]!.shard!.mutationIds.slice(1); refuse(undeclared, /shard 1\/3 declares \[.*\] but measured \[/); @@ -278,7 +370,7 @@ describe("mutation shard merge", () => { const extraField = shards(); extraField[1]!.unexpected = true; refuse(extraField, /unexpected differs between shards 1 and 2/); - refuse(shards(), /catalogSha256 .* was measured, but this checkout's formal\/go-mutations.json hashes to/, { catalogSha256: sha256("edited catalog") }); + refuse(shards(), /catalogSha256 .* was measured, but this checkout's formal\/mutations.json hashes to/, { catalogSha256: sha256("edited catalog") }); refuse(shards(), /inputs fingerprint .* was measured, but this checkout's formal\/go\/test\/src hash to/, { inputs: { files: 367, sha256: "different" } }); // Without a checkout fingerprint the shards need only agree with each other. expect(merged(shards(), { inputs: undefined }).complete).toBe(true); @@ -318,10 +410,11 @@ describe("mutation shard merge", () => { it("fails the merged report on a lost required detection exactly as the single run does", () => { const lost = shards(); - lost[1]!.mutations[0]!.cohorts.generated!.state = "survived"; + const survivor = lost[1]!.mutations[0]!; + survivor.cohorts.generated!.state = "survived"; const report = mergeShardReports(languages.go, lost, context); - expect(() => gateDetections(languages.go, report, goCatalog.mutations)).toThrow(/Lost required detections: M06\/generated/); - expect(report.requiredDetectionRegressions).toEqual(["M06/generated"]); + expect(() => gateDetections(languages.go, report, goCatalog.mutations)).toThrow(new RegExp(`Lost required detections: ${survivor.id}/generated`)); + expect(report.requiredDetectionRegressions).toEqual([`${survivor.id}/generated`]); expect(report.complete).toBe(false); }); }); @@ -331,7 +424,7 @@ describe("mutation shard merge over a shard directory", () => { beforeEach(() => { directory = mkdtempSync(join(tmpdir(), "dialcache-mutation-shards-")); for (const path of ["formal", "src", "test", "go", "shards"]) mkdirSync(join(directory, path), { recursive: true }); - for (const path of ["formal/go-mutations.json", "formal/semantic-mutations.json", "formal/semantic-cases.json"]) copyFileSync(new URL(path, repo), join(directory, path)); + for (const path of ["formal/mutations.json", "formal/semantic-cases.json", "formal/execution.json"]) copyFileSync(new URL(path, repo), join(directory, path)); writeFileSync(join(directory, "src/index.ts"), "export {};\n"); writeFileSync(join(directory, "test/index.test.ts"), "export {};\n"); writeFileSync(join(directory, "go/cache.go"), "package dialcache\n"); @@ -347,7 +440,7 @@ describe("mutation shard merge over a shard directory", () => { const readReport = (path: string) => JSON.parse(readFileSync(join(directory, path), "utf8")) as Report; it("reads -of-/report.json entries and rejects misplaced or unreadable ones", () => { - const catalogSha256 = sha256(readRepo("formal/go-mutations.json")); + const catalogSha256 = sha256(readRepo("formal/mutations.json")); const reports = goShardReports(goSingleReport(catalogSha256, fingerprintFiles(directory, languages.go.inputs)), 3); writeShards(reports); writeFileSync(join(directory, "shards/.DS_Store"), ""); @@ -365,7 +458,7 @@ describe("mutation shard merge over a shard directory", () => { }); it("writes the complete Go report and markdown where the single run writes them", () => { - const catalogSha256 = sha256(readRepo("formal/go-mutations.json")); + const catalogSha256 = sha256(readRepo("formal/mutations.json")); const single = goSingleReport(catalogSha256, fingerprintFiles(directory, languages.go.inputs)); writeShards(goShardReports(single, 3), join(directory, ".formal-traces/go-semantic/shards")); const report = mergeMutationReports("go", { directory }); @@ -373,13 +466,16 @@ describe("mutation shard merge over a shard directory", () => { expect(readReport(".formal-traces/go-semantic/report.json")).toEqual(report); const markdown = readFileSync(join(directory, ".formal-traces/go-semantic/report.md"), "utf8"); expect(markdown).toContain("# Go semantic mutation measurement"); - expect(markdown).toContain("Merged from 3 shards that each reran the baselines: 1 (M01, M02, M03, M04, M05, 500s); 2 (M06, M07, M08, M09, 501s); 3 (M10, M11, M12, M13, 502s)."); - expect(markdown).toContain("| M09 | C60.logging-default-off | survived | detected | survived | detected |"); + expect(markdown).toContain(`Merged from 3 shards that each reran the baselines: ${slices(3).map((slice, position) => `${position + 1} (${slice.join(", ")}, ${500 + position}s)`).join("; ")}.`); + // Every mutant names the challenges it is the native twin of, from the checkout's manifest. + expect(markdown).toContain("| Mutation | Contract case | Challenges | Ordinary | Quint generated | Fixed supplement | Full portable |"); + expect(markdown).toContain(`| M09 | C60.logging-default-off | ${challengesOf("M09")} | survived | detected | survived | detected |`); + for (const id of ids) expect(markdown, id).toMatch(new RegExp(`^\\| ${id} \\| [^|]+ \\| ${challengesOf(id).replace(/[.*+?^${}()|[\]\\]/g, "\\$&")} \\|`, "m")); expect(markdown).toContain(`Completed in ${500 + 501 + 502}s.`); }); it("writes the complete TypeScript report with the behavioral/protocol split the single run computes", () => { - const catalogSha256 = sha256(readRepo("formal/semantic-mutations.json")); + const catalogSha256 = sha256(readRepo("formal/mutations.json")); const inputs = fingerprintFiles(directory, languages.ts.inputs); writeShards(tsShardReports(catalogSha256, inputs, 3), join(directory, ".formal-traces/semantic/shards")); const report = mergeMutationReports("ts", { directory }); @@ -387,18 +483,22 @@ describe("mutation shard merge over a shard directory", () => { expect("requiredDetectionRegressions" in report).toBe(false); expect(Object.keys(report.detection as object)).toEqual(["all", "behavioral", "protocol"]); const detection = report.detection as Record>; - expect(detection.all!.ordinary).toEqual({ detected: 12, total: 13, ordinaryParity: { detected: 12, total: 12 }, survivors: ["M12"] }); - expect(detection.protocol!.ordinary).toEqual({ detected: 1, total: 2, ordinaryParity: { detected: 1, total: 1 }, survivors: ["M12"] }); - expect(detection.behavioral!.portable!.total).toBe(11); + // The fixture's only ordinary survivor is M12, a protocol mutant (W02.sorted-arguments carries vectors). + expect(protocolIds).toContain("M12"); + expect(detection.all!.ordinary).toEqual({ detected: ids.length - 1, total: ids.length, ordinaryParity: { detected: ids.length - 1, total: ids.length - 1 }, survivors: ["M12"] }); + expect(detection.protocol!.ordinary).toEqual({ detected: protocolIds.length - 1, total: protocolIds.length, ordinaryParity: { detected: protocolIds.length - 1, total: protocolIds.length - 1 }, survivors: ["M12"] }); + expect(detection.behavioral!.portable!.total).toBe(ids.length - protocolIds.length); expect(report.reachedWitnesses).toEqual({ effects: { required: 40, reached: 40, traces: 300 } }); const markdown = readFileSync(join(directory, ".formal-traces/semantic/report.md"), "utf8"); expect(markdown).toContain("# Semantic coverage measurement"); expect(markdown).toContain("| cases | 262 | 262 | 226 |"); + expect(markdown).toContain("| Mutation | Case | Challenges | Ordinary | Generated | Full portable |"); + expect(markdown).toContain(`| M12 | W02.sorted-arguments | ${challengesOf("M12")} | survived | detected | detected |`); expect(markdown).toContain("Merged from 3 shards"); }); it("leaves an incomplete report naming the refusal and exits nonzero from the command line", async () => { - const catalogSha256 = sha256(readRepo("formal/go-mutations.json")); + const catalogSha256 = sha256(readRepo("formal/mutations.json")); const single = goSingleReport(catalogSha256, fingerprintFiles(directory, languages.go.inputs)); writeShards(goShardReports(single, 3).slice(0, 2), join(directory, ".formal-traces/go-semantic/shards")); mkdirSync(join(directory, ".formal-traces/go-semantic"), { recursive: true }); @@ -410,10 +510,11 @@ describe("mutation shard merge over a shard directory", () => { expect(() => readFileSync(join(directory, ".formal-traces/go-semantic/report.md"))).toThrow(); // A lost detection is written with the regression list, as the single run does. const lost = goShardReports(single, 3); - lost[2]!.mutations[1]!.cohorts.generated!.state = "survived"; + const survivor = lost[2]!.mutations[1]!; + survivor.cohorts.generated!.state = "survived"; writeShards(lost, join(directory, ".formal-traces/go-semantic/shards")); - expect(() => mergeMutationReports("go", { directory })).toThrow(/Lost required detections: M11\/generated/); - expect(readReport(".formal-traces/go-semantic/report.json")).toMatchObject({ complete: false, requiredDetectionRegressions: ["M11/generated"], error: expect.stringContaining("M11/generated") }); + expect(() => mergeMutationReports("go", { directory })).toThrow(new RegExp(`Lost required detections: ${survivor.id}/generated`)); + expect(readReport(".formal-traces/go-semantic/report.json")).toMatchObject({ complete: false, requiredDetectionRegressions: [`${survivor.id}/generated`], error: expect.stringContaining(`${survivor.id}/generated`) }); expect(() => mergeMutationReports("rust", { directory })).toThrow(/Expected language ts or go/); expect(() => mergeMutationReports("go", { directory, shardsDirectory: "nowhere" })).toThrow(/no shard directory/); expect(readReport(".formal-traces/go-semantic/report.json")).toMatchObject({ complete: false, error: expect.stringContaining("no shard directory") }); diff --git a/test/formal-policy-witnesses.test.ts b/test/formal-policy-witnesses.test.ts index 37b5907f..79fa7897 100644 --- a/test/formal-policy-witnesses.test.ts +++ b/test/formal-policy-witnesses.test.ts @@ -160,6 +160,21 @@ describe("policy witnesses from inputs and public observations", () => { expect(witnesses("probe", states).has(`independent-${layer}-last-completion-probed`)).toBe(false); }); + it.each([ + ["remoteHitStartsFullLocalInsertionTtlTest", "remote-hit-local-ttl-outlives-remote-freshness"], + ["independentRemotePublicationUsesLastCompletionTest", "independent-remote-last-completion-probed"], + ])("%s needs the later probe that reads the warmed or last-written value", (name, witness) => { + const states = history(name); + states.pop(); + expect(witnesses("probe", states).has(witness)).toBe(false); + }); + + it("overlapping sources under a coalescing overlay are not independent last writers", () => { + const states = history("independentRemotePublicationUsesLastCompletionTest"); + rechoose(nth(states, "policy"), 3); + expect(witnesses("probe", states).has("independent-remote-last-completion-probed")).toBe(false); + }); + it("an overlapping source with an active remote layer is not an inactive-layers overlap", () => { const states = history("inactiveLayersStartIndependentSources"); rechoose(nth(states, "policy"), 3); diff --git a/test/formal-profile-lint.test.ts b/test/formal-profile-lint.test.ts index fc211dd5..5c1bbbc1 100644 --- a/test/formal-profile-lint.test.ts +++ b/test/formal-profile-lint.test.ts @@ -1,5 +1,5 @@ import { spawnSync } from "node:child_process"; -import { mkdtempSync, rmSync, writeFileSync } from "node:fs"; +import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import { join } from "node:path"; import { fileURLToPath } from "node:url"; @@ -42,7 +42,8 @@ const fixtureNames = [ "kernel", "kernel-leaky", "library", "profile-clean", "profile-thick", "profile-nested-let", "profile-lambda-assign", "profile-shadow", "profile-witness-choice", "profile-witness-projection", "profile-witness-guard", "profile-witness-deep", "profile-witness-domain", "profile-witness-input", "profile-witness-match", "composition-clean", "composition-thick", "composition-nondet-inline", - "composition-action-argument", "composition-wiring-passes", + "composition-action-argument", "composition-wiring-passes", "composition-lambda-argument", "composition-named-operator-argument", + "composition-lambda-through-helper", "library-alias", "composition-alias-typed-operator-position", "composition-aliased-transition", ]; // Quint's effect checker rejects an operator constant that reads a variable // (QNT201), so this route can only be shown on the parsed IR; the lint must @@ -179,6 +180,59 @@ describe.skipIf(!quintAvailable)("profile lint over synthetic kernel instances", ]); }, quintTimeout); + it("reports a higher-order kernel definition a profile instantiates with a lambda, whatever its body does", async () => { + const report = await lintModel(fixture("composition-lambda-argument"), { kernelModules: ["library"] }); + expect(report.composition.publicActions).toEqual(["init", "bumpWrapper", "step"]); + // The lambda's body composes a library transition; the call to the fold itself is the violation. + expect(report.composition.libraryTransitions).toEqual(["library::bump", "library::repeat"]); + expect(report.composition.violations).toEqual([ + { definition: "bumpWrapper", detail: "higher-order library::repeat instantiated in the value of s", chain: ["bumpWrapper"] }, + ]); + }, quintTimeout); + + it("reports a higher-order kernel definition a profile instantiates with an operator passed by name", async () => { + const report = await lintModel(fixture("composition-named-operator-argument"), { kernelModules: ["library"] }); + expect(report.composition.libraryTransitions).toEqual(["library::bump", "library::repeat"]); + // The operator's own body reads only its parameters, which the walk cannot + // taint; the judgment is the higher-order definition, not the argument. + expect(report.composition.violations).toEqual([ + { definition: "bumpWrapper", detail: "higher-order library::repeat instantiated in the value of s", chain: ["bumpWrapper"] }, + ]); + }, quintTimeout); + + it("reports a higher-order kernel definition instantiated inside a profile helper, in the helper", async () => { + const report = await lintModel(fixture("composition-lambda-through-helper"), { kernelModules: ["library"] }); + expect(report.composition.libraryTransitions).toEqual(["library::bump", "library::repeat"]); + expect(report.composition.violations).toEqual([ + { definition: "repeatWith", detail: "higher-order library::repeat instantiated in the value of s", chain: ["bumpWrapper", "repeatWith"] }, + ]); + }, quintTimeout); + + it("judges a kernel definition whose operator parameter is typed through an alias, or a chain of aliases, as higher-order", async () => { + const report = await lintModel(fixture("composition-alias-typed-operator-position"), { kernelModules: ["library_alias"] }); + expect(report.composition.libraryTransitions).toEqual(["library_alias::bump", "library_alias::repeatChained", "library_alias::repeatVia"]); + // Quint records `each: Step[r]` as the alias name, not as an operator type; + // the typedef it resolves to is the operator type, so every instantiation + // is reported, the one passing the kernel's own step included. + expect(report.composition.violations).toEqual([ + { definition: "bumpWrapper", detail: "higher-order library_alias::repeatVia instantiated in the value of s", chain: ["bumpWrapper"] }, + { definition: "chainedWrapper", detail: "higher-order library_alias::repeatChained instantiated in the value of s", chain: ["chainedWrapper"] }, + { definition: "kernelStepWrapper", detail: "higher-order library_alias::repeatVia instantiated in the value of s", chain: ["kernelStepWrapper"] }, + ]); + }, quintTimeout); + + it("judges a kernel definition applied through a profile alias as the kernel's application", async () => { + const report = await lintModel(fixture("composition-aliased-transition"), { kernelModules: ["library"] }); + // `bumpAlias` and `repeatAlias` resolve to the kernel definitions: both + // transitions are recorded under the kernel's names, so aliasing cannot + // empty the list the composed-violations gate keys on, and the + // higher-order fold is reported at the wrapper that applies it. + expect(report.composition.libraryTransitions).toEqual(["library::bump", "library::repeat"]); + expect(report.composition.violations).toEqual([ + { definition: "repeatWrapper", detail: "higher-order library::repeat instantiated in the value of s", chain: ["repeatWrapper"] }, + ]); + }, quintTimeout); + it("accepts the wiring the rule admits by design: a record literal over a library result and a chosen input passed through", async () => { const report = await lintModel(fixture("composition-wiring-passes"), { kernelModules: ["library"] }); expect(report.composition.libraryTransitions).toEqual(["library::bump"]); @@ -370,7 +424,7 @@ describe.skipIf(!quintAvailable)("profile lint baseline", () => { it("matches the committed baseline for every conformance profile", async () => { const { expected, actual, differences } = await checkBaseline(); expect(differences).toEqual([]); - expect(actual.profiles.length).toBe(15); + expect(actual.profiles.length).toBe((JSON.parse(readFileSync(new URL("../formal/profiles.json", import.meta.url), "utf8")) as { profiles: unknown[] }).profiles.length); expect(expected.kernelModules).toEqual(kernelModulesOf()); // A composed profile has no composition violation; every other count is // that profile's migration work list. diff --git a/test/formal-replay-coordinator.test.ts b/test/formal-replay-coordinator.test.ts index c7452654..94d8deaa 100644 --- a/test/formal-replay-coordinator.test.ts +++ b/test/formal-replay-coordinator.test.ts @@ -3,7 +3,7 @@ import { mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "nod import { tmpdir } from "node:os"; import { Readable } from "node:stream"; import { resolve } from "node:path"; -import { describe, expect, it } from "vitest"; +import { describe, expect, it, vi } from "vitest"; import { bindTrace, profileActions } from "../formal/replay/bindings.mjs"; import { ReplayCoordinator, settlement } from "../formal/replay/coordinator.mjs"; @@ -12,9 +12,10 @@ import { featureInput, profiles } from "../formal/replay/features.mjs"; import { inputsFor } from "../formal/replay/effects.mjs"; import { emptyObservation } from "../formal/replay/observation.mjs"; import { assertSchema, schema, schemaViolation } from "../formal/replay/schema.mjs"; +import { SettlementLedger, settlementViolationPattern, wallEpochMs, type SettlementReceipt } from "../formal/replay/settlement.mjs"; import { parseJSON, replayLines } from "../formal/replay/validation.mjs"; import { replaySources } from "../formal/replay/sources.mjs"; -import type { Fixture } from "./formal/behavior-driver.js"; +import { BehaviorDriver, type Fixture, type Input } from "./formal/behavior-driver.js"; import { replayThroughCoordinator, smokeTracePath } from "./formal/coordinated-replay.js"; type Raw = { states: Array & { s: Record }> }; @@ -22,7 +23,7 @@ function smoke(profile: string): Raw { const name = profile === "core" ? "conformance" : profile; return JSON.parse(readFileSync(resolve(`formal/${name}-smoke.itf.json`), "utf8")) as Raw; } -const environment = { wallMs: 1_725_000_000_123 }; +const environment = { wallMs: wallEpochMs }; const roundtrip = (value: unknown) => parseJSON(JSON.stringify(value)); function replaySession(raw: Raw, profile = "core") { @@ -30,10 +31,22 @@ function replaySession(raw: Raw, profile = "core") { let id = 0; const request = (fields: Record) => coordinator.dispatch(roundtrip({ version: 1, id: ++id, ...fields })); const prepared = request({ op: "prepare", profile, path: "control.itf.json", raw: JSON.stringify(raw) }); - const observe = (index: number, observed: unknown) => request({ - op: "observe", session: prepared.session, index, settlement, observed, environment, - }); - return { coordinator, prepared, request, observe }; + const binding = bindTrace(profile, raw, "control.itf.json"); + // The same ledger the coordinator keeps derives what each observe must + // carry: a behavior session its receipt and wall clock, core its wall clock + // alone, local-clock nothing. Tests override `fields` to tamper. + const ledger = binding.settlement === "none" ? undefined : new SettlementLedger(binding.fixture, binding.setup); + const settlementFields = (observed: unknown): Record => { + if (ledger === undefined) return {}; + const fields = { environment: { wallMs: ledger.wallMs(observed) } }; + return binding.settlement === "receipt" ? { ...fields, receipt: ledger.expected(observed) } : fields; + }; + const observe = (index: number, observed: unknown, fields = settlementFields(observed)) => { + const result = request({ op: "observe", session: prepared.session, index, settlement, observed, environment, ...fields }); + if (result.complete === false) ledger?.issue(result.inputs as Array>); + return result; + }; + return { coordinator, prepared, binding, request, observe, settlementFields }; } describe("shared replay input and expectation boundary", () => { @@ -41,7 +54,7 @@ describe("shared replay input and expectation boundary", () => { const original = smoke(profile); const changed = structuredClone(original); for (const state of changed.states) { - const observation = profile === "core" || profile === "effects" ? state.s : state.s.o as Record; + const observation = profile === "core" ? state.s : state.s.o as Record; observation[profile === "core" ? "redisReads" : "reads"] = { "#bigint": "123456" }; } const baseline = bindTrace(profile, original, "original"); @@ -246,7 +259,7 @@ describe("observation encoding contract", () => { // A fixture without a policy is neither the empty core fixture nor a behavior fixture. expect(() => assertSchema({ tracked: true }, "fixture")).toThrow(/Malformed replay fixture/); const response = (candidate: unknown) => ({ version: 1, id: 1, ok: true, result: { - session: "1", settlement, observation: "behaviorObservation", fixture: candidate, setup: [], actions: ["beginCall"], steps: 2 } }); + session: "1", settlement, observation: "behaviorObservation", receipt: "settlementReceipt", fixture: candidate, setup: [], actions: ["beginCall"], steps: 2 } }); expect(() => assertSchema(response(fixture), "response")).not.toThrow(); expect(() => assertSchema(response({ ...fixture, recovery: "maybe" }), "response")).toThrow(/^Malformed replay response/); // Every profile's prepared fixture crosses the response schema. @@ -257,6 +270,236 @@ describe("observation encoding contract", () => { }); }); +describe("settlement receipt contract", () => { + const failureOf = (action: () => unknown) => { + try { action(); } + catch (error) { return String(error); } + throw new Error("Expected the coordinator to reject the observation"); + }; + const zero = { elapsedMs: 0, runnable: 0, held: { loaders: 0, reads: 0, writes: 0, dumps: 0, loads: 0, policies: 0, scopes: 0 } }; + // A behavior session at index 0 with the empty observation and the receipt + // its setup requires, for one-field tampering. + const behavior = (profile: string, raw = smoke(profile)) => { + const session = replaySession(raw, profile); + const observed = emptyObservation(session.binding.fixture as unknown as Fixture); + const fields = session.settlementFields(observed) as { receipt: SettlementReceipt; environment: { wallMs: number } }; + return { ...session, observed, ...fields }; + }; + const infrastructure = (rendered: string) => { + expect(rendered).not.toMatch(/expected:[\s\S]*actual:/); + expect(rendered).not.toMatch(/Observation mismatch/); + }; + + it("names the receipt definition per binding, in prepare and in the schema", () => { + for (const profile of Object.keys(profileActions())) { + const binding = bindTrace(profile, smoke(profile), profile); + expect(binding.settlement).toBe(profile === "local-clock" ? "none" : profile === "core" ? "wallClock" : "receipt"); + const { prepared } = replaySession(smoke(profile), profile); + expect(prepared.receipt).toBe(binding.settlement === "receipt" ? "settlementReceipt" : null); + const response = (receipt: unknown) => roundtrip({ version: 1, id: 1, ok: true, result: { ...prepared, receipt } }); + expect(() => assertSchema(response(prepared.receipt), "response")).not.toThrow(); + expect(() => assertSchema(response("behaviorObservation"), "response")).toThrow(/^Malformed replay response/); + } + expect(Object.hasOwn(schema.$defs as object, "settlementReceipt")).toBe(true); + expect(schemaViolation(zero, "settlementReceipt", "receipt")).toBeUndefined(); + const request = { version: 1, id: 1, op: "observe", session: "1", index: 0, settlement, observed: {}, environment }; + expect(() => assertSchema(roundtrip({ ...request, receipt: zero }), "request")).not.toThrow(); + expect(() => assertSchema(roundtrip(request), "request")).not.toThrow(); + expect(() => assertSchema(roundtrip({ ...request, receipt: 5 }), "request")).toThrow(/^Malformed replay request at request\.receipt$/); + }); + + it("derives the receipt a session's setup requires from the schedule alone", () => { + // layers opens three scopes in setup; independent seeds and holds nothing yet. + const layers = behavior("layers"); + expect(layers.binding.setup.filter(command => command.op === "openScope")).toHaveLength(3); + expect(layers.receipt).toEqual({ ...zero, held: { ...zero.held, scopes: 3 } }); + expect(behavior("independent").receipt).toEqual(zero); + expect(behavior("independent").environment).toEqual({ wallMs: wallEpochMs }); + // Started effects are held while their kind's hold flag is on, released by + // name, and the fixture's elapsed-time sentinels move the clocks. + const ledger = new SettlementLedger({ sourceWorkMs: 7, comparisonMs: 3 }, [{ op: "faults", value: { holdReads: true } }]); + ledger.issue([{ op: "begin" }, { op: "advance", ms: 10 }, { op: "shiftWall", ms: -1000 }, { op: "openScope", id: "0" }]); + const observed = { ...emptyObservation(), loaders: 2, reads: 3, loads: 1, comparisons: 1 }; + expect(ledger.expected(observed)).toEqual({ elapsedMs: 10 + 2 * 7 + 3, runnable: 0, held: { ...zero.held, loaders: 2, reads: 3, scopes: 1 } }); + expect(ledger.wallMs(observed)).toBe(wallEpochMs + 10 - 1000 + 2 * 7 + 3); + // A hold change leads its interval, so the reads started after it are not held. + ledger.issue([{ op: "faults", value: { holdReads: false } }, { op: "release", effect: "read", index: 0 }, { op: "resolve", loader: 1 }, { op: "closeScope", id: "0" }]); + expect(ledger.expected({ ...observed, reads: 5 }).held).toEqual({ ...zero.held, loaders: 1, reads: 2 }); + }); + + it("refuses a schedule whose hold change follows an effect-starting command in one interval", () => { + // Holding is attributed per observation interval; both drivers decide it at + // effect start, so a hold change must lead its interval. + const seeded = [{ op: "seed", value: 1, ageMs: 0 }, { op: "openScope", id: "0", instance: "0" }, { op: "faults", value: { holdReads: true } }]; + expect(() => new SettlementLedger({}, seeded)).not.toThrow(); + expect(() => new SettlementLedger({}, [{ op: "begin" }, { op: "faults", value: { failReads: true } }])).not.toThrow(); + expect(() => new SettlementLedger({}, [{ op: "begin" }, { op: "faults", value: { holdReads: false } }])).not.toThrow(); + const late = () => new SettlementLedger({}, [{ op: "begin" }, { op: "faults", value: { holdReads: true } }]); + expect(late).toThrow(/^Settlement ledger cannot attribute held gates: holdReads changes after an effect-starting command in one observation interval$/); + expect(late).not.toThrow(/Settlement violation/); + // An observation closes the interval. + const ledger = new SettlementLedger({}, [{ op: "begin" }]); + ledger.expected(emptyObservation()); + expect(() => ledger.issue([{ op: "faults", value: { holdReads: true } }, { op: "begin" }])).not.toThrow(); + expect(() => ledger.issue([{ op: "faults", value: { holdWrites: true } }])).toThrow(/holdWrites changes after an effect-starting command/); + }); + + it("rejects a behavior observe without a receipt as infrastructure", () => { + const { observe, observed, environment: wall } = behavior("independent"); + const rendered = failureOf(() => observe(0, observed, { environment: wall })); + expect(rendered).toContain("step 0 action init: Missing settlement receipt"); + infrastructure(rendered); + expect(failureOf(() => observe(0, observed))).toMatch(/Unknown replay session/); + }); + + it("holds the core driver's wall clock to its advanceWall schedule without a receipt", () => { + const raw = smoke("core"); + const expected = parseItfTrace(raw, "core").states.map(step => expectedCoreObservation(step.state)); + const session = replaySession(raw); + const next = session.observe(0, expected[0]) as { inputs: Array> }; + expect(next.inputs[0]).toEqual({ op: "advanceWall", ms: 1 }); + const rendered = failureOf(() => session.observe(1, expected[1], { environment: { wallMs: wallEpochMs } })); + expect(rendered).toMatch(new RegExp(`step 1 action \\w+: Settlement violation: wall clock at ${wallEpochMs} ms, schedule requires ${wallEpochMs + 1} ms`)); + infrastructure(rendered); + expect(failureOf(() => session.observe(1, expected[1]))).toMatch(/Unknown replay session/); + const settled = replaySession(raw); + settled.observe(0, expected[0]); + expect(() => settled.observe(1, expected[1])).not.toThrow(); + }); + + it("rejects a receipt on a core session as infrastructure", () => { + const session = replaySession(smoke("core")); + const observed = expectedCoreObservation(parseItfTrace(smoke("core"), "core").states[0]!.state); + const rendered = failureOf(() => session.observe(0, observed, { receipt: zero })); + expect(rendered).toContain("step 0 action init: Unexpected settlement receipt"); + infrastructure(rendered); + expect(failureOf(() => session.observe(0, observed))).toMatch(/Unknown replay session/); + }); + + it.each([ + { path: "receipt.held.reads", tamper: (receipt: SettlementReceipt) => ({ ...receipt, held: { ...receipt.held, reads: "1" } }) }, + { path: "receipt.held.scopes", tamper: ({ held: { scopes: _scopes, ...held }, ...receipt }: SettlementReceipt) => ({ ...receipt, held }) }, + { path: "receipt.runnable", tamper: (receipt: SettlementReceipt) => ({ ...receipt, runnable: -1 }) }, + { path: "receipt.runnable", tamper: ({ runnable: _runnable, ...receipt }: SettlementReceipt) => receipt }, + { path: "receipt.elapsedMs", tamper: (receipt: SettlementReceipt) => ({ ...receipt, elapsedMs: 0.5 }) }, + { path: "receipt.extra", tamper: (receipt: SettlementReceipt) => ({ ...receipt, extra: 1 }) }, + ])("rejects a malformed receipt at $path as infrastructure", ({ path, tamper }) => { + const { observe, observed, receipt, environment: wall } = behavior("independent"); + const malformed = tamper(receipt); + expect(schemaViolation(malformed, "settlementReceipt", "receipt")).toBe(path); + const rendered = failureOf(() => observe(0, observed, { receipt: malformed, environment: wall })); + expect(rendered).toContain(`Malformed settlement receipt at ${path}`); + infrastructure(rendered); + expect(failureOf(() => observe(0, observed))).toMatch(/Unknown replay session/); + }); + + it.each([ + { rule: "R2 quiescence", profile: "independent", message: "Settlement violation: 1 runnable task(s) at observation", + tamper: (receipt: SettlementReceipt) => ({ receipt: { ...receipt, runnable: 1 } }) }, + { rule: "R3 monotonic clock", profile: "independent", message: "Settlement violation: monotonic clock at 5 ms, schedule requires 0 ms", + tamper: (receipt: SettlementReceipt) => ({ receipt: { ...receipt, elapsedMs: 5 } }) }, + { rule: "R4 wall clock", profile: "independent", message: `Settlement violation: wall clock at ${wallEpochMs + 1} ms, schedule requires ${wallEpochMs} ms`, + tamper: (receipt: SettlementReceipt) => ({ receipt, environment: { wallMs: wallEpochMs + 1 } }) }, + { rule: "R5 held gates", profile: "layers", message: "Settlement violation: scope gates held 2, schedule requires 3", + tamper: (receipt: SettlementReceipt) => ({ receipt: { ...receipt, held: { ...receipt.held, scopes: 2 } } }) }, + { rule: "R5 held gates", profile: "independent", message: "Settlement violation: read gates held 1, schedule requires 0", + tamper: (receipt: SettlementReceipt) => ({ receipt: { ...receipt, held: { ...receipt.held, reads: 1 } } }) }, + ])("fails $rule by name on a $profile session, never as a mismatch", ({ profile, message, tamper }) => { + const { observe, observed, receipt, environment: wall } = behavior(profile); + expect(() => observe(0, observed)).not.toThrow(); + const session = behavior(profile); + const rendered = failureOf(() => session.observe(0, observed, { environment: wall, ...tamper(receipt) })); + expect(rendered).toContain(`step 0 action init: ${message}`); + // The runners classify a violation by this pattern; every rule text must match it. + expect(rendered).toMatch(settlementViolationPattern); + infrastructure(rendered); + expect(failureOf(() => session.observe(0, observed))).toMatch(/Unknown replay session/); + }); + + it("reports a settlement violation before an observation mismatch", () => { + const changed = smoke("independent"); + for (const state of changed.states) (state.s.o as Record).reads = { "#bigint": "123456" }; + const mismatching = behavior("independent", changed); + expect(failureOf(() => mismatching.observe(0, mismatching.observed))).toMatch(/Observation mismatch/); + const unsettled = behavior("independent", changed); + const rendered = failureOf(() => unsettled.observe(0, unsettled.observed, { environment: unsettled.environment, receipt: { ...unsettled.receipt, runnable: 1 } })); + expect(rendered).toContain("Settlement violation: 1 runnable task(s) at observation"); + infrastructure(rendered); + }); + + it("checks the real drivers' receipts at every observe of every behavior smoke history", async () => { + class Recording extends ReplayCoordinator { + readonly observes: Array> = []; + override dispatch(request: unknown): Record { + if ((request as { op: string }).op === "observe") this.observes.push(request as Record); + return super.dispatch(request); + } + } + const receipts: SettlementReceipt[] = []; + for (const profile of Object.keys(profileActions())) { + const coordinator = new Recording(); + const { steps } = await replayThroughCoordinator(profile, smokeTracePath(profile), coordinator); + expect(coordinator.observes.length).toBe(steps); + const carried = coordinator.observes.filter(request => Object.hasOwn(request, "receipt")); + if (profile === "core" || profile === "local-clock") { expect(carried).toEqual([]); continue; } + expect(carried.length).toBe(steps); + receipts.push(...carried.map(request => request.receipt as SettlementReceipt)); + } + // The coordinator accepted each one, so every receipt satisfied R2 to R5; + // the schedules exercised them with time and gates in play. No committed + // smoke history carries a fixture work sentinel; the driver checks below + // cover the work terms of R3 and R4. + expect(receipts.every(receipt => receipt.runnable === 0)).toBe(true); + expect(receipts.some(receipt => receipt.elapsedMs > 0)).toBe(true); + expect(receipts.some(receipt => receipt.held.loaders > 0)).toBe(true); + expect(receipts.some(receipt => receipt.held.scopes > 0)).toBe(true); + expect(receipts.some(receipt => receipt.held.reads > 0 || receipt.held.loads > 0 || receipt.held.policies > 0)).toBe(true); + }); +}); + +describe("fixture work on the receipt clocks", () => { + // The two elapsed-time sentinels are consumed inside callbacks the driver + // owns: the source callback for sourceWorkMs, the shadow comparator for + // comparisonMs. The ledger predicts the same movement from public counters. + async function settled(choice: number, commands: Input[]) { + vi.useFakeTimers(); + vi.setSystemTime(new Date(wallEpochMs)); + const shadow = profiles.shadow!; + const fixture = (shadow.fixture as (choice: number) => Fixture)(choice); + const driver = new BehaviorDriver(fixture, {}, {}); + const ledger = new SettlementLedger(fixture, shadow.setup); + try { + for (const input of shadow.setup) await driver.apply(input as Input); + for (const command of commands) await driver.apply(command); + ledger.issue(commands); + const observed = driver.snapshot(); + ledger.assert(driver.receipt(), observed, { wallMs: Date.now() }); + return { observed, receipt: driver.receipt(), wallMs: Date.now() }; + } finally { + await driver.dispose(); + vi.useRealTimers(); + vi.restoreAllMocks(); + } + } + + it("moves both clocks by the source work the fixture declares", async () => { + const { observed, receipt, wallMs } = await settled(11, [{ op: "begin" }, { op: "resolve", loader: 0, value: 1 }]); + expect(observed.loaders).toBe(1); + expect(receipt.elapsedMs).toBe(9); + expect(wallMs).toBe(wallEpochMs + 9); + }); + + it("moves both clocks by the comparison work the fixture declares", async () => { + // A dark remote: the source answers the call, the shadow read and decode + // are released by name, and the comparison runs when the decode lands. + const { observed, receipt, wallMs } = await settled(9, [{ op: "seed", value: 1, ageMs: 0 }, { op: "begin" }, { op: "resolve", loader: 0, value: 1 }, + { op: "release", effect: "read", index: 0 }, { op: "release", effect: "load", index: 0 }]); + expect(observed.comparisons).toBe(1); + expect(receipt.elapsedMs).toBe(10); + expect(wallMs).toBe(wallEpochMs + 10); + }); +}); + describe("coordinated end-to-end replay with the real drivers", () => { it.each(Object.keys(profileActions()))("replays the committed %s smoke trace through the coordinator", async profile => { const result = await replayThroughCoordinator(profile, smokeTracePath(profile)); @@ -380,5 +623,6 @@ describe("shared replay transport and source closure", () => { expect(() => replaySources(directory)).toThrow(/inventory differs/); } finally { rmSync(directory, { recursive: true, force: true }); } expect(replaySources()).toContain("formal/replay/coordinator.mjs"); + expect(replaySources()).toContain("formal/replay/settlement.mjs"); }); }); diff --git a/test/formal-runtime-boundary-witnesses.test.ts b/test/formal-runtime-boundary-witnesses.test.ts index 851c5255..f153b044 100644 --- a/test/formal-runtime-boundary-witnesses.test.ts +++ b/test/formal-runtime-boundary-witnesses.test.ts @@ -4,9 +4,34 @@ import { expect, it } from "vitest"; import { runtimeBoundaryTraceWitnesses } from "../formal/replay/witnesses/runtime-boundaries.mjs"; -interface Fixture { states: Array<{ input: { name: string; choice: { "#bigint": string } }; s: { o: { calls: Array<{ "#bigint": string }>; loaders: { "#bigint": string } } } }> } +type Integer = { "#bigint": string }; +interface State { input: { name: string; choice: Integer }; s: { o: { calls: Integer[]; loaders: Integer; reads: Integer; loads: Integer; writes: Integer; writeTtls: Integer[] } } } +interface Fixture { states: State[] } const fixtures = JSON.parse(readFileSync("test/fixtures/formal-runtime-boundary-witnesses.json", "utf8")) as Record; const fixture = (name: string): Fixture => structuredClone(fixtures[name]!); +const integer = (value: number): Integer => ({ "#bigint": String(value) }); +const choose = (state: State, choice: number): void => { state.input.choice = integer(choice); }; +const indexOfNth = (trace: Fixture, action: string, occurrence: number): number => { + let seen = 0; + const index = trace.states.findIndex(s => s.input.name === action && seen++ === occurrence); + if (index < 0) throw new Error(`No ${action} input #${occurrence}`); + return index; +}; +// A step whose observation continues the previous state's counters; the classifier reads inputs and o only. +const step = (trace: Fixture, action: string, choice: number, calls: number[], loaders: number): State => + ({ input: { name: action, choice: integer(choice) }, s: { o: { ...structuredClone(trace.states[0]!.s.o), calls: calls.map(integer), loaders: integer(loaders) } } }); +const policyStep = (trace: Fixture, choice: number): State => ({ input: { name: "policy", choice: integer(choice) }, s: { o: structuredClone(trace.states[0]!.s.o) } }); +// Grow a counter from a step onward, so the history stays monotone. +const bump = (trace: Fixture, from: number, counter: "reads" | "writes"): void => { + for (const state of trace.states.slice(from)) state.s.o[counter] = integer(Number(state.s.o[counter]["#bigint"]) + 1); +}; +const zeroRemoteCounters = (trace: Fixture): void => { + for (const state of trace.states) { state.s.o.reads = integer(0); state.s.o.loads = integer(0); state.s.o.writes = integer(0); state.s.o.writeTtls = []; } +}; +const bypasses: Array<[string, string]> = [ + ["invalidCoalesce", "invalid-coalesce"], ["invalidRequestLocal", "invalid-request-local"], + ["explicitNullCoalesce", "null-coalesce"], ["explicitNullRequestLocal", "null-request-local"], +]; const positive: Array<[string, string]> = [ ["runtimeTrueEnablesSharingOverFalseDefaultTest", "runtime-enables-sharing"], ["inheritedFalseKeepsIndependentMemoizingSourcesTest", "inherited-false-request-last-writer"], @@ -83,3 +108,94 @@ it("the full kill switch needs independent killed sources and later memo reuse", trace.states.pop(); expect(runtimeBoundaryTraceWitnesses(trace).has("full-feature-kill-switch")).toBe(false); }); +it("the null provider needs the later remote hit on its shared publication", () => { + const trace = fixture("nullProviderInheritsConfiguredServingAndDefaultSharingTest"); + trace.states.pop(); + expect(runtimeBoundaryTraceWitnesses(trace).has("null-provider-inherits-serving-and-sharing")).toBe(false); +}); +it("an explicit coalesce leaf without a runtime TTL cannot credit omitted-ramp inheritance", () => { + // Code 11 is {coalesce:true}: no ramp key and no TTL, so fixture 7 configures no remote layer. + const trace = fixture("runtimeRemoteTtlWithoutRampActivatesLayerTest"); + choose(trace.states[indexOfNth(trace, "policy", 0)]!, 11); + expect(runtimeBoundaryTraceWitnesses(trace).has("runtime-ttl-implies-ramp:remote")).toBe(false); +}); +it.each([["local", "runtimeLocalTtlWithoutRampActivatesLayerTest"], ["remote", "runtimeRemoteTtlWithoutRampActivatesLayerTest"]])("a runtime %s TTL needs the later hit on its publication", (layer, name) => { + const trace = fixture(name); + trace.states.pop(); + expect(runtimeBoundaryTraceWitnesses(trace).has(`runtime-ttl-implies-ramp:${layer}`)).toBe(false); +}); +it("an explicit coalesce:true leaf cannot credit omitted-leaf defaults", () => { + // Code 11 is {coalesce:true} with the ramp omitted; no driver code carries an explicit ramp with an omitted coalesce leaf. + const trace = fixture("omittedRampAndSharingUseLibraryDefaultsTest"); + trace.states.splice(1, 0, policyStep(trace, 11)); + expect(runtimeBoundaryTraceWitnesses(trace).has("default-ramp-and-sharing")).toBe(false); +}); +it("library defaults need the later remote hit on the shared publication", () => { + const trace = fixture("omittedRampAndSharingUseLibraryDefaultsTest"); + trace.states.pop(); + expect(runtimeBoundaryTraceWitnesses(trace).has("default-ramp-and-sharing")).toBe(false); +}); +it.each(bypasses)("%s that replaces the retained entry at its settlement did not preserve it", (prefix, leaf) => { + const trace = fixture(`${prefix}BypassesWithoutReplacingRemoteTest`); + bump(trace, indexOfNth(trace, "resolveLoader", 1), "writes"); + expect(runtimeBoundaryTraceWitnesses(trace).has(`bypass-preserves-cache:${leaf}`)).toBe(false); +}); +it.each(bypasses)("%s that consults the layer at its release did not bypass it", (prefix, leaf) => { + const trace = fixture(`${prefix}BypassesWithoutReplacingRemoteTest`); + bump(trace, indexOfNth(trace, "releasePolicy", 1), "reads"); + expect(runtimeBoundaryTraceWitnesses(trace).has(`bypass-preserves-cache:${leaf}`)).toBe(false); +}); +it.each(bypasses)("%s under a layer enabled only by a runtime TTL reply shows no bypass", (prefix, leaf) => { + // In fixture 6 the local layer is on only under code 18, so a coerced or inherited reading also starts a loader with no read. + const trace = fixture(`${prefix}BypassesWithoutReplacingRemoteTest`); + choose(trace.states[0]!, 6); + trace.states.splice(1, 0, policyStep(trace, 18)); + choose(trace.states[indexOfNth(trace, "policy", 2)]!, 18); + zeroRemoteCounters(trace); + expect(runtimeBoundaryTraceWitnesses(trace).has(`bypass-preserves-cache:${leaf}`)).toBe(false); +}); +it.each(bypasses.filter(([prefix]) => prefix.endsWith("RequestLocal")))("%s in a request-layer fixture is publicly identical to requestLocal:false", (prefix, leaf) => { + const trace = fixture(`${prefix}BypassesWithoutReplacingRemoteTest`); + choose(trace.states[0]!, 3); + zeroRemoteCounters(trace); + expect(runtimeBoundaryTraceWitnesses(trace).has(`bypass-preserves-cache:${leaf}`)).toBe(false); +}); +it.each(["local", "remote"])("%s absence and literal text need the later hit on the latest publication", layer => { + const trace = fixture(`${layer}AbsenceAndLiteralTextStayDistinctTest`); + trace.states.pop(); + expect(runtimeBoundaryTraceWitnesses(trace).has(`absent-distinct-from-text:${layer}`)).toBe(false); +}); +it("runtime enablement needs a second caller completed by the shared settlement", () => { + const trace = fixture("runtimeTrueEnablesSharingOverFalseDefaultTest"); + for (const state of trace.states.slice(indexOfNth(trace, "resolveLoader", 0))) state.s.o.calls[1] = integer(0); + expect(runtimeBoundaryTraceWitnesses(trace).has("runtime-enables-sharing")).toBe(false); +}); +it("overlapping memoizing sources that settle the same value cannot show the last writer", () => { + const trace = fixture("inheritedFalseKeepsIndependentMemoizingSourcesTest"); + const settlement = indexOfNth(trace, "resolveLoader", 0); + choose(trace.states[settlement]!, 8); // loader 1 also settles value 1 + for (const state of trace.states.slice(settlement)) state.s.o.calls[1] = integer(1); + expect(runtimeBoundaryTraceWitnesses(trace).has("inherited-false-request-last-writer")).toBe(false); +}); +it("an above-sample source that overlapped the equality source cannot show the exact boundary", () => { + // Policy 5: A starts loader 0. Policy 8: B starts loader 1 while A is pending. A settles 1, B settles 2, a probe under 8 + // hits 2. In the local fixture reads and writes stay 0, so a port admitting the key at equality shows the same history. + const trace = fixture("localCohortEqualityBypassesBeforeAboveSampleCachesTest"); + trace.states = [trace.states[0]!, step(trace, "policy", 5, [], 0), step(trace, "beginCall", -1, [0], 0), step(trace, "releasePolicy", -1, [0], 1), + step(trace, "policy", 8, [0], 1), step(trace, "beginCall", -1, [0, 0], 1), step(trace, "releasePolicy", -1, [0, 0], 2), + step(trace, "resolveLoader", 0, [1, 0], 2), step(trace, "resolveLoader", 9, [1, 2], 2), + step(trace, "beginCall", -1, [1, 2, 0], 2), step(trace, "releasePolicy", -1, [1, 2, 2], 2)]; + expect(runtimeBoundaryTraceWitnesses(trace).has("exact-serving-cohort:local")).toBe(false); +}); +it("a runtime TTL without a ramp leaves the disabled baseline disabled", () => { + const trace = fixture("disabledBaselineRampedUpKeepsDefaultSharingTest"); + choose(trace.states[indexOfNth(trace, "policy", 0)]!, 18); + expect(runtimeBoundaryTraceWitnesses(trace).has("disabled-baseline-default-sharing")).toBe(false); +}); +it("disabling only request memoization is the false-request-leaf bypass, not the kill switch", () => { + const trace = fixture("fullFeatureKillSwitchKeepsOmittedSharingAndRetainedMemoTest"); + choose(trace.states[indexOfNth(trace, "policy", 0)]!, 13); + const labels = runtimeBoundaryTraceWitnesses(trace); + expect(labels.has("full-feature-kill-switch")).toBe(false); + expect(labels.has("bypass-preserves-cache:false-request-leaf")).toBe(true); +}); diff --git a/test/formal-semantic-coverage.test.ts b/test/formal-semantic-coverage.test.ts index a77b37f2..e804bbc1 100644 --- a/test/formal-semantic-coverage.test.ts +++ b/test/formal-semantic-coverage.test.ts @@ -1,17 +1,21 @@ import { readFileSync } from "node:fs"; import { describe, expect, it } from "vitest"; +type Citation = { ref: string; scope: string }; const moduleUrl = new URL("../formal/check-semantic-coverage.mjs", import.meta.url).href; const { checkSemanticCoverage, checkProfiles } = await import(moduleUrl) as { checkSemanticCoverage(value: unknown): unknown; checkProfiles(value: unknown): unknown; }; const inventory = JSON.parse(readFileSync(new URL("../formal/semantic-cases.json", import.meta.url), "utf8")) as { - cases: Array<{ id: string; rule: string; scenarios: string[]; models: string[]; vectors: string[]; generated: Array<{ profile: string; witness: string }>; quintReplays?: string[]; generatedVectors?: Array<{ artifact: string; group?: string; name: string }>; gap?: string }>; + cases: Array<{ id: string; rule: string; scenarios: string[]; models: Citation[]; definitions?: Citation[]; vectors: string[]; generated: Array<{ profile: string; witness: string }>; quintReplays?: string[]; generatedVectors?: Array<{ artifact: string; group?: string; name: string }>; gap?: string }>; }; const check = (value: unknown) => JSON.stringify(checkSemanticCoverage(value)); -describe("semantic coverage accounting", () => { +// Every case re-checks the whole inventory against the Quint sources; the +// hosted runner is about ten times slower than a laptop (5.2 s versus 0.5 s +// for the definition-citation case), so the suite carries an explicit budget. +describe("semantic coverage accounting", { timeout: 30_000 }, () => { it("rejects incompatible profile registries and schema drift", () => { const registry = JSON.parse(readFileSync(new URL("../formal/profiles.json", import.meta.url), "utf8")); expect(() => checkProfiles(registry)).not.toThrow(); @@ -21,7 +25,7 @@ describe("semantic coverage accounting", () => { }); it("resolves contract, scenario, model, vector and witness references", () => { const result = JSON.parse(check(inventory)); - expect(result.contracts).toBe(69); + expect(result.contracts).toBe([...readFileSync(new URL("../formal/CONTRACTS.md", import.meta.url), "utf8").matchAll(/^\| ([CW]\d{2}) \|/gm)].length); expect(result.cases.total).toBe(inventory.cases.length); }); it("rejects duplicate cases and missing executable evidence without an explicit gap", () => { @@ -42,7 +46,7 @@ describe("semantic coverage accounting", () => { scenario.cases[0]!.scenarios = ["nonexistent case"]; expect(() => check(scenario)).toThrow(); const model = structuredClone(inventory); - model.cases[0]!.models = ["formal/dialcache-core.qnt:unknownInvariant"]; + model.cases[0]!.models = [{ ref: "formal/dialcache-core.qnt:unknownInvariant", scope: "A check that is not scheduled." }]; expect(() => check(model)).toThrow(); }); it("rejects a valid case inventory that silently drops a positive scenario", () => { @@ -65,6 +69,36 @@ describe("semantic coverage accounting", () => { Object.assign(fixedOnly.cases[0]!, { generated: [], quintReplays: [], generatedVectors: undefined }); expect(() => check(fixedOnly)).toThrow(/requires Quint-driven implementation replay/); }); + it("requires a reviewed scope on every Quint citation", () => { + const blank = structuredClone(inventory); + blank.cases[0]!.models[0]!.scope = " "; + expect(() => check(blank)).toThrow(/Invalid\/duplicate Quint citation or missing scope/); + const duplicate = structuredClone(inventory); + duplicate.cases[0]!.models.push({ ...duplicate.cases[0]!.models[0]! }); + expect(() => check(duplicate)).toThrow(/Invalid\/duplicate Quint citation or missing scope/); + const helper = structuredClone(inventory); + helper.cases[0]!.models[0]!.ref = "formal/dialcache-core.qnt:localWriteEligible"; + expect(() => check(helper)).toThrow(/model property is not scheduled for execution/); + }); + it("rejects a definition citation that names a scheduled property or no declaration", () => { + const defined = inventory.cases.find(c => c.definitions?.length)!; + const property = structuredClone(inventory); + property.cases.find(c => c.id === defined.id)!.definitions![0]!.ref = defined.models[0]!.ref; + expect(() => check(property)).toThrow(/not a transition\/helper\/predicate/); + const missing = structuredClone(inventory); + missing.cases.find(c => c.id === defined.id)!.definitions![0]!.ref = "formal/dialcache-core.qnt:missingAction"; + expect(() => check(missing)).toThrow(/not a transition\/helper\/predicate/); + const unknownModel = structuredClone(inventory); + unknownModel.cases.find(c => c.id === defined.id)!.definitions![0]!.ref = "formal/missing.qnt:localWriteEligible"; + expect(() => check(unknownModel)).toThrow(/Unknown Quint definition model/); + const unscoped = structuredClone(inventory); + unscoped.cases.find(c => c.id === defined.id)!.definitions![0]!.scope = ""; + expect(() => check(unscoped)).toThrow(/Invalid\/duplicate Quint citation or missing scope/); + const result = JSON.parse(check(inventory)) as { citations: { scopedChecks: number; definitions: number; casesWithDefinitions: number } }; + expect(result.citations.scopedChecks).toBe(inventory.cases.reduce((n, c) => n + c.models.length, 0)); + expect(result.citations.definitions).toBe(inventory.cases.reduce((n, c) => n + (c.definitions?.length ?? 0), 0)); + expect(result.citations.casesWithDefinitions).toBe(inventory.cases.filter(c => c.definitions?.length).length); + }); it("rejects replay names that are not exported cited Quint tests", () => { const broken = structuredClone(inventory); broken.cases[0]!.quintReplays = ["policy/doesNotExistTest"]; @@ -73,7 +107,7 @@ describe("semantic coverage accounting", () => { it("rejects missing, wrong-model and duplicate generated vector references", () => { for (const change of [ (c: (typeof inventory.cases)[number]) => { c.generatedVectors![0]!.name = "missing vector"; }, - (c: (typeof inventory.cases)[number]) => { c.models = ["formal/dialcache-core.qnt:closedScopeHasNoRequestValue"]; }, + (c: (typeof inventory.cases)[number]) => { c.models = [{ ref: "formal/dialcache-core.qnt:closedScopeHasNoRequestValue", scope: "A check of another model." }]; }, (c: (typeof inventory.cases)[number]) => { c.generatedVectors!.push(c.generatedVectors![0]!); }, ]) { const broken = structuredClone(inventory); diff --git a/test/formal-semantic-reporter.test.ts b/test/formal-semantic-reporter.test.ts index 2f63bbf8..68b90db6 100644 --- a/test/formal-semantic-reporter.test.ts +++ b/test/formal-semantic-reporter.test.ts @@ -8,7 +8,7 @@ import { expect, it } from "vitest"; const moduleUrl = new URL("../formal/semantic-reporter.mjs", import.meta.url).href; const { evaluateSemanticTestReport } = await import(moduleUrl) as { evaluateSemanticTestReport(data: unknown, execution: unknown, exitCode: number | null): { - state: string; passed: number; failed: number; failingTests: string[]; + state: string; passed: number; failed: number; failingTests: string[]; unhandledErrors?: string[]; }; }; @@ -55,6 +55,46 @@ it("requires executed assertions and distinguishes detection from infrastructure expect(infrastructure.execution.unhandledErrors).toContain("unhandled probe"); expect(infrastructure.evaluate).toThrow(/infrastructure\/import error, not evidence of detection/); + // An unhandled rejection beside a failed assertion is a consequence of the + // fault under measurement and is recorded; on its own it is infrastructure. + const unhandledWork = 'it("unhandled work", async () => { setTimeout(() => { throw new Error("unhandled probe"); }, 0); await new Promise(resolve => setTimeout(resolve, 30)); });'; + const collateral = run(`import { it, expect } from "vitest"; it("wrong value", () => expect(1).toBe(2)); ${unhandledWork}`); + expect(collateral.status).toBe(1); + expect(collateral.execution.unhandledErrors).toEqual(["unhandled probe"]); + expect(collateral.evaluate()).toEqual({ state: "detected", passed: 1, failed: 1, failingTests: ["wrong value"], unhandledErrors: ["unhandled probe"] }); + // The rule is checked directly too, so it does not lean on vitest's exit code encoding unhandled errors. + const passing = { testResults: [{ assertionResults: [{ status: "passed", fullName: "ok", failureMessages: [] }] }] }; + const failing = { testResults: [{ assertionResults: [{ status: "passed", fullName: "ok", failureMessages: [] }, { status: "failed", fullName: "wrong value", failureMessages: ["expected 2"] }] }] }; + expect(() => evaluateSemanticTestReport(passing, { reason: "passed", collectionErrors: [], unhandledErrors: ["x"] }, 0)).toThrow(/infrastructure\/import error, not evidence of detection/); + expect(evaluateSemanticTestReport(failing, { reason: "failed", collectionErrors: [], unhandledErrors: ["x"] }, 1)).toEqual({ state: "detected", passed: 1, failed: 1, failingTests: ["wrong value"], unhandledErrors: ["x"] }); + const alone = run(`import { it } from "vitest"; ${unhandledWork}`); + // Vitest exits nonzero on an unhandled error while reporting the run itself as passed. + expect(alone.status).toBe(1); + expect(alone.execution).toEqual({ reason: "passed", collectionErrors: [], unhandledErrors: ["unhandled probe"] }); + expect(alone.evaluate).toThrow(/infrastructure\/import error, not evidence of detection/); + + // A settlement violation is the driver failing its own contract, not the + // library failing a comparison: infrastructure, even beside a real mismatch. + const unsettled = run(`import { it } from "vitest"; + it("unsettled driver", () => { throw new Error("formal/scope-smoke.itf.json step 4 action beginCall: Settlement violation: 1 runnable task(s) at observation"); });`); + expect(unsettled.status).toBe(1); + expect(unsettled.execution).toEqual({ reason: "failed", collectionErrors: [], unhandledErrors: [] }); + expect(unsettled.evaluate).toThrow(/infrastructure\/import error, not evidence of detection/); + const violated = { testResults: [{ assertionResults: [ + { status: "failed", fullName: "wrong value", failureMessages: ["Observation mismatch\nexpected: 1\nactual: 2"] }, + { status: "failed", fullName: "unsettled", failureMessages: ["Error: step 1 action beginCall: Settlement violation: read gates held 0, schedule requires 1\n at replay"] }] }] }; + expect(() => evaluateSemanticTestReport(violated, { reason: "failed", collectionErrors: [], unhandledErrors: [] }, 1)).toThrow(/infrastructure\/import error, not evidence of detection/); + // The first violated rule travels with the error, so a mutant's cohort can be recorded against it by name. + const thrown = (() => { try { evaluateSemanticTestReport(violated, { reason: "failed", collectionErrors: [], unhandledErrors: [] }, 1); } catch (error) { return error as Error & { settlementViolation?: string }; } return undefined; })(); + expect(thrown?.settlementViolation).toBe("step 1 action beginCall: Settlement violation: read gates held 0, schedule requires 1"); + const timedOut = { testResults: [{ assertionResults: [{ status: "failed", fullName: "slow", failureMessages: ["Error: Test timed out in 5000ms."] }] }] }; + const slow = (() => { try { evaluateSemanticTestReport(timedOut, { reason: "failed", collectionErrors: [], unhandledErrors: [] }, 1); } catch (error) { return error as Error & { settlementViolation?: string }; } return undefined; })(); + expect(slow?.settlementViolation).toBeUndefined(); + // A failed expectation that quotes the phrase prints it, and its regex source, into the message: a detection, not a violation. + const quoted = { testResults: [{ assertionResults: [{ status: "failed", fullName: "control", failureMessages: [ + "AssertionError: expected 'passed' to match /Settlement violation: \\d+ runnable task\\(s\\) at observation/\n at control"] }] }] }; + expect(evaluateSemanticTestReport(quoted, { reason: "failed", collectionErrors: [], unhandledErrors: [] }, 1)).toMatchObject({ state: "detected", failed: 1 }); + for (const empty of [run(passingSource, "^no-matching-test$"), run('import { it } from "vitest"; it.skip("skipped assertion", () => { throw new Error("must remain skipped"); });')]) { expect(empty.status).toBe(0); diff --git a/test/formal-settlement-control.test.ts b/test/formal-settlement-control.test.ts index cf539cf1..406668c2 100644 --- a/test/formal-settlement-control.test.ts +++ b/test/formal-settlement-control.test.ts @@ -1,66 +1,93 @@ -import { readFileSync } from "node:fs"; -import { resolve } from "node:path"; +import { describe, expect, it, vi } from "vitest"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; - -import { bindTrace } from "../formal/replay/bindings.mjs"; +import { profileActions } from "../formal/replay/bindings.mjs"; +import { ReplayCoordinator } from "../formal/replay/coordinator.mjs"; +import { profiles } from "../formal/replay/features.mjs"; +import { wallEpochMs } from "../formal/replay/settlement.mjs"; +import { FallbackTimeoutError } from "../src/errors.js"; import { BehaviorDriver, type Fixture, type Input } from "./formal/behavior-driver.js"; +import { replayThroughCoordinator, smokeTracePath } from "./formal/coordinated-replay.js"; // Harness control for the causally-ready-v1 settlement contract (PORTING.md). -// The replays below use the shared bindings and the committed smoke history of -// every BehaviorDriver-backed profile. A driver that skips its end-of-apply -// drain must be caught by the observation assertions; if it were not, the -// contract would be unenforced and a port could pass without ever settling. -// The core and local-clock profiles use other drivers and are not covered here. -const profiles = ["independent", "layers", "admission", "scope", "recovery", "policy", "shadow", "effects"] as const; +// Every BehaviorDriver-backed profile replays its committed smoke history +// through the shared coordinator twice: with the settling driver, which must +// pass, and with a driver that skips its end-of-apply drain, which the +// coordinator must reject through the settlement receipt (runnable work found +// by the verification drain), never through an observation mismatch. If the +// skipped drain could pass, the contract would be unenforced and a port could +// pass without ever settling; if it failed only by mismatch, an unsettled +// driver could earn mutation credit. The core and local-clock profiles use +// other drivers and carry no receipt. +const behaviorProfiles = Object.keys(profileActions()).filter(name => name !== "core" && name !== "local-clock"); -// Measured 2026-09-11 at commit 74efe65: without the drain, all eight smoke -// histories fail an observation comparison within their first five steps -// (six at a `beginCall`, whose getOrLoad has not reached its source or Redis -// read when the snapshot is taken; `scope` at `rejectLoader`; `policy` at -// `releasePolicy`), so the floor is the full set. Lower it only with a written +// Measured 2026-09-18 at commit 76ba3ef: the unsettled driver first reports +// runnable work at step 2 of source-budgets, 3 of runtime-boundaries, 2 of +// shadow-layers, 1 of local-failure, 5 of recovery-read, 4 of independent, 1 +// of layers, 1 of admission, 4 of scope, 1 of recovery, 2 of policy, 1 of +// shadow and 5 of effects, at or before the step where its observation would +// first mismatch. Every profile must detect; exempt one only with a written // reason (for example a regenerated smoke history that observes nothing -// asynchronous); it must stay at least one so the control keeps its teeth. -const minimumDetectingProfiles = 8; - -async function replay(name: string, settle: boolean): Promise { - const path = resolve(`formal/${name}-smoke.itf.json`); - const bound = bindTrace(name, JSON.parse(readFileSync(path, "utf8")), path); - // The language-neutral bindings type fixtures loosely; the driver owns the shape. - const driver = new BehaviorDriver(bound.fixture as unknown as Fixture, {}, { settle }); - try { - for (const input of bound.setup as Input[]) await driver.apply(input); - for (let index = 0; index < bound.trace.steps.length; index++) { - for (const input of bound.commands(index, driver.snapshot(), { wallMs: Date.now() }) as Input[]) await driver.apply(input); - bound.assert(index, driver.snapshot()); +// asynchronous), and never all of them. +describe("harness control: causally-ready-v1 settlement", () => { + it("covers every behavior-driver profile the coordinator serves", () => { + expect(behaviorProfiles.length).toBeGreaterThan(0); + }); + // The verification drain compares one encoding of the observation with + // itself. A value the library hands back is recorded by reference, and an + // Error instance is exactly what a fault can put there (mutant M37 publishes + // a rejected source's error into local storage); nothing ran after the + // snapshot, so the receipt must say so. + it("reports nothing runnable when a call value is a live object the library hands back", async () => { + vi.useFakeTimers(); + vi.setSystemTime(new Date(wallEpochMs)); + const layers = profiles.layers!; + const fixture = (layers.fixture as (choice: number) => Fixture)(5); + const driver = new BehaviorDriver(fixture, {}, {}); + try { + for (const input of layers.setup) await driver.apply(input as Input); + await driver.apply({ op: "begin" }); + await driver.apply({ op: "resolve", loader: 0, value: new FallbackTimeoutError("Behavior", 10) } as unknown as Input); + expect(driver.receipt().runnable).toBe(0); + expect(driver.settlementDiagnostic()).toBeUndefined(); + expect(driver.snapshot().calls[0]).toMatchObject({ status: "value", value: { name: "FallbackTimeoutError" } }); + } finally { + await driver.dispose(); + vi.useRealTimers(); + vi.restoreAllMocks(); } - } finally { await driver.dispose(); } -} - -// Each replay owns fresh fake timers and spies, exactly like the acceptance suites. -beforeEach(() => { vi.useFakeTimers(); vi.setSystemTime(new Date("2026-09-08T12:00:00Z")); }); -afterEach(() => { vi.useRealTimers(); vi.restoreAllMocks(); }); + }); -describe("harness control: causally-ready-v1 settlement", () => { - const detected: string[] = []; - const undetected: string[] = []; - for (const name of profiles) { - it(`harness control: ${name} smoke history passes with the settling driver`, async () => { - await replay(name, true); + // The timer term of the attestation. With the settle drain skipped, the + // call's remote read has not started at the snapshot; the verification + // drain starts it (an observed read-context event) against the held read + // gate and arms its read deadline, so the receipt counts the armed timer + // beside the observation change and the diagnostic names both. + it("counts a timer the verification drain arms as runnable work beside the observation change", async () => { + vi.useFakeTimers(); + vi.setSystemTime(new Date(wallEpochMs)); + const independent = profiles.independent!; + const driver = new BehaviorDriver(independent.fixture as Fixture, {}, { settle: false }); + try { + for (const input of independent.setup) await driver.apply(input as Input); + await driver.apply({ op: "begin" }); + expect(driver.receipt().runnable).toBeGreaterThan(1); + expect(driver.settlementDiagnostic()).toMatch(/^verification drain: observation member events changed, pending timers 0 -> [1-9]\d*$/); + } finally { + await driver.dispose(); + vi.useRealTimers(); + vi.restoreAllMocks(); + } + }); + for (const name of behaviorProfiles) { + it(`${name} smoke history passes with the settling driver`, async () => { + await replayThroughCoordinator(name, smokeTracePath(name)); }); - it(`harness control: ${name} smoke history is recorded against a driver that skips settlement`, async () => { - try { await replay(name, false); undetected.push(name); } - catch (error) { - // Only an observation mismatch counts as detection. A driver or - // binding crash would be a harness defect, not settlement evidence. - if ((error as { code?: string }).code !== "ERR_ASSERTION") throw error; - detected.push(name); - } + it(`${name} smoke history fails a driver that skips settlement by settlement violation, never by mismatch`, async () => { + const outcome = await replayThroughCoordinator(name, smokeTracePath(name), new ReplayCoordinator(), { settle: false }) + .then(() => "passed", (cause: unknown) => String(cause)); + expect(outcome).toMatch(/Settlement violation: /); + expect(outcome).not.toMatch(/Observation mismatch/); + expect(outcome).not.toMatch(/expected:[\s\S]*actual:/); }); } - it(`harness control: skipping settlement is detected by at least ${minimumDetectingProfiles} profiles`, () => { - expect(profiles.length).toBeGreaterThanOrEqual(minimumDetectingProfiles); - expect(detected.length, `detected by ${JSON.stringify(detected)}; undetected by ${JSON.stringify(undetected)}`) - .toBeGreaterThanOrEqual(minimumDetectingProfiles); - }); }); diff --git a/test/formal-validation.test.ts b/test/formal-validation.test.ts index 26db097d..d3d44a17 100644 --- a/test/formal-validation.test.ts +++ b/test/formal-validation.test.ts @@ -150,6 +150,19 @@ process.exit(Number(process.argv[3] ?? 0));\n`); { label: "Replay composed profiles against their reference corpus", command: process.execPath, args: ["formal/differential.mjs", "--composed", "--reference=origin/release"] }, ]); expect(validationPlan("differential", { directory, environment }).at(-1)!.args).toEqual(["formal/differential.mjs", "--composed", "--reference=origin/main"]); + // DIFFERENTIAL_SHARD narrows the replay to one shard, keeps the two cheap checks in every shard, and is validated as the script parses it. + const sharded = validationPlan("differential", { directory, environment: { ...environment, DIFFERENTIAL_SHARD: "2/4" } }); + expect(sharded.map(step => step.args)).toEqual([["formal/lint-profiles.mjs", "baseline", "--check"], ["formal/check-kernel-fixtures.mjs"], + ["formal/differential.mjs", "--composed", "--reference=origin/main", "--shard=2/4"]]); + expect(validationPlan("differential", { directory, environment }).flatMap(step => step.args ?? []).some(argument => argument.startsWith("--shard"))).toBe(false); + for (const value of ["0/4", "5/4", "2", "a/b", ""]) { + expect(() => validationPlan("differential", { directory, environment: { ...environment, DIFFERENTIAL_SHARD: value } }), value).toThrow(/DIFFERENTIAL_SHARD must be \//); + } + // Other targets ignore the variable, even a malformed one: no aggregate includes the differential. + for (const target of ["check-ts", "formal-check", "ci"]) { + expect(validationPlan(target, { directory, environment: { ...environment, DIFFERENTIAL_SHARD: "9/1" } }), target).toEqual(validationPlan(target, { directory, environment })); + } + expect(targetDescriptions.differential).toMatch(/DIFFERENTIAL_SHARD=\//); }); it("ends generation with the shared witness evaluation and starts each replay lane from a prepared context", () => { const generate = validationPlan("formal-generate", { directory }); @@ -203,6 +216,28 @@ process.exit(Number(process.argv[3] ?? 0));\n`); expect(cleanEnvironment({ MUTATION_SHARD: "2/3", DIALCACHE_PROTOCOL_CORPUS: "fixed", QUINT_SEED: "1" })).toEqual({ MUTATION_SHARD: "2/3" }); }); + it("measures named mutants only through MUTATION_ONLY on its own target, never together with a shard", () => { + const partial = { ...environment, MUTATION_ONLY: "M14,M15" }; + expect(validationPlan("mutations-ts", { directory, environment: partial })).toEqual([ + { label: "Measure TypeScript semantic mutations", command: process.execPath, args: ["formal/measure-semantics.mjs", "--only=M14,M15"] }, + ]); + expect(validationPlan("mutations-go", { directory, environment: partial }).map(step => step.args)).toEqual([["formal/measure-go-semantics.mjs", "--only=M14,M15"]]); + for (const value of ["", "M14,", "M14,M14", "m14", "14", "M14 M15"]) { + expect(() => validationPlan("mutations-ts", { directory, environment: { ...environment, MUTATION_ONLY: value } }), value).toThrow(/MUTATION_ONLY must be , naming distinct mutant ids/); + } + // A partial run is never merged, so it cannot also be a shard. + expect(() => validationPlan("mutations-ts", { directory, environment: { ...partial, MUTATION_SHARD: "2/3" } })).toThrow(/MUTATION_SHARD and MUTATION_ONLY exclude each other/); + // The aggregates refuse to ignore it silently; unrelated targets ignore it. + for (const target of ["mutations", "ci"]) { + expect(() => validationPlan(target, { directory, environment: partial }), target).toThrow(/MUTATION_ONLY=M14,M15 applies only to make mutations-ts and make mutations-go/); + } + for (const target of ["check", "formal", "formal-ts", "mutations-merge-ts", "mutations-merge-go"]) { + expect(validationPlan(target, { directory, environment: partial }), target).toEqual(validationPlan(target, { directory, environment })); + } + expect(cleanEnvironment({ MUTATION_ONLY: "M14", DIALCACHE_PROTOCOL_CORPUS: "fixed" })).toEqual({ MUTATION_ONLY: "M14" }); + for (const target of ["mutations-ts", "mutations-go"]) expect(targetDescriptions[target]).toMatch(/MUTATION_ONLY=,/); + }); + it("merges each language's shards with a plain Node step that needs neither Quint nor Go", () => { expect(validationPlan("mutations-merge-ts", { directory })).toEqual([ { label: "Merge TypeScript mutation shards", command: process.execPath, args: ["formal/merge-mutation-reports.mjs", "ts"] }, @@ -326,18 +361,29 @@ describe("full formal workflow shape", () => { for (const lane of lanes) expect(needsOf(jobs[lane]!), lane).toEqual(["generate"]); }); - it("shards both mutation lanes over three runners and gates the aggregate on their merges", () => { + it("shards both mutation lanes so every shard fits its timeout on the slow runner class, and gates the aggregate on their merges", () => { const uploadOf = (job: Job) => job.steps.find(step => step.uses?.startsWith("actions/upload-artifact"))!; const downloadsOf = (job: Job) => job.steps.filter(step => step.uses?.startsWith("actions/download-artifact")).map(step => step.with); const matrixShard = "$" + "{{ matrix.shard }}"; + // A shard runs the baselines, then its slice of the catalog strictly in sequence; on the slow + // runner class a TypeScript mutant costs about 2 minutes and a Go mutant about 3.5 (run + // 35335831285 measured 200-208 s per Go mutant on that class), and one hung + // cohort adds its own bound (the 540 s vitest spawn timeout, the 480 s go test timeout) before + // the shard fails. The matrix must keep every shard inside the job timeout, so growing the + // catalog fails here until the matrix grows. The shard count in the matrix and in MUTATION_SHARD + // must agree or the merge refuses the shards. + const catalogSize = (JSON.parse(readFileSync(new URL("../formal/mutations.json", import.meta.url), "utf8")) as { mutations: unknown[] }).mutations.length; + const baselineMinutes = 4; const table = [ - { lane: "typescript-mutations", language: "ts", output: ".formal-traces/semantic", artifact: "typescript-semantic", timeout: 30, go: undefined }, - { lane: "go-mutations", language: "go", output: ".formal-traces/go-semantic", artifact: "go-semantic", timeout: 40, go: { go: "true" } }, + { lane: "typescript-mutations", language: "ts", output: ".formal-traces/semantic", artifact: "typescript-semantic", timeout: 40, shards: 6, slowMinutesPerMutant: 2, hungCohortMinutes: 9, go: undefined }, + { lane: "go-mutations", language: "go", output: ".formal-traces/go-semantic", artifact: "go-semantic", timeout: 40, shards: 10, slowMinutesPerMutant: 3.5, hungCohortMinutes: 8, go: { go: "true" } }, ]; - for (const { lane, language, output, artifact, timeout, go } of table) { + for (const { lane, language, output, artifact, timeout, shards, slowMinutesPerMutant, hungCohortMinutes, go } of table) { const job = jobs[lane]!; - expect(job.strategy, lane).toEqual({ "fail-fast": false, matrix: { shard: [1, 2, 3] } }); - expect(job.env, lane).toEqual({ MUTATION_SHARD: matrixShard + "/3" }); + const perShard = Math.ceil(catalogSize / shards); + expect(baselineMinutes + perShard * slowMinutesPerMutant + hungCohortMinutes, `${lane}: ${perShard} mutants per shard`).toBeLessThanOrEqual(timeout); + expect(job.strategy, lane).toEqual({ "fail-fast": false, matrix: { shard: Array.from({ length: shards }, (_, position) => position + 1) } }); + expect(job.env, lane).toEqual({ MUTATION_SHARD: matrixShard + "/" + shards }); expect(job["timeout-minutes"], lane).toBe(timeout); expect(job.steps.map(step => step.run).filter(Boolean), lane).toEqual(["make mutations-" + language]); expect(job.steps.find(step => step.uses === "./.github/actions/setup-validation")!.with, lane).toEqual(go); @@ -392,14 +438,27 @@ describe("full formal workflow shape", () => { const jobs = parse(readFileSync(new URL("../.github/workflows/formal.yaml", import.meta.url), "utf8")).jobs; const job = jobs.differential!; expect(job.if).toBe("github.event_name == 'pull_request'"); - expect(job["timeout-minutes"]).toBe(30); + // Every composed profile replaying both ways after a kernel change overran one 60-minute job + // (57 minutes, then a cancellation at the timeout); four round-robin shards keep each inside it. + expect(job["timeout-minutes"]).toBe(60); + expect(job.strategy).toEqual({ "fail-fast": false, matrix: { shard: [1, 2, 3, 4] } }); + const shards = job.strategy!.matrix!.shard as number[]; expect(job.steps.find(step => step.uses?.startsWith("actions/checkout"))!.with).toEqual({ "fetch-depth": 0 }); expect(job.steps.some(step => step.uses === "./.github/actions/setup-quint")).toBe(true); const run = job.steps.find(step => step.run === "make differential")!; - expect(run.env).toEqual({ DIFFERENTIAL_REFERENCE: "origin/$" + "{{ github.base_ref }}" }); + // The count in DIFFERENTIAL_SHARD must agree with the matrix, or a profile is replayed twice or never. + expect(run.env).toEqual({ DIFFERENTIAL_REFERENCE: "origin/$" + "{{ github.base_ref }}", DIFFERENTIAL_SHARD: "$" + "{{ matrix.shard }}/" + shards.length }); expect(run.if).toBe("steps.fixture-scope.outputs.recompute == 'true'"); const upload = job.steps.find(step => step.uses?.startsWith("actions/upload-artifact"))!; - expect(upload.with!.name).toBe("formal-differential"); + expect(upload.with!.name).toBe("formal-differential-$" + "{{ matrix.shard }}"); expect(String(upload.with!.path)).toContain("**/replay-*/quint-test.log"); }); }); + +describe("kernel fixture checker", () => { + it("lists a fixture's declared runs and rejects a name quint test would not select", async () => { + const { declaredRuns } = await import(new URL("../formal/check-kernel-fixtures.mjs", import.meta.url).href) as { declaredRuns(source: string): string[] }; + expect(declaredRuns("module m {\n run firstTest = init\n run secondTest = init.then(step)\n}\n")).toEqual(["firstTest", "secondTest"]); + expect(() => declaredRuns("module m {\n run firstTest = init\n run probe = init\n}\n")).toThrow(/Kernel fixture runs must end in Test: probe/); + }); +}); diff --git a/test/formal-vector-artifacts.test.ts b/test/formal-vector-artifacts.test.ts index 5449211f..0f92f560 100644 --- a/test/formal-vector-artifacts.test.ts +++ b/test/formal-vector-artifacts.test.ts @@ -37,7 +37,7 @@ describe("Quint vector artifact authority", () => { .filter((entry): entry is [string, Array<{ name: string }>] => Array.isArray(entry[1])) .flatMap(([group, rows]) => rows.map(row => `${group}/${row.name}`))); const all = names("all"), fixed = names("fixed"), generated = names("generated"); - expect(fixed.size).toBe(134); + expect(fixed.size).toBe(Object.values(JSON.parse(read("formal/protocol-vectors.json")) as Record).filter(Array.isArray).reduce((total, rows) => total + rows.length, 0)); expect(generated.size).toBe(manifest.models.filter(m => m.vectorExport?.kind === "protocol").reduce((n, m) => n + m.vectorExport.cases, 0)); expect([...fixed].some(name => generated.has(name))).toBe(false); expect(new Set([...fixed, ...generated])).toEqual(all); diff --git a/test/formal-witness-attribution.test.ts b/test/formal-witness-attribution.test.ts index 1066f2a3..56181aff 100644 --- a/test/formal-witness-attribution.test.ts +++ b/test/formal-witness-attribution.test.ts @@ -1,22 +1,30 @@ import { readFileSync } from "node:fs"; import { describe, expect, it } from "vitest"; -import { recoveryShadowWitnesses } from "../formal/replay/witnesses/recovery-shadow.mjs"; +import { parseTrace, profiles as featureProfiles } from "../formal/replay/features.mjs"; +import { recoveryWitnesses } from "../formal/replay/witnesses/recovery.mjs"; +import { shadowWitnesses } from "../formal/replay/witnesses/shadow.mjs"; import { witnessStates } from "../formal/replay/witnesses/trace.mjs"; type RecordValue = Record; +type Choice = { tag: string; value: unknown }; type Fixture = { witness: string; profile: string; - source: string; + provenance: { recipe: string }; initialState: RecordValue; - steps: Array<{ action: string; statePatch: RecordValue }>; + steps: Array<{ action: string; choice?: Choice; statePatch: RecordValue }>; }; -type State = { input: { name: string; choice: { "#bigint": string } }; s: RecordValue }; +type State = { input: { name: string; choice: unknown }; s: RecordValue }; +type Recipe = { id: string; actions: Array<[string, number]> }; const fixtures = JSON.parse(readFileSync(new URL("./fixtures/formal-witness-attribution.json", import.meta.url), "utf8")) as Fixture[]; +const recipes = JSON.parse(readFileSync(new URL("../formal/fixture-recipes.json", import.meta.url), "utf8")) as { artifacts: Array<{ path: string; recipes: Recipe[] }> }; -// Excerpts from real Quint histories preserve their final public outcome. The -// negative controls add another sufficient cause, or remove the distinguishing -// time change, so reaching that outcome alone must no longer earn the witness. +// Real Quint histories preserve their final public outcome. The negative +// controls add another sufficient cause, or remove the distinguishing input, +// so reaching that outcome alone must no longer earn the witness. Every +// history is a full public history from its init and every control is an +// input edit: the classifiers read the recorded inputs and the public +// channels only. function merge(before: RecordValue, patch: RecordValue): RecordValue { const result = structuredClone(before); for (const [key, value] of Object.entries(patch)) { @@ -34,73 +42,101 @@ function fixtureFor(witness: string): Fixture { if (fixture === undefined) throw new Error(`Missing attribution fixture for ${witness}`); return fixture; } -// These excerpts use native integers for private state; the shared classifiers -// key on the explicit input record, so each step declares one without a choice. -const noChoice = () => ({ name: "", choice: { "#bigint": "-1" } }); +const integer = (value: number): RecordValue => ({ "#bigint": String(value) }); +const explicitInput = (name: string, choice?: Choice) => ({ name, choice: choice === undefined || choice.tag === "None" ? integer(-1) : choice.value }); +// A history starts at its init, whose fixture choice is the recipe's first external action. +function initialInput(fixture: Fixture): { name: string; choice: unknown } { + const reference = fixture.provenance.recipe.replace(/^formal\/fixture-recipes\.json#/, ""); + const separator = reference.lastIndexOf("/"); + const recipe = recipes.artifacts.find(artifact => artifact.path === reference.slice(0, separator))?.recipes.find(item => item.id === reference.slice(separator + 1)); + if (recipe === undefined) throw new Error(`Missing recipe for ${fixture.witness}`); + return { name: "init", choice: integer(recipe.actions[0]![1]) }; +} function statesFor(fixture: Fixture): State[] { - const states: State[] = [{ input: { ...noChoice(), name: "excerpt" }, s: structuredClone(fixture.initialState) }]; + const states: State[] = [{ input: initialInput(fixture), s: structuredClone(fixture.initialState) }]; for (const step of fixture.steps) { - states.push({ input: { ...noChoice(), name: step.action }, s: merge(states.at(-1)!.s, step.statePatch) }); + states.push({ input: explicitInput(step.action, step.choice), s: merge(states.at(-1)!.s, step.statePatch) }); } return states; } +// Every history is parsed exactly as the corpus is: the drivers' explicit +// inputs and the public channels of its profile. function witnessed(fixture: Fixture, states: State[]): boolean { - return recoveryShadowWitnesses(fixture.profile, [{ path: "trace.itf.json", ...witnessStates({ states }, "trace.itf.json") }]).has(fixture.witness); + const raw = { states }, path = "trace.itf.json"; + const history = { ...parseTrace(raw, path, featureProfiles[fixture.profile as keyof typeof featureProfiles]!), ...witnessStates(raw, path) }; + return (fixture.profile === "recovery" ? recoveryWitnesses([history]) : shadowWitnesses([history])).has(fixture.witness); +} +// An environment command inserted before a step carries the same public +// channels (it observes nothing); removing a step drops its input with them. +function insertBefore(states: State[], index: number, name: string, choice: number): State[] { + return [...states.slice(0, index), { input: { name, choice: integer(choice) }, s: structuredClone(states[index - 1]!.s) }, ...states.slice(index)]; } +const acquisitionOf = (states: State[]) => states.findIndex((state, index) => index > 0 && state.input.name === "beginCall" + && Number(((state.s.o as RecordValue).reads as RecordValue)["#bigint"]) > Number(((states[index - 1]!.s.o as RecordValue).reads as RecordValue)["#bigint"])); describe("Quint witnesses distinguish the rule responsible for an outcome", () => { it.each(fixtures)("recognizes an isolated real schedule: $witness", fixture => { expect(witnessed(fixture, statesFor(fixture))).toBe(true); }); - it.each(["maximum-age-read-preserves-source-error", "future-read-preserves-source-error"])( - "does not credit %s when the watermark already prevents recovery", witness => { - const fixture = fixtureFor(witness), states = statesFor(fixture); - states[0]!.s.watermark = states[0]!.s.created; - expect(witnessed(fixture, states)).toBe(false); - }, - ); + it("does not credit maximum-age-read-preserves-source-error when the watermark already prevents recovery", () => { + // An invalidation before the acquiring call raises the watermark to the + // wall clock, above the frame's stamp: the fence, not the age, refuses it. + const fixture = fixtureFor("maximum-age-read-preserves-source-error"), states = statesFor(fixture); + expect(witnessed(fixture, insertBefore(states, acquisitionOf(states), "invalidate", -1))).toBe(false); + }); it.each(["maximum-age-read-preserves-source-error", "future-read-preserves-source-error"])( - "does not credit %s when physical storage already expired", witness => { + "does not credit %s when the read itself fails", witness => { + // A read fault armed before the acquiring call observes nothing, so no + // age judgment can be the reason recovery was refused. const fixture = fixtureFor(witness), states = statesFor(fixture); - states[0]!.s.expires = states[0]!.s.now; - expect(witnessed(fixture, states)).toBe(false); + expect(witnessed(fixture, insertBefore(states, acquisitionOf(states), "readFault", 1))).toBe(false); }, ); + it("does not credit future-read-preserves-source-error without the future stamp", () => { + // Without the seed one millisecond in the future the acquiring read sees + // the initial frame at age 1000: an ordinary stale candidate. + const fixture = fixtureFor("future-read-preserves-source-error"), states = statesFor(fixture); + const seed = states.findIndex(state => state.input.name === "seed"); + expect(seed).toBeGreaterThan(0); + expect(witnessed(fixture, [...states.slice(0, seed), ...states.slice(seed + 1)])).toBe(false); + }); + it("does not credit a watermark when age already prevents recovery", () => { + // A seed at exactly M before the acquiring call is both fenced and too old. const fixture = fixtureFor("fenced-read-does-not-retain"), states = statesFor(fixture); - const acquired = states[0]!.s; - acquired.created = Number(acquired.wall) - Number(acquired.maxAge); - expect(witnessed(fixture, states)).toBe(false); + expect(witnessed(fixture, insertBefore(states, acquisitionOf(states), "seed", 4))).toBe(false); }); - it.each(["absent", "expired"])("requires a usable candidate to challenge classifier failure: %s", reason => { - const fixture = fixtureFor("classifier-error-keeps-error-without-decode"), states = statesFor(fixture); - const beforeRejection = states.at(-2)!.s; - if (reason === "absent") beforeRejection.candidate = 0; - else beforeRejection.acceptedMaxAge = Number(beforeRejection.wall) - Number(beforeRejection.candidateCreated); - expect(witnessed(fixture, states)).toBe(false); - }); + it.each([["fenced", "invalidate", -1], ["at the maximum age", "seed", 4]] as const)( + "requires a usable candidate to challenge classifier failure: %s", (_reason, name, choice) => { + const fixture = fixtureFor("classifier-error-keeps-error-without-decode"), states = statesFor(fixture); + expect(witnessed(fixture, insertBefore(states, acquisitionOf(states), name, choice))).toBe(false); + }, + ); it("requires elapsed age to change while asynchronous decoding is pending", () => { + // This real history starts decoding at age 1,001 ms and rolls the wall + // clock back before completion. Without the rollback the sampled age is + // the age decoding started at, whatever the recorded telemetry says. const fixture = fixtureFor("recovery-age-sampled-at-successful-decode"), states = statesFor(fixture); - // This real excerpt starts decoding at age 1,001 ms and rolls back to 1 ms - // before completion. Undo the rollback and retain a matching telemetry value. - const beforeReturn = states.at(-2)!.s, afterReturn = states.at(-1)!.s; - beforeReturn.wall = Number(beforeReturn.candidateCreated) + 1001; - (afterReturn.d as { ages: number[] }).ages = [1001]; - expect(witnessed(fixture, states)).toBe(false); + const rollback = states.findIndex(state => state.input.name === "rollbackWall"); + expect(rollback).toBeGreaterThan(0); + expect(witnessed(fixture, [...states.slice(0, rollback), ...states.slice(rollback + 1)])).toBe(false); }); it("requires equal C1 bytes to isolate a watermark supersession", () => { + // The job's C0 is the binary spelling of `1` (seed 3). A frame reseeded + // and fenced again before the confirmation read is superseded either way; + // the witness credits the fence only when the frame still carries the C0 + // bytes: the text spelling of `1` (seed 1) does, the padded spelling + // (seed 5) is a replacement that already supersedes. const fixture = fixtureFor("fenced-c1-supersedes-without-repair"), states = statesFor(fixture); - const confirmation = states.at(-2)!.s; - confirmation.c0 = 1; // text '1' - confirmation.frame = 3; // binary '1': identical payload bytes - expect(witnessed(fixture, states)).toBe(true); - confirmation.frame = 5; // binary ' 1': a replacement already supersedes C0 - expect(witnessed(fixture, states)).toBe(false); + const confirmation = states.length - 1; + const refenced = (seed: number) => insertBefore(insertBefore(states, confirmation, "invalidate", 0), confirmation, "seed", seed); + expect(witnessed(fixture, refenced(1))).toBe(true); + expect(witnessed(fixture, refenced(5))).toBe(false); }); }); diff --git a/test/formal-witness-boundaries.test.ts b/test/formal-witness-boundaries.test.ts index 6003c11b..8c39c3e5 100644 --- a/test/formal-witness-boundaries.test.ts +++ b/test/formal-witness-boundaries.test.ts @@ -1,21 +1,26 @@ import { readFileSync } from "node:fs"; import { describe, expect, it } from "vitest"; -import { recoveryShadowWitnesses } from "../formal/replay/witnesses/recovery-shadow.mjs"; +import { parseTrace, profiles as featureProfiles } from "../formal/replay/features.mjs"; +import { recoveryWitnesses } from "../formal/replay/witnesses/recovery.mjs"; import { runtimeWitnesses } from "../formal/replay/witnesses/runtime.mjs"; +import { shadowWitnesses } from "../formal/replay/witnesses/shadow.mjs"; import { witnessStates } from "../formal/replay/witnesses/trace.mjs"; type RecordValue = Record; +type Choice = { tag: string; value: unknown }; type Fixture = { witness: string; profile: string; + provenance: { recipe: string }; initialState: RecordValue; - steps: Array<{ action: string; choice?: unknown; statePatch: RecordValue }>; + steps: Array<{ action: string; choice?: Choice; statePatch: RecordValue }>; }; -type Choice = { tag: string; value: unknown }; type State = { input: { name: string; choice: unknown }; s: RecordValue }; +type Recipe = { id: string; actions: Array<[string, number]> }; const fixtures = JSON.parse(readFileSync(new URL("./fixtures/formal-witness-boundaries.json", import.meta.url), "utf8")) as Fixture[]; +const recipes = JSON.parse(readFileSync(new URL("../formal/fixture-recipes.json", import.meta.url), "utf8")) as { artifacts: Array<{ path: string; recipes: Recipe[] }> }; -// The fixture file contains excerpts selected from real Quint histories. Store +// The fixture file contains histories selected from real Quint runs. Store // only changed fields to keep the examples readable without duplicating state. function merge(before: RecordValue, patch: RecordValue): RecordValue { const result = structuredClone(before); @@ -29,26 +34,57 @@ function merge(before: RecordValue, patch: RecordValue): RecordValue { } return result; } -// Excerpts start mid-history; the first state carries a placeholder input. -// Steps declare the explicit input record that every shared classifier keys on. -const explicitInput = (name: string, choice?: unknown) => ({ name, choice: choice === undefined ? integer(-1) : (choice as Choice).value }); +function integer(value: number): RecordValue { return { "#bigint": String(value) }; } +// Steps declare the explicit input record that every shared classifier keys +// on; a recorded choice is the simulator's Some/None pick. A layers excerpt +// starts mid-history under a placeholder input; a recovery or shadow history +// starts at its init, whose fixture choice is the recipe's first external action. +const explicitInput = (name: string, choice?: Choice) => ({ name, choice: choice === undefined || choice.tag === "None" ? integer(-1) : choice.value }); +function initialInput(fixture: Fixture): { name: string; choice: unknown } { + if (fixture.profile === "layers") return explicitInput("excerpt"); + const reference = fixture.provenance.recipe.replace(/^formal\/fixture-recipes\.json#/, ""); + const separator = reference.lastIndexOf("/"); + const recipe = recipes.artifacts.find(artifact => artifact.path === reference.slice(0, separator))?.recipes.find(item => item.id === reference.slice(separator + 1)); + if (recipe === undefined) throw new Error(`Missing recipe for ${fixture.witness}`); + return { name: "init", choice: integer(recipe.actions[0]![1]) }; +} function statesFor(fixture: Fixture): State[] { - const states: State[] = [{ input: explicitInput("excerpt"), s: structuredClone(fixture.initialState) }]; + const states: State[] = [{ input: initialInput(fixture), s: structuredClone(fixture.initialState) }]; for (const step of fixture.steps) { states.push({ input: explicitInput(step.action, step.choice), s: merge(states.at(-1)!.s, step.statePatch) }); } return states; } +// A recovery or shadow history is parsed exactly as the corpus is (the +// drivers' explicit inputs and public channels); the layers excerpts keep their private state. function collect(fixture: Fixture, states: State[]): Set { - const histories = [{ path: "trace.itf.json", ...witnessStates({ states }, "trace.itf.json") }]; - return fixture.profile === "layers" ? runtimeWitnesses(fixture.profile, histories) : recoveryShadowWitnesses(fixture.profile, histories); + const raw = { states }, path = "trace.itf.json"; + if (fixture.profile === "layers") return runtimeWitnesses(fixture.profile, [{ path, ...witnessStates(raw, path) }]); + const history = { ...parseTrace(raw, path, featureProfiles[fixture.profile as keyof typeof featureProfiles]!), ...witnessStates(raw, path) }; + return fixture.profile === "recovery" ? recoveryWitnesses([history]) : shadowWitnesses([history]); } function fixtureFor(witness: string): Fixture { const fixture = fixtures.find(item => item.witness === witness); if (fixture === undefined) throw new Error(`Missing fixture for ${witness}`); return fixture; } -function integer(value: number): RecordValue { return { "#bigint": String(value) }; } +// An input-level negative control on a public-only history: an environment +// command inserted before a step, carrying the same public channels (the +// command itself observes nothing), so the classifier must re-decide from the +// changed inputs while the recorded outcome stays. +function insertBefore(states: State[], index: number, name: string, choice: number): State[] { + const inserted = { input: { name, choice: integer(choice) }, s: structuredClone(states[index - 1]!.s) }; + return [...states.slice(0, index), inserted, ...states.slice(index)]; +} +// The recorded verdict of a history's final step replaced by another: the +// public outcome a changed input would have produced. +function withFinalVerdict(states: State[], verdict: string): State[] { + const edited = structuredClone(states); + const observations = edited.at(-1)!.s.o as RecordValue; + const shadow = observations.shadow as string[]; + observations.shadow = [...shadow.slice(0, -1), verdict]; + return edited; +} describe("Quint recovery and shadow witness consequences", () => { it.each(fixtures)("recognizes the replayed consequence: $witness", fixture => { @@ -65,30 +101,45 @@ describe("Quint recovery and shadow witness consequences", () => { const writes = Number((observations.writes as RecordValue)["#bigint"]); observations.writes = integer(writes + 1); } else { - // Preserve phase, clocks, private candidate, and external input. Remove - // only the final public result/effect transition from the real trace. + // Preserve phase, clocks, candidate, and external input. Remove only the + // final public result/effect transition from the real trace. final.o = structuredClone(states.at(-2)!.s.o); } + if (fixture.profile === "shadow") { + // The shadow classifier predicts each step's public effects from the + // inputs: an observation the inputs do not produce is refused outright, + // and one they do produce without the consequence earns nothing. + let credited: boolean; + try { credited = collect(fixture, states).has(fixture.witness); } + catch (error) { expect((error as Error).message).toMatch(/shadow predicts/); return; } + expect(credited).toBe(false); + return; + } expect(collect(fixture, states).has(fixture.witness)).toBe(false); }); it("confirms equal bytes across text/binary encodings but excludes different JSON bytes", () => { + // The job's C0 is the binary spelling of the Unicode text (seed 8). A frame + // reseeded before the confirmation read with the text spelling (seed 7) + // carries the same bytes and confirms the mismatch; the padded spelling of + // `1` (seed 5) is other bytes, and the recorded mismatch becomes the + // supersession that input produces. const fixture = fixtureFor("same-c1-bytes-confirm-mismatch"); - const states = statesFor(fixture), before = states.at(-2)!.s; - before.c0 = integer(1); // text '1' - before.frame = integer(3); // binary '1' - expect(collect(fixture, states).has(fixture.witness)).toBe(true); - before.frame = integer(5); // binary ' 1 ', same decoded value, different bytes - expect(collect(fixture, states).has(fixture.witness)).toBe(false); + const states = statesFor(fixture), confirmation = states.length - 1; + expect(collect(fixture, insertBefore(states, confirmation, "seed", 7)).has(fixture.witness)).toBe(true); + expect(collect(fixture, withFinalVerdict(insertBefore(states, confirmation, "seed", 5), "superseded")).has(fixture.witness)).toBe(false); }); it("requires different bytes for a replacement witness even when a verdict says superseded", () => { + // The job's C0 is text `2` (seed 2). A frame reseeded before the + // confirmation read with the padded spelling of `1` (seed 5) is other + // bytes and supersedes; the binary spelling of `2` (seed 4) carries the C0 + // bytes, so the recorded supersession becomes the mismatch that input + // produces and no replacement is credited. const fixture = fixtureFor("different-c1-bytes-supersede"); - const states = statesFor(fixture), before = states.at(-2)!.s; - before.c0 = integer(1); before.frame = integer(5); - expect(collect(fixture, states).has(fixture.witness)).toBe(true); - before.frame = integer(3); - expect(collect(fixture, states).has(fixture.witness)).toBe(false); + const states = statesFor(fixture), confirmation = states.length - 1; + expect(collect(fixture, insertBefore(states, confirmation, "seed", 5)).has(fixture.witness)).toBe(true); + expect(collect(fixture, withFinalVerdict(insertBefore(states, confirmation, "seed", 4), "mismatch")).has(fixture.witness)).toBe(false); }); it("does not claim capacity retention from late-effect suppression alone", () => { @@ -99,19 +150,29 @@ describe("Quint recovery and shadow witness consequences", () => { }); it("requires the exact F boundary, not merely a served stale value", () => { + // A seed at 999 ms inserted before the acquiring call makes the frame one + // millisecond short of F at the read; the recorded recovery outcome stays. const fixture = fixtureFor("first-stale-age-recovers-without-publication"); const states = statesFor(fixture); - const acquisition = states.findIndex(state => state.input.name === "beginCall") - 1; - const before = states[acquisition]!.s; - before.created = integer(Number((before.created as RecordValue)["#bigint"]) - 1); - expect(collect(fixture, states).has(fixture.witness)).toBe(false); + const acquisition = states.findIndex(state => state.input.name === "beginCall"); + expect(collect(fixture, insertBefore(states, acquisition, "seed", 1)).has(fixture.witness)).toBe(false); }); it("requires exact M after decode, not merely a generic recovery miss", () => { + // One more millisecond of elapsed time before the decode settles puts the + // candidate past M rather than at it; the recorded miss stays. const fixture = fixtureFor("exact-maximum-after-decode-rejects"); - const states = statesFor(fixture), before = states.at(-2)!.s; - before.wall = integer(Number((before.wall as RecordValue)["#bigint"]) + 1); - expect(collect(fixture, states).has(fixture.witness)).toBe(false); + const states = statesFor(fixture); + expect(collect(fixture, insertBefore(states, states.length - 1, "advance", 1)).has(fixture.witness)).toBe(false); + }); + + it("names the first field of the composed layout a private history lacks", () => { + // A history carrying private state is bound to the composed layout field + // by field; one in another layout is refused at its first missing field. + const fixture = fixtureFor("exact-maximum-after-decode-rejects"); + const states = statesFor(fixture); + for (const state of states) state.s.phase = integer(0); + expect(() => collect(fixture, states)).toThrow(/step 0: private layout is missing now/); }); }); diff --git a/test/formal/behavior-driver.ts b/test/formal/behavior-driver.ts index 2dfea118..c50a0ec4 100644 --- a/test/formal/behavior-driver.ts +++ b/test/formal/behavior-driver.ts @@ -1,5 +1,7 @@ import { emptyObservation } from "../../formal/replay/observation.mjs"; export { emptyObservation } from "../../formal/replay/observation.mjs"; +import type { SettlementReceipt } from "../../formal/replay/settlement.mjs"; +export type { SettlementReceipt } from "../../formal/replay/settlement.mjs"; import { AsyncLocalStorage } from "node:async_hooks"; import { performance } from "node:perf_hooks"; @@ -100,10 +102,21 @@ function deferred() { type Gate = ReturnType>; type Scope = { instance: string; run: (fn: () => T) => T; gate: Gate; lifetime: Promise }; +// The first observation member whose encoding differs between two snapshots. +function firstDifference(before: Record, after: Record): string { + return Object.keys(after).find(key => JSON.stringify(after[key]) !== JSON.stringify(before[key])) ?? "(none)"; +} + // Only external effects are gated. We never access DialCache's maps, flights, // or resolved policy, and no expected observation is passed to this class. export class BehaviorDriver { private readonly observed: Observation; + // The observation reported for the last applied input and the settlement + // receipt attesting the same instant; see the tail of `apply`. + private reported: Observation; + private settlement: SettlementReceipt = { elapsedMs: 0, runnable: 0, + held: { loaders: 0, reads: 0, writes: 0, dumps: 0, loads: 0, policies: 0, scopes: 0 } }; + private diagnostic: string | undefined; // Independent event journal for bounded contract monitors. Entries come // only from external callbacks, settlements, and public diagnostics. private readonly history: EffectsContractEvent[] = []; @@ -135,6 +148,7 @@ export class BehaviorDriver { constructor(private readonly fixture: Fixture, private readonly overrides: DialCacheConfig = {}, private readonly harness: { settle?: boolean } = {}) { this.observed = emptyObservation(fixture); + this.reported = emptyObservation(fixture); if (fixture.localFaultInjection) { // Native binding for the model's fallible local-storage boundary. These // hooks inject an exception only; successful calls still use real storage. @@ -416,9 +430,37 @@ export class BehaviorDriver { } default: { const unknown: never = input; throw new Error(`Unknown input: ${JSON.stringify(unknown)}`); } } - // Drain ready executor work while unresolved external gates remain held. - // No guessed number of Promise turns and no advancing deadline time. + // Settle: drain ready executor work while unresolved external gates remain + // held. No guessed number of Promise turns and no advancing deadline time. if (this.harness.settle !== false) await vi.advanceTimersByTimeAsync(0); + // Report this instant: the observation, the controlled monotonic clock and + // the gates still held, all from the driver's own bookkeeping. The snapshot + // is the JSON encoding that crosses the wire: a value the library hands + // back is recorded by reference, and a structured clone of an Error keeps + // fewer members than JSON does, so comparing the two encodings would report + // a change no task made. + const reported = JSON.stringify(this.observed); + this.reported = JSON.parse(reported) as Observation; + const elapsedMs = performance.now(); + const held = { + loaders: this.loaders.filter(gate => !gate.settled).length, + reads: this.effects.read.size, writes: this.effects.write.size, dumps: this.effects.dump.size, + loads: this.effects.load.size, policies: this.effects.policy.size, + scopes: [...this.scopes.values()].filter(scope => !scope.gate.settled).length, + }; + // Verify quiescence: one more zero-time drain must run nothing. Anything + // it changes, in the observation or the pending fake timers, is runnable + // work the settle step left behind and the receipt reports it. + const timers = vi.getTimerCount(); + await vi.advanceTimersByTimeAsync(0); + const after = JSON.stringify(this.observed); + const changed = after === reported ? 0 : 1; + const timerDelta = Math.abs(vi.getTimerCount() - timers); + this.settlement = { elapsedMs, runnable: changed + timerDelta, held }; + // For the harness message only, never for the wire: what the drain did. + this.diagnostic = changed + timerDelta === 0 ? undefined : `verification drain: ${changed + ? `observation member ${firstDifference(JSON.parse(reported) as Record, JSON.parse(after) as Record)} changed` + : "observation unchanged"}, pending timers ${timers} -> ${vi.getTimerCount()}`; assertPublicationCausality(this.causalHistory); } @@ -426,7 +468,16 @@ export class BehaviorDriver { if (this.fixture.observe?.includes(event)) this.observed.events!.push({ event, ...fields }); } - snapshot(): Observation { return structuredClone(this.observed); } + // The observation reported for the last applied input. The receipt describes + // the same instant, so the commands derived from a snapshot and the checks + // run on its receipt agree on what the driver had done. + snapshot(): Observation { return structuredClone(this.reported); } + + receipt(): SettlementReceipt { return structuredClone(this.settlement); } + + // What the verification drain found when the receipt reports runnable work, + // for the harness failure message; the receipt itself stays a closed record. + settlementDiagnostic(): string | undefined { return this.diagnostic; } contractHistory(): readonly EffectsContractEvent[] { return structuredClone(this.history); } diff --git a/test/formal/coordinated-replay.ts b/test/formal/coordinated-replay.ts index a9547b17..b6e48f71 100644 --- a/test/formal/coordinated-replay.ts +++ b/test/formal/coordinated-replay.ts @@ -6,29 +6,37 @@ import { vi } from "vitest"; import { ReplayCoordinator, settlement } from "../../formal/replay/coordinator.mjs"; import type { CoreCommand } from "../../formal/replay/core.mjs"; +import { wallEpochMs } from "../../formal/replay/settlement.mjs"; import { parseJSON } from "../../formal/replay/validation.mjs"; import { DialCache, DialCacheKeyConfig } from "../../src/index.js"; import { FakeRedis } from "../fake-redis.js"; -import { BehaviorDriver, emptyObservation, type Fixture, type Input, type Observation } from "./behavior-driver.js"; +import { BehaviorDriver, emptyObservation, type Fixture, type Input, type Observation, type SettlementReceipt } from "./behavior-driver.js"; -// Every controlled driver starts its wall clock here. Frame timestamps, marker -// cutoffs and adapter replies are computed relative to this epoch. -export const wallEpochMs = Date.parse("2026-09-08T12:00:00.000Z"); +// Every controlled driver starts its wall clock at the shared epoch. Frame +// timestamps, marker cutoffs and adapter replies are computed relative to it. +export { wallEpochMs }; export function smokeTracePath(profile: string): string { return resolve(`formal/${profile === "core" ? "conformance" : profile}-smoke.itf.json`); } // A native driver as the coordinator sees it: it applies fixture-independent -// commands, reports its own observation and clock, and never receives -// expected model state. +// commands, reports its own observation, clock and settlement receipt, and +// never receives expected model state. Only behavior drivers have a controlled +// executor to report on; core and local-clock return no receipt. interface CoordinatedDriver { apply(command: Record): Promise; observe(): unknown; + receipt(): SettlementReceipt | undefined; + settlementDiagnostic?(): string | undefined; wallMs(): number; dispose(): Promise; } +// `settle: false` is the harness control of test/formal-settlement-control.test.ts +// only; conformance replays never pass it. +export interface ReplayOptions { settle?: boolean } + type Prepared = { session: string; fixture: Record; setup: Array>; steps: number }; type Observed = { complete: false; index: number; inputs: Array> } | { complete: true; steps: number }; @@ -37,20 +45,24 @@ type Observed = { complete: false; index: number; inputs: Array { +export async function replayThroughCoordinator(profile: string, path: string, coordinator = new ReplayCoordinator(), + options: ReplayOptions = {}): Promise<{ steps: number }> { let id = 0; const request = (fields: Record): T => coordinator.dispatch(parseJSON(JSON.stringify({ version: 1, id: ++id, ...fields }))) as T; const prepared = request({ op: "prepare", profile, path }); - const driver = driverFor(profile, prepared.fixture as unknown as Fixture); + const driver = driverFor(profile, prepared.fixture as unknown as Fixture, options); let complete = false; try { for (const command of prepared.setup) await driver.apply(command); for (let index = 0; ; index++) { - const result = request({ + const result = observe(driver, () => request({ op: "observe", session: prepared.session, index, settlement, observed: parseJSON(JSON.stringify(driver.observe())), environment: { wallMs: driver.wallMs() }, - }); + // A driver without a receipt reports undefined, which the JSON round + // trip drops; the coordinator alone decides whether one was required. + receipt: driver.receipt(), + })); if (result.complete) { complete = true; return { steps: result.steps }; @@ -65,24 +77,37 @@ export async function replayThroughCoordinator(profile: string, path: string, co } } -function driverFor(profile: string, fixture: Fixture): CoordinatedDriver { +// A settlement violation names the rule; the driver's own account of what its +// verification drain found makes the failure diagnosable from the message. +function observe(driver: CoordinatedDriver, send: () => T): T { + try { return send(); } catch (cause) { + const diagnostic = driver.settlementDiagnostic?.(); + if (diagnostic === undefined || !/Settlement violation/.test(String(cause))) throw cause; + throw new Error(`${(cause as Error).message}\n${diagnostic}`, { cause }); + } +} + +function driverFor(profile: string, fixture: Fixture, options: ReplayOptions): CoordinatedDriver { if (profile === "core") return new CoordinatedCoreDriver(); if (profile === "local-clock") return new CoordinatedLocalClockDriver(); - return new CoordinatedBehaviorDriver(fixture); + return new CoordinatedBehaviorDriver(fixture, options); } // Feature profiles and effects: the shared BehaviorDriver under fake timers // pinned to the wall epoch, as in test/formal-features.test.ts and -// test/formal-effects.test.ts. The driver drains causally ready work itself. +// test/formal-effects.test.ts. The driver drains causally ready work itself +// and attests it through its receipt. class CoordinatedBehaviorDriver implements CoordinatedDriver { private readonly driver: BehaviorDriver; - constructor(fixture: Fixture) { + constructor(fixture: Fixture, options: ReplayOptions) { vi.useFakeTimers(); vi.setSystemTime(new Date(wallEpochMs)); - this.driver = new BehaviorDriver(fixture); + this.driver = new BehaviorDriver(fixture, {}, options); } apply(command: Record): Promise { return this.driver.apply(command as Input); } observe(): Observation { return this.driver.snapshot(); } + receipt(): SettlementReceipt { return this.driver.receipt(); } + settlementDiagnostic(): string | undefined { return this.driver.settlementDiagnostic(); } wallMs(): number { return Date.now(); } async dispose(): Promise { try { await this.driver.dispose(); } finally { vi.useRealTimers(); vi.restoreAllMocks(); } @@ -159,6 +184,7 @@ class CoordinatedCoreDriver implements CoordinatedDriver { redisReads: this.redis.getCalls + this.redis.mGetCalls, redisWrites: this.redis.setCalls, }; } + receipt(): undefined { return undefined; } wallMs(): number { return this.wallClockMs; } async dispose(): Promise { vi.useRealTimers(); vi.restoreAllMocks(); } } @@ -189,6 +215,7 @@ class CoordinatedLocalClockDriver implements CoordinatedDriver { } else throw new Error(`Unknown local-clock command ${input.op}`); } observe(): unknown { return this.actual; } + receipt(): undefined { return undefined; } wallMs(): number { return Date.now(); } async dispose(): Promise { this.now.mockRestore(); } }