diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b8fc974e..f93cb306 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -168,9 +168,94 @@ jobs: - name: Run Echo release gate run: npm run release-gate:jedit-echo + edict-replace-range: + name: edict / replace-range package and pure runtime chain + runs-on: ubuntu-latest + timeout-minutes: 20 + + steps: + - name: Checkout Jedit + uses: actions/checkout@v6.0.2 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} + path: jedit + + - name: Verify literal submitted head + working-directory: jedit + env: + EXPECTED_JEDIT_HEAD: ${{ github.event.pull_request.head.sha || github.sha }} + run: test "$(git rev-parse HEAD)" = "$EXPECTED_JEDIT_HEAD" + + - name: Read pinned toolchain commits + id: toolchain + working-directory: jedit + run: | + node --input-type=module <<'NODE' >> "$GITHUB_OUTPUT" + import { readFileSync } from "node:fs"; + const lock = JSON.parse( + readFileSync("edict/replace-range/edict.toolchain-lock.json", "utf8"), + ); + console.log(`edict_commit=${lock.edict.commit}`); + console.log(`echo_commit=${lock.echo.commit}`); + console.log(`rust_toolchain=${lock.rust.toolchain}`); + console.log(`node_version=${lock.validation.nodeVersion}`); + NODE + + - name: Checkout pinned Edict + uses: actions/checkout@v6.0.2 + with: + repository: flyingrobots/edict + ref: ${{ steps.toolchain.outputs.edict_commit }} + path: edict + + - name: Checkout pinned Echo + uses: actions/checkout@v6.0.2 + with: + repository: flyingrobots/echo + ref: ${{ steps.toolchain.outputs.echo_commit }} + path: echo + + - name: Setup Node.js + uses: actions/setup-node@v6.4.0 + with: + node-version: ${{ steps.toolchain.outputs.node_version }} + cache: 'npm' + cache-dependency-path: jedit/package-lock.json + + - name: Setup pinned Rust + run: rustup toolchain install '${{ steps.toolchain.outputs.rust_toolchain }}' --profile minimal + + - name: Install Jedit dependencies + working-directory: jedit + run: npm ci + + - name: Compile the pinned test-only pure runtime host + working-directory: jedit + env: + CARGO_TARGET_DIR: ${{ github.workspace }}/runtime-target + run: cargo +${{ steps.toolchain.outputs.rust_toolchain }} test --locked --manifest-path edict/replace-range/tests/runtime/Cargo.toml --test compiled_boundary --no-run + + - name: Verify exact package and pure runtime chain with adversarial regressions + working-directory: jedit + env: + EDICT_REPO: ${{ github.workspace }}/edict + ECHO_REPO: ${{ github.workspace }}/echo + CARGO_TARGET_DIR: ${{ github.workspace }}/runtime-target + run: node --test edict/replace-range/tests/proof-harness.spec.mjs + + - name: Verify authoritative checkouts remain clean + run: | + for repository in jedit edict echo; do + if [[ -n "$(git -C "$repository" status --porcelain=v1 --untracked-files=all)" ]]; then + echo "$repository changed during the package-chain gate" >&2 + git -C "$repository" status --short >&2 + exit 1 + fi + done + check: name: check - needs: [ plan, build, test-shards, quality, release-gate ] + needs: [ plan, build, test-shards, quality, release-gate, edict-replace-range ] if: always() runs-on: ubuntu-latest @@ -182,9 +267,10 @@ jobs: TEST_SHARDS_RESULT: ${{ needs.test-shards.result }} QUALITY_RESULT: ${{ needs.quality.result }} RELEASE_GATE_RESULT: ${{ needs.release-gate.result }} + EDICT_REPLACE_RANGE_RESULT: ${{ needs.edict-replace-range.result }} run: | failed=0 - for result in "$PLAN_RESULT" "$BUILD_RESULT" "$QUALITY_RESULT"; do + for result in "$PLAN_RESULT" "$BUILD_RESULT" "$QUALITY_RESULT" "$EDICT_REPLACE_RANGE_RESULT"; do if [[ "$result" != "success" ]]; then failed=1 fi @@ -205,5 +291,6 @@ jobs: echo "| test shards | $TEST_SHARDS_RESULT |" echo "| quality | $QUALITY_RESULT |" echo "| release gate | $RELEASE_GATE_RESULT |" + echo "| edict / replace-range package chain | $EDICT_REPLACE_RANGE_RESULT |" } >> "$GITHUB_STEP_SUMMARY" exit "$failed" diff --git a/.gitignore b/.gitignore index 733790b0..ff1f05b4 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,9 @@ title-recordings/ .wesley-cache/ .jedit-cache/ .jedit/ +.build/ +.vendor.edict-lawpack-build.lock +.jedit-text.edict-lawpack-build.lock .obsidian/ .claude/ src/generated/jedit/structural-history-replace-text-range.wesley.generated.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index e9687470..5cc95389 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,40 @@ ## Unreleased +- Added DL-0159, a draft representation for the Edict-authored rope: schema 2 + with typed Echo edges for every structural relation, canonical CBOR facts, + content-addressed immutable nodes, and an import anchor tying every head to + its file. The graph holds only the current rope; Echo's ticks and receipts + own history, and retention of superseded nodes is Echo's policy. +- Added complete, not-yet-compiling drafts of `ReplaceRange` in Edict source + under `edict/replace-range/draft/`: a flat-text semantic reference and the + persistent AVL rope. Their README classifies every blocker by owner and + states the evidence plan. They are not part of the application gate. +- Repinned the ReplaceRange Edict application to Edict main `e60411fc` and + Echo main `9b3b9396` (provider and pure evaluator), with Rust 1.96.0 as Edict + now requires. The verified executable subject is byte-identical to the + earlier candidate pins; only the build closure changed. The leaf-slice and + range-assembly probe sources now build against Edict main; the Buffer decoder + still refuses at lexing. +- Fixed the Edict package-chain harness to use Cargo's reported executable path + when CI redirects build output with `CARGO_TARGET_DIR`. The regression compiles + and executes the real pinned package without a default-path compiler binary; + compiler, provider, evaluator, and application artifact identities are unchanged. +- Added a separate Docker-only state-read ordering probe for ReplaceRange. It + reproduces Edict's refusal of an effect-dependent basis guard and confirms + that removing the guard reaches an unsupported-provider refusal. This is + development evidence, not stateful execution; existing producer pins remain + unchanged. Ordered Target IR is tracked in flyingrobots/edict#218. +- Added the Jedit-owned `ReplaceRange.edict` application root and canonical + `jedit.text@1` lawpack publication. With Edict #201, its executable integration + gate now proves that real source lowers into generic pure Target IR and reaches + Echo's checked lowerer through the exact generic pure target configuration. + Echo's generic pure-program lowerer now emits the exact compiler-produced + package, and its structurally separate verifier independently accepts the + package relation. The integration gate pins clean Edict and Echo revisions, + verifies the committed lawpack closure without repairing it, and rejects + authoritative-input mutation outside its disposable build root. Runtime + evaluation and rope mutation remain unimplemented. - Made `ReplaceRange` corroborate the selected Head/root byte extent and exact requested-range materialization before no-op classification, so truncated or absent retained roots fail with a typed malformed-rope obstruction. diff --git a/docs/BEARING.md b/docs/BEARING.md index 7be0f60b..3b2f4995 100644 --- a/docs/BEARING.md +++ b/docs/BEARING.md @@ -124,6 +124,16 @@ or support-policy logic. ## Immediate Roadmap +- [x] Execute compiler-produced flat-text replacement against literal UTF-8 + cases, then range, UTF-8, no-op and resource refusals. This is the logical-text + reference for the persistent-rope differential gate, not graph admission or + recovery evidence. + +- [x] Make the pinned Edict package-chain harness discover Cargo's actual + executable when its output is redirected. Preserve producer pins and verify + the emitted pure package in Echo; this does not complete the authored rope + operation or its stateful runtime path. + 1. Keep the narrow create/replace/checkpoint/read corridor green against Echo-owned WAL, admission, scheduling, graph state, receipts, and restart recovery. diff --git a/docs/design/0159-edict-rope-representation.md b/docs/design/0159-edict-rope-representation.md new file mode 100644 index 00000000..312bc578 --- /dev/null +++ b/docs/design/0159-edict-rope-representation.md @@ -0,0 +1,548 @@ +--- +title: "DL-0159 - Edict-Authored Rope Representation" +legend: "DL" +lane: "design" +issue: "https://github.com/flyingrobots/jedit/issues/296" +status: "draft" +owners: + - "@flyingrobots" +created: "2026-10-15" +updated: "2026-10-15" +--- + +# DL-0159 - Edict-Authored Rope Representation + +## Linked Issue + +- [#296 Author and prove Jim's first Edict operation: `ReplaceRange`](https://github.com/flyingrobots/jedit/issues/296) +- [#302 Author ReplaceRange as Jedit-owned Edict source](https://github.com/flyingrobots/jedit/pull/302) +- [#350 Reopening a file silently reuses a stale rope](https://github.com/flyingrobots/jedit/issues/350) +- Echo decision: [Application operation semantics authored in Edict source](https://github.com/flyingrobots/echo/blob/docs/edict-authored-operation-effects/docs/topics/GeneratedRules.md#application-operation-semantics-authored-in-edict-source) + (proposed for review) +- Echo design: [Authored Operation Effects](https://github.com/flyingrobots/echo/blob/docs/edict-authored-operation-effects/docs/architecture/authored-operation-effects.md) + (proposed for review) + +## Decision Summary + +The rope that Jim's Edict source reads and writes uses a new text schema, +`jedit.text.schema@2`. Every structural relation is an Echo edge; atoms carry +only scalar facts. Atom payloads use Echo's canonical CBOR v1. Immutable nodes +are content-addressed over their facts and their ordered children, so unchanged +subtrees keep their identity across edits. Every head is anchored to the file +coordinate and the host digest of the bytes its lineage was imported from. + +The graph holds the **current** rope only. Echo's ticks and receipts are the +causal history of how it got there; Jim does not duplicate that history as a +chain of reachable heads. Whether superseded nodes stay retained, and how far +back a past state can be reconstructed, is Echo's retention and replay +contract, not a property of rope topology. + +This replaces nothing in production yet. `jedit.text.schema@1` (DL-0158), the +native planner, and its oracle remain the current truth. Schema 2 is the +representation the authored source in `edict/replace-range/draft/` targets. + +## Sponsored Human + +A developer editing in Jim wants every edit to be explainable and recoverable +from Echo's own history, without trusting a native planner whose structure Echo +cannot see. + +## Sponsored Agent + +An agent needs the current rope, and the file bytes it descends from, to be +reachable through typed graph structure, and needs past edits to be explained +by Echo's causal history, so it never decodes application JSON. + +## Hill + +A reviewer can check, from this document and the draft source alone, which +node, edge, and atom an Edict-authored `ReplaceRange` reads and writes, and +which guarantees about past versions come from Echo rather than from the rope. + +## Current Truth + +Schema 1 (DL-0158, `native/jedit-echo-host/src/records.rs`): + +- Seven fact types (Buffer, Blob, Leaf, Branch, Head, Rewrite, Diff), each a + node whose alpha atom is compact field-ordered UTF-8 JSON. +- Child links are node ids inside that JSON. The graph has no edges. +- Leaves reference a byte range inside a separate Blob. +- Per-node metrics include UTF-16 length, which only the native rope reads. +- `BufferFact` is the only mutable node; it names the canonical head by id. + +Echo facts that constrain the choice (Echo main `9b3b9396`): + +- The state root walks outgoing edges from the worldline root. Nodes reachable + only through ids inside atom bytes are excluded from it + (`crates/warp-core/src/snapshot.rs`, `worldline_state.rs`). +- Echo's attachment law forbids hiding structural dependencies in payload bytes + (`crates/warp-core/src/attachment.rs`; `docs/invariants/warp-two-plane-law.md`). +- Edge ids are caller-chosen 32 bytes; a node may have many incoming edges. +- Nothing is garbage-collected; reachability decides only what the state root + commits. + +So schema 1's current rope is itself invisible to the state root, and Edict +would have to parse JSON to follow a child. + +## Problem + +Jim's rope must be authored in Edict and realized by generic Echo machinery. +That needs a representation whose structure Echo can see, hash, and retain; +whose bytes have one canonical spelling; and whose identity is honestly related +to the file it came from. + +## Scope + +- Fact types, codec, identity law, edge types, and metrics for schema 2. +- The head-to-file anchor. +- Which generic Echo and Edict capabilities this representation requires. + +## Non-Goals + +- Migrating schema 1 buffers. A witnessed migration operation is follow-on work. +- Save/export. The export crossing is designed separately; #350 covers reopen. +- Checkpoints, rewrites, diffs, and anchors beyond the import anchor. +- Any change to Echo or Edict. This document names their gaps only. + +## Data / State Model + +Facts (alpha atoms, canonical CBOR v1 via `echo-edict-canonical`): + +| Node | Atom fields | Mutable | +| --- | --- | --- | +| `Buffer` | `bufferKey`, `version: U64` | yes: `version` and its `canonicalHead` edge | +| `Head` | `byteLength: U64`, `lineCount: U64`, `sequence: U64` | no | +| `Branch` | `byteLength: U64`, `lineBreaks: U64`, `height: U8` | no | +| `Leaf` | `bytes: Bytes`, `lineBreaks: U64` | no | +| `Import` | `fileCoordinate`, `hostDigest: Bytes` | no | +| `Export` | `fileCoordinate`, `logicalDigest: Bytes`, `hostDigest: Bytes`, `exportEvent: Bytes` | no | + +Edges (no payload; one edge per source node and type): + +| Edge type | From → to | Meaning | +| --- | --- | --- | +| `jedit.text.canonicalHead` | Buffer → Head | current head; retargeted by each edit | +| `jedit.text.root` | Head → Branch or Leaf | the head's tree; absent for empty text | +| `jedit.text.anchor` | Head → Import | the imported bytes this head's lineage descends from (provenance only) | +| `jedit.text.lastExport` | Buffer → Export | the last witnessed write of this buffer to its file; retargeted by each save | +| `jedit.text.left`, `jedit.text.right` | Branch → Branch or Leaf | ordered children | + +Identity law: + +- Immutable node id: `H("jedit.text.node.v2", typeId, atomBytes, childIds...)` + with children in edge-type order. Equal subtrees have equal ids. +- Edge id: `H("jedit.text.edge.v2", fromNodeId, edgeTypeId)`. This makes + "one edge per source and type" hold by construction, and retargeting the + canonical head an edge replacement rather than a new edge. +- Buffer id: `H("jedit.text.buffer.v2", bufferKey)`, as in schema 1. +- `H` is the domain-separated hash Echo exposes to Edict; which hash that is + remains an open question below. + +Rope law (unchanged from schema 1 except where noted): + +- Leaves hold at most 4096 bytes and end on a UTF-8 boundary. +- Branches are binary and AVL-balanced by `height`. +- Edits path-copy: only nodes on the affected paths and the new head are new. + Nothing is deleted. +- Leaves hold their bytes inline. Schema 1's Blob indirection is dropped; + content addressing already deduplicates equal leaves. + +Coordinate contract: + +- Byte offsets into the UTF-8 text are the only authoritative coordinates. + Every operation takes and returns byte offsets. +- UTF-16 code-unit offsets matter for interoperability (language servers, + browser selection, external editing protocols), even though no Jim code reads + them today. Whether they are derived on demand, cached in readings, or + retained as a per-node witnessed metric is an open decision (see Follow-On + Debt). Until it is made, schema 2 does not store them, and nothing may treat + their absence as a decision that they are unneeded. + +History, current state, and retained material are three different things: + +| | Owner | What it guarantees | +| --- | --- | --- | +| Causal history | Echo ticks and receipts | what happened, in which causal context, with which outcome | +| Current state | this graph | the Buffer, its canonical Head, and the nodes reachable from that Head | +| Retained material | Echo retention and replay | which past states can be reconstructed, from checkpoints or replay inputs | + +The graph keeps no edge from a head to the head it replaced. After an edit, +the state root covers the current rope only. Superseded nodes leave the +reachable graph. Whether their bytes remain available is Echo's retention +policy; a tick witnessing a transition does not by itself promise that the +bytes needed to reconstruct the earlier state are still retained. + +Undo and redo are forward operations: Jim proposes a new edit whose target +state derives from a past witnessed state, subject to the evidence Echo still +retains and to admission. Nothing moves history backward. + +Head-to-file identity (anchored refinement). Three facts are kept apart: + +| Fact | Where | Claims | Never claims | +| --- | --- | --- | --- | +| Import provenance | `Import` node, `anchor` edge | these contents descend from the bytes imported from this file, with this host digest | that the rope still matches the file | +| Current logical content | computed from the current rope | the bytes Jim represents now | anything about the file | +| Host synchronization | `Export` node, Buffer `lastExport` edge | these exact bytes were written to this file, with this resulting host digest | that the file is unchanged since | + +- Importing a file creates an `Import` node and anchors the import head to it. + Every edit copies the `anchor` edge to the new head. The anchor is + provenance only; after an unsaved edit it says nothing about the file. +- The current logical digest is computed over the rope's bytes when a crossing + needs it (save, reopen, reconciliation), not on every edit, so edits stay + path-copies. The root node id is not that digest: it depends on tree shape. +- An `Export` is evidence of one crossing: the file, the logical digest of the + bytes written, the resulting host digest, and `exportEvent`, the identity of + the causal event that witnessed it. It names the exported head only through + that event and the logical digest; there is no edge to the head, so a save + does not keep a historical rope reachable. A pinned saved snapshot, if one is + ever wanted, is an explicit retention lease with its own lifetime. +- The `Export` reachable through `lastExport` witnesses the last successful + export. It is never file authority: the filesystem's current bytes are, and + every crossing re-observes them. +- Save is a crossing to a foreign system, so its steps stay separate + (`docs/jim-component-ownership.md`, `ExportIntent` and `ExportObserved`): + 1. **Export intent.** An admitted Jim operation records the head to write, + its logical digest, the expected prior host digest (the last export's, + or the import's if never exported), and an occurrence key. + 2. **Host write.** A host effector writes the bytes. Its own concurrency + protocol decides how close it gets to compare-and-write; see below. + 3. **Observation.** The effector reads back the resulting host digest. That + reading enters Echo as witnessed ingress. + 4. **Export outcome.** An admitted Jim operation records the `Export` and + retargets `lastExport` only when the observed digest equals the intended + bytes' digest. Any other observation is a typed conflict that needs an + explicit reconciliation decision. + 5. **Recovery.** An intent without an outcome is resolved by re-observing + the file under the same occurrence key: the intended digest means the + write happened; the expected prior digest means it did not and may be + retried under the same key; anything else is an external change and a + conflict. +- What this does and does not guarantee: comparing digests before writing + detects most external modifications, but a writer that changes the file + between that check and the write is not prevented by it. Echo's atomic + commit does not make the host write atomic with it. Preventing that race + needs a host-side concurrency protocol (an exclusive lock, or an atomic + compare-and-replace the filesystem actually provides). Until one is chosen, + the claim is detection after the fact, and step 3's observation is what + makes it detectable. +- Reopening compares the file's current host digest with the last exported + digest, or the import digest if the buffer was never exported. A mismatch + means the file changed outside Jim: a typed obstruction or an explicit, + witnessed external-edit transition, never silent reuse (#350). +- The `Export` node and `lastExport` edge are part of schema 2; the save + operation itself is designed separately. + +### External file reconciliation + +The filesystem is another authority, not an extension of Jim's memory. Another +process (an editor, `git checkout`, a formatter, a sync client) can write the +file while Jim holds a buffer for it. That is an ordinary case of two +authorities evolving independently, so it is part of the file model, not an +edge case of save. + +This is causal transport, not a new mechanism, and AIΩN Paper VII ("WARP: +Optics, Holograms, and Worldlines over Shared Causal History") already gives +its shape: "Distribution changes the slice boundary; it does not change the +downstream law." Jim observes a transported claim, takes part in constructing +a comparable braid, and authors the law under which that braid may be lowered. +The filesystem testifies; it does not edit Jim's history: + +- **Transport precedes judgment** (Paper VII §4.3). An observed file version + must be re-expressed at Jim's receiving frontier before it can be judged. B + is that comparable basis. The adapter establishes only the basis it can + actually support; it cannot manufacture ancestry the external writer never + supplied. +- **A braid is not a merge** (Definition 2.4, Remark 2.6). Observing (holding + the claim), braiding (presenting L and H over B), judging, and admitting are + separate acts. Under Jim's law a divergence may lawfully stay `Plural` + (§4.2) until a settlement is chosen. +- **The optic** (Definition 3.1, Ψ = (Ω, χ, Ï�, Π, Λ)) is Jim's: the slice χ is + the smallest lawful comparison closure within the buffer's file site. A + whole-file comparison is acceptable at first, but it is not a requirement; + the optic is bounded. Ï� presents B, L, and H as comparable claims, Π is + Jim's Edict-authored admissibility law, and Λ is the retention contract that + decides whether B's bytes remain available for a merge. + +In Echo's current contracts: + +- A filesystem adapter turns a validated observation into ingress, following + Echo's [Continuum Transport](https://github.com/flyingrobots/echo/blob/main/docs/architecture/continuum-transport.md) + import law: the adapter forms an import proposal, and only an admitted import + Intent affects history. +- What arrives is held, judged, and applied as + [Participant History as a Braid](https://github.com/flyingrobots/echo/blob/main/docs/architecture/participant-history-as-a-braid.md) + describes. **Hold:** the observation is retained as evidence and staged; + no reading of the buffer changes. **Judge:** Jim, as the receiving + authority, compares B, L, and H under its own Edict-authored law, with + outcome Derived, Plural, Conflict, or Obstruction. **Apply:** only a + witnessed forward commit on an explicit basis changes the buffer. +- The evidence is the observation, not the external editor's history. Unless + the other writer takes part in the protocol, Jim knows only the bytes and + metadata seen at one crossing, and never fabricates the writer's edit + sequence. + +The filesystem-specific work stays at the adapter boundary: stable reads, path +identity, rename and replacement detection, permissions, and safe export. The +judging law is Jim-owned Edict; Echo supplies observation, admission, history, +and effects, never merge semantics. + +Three logical versions, compared by digest: + +| Version | Meaning | +| --- | --- | +| Base B | the file contents Jim last imported or exported successfully (the synchronization basis) | +| Local L | the current rope, including unsaved edits | +| Host H | the file contents in the latest validated observation | + +| Condition | Jim's behavior | +| --- | --- | +| H = B, L = B | nothing changed | +| H = B, L ≠ B | local edits only; ordinary save | +| H ≠ B, L = B | external change only; Jim may adopt H as a forward transition | +| H = L, H ≠ B | the same bytes on both sides; mark synchronized after validating the observation | +| H ≠ B, L ≠ B, H ≠ L | divergence; preserve both and require an explicit decision | + +Requirements: + +1. **Watchers are hints.** A watcher event, focus, refresh, reopen (#350), or + save only prompts an observation. Every decision uses a validated host + observation: the file re-read with a stable result. A file read that + changes during the read is an unstable observation and decides nothing. An + unobserved file is `Unknown`, never assumed unchanged. +2. **Observing is not adopting.** `ObserveExternalFileChange` is the admitted + import Intent for one observation. It records the file coordinate, B's + digest, the newly observed digest, and the evidence of the read, and admits + the observed bytes as a new `Import`. It changes no head; it is the Hold + step. +3. **Occurrence identity is the adapter's, and honest.** Each observation gets + a stable occurrence identity (Echo's Continuum occurrence identity at + ingress) and an explicit receiving context: buffer, file coordinate, and B. + Re-delivering the same occurrence is idempotent and returns the retained + outcome. Distinct observations stay distinct evidence, never collapsed. A + digest identifies observed content, not the event that produced it: two + external writes can leave identical bytes. Where the adapter can tell writes + apart (file identity, change tokens), it records that; where it cannot, it + records only distinct observations and does not invent distinct writes. +4. **External-only change.** When L = B, Jim may adopt H by a separate + admitted operation that creates a head anchored to the new `Import`. It is a + forward transition; the old head stays in causal history. Automatic adoption + is allowed only under a declared policy, and is still witnessed. +5. **Divergence preserves both sides.** When H ≠ B and L ≠ B and H ≠ L, Jim's + judgment is Conflict at the buffer, and nothing that depends on the file is + admitted until it is settled. Jim never resolves silently. The explicit + settlements are: + - **Reload from disk:** adopt H; keep L recoverable as a branch or + checkpoint while its material is retained. + - **Keep local:** keep editing L. This does not grant permission to + overwrite H; save stays obstructed by the divergence. + - **Overwrite:** a separate, explicit save whose expected prior digest is + H's, recorded as overwriting a known third-party change. + - **Reconcile:** build a new version from B, L, and H and submit it as a + forward edit. +6. **Reconciliation is a forward intent.** It never rewrites existing ticks. + Jim witnesses H as observed bytes; it does not invent the external editor's + edit sequence or causal history. +7. **Base material is required to promise a three-way merge.** A digest of B is + not enough. Jim offers Reconcile only when B's bytes are retained: a + retention lease on the last synchronized head while the buffer is open, or + Echo's retention otherwise. Without them, Reconcile is refused with a typed + `MergeBaseUnavailable`, and Reload, Keep local, and Overwrite remain. +8. **Distinguish what happened to the path.** A validated observation + classifies the change before any decision: + + | Observed | Classification | Initial support | + | --- | --- | --- | + | same file, new bytes | modification | supported | + | file replaced through a temporary file and rename (atomic save) | modification, if the result is an ordinary file | supported | + | path absent | deletion | divergence-style decision; no implicit save recreates it | + | different file identity at the path | replacement | refused as ambiguous; explicit decision required | + | path became a symlink, directory, or special file | not an ordinary file | refused | + | permissions forbid reading or writing | permission change | obstruction naming the permission | + | bytes changed during the read | unstable read | no decision; observe again | + + The first version supports ordinary files only and refuses ambiguous + crossings rather than pretending the filesystem offers compare-and-swap. +9. **Save revalidates.** Save observes H first and is obstructed unless H = B, + or the user chose Overwrite against exactly this H. A change between that + check and the write is caught by the save protocol's read-back (step 3) and + reported as a conflict, never as a successful export. The guarantee is + detection; prevention needs the host-side concurrency protocol (open + decision), and Jim reports when it cannot establish the guarantee. + +Scope of the first version: detect divergence, preserve both sides, and require +explicit resolution. Automatic three-way reconciliation proposals come later, +once the observation evidence and base retention contracts hold. Then Jim can +materialize B, L, and H, compute a deterministic three-way proposal, present +overlaps as a `Plural` outcome, and submit the accepted result through Echo. + +## Runtime / API Contract + +The authored `ReplaceRange` operation, in schema 2 terms: + +1. Read Buffer and its `canonicalHead`; require it equals the invocation basis. +2. Read the bounded closure of nodes the edit touches: both boundary paths and + the spines a join may descend. +3. Compute, purely, the new nodes and edges. +4. `ensure` each new immutable node and edge, including the new head's `root` + and copied `anchor` edges; replace the `canonicalHead` edge and bump + `Buffer.version`. All or nothing. No edge points from the new head to the + old one. + +Generic capabilities this needs, none of which exists today: + +| Need | Owner | Status on main | +| --- | --- | --- | +| Read outgoing edges by type (`edict_read`) | Echo | absent; reads alpha atoms only | +| Bounded closure read guided by a pure selector | Echo + Edict | absent | +| `ensure` (create, or require equal existing) | Echo + Edict | absent; create obstructs on existing | +| Multi-node, multi-edge atomic effects from evaluation | Echo | absent; see Echo bridge design | +| Edge create and replace effects | Echo + Edict | absent | +| Domain-separated hash in Edict source | Edict + Echo | absent | + +## Lower Modes + +Not applicable: this is a storage representation, not a user surface. + +## Accessibility Posture + +Not applicable. + +## Localization / Directionality Posture + +Text is stored as UTF-8 bytes without normalization. Line breaks count `\n` +only, as in schema 1. + +## Agent Inspectability / Explainability Posture + +Every relation in the current rope is a typed edge, so an agent can traverse it +without decoding application payloads. Past edits are explained from Echo's +causal history and receipts, not from rope topology. + +## Linked Invariants + +- Echo two-plane law: structure in the skeleton, not in payload bytes. +- History Over State ch. 21 and 42: a rope head is the workspace coordinate, + an anchored refinement of it, or the source of a witnessed crossing. +- DL-0158: codec or edge migration is a separately admitted operation. +- AIΩN Paper VII ("WARP: Optics, Holograms, and Worldlines over Shared Causal + History"), as an architectural foundation, not as evidence that anything + below is implemented: + - §3.3, commitment, folding, and revelation are separate: the graph commits + the current rope; what stays retained is the contract Λ, not rope topology. + - §4.2 and §4.3, braid plurality and transport before import: the external + file reconciliation contract above. + - §6.2, the authored hot-text optic: its `replaceRangeAsTick` surface declares + a `ropeRangeClosure` slice closure and updates only `canonicalHead`. The + draft's guided closure read and the single head retarget follow that shape. + - §8 lists app-authored optic compilation and export semantics at the + causal-medium boundary as open engineering seams. This document's + Edict-authored rope and save crossing are attempts at exactly those seams. + +## Design Alternatives Considered + +- **Child ids inside atoms (schema 1 shape).** Rejected: children fall outside + the state root, and the shape breaks Echo's two-plane law. +- **Edges plus duplicated child ids in atoms.** It would let today's + `edict_read` follow children without an edge read. Rejected: two sources of + truth for one relation, with nothing enforcing agreement. +- **Keep JSON atoms.** Rejected: forces Edict source to parse JSON + byte-by-byte (the #302 Buffer-decoder probe) and admits several spellings. +- **Keep Blob slices.** Rejected for schema 2: adds an indirection and a slice + read per leaf; content-addressed leaves already deduplicate. +- **Link each head to its basis head.** Rejected: it would make every version + of every buffer permanently reachable, so the state root and retention would + grow with editing history, and it duplicates the causal history Echo's ticks + and receipts already own. History is not state. +- **Drop UTF-16 coordinates.** Rejected as a decision: no current consumer is + not a reason to discard an interoperability coordinate. Left open instead. + +## Decision + +Adopt schema 2 as above for the Edict-authored rope, on review of this document +and the Echo evaluation-to-effect design. + +## Implementation Slices + +1. Publish `jedit.text.schema@2` (machine-readable, like schema 1). +2. Write a simple, deliberately inefficient Edict reference `ReplaceRange` + (semantic target), then the persistent rope (persistence target). +3. Build a schema 2 oracle by differential comparison: the reference and the + persistent rope must agree on logical text and outcomes, not physical roots. +4. Witnessed schema 1 → 2 migration. + +## Tests To Write First + +- Canonical codec vectors for every fact type, including rejection of + non-canonical encodings. +- Identity: equal subtrees produce equal ids; any atom or child change changes + the id. +- Reachability: after an edit, the state root covers exactly the current Buffer, + Head, Import, and rope; nodes only the superseded head used are unreachable. +- Reconstruction: a past state is rebuilt from Echo's checkpoints and replay, + and the test states which retention guarantee it relies on. +- Anchor: reopen with a changed host digest obstructs (#350). +- Each row of the B/L/H decision table, including H = L with H ≠ B. +- Observation without adoption: `ObserveExternalFileChange` changes no head. +- Occurrence idempotence: re-delivering one observation returns the retained + outcome; two observations of identical bytes stay two pieces of evidence and + are not reported as two distinct external writes. +- Barrier: while the buffer's divergence is an unsettled Conflict, an + operation that depends on the file is not admitted; unrelated work is. +- Divergence: save is obstructed under Keep local; Reload keeps L recoverable; + Overwrite records the overwritten H; Reconcile is a forward edit. +- Base gone: with B's bytes unretained, Reconcile refuses with + `MergeBaseUnavailable` and the other choices still work. +- Each path classification: atomic-save rename, deletion, replacement, + symlink, permission change, and an unstable read that decides nothing. +- Race: a file changed between the save's check and its write is reported as a + conflict at observation, never recorded as a successful export. +- Recovery: a crash between export intent and outcome resolves to written, + not written, or external change by re-observation. + +## Acceptance Criteria + +- Schema 2 declaration published with codec vectors. +- The draft authored source reads and writes only schema 2 propositions. +- Every needed generic capability has an owner issue. + +## Validation Plan + +Codec and identity vectors in this repository; reachability and atomicity +through the Echo bridge once it exists. + +## Playback / Witness + +None yet. This is a representation decision. + +## Risks + +- **State-root cost.** Echo recomputes the root by walking the whole reachable + graph on every commit, so an edit costs in proportion to the current rope, + not to its history. That is still more than the edit itself; an incremental + root is Echo's open state-root decision. Recorded; deferred. +- **Unreclaimed nodes.** Echo has no garbage collection today, so superseded + nodes stay in the store after they leave the reachable graph. Reclaiming them + is Echo's retention policy, not Jim's. +- **Patch size.** About `(depth + 1) × (node + atom + up to 2 edges)` operations + per edit, against Echo's 128 operations per tick. Depth stays near + `1.44 × log2(leaves)`; to be measured. +- **Hash choice.** The id hash must be one Edict and Echo both expose. + +## Follow-On Debt + +- Open: Jim's UTF-16 coordinate contract: derive on demand, cache in readings, + or retain as a witnessed per-node metric. Decide from the interoperability + surfaces Jim commits to (language server, external protocols), not from + today's consumers. +- Open: which hash Edict source exposes for identities. +- Open: the retention lease on the last synchronized head that Reconcile + requires (External file reconciliation, requirement 7): its owner, + lifetime, and release. +- Open: the host-side concurrency protocol for the export write. +- Settled by the anchor split: a reopen check compares host digests only, so + it never materializes the rope; the logical digest is computed at save. +- Open: Rewrite and Diff facts in schema 2. + +## Retrospective + +Not yet. diff --git a/edict/replace-range-probes/basis-identity/Dockerfile b/edict/replace-range-probes/basis-identity/Dockerfile new file mode 100644 index 00000000..89aa2b5b --- /dev/null +++ b/edict/replace-range-probes/basis-identity/Dockerfile @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: Apache-2.0 +# © James Ross Ω FLYING•ROBOTS +FROM rust:1.94.0-bookworm +WORKDIR /edict +RUN git init && git remote add origin https://github.com/flyingrobots/edict.git \ + && git fetch --depth=1 origin 3f81f759e921a69b04fe8cf8e62e62f8f3dc7b7e \ + && git archive FETCH_HEAD | tar -x +RUN cargo +1.94.0 build --locked -p edict-cli +WORKDIR /echo +RUN git init && git remote add origin https://github.com/flyingrobots/echo.git \ + && git fetch --depth=1 origin 49e9efb68001dfd78563d18bac9359a87671e431 \ + && git archive FETCH_HEAD schemas/edict-provider/package/v1 | tar -x +COPY edict/replace-range /application-source +COPY edict/replace-range-probes/basis-identity/ReplaceRange.edict /comparison-sources/ReplaceRange.edict +COPY edict/replace-range-probes/basis-identity/PayloadEquality.edict /comparison-sources/PayloadEquality.edict +COPY edict/replace-range-probes/basis-identity/build.sh /comparison-build.sh +CMD ["sh", "/comparison-build.sh"] diff --git a/edict/replace-range-probes/basis-identity/Dockerfile.dockerignore b/edict/replace-range-probes/basis-identity/Dockerfile.dockerignore new file mode 100644 index 00000000..faa5a665 --- /dev/null +++ b/edict/replace-range-probes/basis-identity/Dockerfile.dockerignore @@ -0,0 +1,4 @@ +**/.git +**/target +**/node_modules +**/.build diff --git a/edict/replace-range-probes/basis-identity/PayloadEquality.edict b/edict/replace-range-probes/basis-identity/PayloadEquality.edict new file mode 100644 index 00000000..d53e5032 --- /dev/null +++ b/edict/replace-range-probes/basis-identity/PayloadEquality.edict @@ -0,0 +1,21 @@ +package jedit.text.replace_range@1; + +use lawpack jedit.text@1 digest "sha256:95758c1605894672cc9069fde01bb8b6e11842b053102660c9cd4f4d6f34d64e" as text; + +type Input = { + basisPayload: text.ReplacementBytes, + observedPayload: text.ReplacementBytes, +}; + +type Comparison = { + samePayload: U32, +}; + +intent replaceRange(input: Input) returns Comparison + profile text.replaceRange + basis none + budget <= text.replaceRangeBudget +{ + let samePayload = if input.observedPayload == input.basisPayload then 1u32 else 0u32; + return { samePayload }; +} diff --git a/edict/replace-range-probes/basis-identity/README.md b/edict/replace-range-probes/basis-identity/README.md new file mode 100644 index 00000000..84dab882 --- /dev/null +++ b/edict/replace-range-probes/basis-identity/README.md @@ -0,0 +1,44 @@ +# Basis identity comparison witness + +These Jim-owned sources isolate byte equality required by ReplaceRange's +basis validation and content comparisons. They are conformance inputs for +[Echo #738](https://github.com/flyingrobots/echo/issues/738), not the completed +operation from [Jim #296](https://github.com/flyingrobots/jedit/issues/296). + +`ReplaceRange.edict` compares two `text.HeadId` values through their declared +32-byte representation. `PayloadEquality.edict` compares bounded variable +byte payloads, including empty values and unequal lengths, to exercise work +accounting. Both return an authored numeric branch result. An observed ID +supplied as input is **not** evidence of the graph's current head. Neither +source reads state, decodes a fact, grants authority, or admits an edit. + +## Build the exact packages + +From the repository root: + +```sh +docker build -f edict/replace-range-probes/basis-identity/Dockerfile \ + -t jim-byte-comparison . +docker run --name jim-byte-comparison-proof jim-byte-comparison +docker cp jim-byte-comparison-proof:/comparison-output +``` + +The COPY-based image builds the existing pinned compiler +`3f81f759e921a69b04fe8cf8e62e62f8f3dc7b7e` using Rust 1.94.0, fetches the +existing pinned provider `49e9efb68001dfd78563d18bac9359a87671e431`, and invokes +Edict's public JSONL application-build boundary. Each disposable application +copy retains the frozen application manifest and complete published lawpack; +only its source file changes. No host repository or Git directory is mounted. + +The success marker is `JIM_BYTE_COMPARISON_PACKAGES_BUILT`. Output contains +`head/` and `payload/`, each with the emitted executable package and its separate +accepted verification report. Echo's runtime tests must consume these exact +bytes, never construct a program from the schema or oracle. The frozen +`edict/replace-range/` application, runtime host, and producer locks are unchanged. + +The original evaluator at `8c725d699241a7e3adee482029031ff6bade25fa` refuses +byte equality as `UnsupportedProgram`. The Echo prerequisite adds bounded, +metered byte equality; it does not provide snapshot reads or make the full +ReplaceRange acceptance criteria complete. Generic fact reads, application-owned +codecs and rope semantics, admitted execution, independent oracle agreement, +Tick, receipts, WAL, and recovery remain required by #296. diff --git a/edict/replace-range-probes/basis-identity/ReplaceRange.edict b/edict/replace-range-probes/basis-identity/ReplaceRange.edict new file mode 100644 index 00000000..6fb7e6f2 --- /dev/null +++ b/edict/replace-range-probes/basis-identity/ReplaceRange.edict @@ -0,0 +1,21 @@ +package jedit.text.replace_range@1; + +use lawpack jedit.text@1 digest "sha256:95758c1605894672cc9069fde01bb8b6e11842b053102660c9cd4f4d6f34d64e" as text; + +type Input = { + basisHeadId: text.HeadId, + observedHeadId: text.HeadId, +}; + +type Comparison = { + sameHead: U32, +}; + +intent replaceRange(input: Input) returns Comparison + profile text.replaceRange + basis input.basisHeadId + budget <= text.replaceRangeBudget +{ + let sameHead = if input.observedHeadId == input.basisHeadId then 1u32 else 0u32; + return { sameHead }; +} diff --git a/edict/replace-range-probes/basis-identity/build.sh b/edict/replace-range-probes/basis-identity/build.sh new file mode 100644 index 00000000..39148e78 --- /dev/null +++ b/edict/replace-range-probes/basis-identity/build.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# SPDX-License-Identifier: Apache-2.0 +# © James Ross Ω FLYING•ROBOTS +set -eu +[ -f /.dockerenv ] || { echo 'Run in the COPY-based Docker image' >&2; exit 1; } +mkdir /comparison-output +for comparison in head payload; do + case "$comparison" in + head) source_file=ReplaceRange.edict ;; + payload) source_file=PayloadEquality.edict ;; + esac + application="/comparison-$comparison" + mkdir "$application" + cp -R /application-source/. "$application/" + cp "/comparison-sources/$source_file" "$application/src/ReplaceRange.edict" + mkdir -p "$application/.build" + cp -R /echo/schemas/edict-provider/package/v1 "$application/.build/echo-provider" + cd "$application" + printf '%s\n' '{"schema":"edict.compiler.settings/v1","type":"compilerSettings","operation":"build","application":"edict.application.json"}' | /edict/target/debug/edict + cp -R .build/application "/comparison-output/$comparison" +done +printf '%s\n' 'JIM_BYTE_COMPARISON_PACKAGES_BUILT' diff --git a/edict/replace-range-probes/buffer-decoder/.gitattributes b/edict/replace-range-probes/buffer-decoder/.gitattributes new file mode 100644 index 00000000..edea5c09 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/.gitattributes @@ -0,0 +1,2 @@ +# Preserve the original cleanup transcript, including its final blank line. +evidence/resource-stop/partial-toolchain-cleanup.txt whitespace=-blank-at-eof diff --git a/edict/replace-range-probes/buffer-decoder/Decimal.edict b/edict/replace-range-probes/buffer-decoder/Decimal.edict new file mode 100644 index 00000000..4eb03ae4 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/Decimal.edict @@ -0,0 +1,75 @@ +package jedit.text.replace_range@1; + +// Jim's JSON boundary codec. These are internal scanner values, not intent inputs. +// A later bounded scanner must obtain each token from the retained Buffer atom. +type JsonByte = Bytes; +type DecimalState = variant { Start, Zero, Digits(U64) }; +type DecimalStep = variant { More(DecimalState), End(U64), Invalid, Overflow }; +type DecimalDigit = variant { Digit(U64), NotDigit }; + +// An End result leaves the delimiter unconsumed for the enclosing JSON scanner. +// Whitespace terminates a number; canonical-byte policy belongs to that scanner. +fn isNumberDelimiter(token: JsonByte) -> Bool { + return token == b"," || token == b"]" || token == b"}" + || token == b" " || token == b"\t" || token == b"\r" || token == b"\n"; +} + +fn decimalDigit(token: JsonByte) -> DecimalDigit { + return if token == b"0" then DecimalDigit::Digit(0u64) + else if token == b"1" then DecimalDigit::Digit(1u64) + else if token == b"2" then DecimalDigit::Digit(2u64) + else if token == b"3" then DecimalDigit::Digit(3u64) + else if token == b"4" then DecimalDigit::Digit(4u64) + else if token == b"5" then DecimalDigit::Digit(5u64) + else if token == b"6" then DecimalDigit::Digit(6u64) + else if token == b"7" then DecimalDigit::Digit(7u64) + else if token == b"8" then DecimalDigit::Digit(8u64) + else if token == b"9" then DecimalDigit::Digit(9u64) + else DecimalDigit::NotDigit; +} + +fn appendScaled(scaled: U64, digit: U64, limit: U64) -> DecimalStep { + let sum = checkedAdd(scaled, digit); + return if isSome(sum) then + if unwrap(sum) <= limit then DecimalStep::More(DecimalState::Digits(unwrap(sum))) + else DecimalStep::Overflow + else DecimalStep::Overflow; +} + +fn appendDigit(value: U64, digit: U64, limit: U64) -> DecimalStep { + let decimalRadix = 10u64; + let product = checkedMul(value, decimalRadix); + return if isSome(product) then appendScaled(unwrap(product), digit, limit) + else DecimalStep::Overflow; +} + +fn startDecimal(token: JsonByte, limit: U64) -> DecimalStep { + return match decimalDigit(token) { + Digit(value) => if value > limit then DecimalStep::Overflow + else if value == 0u64 then DecimalStep::More(DecimalState::Zero) + else DecimalStep::More(DecimalState::Digits(value)), + NotDigit => DecimalStep::Invalid, + }; +} + +fn continueDecimal(value: U64, token: JsonByte, limit: U64) -> DecimalStep { + return if value == 0u64 then DecimalStep::Invalid + else if value > limit then DecimalStep::Overflow + else match decimalDigit(token) { + Digit(digit) => appendDigit(value, digit, limit), + NotDigit => if isNumberDelimiter(token) then DecimalStep::End(value) + else DecimalStep::Invalid, + }; +} + +// canonical_head_id members use limit 255; version uses 18446744073709551615. +// The enclosing scanner owns these schema limits and starts at Start. +// Empty token, sign, leading zero, fraction, exponent and non-ASCII byte refuse. +fn stepJsonUnsigned(state: DecimalState, token: JsonByte, limit: U64) -> DecimalStep { + return match state { + Start => startDecimal(token, limit), + Zero => if isNumberDelimiter(token) then DecimalStep::End(0u64) + else DecimalStep::Invalid, + Digits(value) => continueDecimal(value, token, limit), + }; +} diff --git a/edict/replace-range-probes/buffer-decoder/README.md b/edict/replace-range-probes/buffer-decoder/README.md new file mode 100644 index 00000000..8ef30107 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/README.md @@ -0,0 +1,72 @@ +# Buffer decoder: authored decimal transitions + +This is incomplete Jim-owned codec work for [#296](https://github.com/flyingrobots/jedit/issues/296), retained in draft [#302](https://github.com/flyingrobots/jedit/pull/302). The intended outcome remains decoding the actual retained Buffer atom and deriving its canonical Head and version before the ReplaceRange basis check. The frozen application and producer pins remain unchanged. + +[`Decimal.edict`](Decimal.edict) specifies an unsigned JSON-number transition for the Buffer codec: decimal digit recognition, no leading zeros, delimiters left unconsumed, checked multiplication/addition, and the schema's U8 or U64 limit. It accepts internal scanner state and a byte token. These are **not operation inputs or authoritative caller-supplied decoded fields**. The enclosing scanner must own the limit, obtain tokens from actual retained bytes, and start at `Start`. + +[`cases.json`](cases.json) contains handwritten literal expectations, including 255/256, U64 maximum, and both addition/multiplication overflow. They remain an unexecuted conformance specification. `End` stops before its delimiter; `More` at end-of-input is incomplete. Whitespace can terminate a number, but the enclosing scanner must decide its encoding policy. These transitions neither impose canonical Buffer bytes nor implement the whole JSON grammar. + +## Observed public compiler boundaries + +The [original result](evidence/original/public-build.json), assembled sources, raw JSONL streams, positive-control artifacts, compiler-source manifest, and failed wrapper evidence are preserved. The authored source is unchanged from that run, SHA-256 `9fc1b006c298866463ab83a28fcb1e54769b970970c571f11d0868d79edc6d87`. + +| Input | Actual public build result | +| --- | --- | +| Unchanged atom-read control | Exit 0; package and separate verification report, no diagnostics | +| Read control with one unused identity function declaration | Exit 2; `InvalidApplicationSource`, `ExpectedToken`, `expected type, enum, or intent declaration` at `fn`, bytes 151–153; no application artifacts | +| Read control with the authored decimal declarations | Exit 2; `InvalidApplicationSource`, `Lex`, `invalid string escape`, bytes 861–862 at the carriage-return escape; no application artifacts | + +These are distinct boundaries. The lexer processes the source before declaration parsing, so the decimal source stops at its `b"\r"` spelling; it did not reach the function-declaration diagnostic. The trivial function control independently establishes that missing parser production. Neither refusal establishes function-body typing, arithmetic, Option proofs, byte-literal support beyond the observed point, lowering, or evaluation. + +The original harness incorrectly expected `ApplicationCompilationFailed` for both negative controls. It wrote all three actual results and completed its input/source/binary integrity checks, then failed the `fn-control` assertion. The [guard log](evidence/original/guard.log), [result](evidence/original/guard.result.json), [launch contract](evidence/original/guard.launch.json), [lock receipt](evidence/original/git-locks-receipt.jsonl), and [original runner](evidence/original/run.py) retain this wrapper **exit 1**. No success marker was produced. Correcting the expectations does not turn that historical run green. + +The current runner distinguishes the observed diagnostic kinds and rejects changes to the authored source, read-control source, or provider file hashes. It also requires the exact historical compiler-source manifest and an explicitly pinned compiler binary. The corrected source reproduction described below passed. The original outputs remain evidence of the three compiler invocations inside a historically failed witness harness. + +The first corrected-run attempt stopped before compilation or any application-build invocation. Rust 1.95.0 was absent, and invoking it began an automatic toolchain download; the external resource guard stopped the attempt when accounted data exceeded the project limit. The [attempt log](evidence/resource-stop/guard.log) and [launch contract](evidence/resource-stop/guard.launch.json) are retained. The [controller observation](evidence/resource-stop/observer-record.json) records 4,325,788,505 data bytes against the 4,294,967,296-byte limit; it is explicitly observer-authored from the displayed exception, not raw controller stdout. The [cleanup transcript](evidence/resource-stop/partial-toolchain-cleanup.txt) and [subsequent usage](evidence/resource-stop/after-cleanup-usage.json) record removal of only the new partial toolchain/downloads. This resource stop is neither a compiler RED nor a corrected-harness result. + +## Corrected source reproduction + +The [corrected witness](evidence/reproduction196/public-build.json) passed with wrapper exit 0 and `JIM_BUFFER_DECIMAL_DISTINCT_SOURCE_BOUNDARIES_CONFIRMED`. Its [build/run log](evidence/reproduction196/guard.log), [launch contract](evidence/reproduction196/guard.launch.json), [guard result](evidence/reproduction196/guard.result.json), assembled sources, raw streams, and read-control artifacts are retained separately from the original failure. + +The exact same 449-file compiler source was rebuilt with the already installed Rust 1.96.0 (`ac68faa20c58cbccd01ee7208bf3b6e93a7d7f96`) in the reusable worker and stable target. The resulting CLI SHA-256 is `83c70b3fdbb42ac43f0967a0c559c0cc8b66599987774a40412bda4fbc028d36`; this explicit pin was passed to the runner. It reproduces the source boundaries with a different compiler binary, not the historical Rust 1.95.0 binary. + +All three assembled source hashes match the original run. The read-control package and report are byte-identical to the originals. The negative cases retain the same kinds and source spans, with raw stderr hashes differing because the diagnostic paths name the new work root. Source, binary, application, and provider integrity checks completed. The executed runner matches checked-in `run.py`, SHA-256 `0d6f644eeccd8acbd0841f7c5420bd0d5353a55948471d3ed13f24618d5e0868`. + +This is a successful reproduction of one public-build control and two expected source refusals. No decimal case, scanner, rope algorithm, evaluator, or broader Jim application suite ran in this replay. + +## Exact inputs and artifact identities + +The experiment used compiler commit `17397e2aad18a83ffc617d1afd628764501f49cd`, tree `bcfd3112cd8b3d4630738a88761860679b45714b`, rebuilt with Rust 1.95.0 in the existing guarded Docker worker. All 449 compiler-source files were checked against the [Git blob manifest](evidence/compiler-source.json) before and after the public builds. Its raw manifest SHA-256 is `625592ab9dd715349255bece0133378c64b3d4539fb50e437d116c2a4296f016`; the compiler binary SHA-256 is `e2700698829b03f437c66425ed9878b002ef7a34ac183a39bac4eaf6a758cc6d`. + +The separate read-capable provider is pinned by its complete file-hash map in the result. Its [manifest](evidence/provider-manifest.echo.json) has raw SHA-256 `5b38ae704a071b88aa0cc2f85020de41cb69e76d037afe3592a4d319e22587c8`. Lowerer and verifier component hashes are respectively `4b594a8165079f0a973741b9e27b468cf041f4ad53108fccae641dc35355bd2a` and `d0be4d283399aefc45d75b395b3568f9983521ca5543c9dfd23b9495758050ed`. This witness records those exact package bytes; it does not claim to reproduce their component builds or independently establish their source commit. + +The retained read-control [package](evidence/original/read-control/application/executable-operation-package.cbor) has SHA-256 `afd931700018312d6c0d1e249871313d2c21c0ece1ae41d1f17f2be7af9e5284`; its [report](evidence/original/read-control/application/verification-report.cbor) has SHA-256 `9114fdd983d456eb83f69969475f558b6e608be23520212a5db5f26bb095d04b`. These artifacts were produced only for the unchanged read control. No decoder package was emitted and no evaluator was invoked. + +## Source contract and composition obligation + +The source follows the documented direction for non-recursive, first-order pure `fn` declarations, byte literals, checked arithmetic, and guarded Option handling. The observed failures show that the executable compiler subset is narrower. The experiment uses Edict's public application build; it supplies no native decoder, invented intrinsic, or handwritten Core/Target IR. + +The public application format accepts one source module. The experiment inserts the exact helper declarations into the retained [control](control/src/ReplaceRange.edict) before its first type declaration. The unchanged operation does not call the helpers. The assembled sources are retained alongside their diagnostics. Merely accepting unused declarations would not prove executable functions or a decoder. + +[Edict #226](https://github.com/flyingrobots/edict/issues/226) owns the full source-function compiler and semantic-contract prerequisite. [Echo #752](https://github.com/flyingrobots/echo/issues/752) depends on it for generic function admission and execution in both pure and bounded-read programs. Their acceptance must exercise called bodies, evaluate arguments once, preserve lexical scope and conditional evaluation, and enforce bounded costs through compiler-produced packages and separate verification. These are outstanding obligations, not capabilities established by this declaration-only probe. Jim #296 continues to own the actual retained-byte scanner and complete rope operation. + +The next authored work must scan actual Buffer `FactBytes`: variable-length UTF-8 key and optional path, JSON escapes, exactly 32 decimal head bytes, and version. It must preserve fields needed for encoding and derive the basis from retained state. Immutable list-only statement loops currently provide no result-producing accumulator; bytes are not an iterable List, and no generic fold is implemented. A one-byte `slice` retains the source maximum and drops exact/minimum length, so the `JsonByte` input requires a justified narrowing path. Source aliases, variants, Option, and checked arithmetic also remain separate compiler/evaluator obligations. Function parsing alone cannot complete this scanner. + +Native references are [`BufferFact` and its codec](../../../native/jedit-echo-host/src/records.rs), [`plan_replace_with_reason`](../../../native/jedit-echo-host/src/rope/replace.rs), and the [frozen schema](../../../contracts/jedit/lawpacks/replace-range-v1/text-schema-v1.json). Native Buffer reads do not perform the retained Head's universal decode/re-encode/content-identity checks; preserve that distinction. NoOp must precede version/sequence overflow. Full replacement still requires pending intermediate split facts, canonical identities, write ordering, atomic settlement, all forty oracle cases, and recovery. + +## Reproduction + +Use the existing shared guarded Docker worker and stable Cargo target under workstation git-locks admission. Do not rebuild or start a worker merely to repeat this historical observation. The corrected runner reuses the portable public-build functions in `../leaf-slice/run.py`. Copy this probe, that helper, and the retained control into the accounted worker input tree. Supply the exact compiler-source and provider identities above. By default the runner requires the historical Rust 1.95.0 binary hash. If that binary is unavailable, a controlled rebuild of the same source with an already installed toolchain may supply its own explicit `--compiler-sha256` pin. Retain the build command, toolchain version, source checks, and actual binary hash; such a run reproduces the source boundary, not the historical compiler binary. A self-reported hash alone does not establish which source built a binary. Run inside the guarded lease: + +```sh +python3 "$PROBE_ROOT/run.py" \ + --compiler "$EDICT_BINARY" \ + --compiler-sha256 "$EDICT_BINARY_SHA256" \ + --compiler-source "$EDICT_SOURCE" \ + --compiler-manifest "$PROBE_ROOT/evidence/compiler-source.json" \ + --application-source "$PROBE_ROOT/control" \ + --provider-package "$PROVIDER_PACKAGE" \ + --work-root /tmp/echo-726-runtime/jim-buffer-decoder-reproduction +``` + +The work root must be absent. The runner validates input hashes, records separate case outcomes, and expects `JIM_BUFFER_DECIMAL_DISTINCT_SOURCE_BOUNDARIES_CONFIRMED` only after all assertions pass. That marker describes successful reproduction of compiler refusals, never a working decoder. The external guard must enforce the project build/data/log budgets and stop the owned process group on timeout or monitoring failure; the runner's per-process timeout is not a disk quota. Older probe Dockerfiles that bake build output into images are historical recipes. diff --git a/edict/replace-range-probes/buffer-decoder/cases.json b/edict/replace-range-probes/buffer-decoder/cases.json new file mode 100644 index 00000000..06a337a0 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/cases.json @@ -0,0 +1,34 @@ +{ + "status": "Handwritten conformance specification; not executed", + "procedure": "Start at DecimalState::Start. Feed each listed byte in order to stepJsonUnsigned with the stated schema limit. Continue only through More. Stop at the first End, Invalid or Overflow. End leaves its delimiter unconsumed. A trailing More means an incomplete number, not successful decoding.", + "cases": [ + {"name":"zero-array-member","bytesHex":"302c","limit":"255","expected":{"kind":"End","value":"0","consumedDigits":1}}, + {"name":"zero-version","bytesHex":"307d","limit":"18446744073709551615","expected":{"kind":"End","value":"0","consumedDigits":1}}, + {"name":"u8-max","bytesHex":"3235355d","limit":"255","expected":{"kind":"End","value":"255","consumedDigits":3}}, + {"name":"u8-overflow","bytesHex":"3235365d","limit":"255","expected":{"kind":"Overflow","atByte":2}}, + {"name":"u64-max","bytesHex":"31383434363734343037333730393535313631357d","limit":"18446744073709551615","expected":{"kind":"End","value":"18446744073709551615","consumedDigits":20}}, + {"name":"u64-add-overflow","bytesHex":"31383434363734343037333730393535313631367d","limit":"18446744073709551615","expected":{"kind":"Overflow","atByte":19}}, + {"name":"u64-multiply-overflow","bytesHex":"39393939393939393939393939393939393939397d","limit":"18446744073709551615","expected":{"kind":"Overflow","atByte":19}}, + {"name":"leading-zero","bytesHex":"30302c","limit":"255","expected":{"kind":"Invalid","atByte":1}}, + {"name":"zero-followed-by-digit","bytesHex":"30317d","limit":"18446744073709551615","expected":{"kind":"Invalid","atByte":1}}, + {"name":"negative","bytesHex":"2d315d","limit":"255","expected":{"kind":"Invalid","atByte":0}}, + {"name":"plus-sign","bytesHex":"2b315d","limit":"255","expected":{"kind":"Invalid","atByte":0}}, + {"name":"fraction","bytesHex":"312e305d","limit":"255","expected":{"kind":"Invalid","atByte":1}}, + {"name":"exponent","bytesHex":"3165325d","limit":"255","expected":{"kind":"Invalid","atByte":1}}, + {"name":"missing-number","bytesHex":"5d","limit":"255","expected":{"kind":"Invalid","atByte":0}}, + {"name":"raw-non-ascii","bytesHex":"ff5d","limit":"255","expected":{"kind":"Invalid","atByte":0}}, + {"name":"quote-is-not-number-delimiter","bytesHex":"3122","limit":"255","expected":{"kind":"Invalid","atByte":1}}, + {"name":"space-terminator","bytesHex":"32353520","limit":"255","expected":{"kind":"End","value":"255","consumedDigits":3}}, + {"name":"tab-terminator","bytesHex":"3109","limit":"255","expected":{"kind":"End","value":"1","consumedDigits":1}}, + {"name":"carriage-return-terminator","bytesHex":"310d","limit":"255","expected":{"kind":"End","value":"1","consumedDigits":1}}, + {"name":"line-feed-terminator","bytesHex":"310a","limit":"255","expected":{"kind":"End","value":"1","consumedDigits":1}}, + {"name":"incomplete-nonzero","bytesHex":"3130","limit":"255","expected":{"kind":"More","state":"Digits","value":"10"}}, + {"name":"incomplete-zero","bytesHex":"30","limit":"255","expected":{"kind":"More","state":"Zero"}}, + {"name":"empty-stream","bytesHex":"","limit":"255","expected":{"kind":"Unstarted"}} + ], + "singleStepCases": [ + {"name":"empty-token","state":"Start","tokenHex":"","limit":"255","expected":{"kind":"Invalid"}}, + {"name":"invalid-zero-digits-state","state":{"Digits":"0"},"tokenHex":"2c","limit":"255","expected":{"kind":"Invalid"}}, + {"name":"over-limit-state","state":{"Digits":"256"},"tokenHex":"2c","limit":"255","expected":{"kind":"Overflow"}} + ] +} diff --git a/edict/replace-range-probes/buffer-decoder/control/edict.application.json b/edict/replace-range-probes/buffer-decoder/control/edict.application.json new file mode 100644 index 00000000..9bad89fb --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/control/edict.application.json @@ -0,0 +1,20 @@ +{ + "schema": "edict.application/v1", + "coordinate": "jedit.text.replace_range@1", + "sources": [ + "src/ReplaceRange.edict" + ], + "lawpacks": [ + { + "manifest": "vendor/atom-read/manifest.cbor", + "exports": "vendor/atom-read/exports.cbor", + "adapter": "vendor/atom-read/adapter.cbor", + "targetConfiguration": "vendor/atom-read/echo-operation-configuration.cbor" + } + ], + "target": { + "profile": "echo.dpo@1", + "providerPackage": ".build/echo-provider" + }, + "outputDirectory": ".build/application" +} diff --git a/edict/replace-range-probes/buffer-decoder/control/src/ReplaceRange.edict b/edict/replace-range-probes/buffer-decoder/control/src/ReplaceRange.edict new file mode 100644 index 00000000..1031dfc9 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/control/src/ReplaceRange.edict @@ -0,0 +1,18 @@ +package jedit.text.replace_range@1; +use lawpack jedit.text@1 digest "sha256:2ea164293719d2b03231c4904eb75ddcdf55fd29cc31f4fc5a5319d9ae5e60e7" as text; +type Input = { address: text.FactAddress, expected: text.FactBytes }; +intent replaceRange(input: Input) returns text.FactBytes + profile text.replaceRange + basis input.address.nodeId + budget <= text.replaceRangeBudget +{ + let actual: text.FactBytes = text.readFact(input.address) + else { + missing(address) => text.FactMissing, + typeMismatch(address) => text.FactMalformed, + notAtom(address) => text.FactMalformed, + tooLarge(address) => text.FactMalformed, + }; + require actual == input.expected else text.BasisNotCanonical; + return actual; +} diff --git a/edict/replace-range-probes/buffer-decoder/control/vendor/.atom-read.edict-lawpack-build.lock b/edict/replace-range-probes/buffer-decoder/control/vendor/.atom-read.edict-lawpack-build.lock new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/adapter.cbor b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/adapter.cbor new file mode 100644 index 00000000..5353b583 Binary files /dev/null and b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/adapter.cbor differ diff --git a/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/adapter.sha256 b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/adapter.sha256 new file mode 100644 index 00000000..fe16ec8c --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/adapter.sha256 @@ -0,0 +1 @@ +sha256:bcb72bfbc93276506d8a9175263ca1742d78d5125cd3fdc49e0da7f474473c85 diff --git a/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/echo-operation-configuration.cbor b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/echo-operation-configuration.cbor new file mode 100644 index 00000000..4b130f95 Binary files /dev/null and b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/echo-operation-configuration.cbor differ diff --git a/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/echo-operation-configuration.sha256 b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/echo-operation-configuration.sha256 new file mode 100644 index 00000000..8b8e8c0b --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/echo-operation-configuration.sha256 @@ -0,0 +1 @@ +sha256:56921f7058a4b68027c3e5415150b2c6ef4388b000c2ea649cd7a14d3f565f7e diff --git a/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/edict.lawpack-output.json b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/edict.lawpack-output.json new file mode 100644 index 00000000..2f0be4de --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/edict.lawpack-output.json @@ -0,0 +1,67 @@ +{ + "schema": "edict.lawpack-output/v1", + "lawpackId": "jedit.text", + "lawpackVersion": "1", + "artifacts": [ + { + "path": "manifest.cbor", + "kind": "manifest", + "coordinate": "edict.lawpack/v1", + "digest": "sha256:2ea164293719d2b03231c4904eb75ddcdf55fd29cc31f4fc5a5319d9ae5e60e7" + }, + { + "path": "manifest.sha256", + "kind": "manifestDigest", + "coordinate": "edict.lawpack/v1", + "digest": "sha256:2ea164293719d2b03231c4904eb75ddcdf55fd29cc31f4fc5a5319d9ae5e60e7" + }, + { + "path": "exports.cbor", + "kind": "exports", + "coordinate": "jedit.text.exports/v1", + "digest": "sha256:ba805443d67297ea5cbe9775049a461eafda46af27aeb4a5712d2c6289b62f21" + }, + { + "path": "exports.sha256", + "kind": "exportsDigest", + "coordinate": "jedit.text.exports/v1", + "digest": "sha256:ba805443d67297ea5cbe9775049a461eafda46af27aeb4a5712d2c6289b62f21" + }, + { + "path": "echo-operation-configuration.cbor", + "kind": "localResource", + "coordinate": "echo.operation-lowering-configuration/v1", + "digest": "sha256:56921f7058a4b68027c3e5415150b2c6ef4388b000c2ea649cd7a14d3f565f7e" + }, + { + "path": "echo-operation-configuration.sha256", + "kind": "localResourceDigest", + "coordinate": "echo.operation-lowering-configuration/v1", + "digest": "sha256:56921f7058a4b68027c3e5415150b2c6ef4388b000c2ea649cd7a14d3f565f7e" + }, + { + "path": "verifier-rules.cbor", + "kind": "localResource", + "coordinate": "jedit.text.verifier-rules/v1", + "digest": "sha256:364fb4ff98ae64fcd8d793aae3d7cb133ff8a1ce661330cea47688b13a0a823f" + }, + { + "path": "verifier-rules.sha256", + "kind": "localResourceDigest", + "coordinate": "jedit.text.verifier-rules/v1", + "digest": "sha256:364fb4ff98ae64fcd8d793aae3d7cb133ff8a1ce661330cea47688b13a0a823f" + }, + { + "path": "adapter.cbor", + "kind": "adapter", + "coordinate": "jedit.text.echo-adapter/v1", + "digest": "sha256:bcb72bfbc93276506d8a9175263ca1742d78d5125cd3fdc49e0da7f474473c85" + }, + { + "path": "adapter.sha256", + "kind": "adapterDigest", + "coordinate": "jedit.text.echo-adapter/v1", + "digest": "sha256:bcb72bfbc93276506d8a9175263ca1742d78d5125cd3fdc49e0da7f474473c85" + } + ] +} diff --git a/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/exports.cbor b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/exports.cbor new file mode 100644 index 00000000..c8a2eebc --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/exports.cbor @@ -0,0 +1 @@ +¦etypesƒ¢jcoordinatexjedit.text@1.FactAddressjdefinitionxLRecord,typeId:Bytes,warpId:Bytes>¢jcoordinatevjedit.text@1.FactBytesjdefinitionrBytes¢jcoordinatexjedit.text@1.ObstructionDetailjdefinitionx"Stringgeffects�ªiinputTypexjedit.text@1.FactAddressjcoordinateujedit.text@1.readFactjoutputTypevjedit.text@1.FactByteslguardSupportõncostObligationxjedit.text@1.replaceRangeBudgetneffectFailures¤gmissing¢kpayloadTypexjedit.text@1.FactAddressnauthorityClassmresourceFaultgnotAtom¢kpayloadTypexjedit.text@1.FactAddressnauthorityClassnintegrityFaulthtooLarge¢kpayloadTypexjedit.text@1.FactAddressnauthorityClassnintegrityFaultltypeMismatch¢kpayloadTypexjedit.text@1.FactAddressnauthorityClassnintegrityFaultneffectKindHintdreadnexecutionClassgruntimentypeParameters€sfootprintObligationx"jedit.text@1.replaceRangeFootprinticonstants€lobstructionsƒ£jcoordinatexjedit.text@1.BasisNotCanonicalmpayloadSchemaxjedit.text@1.ObstructionDetailnauthorityClassndomainMappable£jcoordinatexjedit.text@1.FactMissingmpayloadSchemaxjedit.text@1.ObstructionDetailnauthorityClassmresourceFault£jcoordinatexjedit.text@1.FactMalformedmpayloadSchemaxjedit.text@1.ObstructionDetailnauthorityClassnintegrityFaultmpureFunctions€qoperationProfiles¡xjedit.text@1.replaceRange¢mopticTemplate¦iopticKindsaffectReintegrationlboundaryKindfaffectmbasisTemplatexjedit.text@1.exactHeadBasismsupportPolicyxjedit.text@1.basisBoundSupportolossDispositionujedit.text@1.losslesssapertureRequirement¢crefx"jedit.text@1.replaceRangeFootprintdkindxabstractFootprintObligationoeffectPredicatex jedit.text@1.replaceRangeEffects \ No newline at end of file diff --git a/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/exports.sha256 b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/exports.sha256 new file mode 100644 index 00000000..9a176821 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/exports.sha256 @@ -0,0 +1 @@ +sha256:ba805443d67297ea5cbe9775049a461eafda46af27aeb4a5712d2c6289b62f21 diff --git a/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/manifest.cbor b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/manifest.cbor new file mode 100644 index 00000000..40a95127 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/manifest.cbor @@ -0,0 +1,2 @@ +ªbidjjedit.textgexports¢bidujedit.text.exports/v1fdigest‚fsha256X º€TCÖr—ê\¾—ušF¯ÚF¯'®´¥q-,b‰¶/!gversiona1hverifier¢eclasskdeclarativegruleset¢bidxjedit.text.verifier-rules/v1fdigest‚fsha256X 6O´ÿ˜®düØ×“ªã×Ë?ø¡Îf0Τvˆ±: +‚?japiVersionpedict.lawpack/v1ldependencies€mcompatibility¢bidxjedit.text.compatibility/v1fdigest‚fsha256X *߃÷˜ _RcjÖL¤Qxó:ŽÆc‡OŠaHL”^0RntargetAdapters�£gadapter¢bidxjedit.text.echo-adapter/v1fdigest‚fsha256X ¼·+ûÉ2vPmŠ‘u&<¡t-xÕ\ÓýÄž §ôtG<…pacceptedTargetIr¢bidoecho.span-ir/v2fdigest‚fsha256X >€]Åè1è‹ïìLÔžÀ,9…‹o9�ÚŠsµ `†®9uacceptedTargetProfile¢bidjecho.dpo@1fdigest‚fsha256X .$”ìõæ¢Ù õû…@ˆ%Ó”v_­AHLAc—É ûoacceptedCoreAbi�medict.core/v1xconformanceFixtureCorpus¢bidx jedit.text.ReplaceRange.oracle@1fdigest‚fsha256X ¹´p}Õàx—Ëç¯6؉(@‡æ¯]}ˆ¨ÖM» \ No newline at end of file diff --git a/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/manifest.sha256 b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/manifest.sha256 new file mode 100644 index 00000000..bc42c481 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/manifest.sha256 @@ -0,0 +1 @@ +sha256:2ea164293719d2b03231c4904eb75ddcdf55fd29cc31f4fc5a5319d9ae5e60e7 diff --git a/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/verifier-rules.cbor b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/verifier-rules.cbor new file mode 100644 index 00000000..ef8836e5 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/verifier-rules.cbor @@ -0,0 +1 @@ +¤fschemasjedit.text.schema@1lschemaDigestxGsha256:f49b0ff6c9c7010d3a72b46734d47832853f496739a083edc41dddec3431bac7oruntimeOntologyugeneric-bounded-graphworacleIsExecutableInputô \ No newline at end of file diff --git a/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/verifier-rules.sha256 b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/verifier-rules.sha256 new file mode 100644 index 00000000..f8f7a387 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/control/vendor/atom-read/verifier-rules.sha256 @@ -0,0 +1 @@ +sha256:364fb4ff98ae64fcd8d793aae3d7cb133ff8a1ce661330cea47688b13a0a823f diff --git a/edict/replace-range-probes/buffer-decoder/evidence/compiler-source.json b/edict/replace-range-probes/buffer-decoder/evidence/compiler-source.json new file mode 100644 index 00000000..e39610bf --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/compiler-source.json @@ -0,0 +1,1802 @@ +{ + "commit": "17397e2aad18a83ffc617d1afd628764501f49cd", + "tree": "bcfd3112cd8b3d4630738a88761860679b45714b", + "files": [ + { + "path": ".cargo/config.toml", + "gitBlob": "5592118f6c54bf8b53b16848e04ece896dd56384" + }, + { + "path": ".github/workflows/auto-release-tag.yml", + "gitBlob": "87404ceb685191afd496c93494b0bc61e2a59504" + }, + { + "path": ".github/workflows/ci.yml", + "gitBlob": "c6c6a17f59b6b96db88e3d4b2775bc64b7fe01f3" + }, + { + "path": ".github/workflows/release.yml", + "gitBlob": "2c612fc786998bfa5b11e76ae1185114a7cc535f" + }, + { + "path": ".gitignore", + "gitBlob": "30d7faf0fc8b7f010f99280302d4ed269d5da9ba" + }, + { + "path": ".markdownlint.json", + "gitBlob": "f3ec2c8dc2fbacc425154a2baedec50c7474aefa" + }, + { + "path": "AGENTS.md", + "gitBlob": "0c48a5794454cf84e20640994a372316efde7bb5" + }, + { + "path": "ARCHITECTURE.md", + "gitBlob": "5b513dd25028092e7e75c8974f1d5f3cc31889ed" + }, + { + "path": "CHANGELOG.md", + "gitBlob": "cd40892f0f2ed2e5667c65e274f9a1ead1619990" + }, + { + "path": "CODE_OF_CONDUCT.md", + "gitBlob": "784cf2799bcf8d2a69db5f5781359ef7e18a05fc" + }, + { + "path": "CONTRIBUTING.md", + "gitBlob": "9676914060f734dc59eabd9075898dc8170d4d19" + }, + { + "path": "Cargo.lock", + "gitBlob": "bacb208de0583f182379af7b5e078d31b25e2ca5" + }, + { + "path": "Cargo.toml", + "gitBlob": "b2e7106eb78f79230c091492ef21b497bdc9ed19" + }, + { + "path": "EDICT.md", + "gitBlob": "35376134195082d506f0161ba7ecb97efa8b770a" + }, + { + "path": "LICENSE", + "gitBlob": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64" + }, + { + "path": "NOTICE", + "gitBlob": "c300687bdd9d931d1f257d291e1cb6ff9d7d3607" + }, + { + "path": "README.md", + "gitBlob": "0812ef9a0c4611bf655dfc67d2ecc3631af9a536" + }, + { + "path": "ROADMAP.md", + "gitBlob": "d0e0135780537afab1d1a3f53808b363b35a63f4" + }, + { + "path": "SECURITY.md", + "gitBlob": "0bcc4e7375442e1334405a2d046df316cee05cd5" + }, + { + "path": "crates/edict-cli/Cargo.toml", + "gitBlob": "e9d844553c395bd312f84e806eb5bac30c5c3a54" + }, + { + "path": "crates/edict-cli/src/application_build.rs", + "gitBlob": "9c56ae6b4dd4eef0b9fe6db40316e100b2ffa699" + }, + { + "path": "crates/edict-cli/src/lawpack_build.rs", + "gitBlob": "55e9579153f34a3d5b139141c9de6640808cd386" + }, + { + "path": "crates/edict-cli/src/lawpack_build_windows.rs", + "gitBlob": "f71d03b368ae83becc1608bbba11cd5f1afa4f07" + }, + { + "path": "crates/edict-cli/src/lib.rs", + "gitBlob": "60883af60cf4b441680952ecce7ef4fcbfeabb97" + }, + { + "path": "crates/edict-cli/src/main.rs", + "gitBlob": "0dd9776642c4090479322111e4164ee7049fb9d0" + }, + { + "path": "crates/edict-cli/tests/golden_cli.rs", + "gitBlob": "9897caad3bcc6fa8bb0f20a1d0e18032285b1fa7" + }, + { + "path": "crates/edict-cli/tests/jsonl_cli.rs", + "gitBlob": "9ed353ca27d073fc7da49d3800c81ba4c58edd5d" + }, + { + "path": "crates/edict-cli/tests/lawpack_authoring_cli.rs", + "gitBlob": "0a0c53baaedd0854d0c25bc591cb38db9c2c009b" + }, + { + "path": "crates/edict-provider-host-wasmtime/Cargo.toml", + "gitBlob": "ebeeb941f09012293d9923fe0e6039b2761b328e" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/conversion.rs", + "gitBlob": "62c3cd4a85eb156b8c9a405ef3ea4d8a09b80cc3" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/invocation.rs", + "gitBlob": "a4d6680d289094afebc0f1063abccf706f8149db" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/lib.rs", + "gitBlob": "353ea7394f265219ebdecad56a3070c9e7d2685c" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/limits.rs", + "gitBlob": "9e4d12c1b606d2b180f732db17bfbc78f8e26e3a" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/replay.rs", + "gitBlob": "b8fa7be7c7ee5039793dad4cd0fa6a4f14ce388e" + }, + { + "path": "crates/edict-provider-host-wasmtime/tests/invocation.rs", + "gitBlob": "7a59a3192852a80bc01221ebf3dd1c437bda9508" + }, + { + "path": "crates/edict-provider-host-wasmtime/tests/preflight.rs", + "gitBlob": "a295e7547b0294f0355a85d5b9b8d045c8fceefd" + }, + { + "path": "crates/edict-provider-schema/Cargo.toml", + "gitBlob": "0e74f58acdc054ecce192cb8341afeaddc40deb5" + }, + { + "path": "crates/edict-provider-schema/src/contract_pack.rs", + "gitBlob": "370480d9c606134dd08ee62ae29ef143941e2f54" + }, + { + "path": "crates/edict-provider-schema/src/lib.rs", + "gitBlob": "51f5bee8892c9fb2122cb20022edc4d414759ff7" + }, + { + "path": "crates/edict-provider-schema/src/recursive_dispatch.rs", + "gitBlob": "6d97565b96f941b359d16f7a1c201189968fbeff" + }, + { + "path": "crates/edict-provider-schema/src/schema_safety.rs", + "gitBlob": "a2f605f62a2bfedcb84b68e37db9ff84b1dc3b05" + }, + { + "path": "crates/edict-provider-schema/tests/authority_facts_abi.rs", + "gitBlob": "7dd4d0302805ceecffc2045cdb91e386f8e08517" + }, + { + "path": "crates/edict-provider-schema/tests/provider_contract_pack.rs", + "gitBlob": "a26be8054b39215048825dd8cae7e9bddcfe27c9" + }, + { + "path": "crates/edict-provider-schema/tests/registry.rs", + "gitBlob": "bdd13ec00e441aef9e67ba49f6592ecbc7dcb303" + }, + { + "path": "crates/edict-syntax/Cargo.toml", + "gitBlob": "f55bb23e528af78b1e97b52f9b72cbd876a44ba7" + }, + { + "path": "crates/edict-syntax/src/admission.rs", + "gitBlob": "471430dd13a617bac886fcd44afbf15263e7db3b" + }, + { + "path": "crates/edict-syntax/src/ast.rs", + "gitBlob": "2a5d208a53a82408f8a18d9a13ccb133ec6a7a2e" + }, + { + "path": "crates/edict-syntax/src/authority_facts.rs", + "gitBlob": "644de86d63983bdbfbf1279fdbf1dbdaecc151d5" + }, + { + "path": "crates/edict-syntax/src/canonical.rs", + "gitBlob": "6fb29d50ea4a55eb888a1b9600cdcb31713a6e20" + }, + { + "path": "crates/edict-syntax/src/compiler.rs", + "gitBlob": "d9661e2605f23f503a8fdf4471462cc0b9bad4c1" + }, + { + "path": "crates/edict-syntax/src/compiler/byte_concat.rs", + "gitBlob": "185d11c0ae20931cd2737774a34cac92b13d6712" + }, + { + "path": "crates/edict-syntax/src/compiler/byte_length.rs", + "gitBlob": "0d8d6291064415baee9253d9fe1e11ad87945773" + }, + { + "path": "crates/edict-syntax/src/compiler/byte_slice.rs", + "gitBlob": "84385fffdf4e38e21285e1fde252e9185a3a76fa" + }, + { + "path": "crates/edict-syntax/src/compiler/unsigned_subtraction.rs", + "gitBlob": "c2ef2deda74afb52e4346076a310df341556e1c8" + }, + { + "path": "crates/edict-syntax/src/contract_bundle.rs", + "gitBlob": "9a31645f0e30879d019787e29c21c82eebf58129" + }, + { + "path": "crates/edict-syntax/src/core_ir.rs", + "gitBlob": "4c6f350b325d13a27947687dd1f4114edf6d548d" + }, + { + "path": "crates/edict-syntax/src/highlight.rs", + "gitBlob": "28b3f7dcdfe8d4982bdcfb05759f769ccdbffc7f" + }, + { + "path": "crates/edict-syntax/src/lawpack.rs", + "gitBlob": "54f85bda48c960ad0b7bc316d332b379ab5b6ae0" + }, + { + "path": "crates/edict-syntax/src/lawpack_adapter.rs", + "gitBlob": "e425960e2437faa2f9eeb5d089ff507417d39586" + }, + { + "path": "crates/edict-syntax/src/lawpack_authoring.rs", + "gitBlob": "11ff578f458b8a4c8e4df75c0c616e37fa468d49" + }, + { + "path": "crates/edict-syntax/src/lib.rs", + "gitBlob": "7323475cc7f846e11c2d73f4c26a5e581b7e6157" + }, + { + "path": "crates/edict-syntax/src/lowerability.rs", + "gitBlob": "c6a1323fd6a79b0460b43aaf338956c3906a633e" + }, + { + "path": "crates/edict-syntax/src/parser.rs", + "gitBlob": "0b3650e3012e49023ccbb9cc9effe9b5b102f19d" + }, + { + "path": "crates/edict-syntax/src/provider.rs", + "gitBlob": "18fa661d880979c53dd335fb7e68d5445b638d4c" + }, + { + "path": "crates/edict-syntax/src/provider_invocation.rs", + "gitBlob": "2526168f0a6f2d1d9b6181b689ff43e203434122" + }, + { + "path": "crates/edict-syntax/src/provider_lowering.rs", + "gitBlob": "50a4e60b561127cb8c78e3f7c04c6bbaca068e52" + }, + { + "path": "crates/edict-syntax/src/result_projection.rs", + "gitBlob": "79ba246d4c58960fe368eaca4c7d135fe187832a" + }, + { + "path": "crates/edict-syntax/src/semantic.rs", + "gitBlob": "76bd133ef5859bf7722d1987613f7fd84836ab62" + }, + { + "path": "crates/edict-syntax/src/target_ir.rs", + "gitBlob": "9dd759a18ea3a171837baa50e88c67987c84da13" + }, + { + "path": "crates/edict-syntax/src/target_ir/byte_concat.rs", + "gitBlob": "bff3a35e1d3183813ffb1e69655934f65f2c9131" + }, + { + "path": "crates/edict-syntax/src/target_ir/byte_length.rs", + "gitBlob": "972e6ffa943bc7a7a943d76f0af42b342e3d2aac" + }, + { + "path": "crates/edict-syntax/src/target_ir/byte_slice.rs", + "gitBlob": "62a1c0b9e84a331bb17ab78090cce6d8eb8da486" + }, + { + "path": "crates/edict-syntax/src/target_ir/execution_order.rs", + "gitBlob": "e69a28805dc5e414a64afdaafee34161c217a044" + }, + { + "path": "crates/edict-syntax/src/target_ir/totality.rs", + "gitBlob": "a4fb9573d59e1a4bb9d7c250402c5b7e1da0a8c3" + }, + { + "path": "crates/edict-syntax/src/target_ir/unsigned_subtraction.rs", + "gitBlob": "b83522bfe9a2b506413b4d306f4bc49f8b053f36" + }, + { + "path": "crates/edict-syntax/src/target_profile.rs", + "gitBlob": "dd514f7380243e795f0655a78aecd06ee3fa2eda" + }, + { + "path": "crates/edict-syntax/src/target_profile_contract_resources.rs", + "gitBlob": "4efd22961c2fd7591440efd6087944ecaf21e991" + }, + { + "path": "crates/edict-syntax/src/token.rs", + "gitBlob": "2768586eea6d42d5df357c4cc62a011ee7f455de" + }, + { + "path": "crates/edict-syntax/tests/admission.rs", + "gitBlob": "57edbc320307c1d6daba85f03d8dc79558d7b849" + }, + { + "path": "crates/edict-syntax/tests/authority_facts.rs", + "gitBlob": "add9d272be6e8eb1cd6fdde2999a5fb452ecd852" + }, + { + "path": "crates/edict-syntax/tests/authority_facts_cbor.rs", + "gitBlob": "7359f047d9f731fee208efb5f69072b612d69547" + }, + { + "path": "crates/edict-syntax/tests/byte_concat.rs", + "gitBlob": "f013cade690112b266dd79b1e5405cc65c6f2d07" + }, + { + "path": "crates/edict-syntax/tests/byte_length.rs", + "gitBlob": "50945944e8c2223abcc6b1081322432bc540c017" + }, + { + "path": "crates/edict-syntax/tests/byte_slice.rs", + "gitBlob": "99aae98ac1637a95532cdd833463210bbaa5a5be" + }, + { + "path": "crates/edict-syntax/tests/canonical_encoding.rs", + "gitBlob": "e4c5d59a88f88193f522eb555359919f7034a264" + }, + { + "path": "crates/edict-syntax/tests/common/mod.rs", + "gitBlob": "89560bfacb3dab031485c2dfa30d7eb325966574" + }, + { + "path": "crates/edict-syntax/tests/compiler_spine.rs", + "gitBlob": "2237318cfc0d4209e8a629e45320e42a4b72dbef" + }, + { + "path": "crates/edict-syntax/tests/contract_bundle.rs", + "gitBlob": "e6a2948335a0efc86d8bbb2e9e2c3d634e53965a" + }, + { + "path": "crates/edict-syntax/tests/core_golden_fixtures.rs", + "gitBlob": "0e0e42d19b52dc0557902dad9e1b85f37edf53f8" + }, + { + "path": "crates/edict-syntax/tests/core_graph_depth.rs", + "gitBlob": "1d95462ad2426d29b5974e6bb56ab8c125a92837" + }, + { + "path": "crates/edict-syntax/tests/external_action_requests.rs", + "gitBlob": "20aac8c03325ea0cdab8f4f54660cb980b4667c4" + }, + { + "path": "crates/edict-syntax/tests/highlighting.rs", + "gitBlob": "17e6b9ba08c96f0efb6efd440590f0fc917316e2" + }, + { + "path": "crates/edict-syntax/tests/lawpack.rs", + "gitBlob": "a675999ed96309358c8552a9d32781b5eede20dc" + }, + { + "path": "crates/edict-syntax/tests/lawpack_authoring.rs", + "gitBlob": "de5e9102d8cfd43706074e482d407ac5f4c6fd26" + }, + { + "path": "crates/edict-syntax/tests/lowerability.rs", + "gitBlob": "5cfa58f5cbc51cccc7f119caddc1c3fcbc2e4806" + }, + { + "path": "crates/edict-syntax/tests/operation_prerequisites.rs", + "gitBlob": "753659e1a6e7751c455b8518226fa0902157a745" + }, + { + "path": "crates/edict-syntax/tests/parse_control_flow.rs", + "gitBlob": "5245561866d8902c1fbd5ab21f2e34807d568e17" + }, + { + "path": "crates/edict-syntax/tests/parse_greeting.rs", + "gitBlob": "f214d0c17745b8203d562780caa8f37b71c1e62c" + }, + { + "path": "crates/edict-syntax/tests/parse_hello.rs", + "gitBlob": "bf7b1b065277188f4be8754eb11ace94298394ba" + }, + { + "path": "crates/edict-syntax/tests/parse_keywords.rs", + "gitBlob": "78d8a64d785136d42a32655afda3df240c54f884" + }, + { + "path": "crates/edict-syntax/tests/parse_loops.rs", + "gitBlob": "d9ece2fce96fd6835d080055f06955d139c7e0ce" + }, + { + "path": "crates/edict-syntax/tests/parse_negative.rs", + "gitBlob": "17fdb983b8250470368a8f19d3a7bd9680052548" + }, + { + "path": "crates/edict-syntax/tests/parse_review_regressions.rs", + "gitBlob": "560215cfe044a528e190aa1ea7670e52b9365bdf" + }, + { + "path": "crates/edict-syntax/tests/parse_variants.rs", + "gitBlob": "8849f68f5ca1e2b06d0f66496e59b20d1c0fd022" + }, + { + "path": "crates/edict-syntax/tests/provider.rs", + "gitBlob": "7e8a596109b1e1fd3f22b3a0ef82f4755f127291" + }, + { + "path": "crates/edict-syntax/tests/provider_invocation.rs", + "gitBlob": "402647dd6701be65a9e693fd3f5688f26d84988e" + }, + { + "path": "crates/edict-syntax/tests/provider_lowering.rs", + "gitBlob": "411c306f3ab641de9dc2f7aed229767eba9dbd72" + }, + { + "path": "crates/edict-syntax/tests/result_projection.rs", + "gitBlob": "a74dd2a419266cb77d846d83da27f726095660f1" + }, + { + "path": "crates/edict-syntax/tests/semantic_validation.rs", + "gitBlob": "a127988d178c00ed12a0a25f70df6b7fd5e6d931" + }, + { + "path": "crates/edict-syntax/tests/target_ir.rs", + "gitBlob": "928e1cf921dead0b559bd115bb6eef3faaddd37e" + }, + { + "path": "crates/edict-syntax/tests/target_ir/ordered.rs", + "gitBlob": "a1b05db81a97a43ec5a2dc2d9bcc9578bc286f30" + }, + { + "path": "crates/edict-syntax/tests/target_profile.rs", + "gitBlob": "42f1c907f6c60dea1e8a9b4558b56ffd0b3a59ab" + }, + { + "path": "crates/edict-syntax/tests/target_profile_contract_resources.rs", + "gitBlob": "270c180a12dc10fb7e208cc4dc1e202da82c85fb" + }, + { + "path": "crates/edict-syntax/tests/target_unsigned_subtraction.rs", + "gitBlob": "e30d91f896afda48eb3cf11617bccf1f9d160e32" + }, + { + "path": "crates/edict-syntax/tests/unsigned_subtraction.rs", + "gitBlob": "fbd24482fdad4c8ceb4df41302b33595ada337ec" + }, + { + "path": "crates/edict/Cargo.toml", + "gitBlob": "525403f4f36db4040531e4dd747ec2398f9052cd" + }, + { + "path": "crates/edict/README.md", + "gitBlob": "a1ecf50bff3443d25a23fabfa6374d3f0a28ca82" + }, + { + "path": "crates/edict/src/lib.rs", + "gitBlob": "169d820759d6333f27a45ebb712bfcc4f0115107" + }, + { + "path": "crates/edict/tests/artifact_models.rs", + "gitBlob": "b923109c7195ce2c0071dc54179f0746b95329f0" + }, + { + "path": "crates/edict/tests/public_surface.rs", + "gitBlob": "a24c4bc9d9484f540da9b280790896701922968a" + }, + { + "path": "deny.toml", + "gitBlob": "e3f0f54060cead9a0d48b96ed86948d0909c4f78" + }, + { + "path": "docs/DESIGN_runtime-neutral-edict-sha-lock-assurance.md", + "gitBlob": "ea3badf78ebd19545147a93671fdb5f9af4a61ea" + }, + { + "path": "docs/GUIDE_edict-assurance-transparency.md", + "gitBlob": "100321157ec43055c45794f1c161b1e5281ba6b4" + }, + { + "path": "docs/README.md", + "gitBlob": "e21739b842be14d91a17f2508b1a1b629754af01" + }, + { + "path": "docs/REQUIREMENTS.md", + "gitBlob": "fd69cf5b3f57af39cda8bcf7f94ff21666a34636" + }, + { + "path": "docs/RETRO_phase1-parser.md", + "gitBlob": "5cfb7b85ca2f140fc58f9186c47e4635e94a1e6f" + }, + { + "path": "docs/SPEC_continuum-admission-v1.md", + "gitBlob": "0a74a0bfc642337d5d7a85133ce50a0a22caffbd" + }, + { + "path": "docs/SPEC_continuum-contract-bundle-v1.md", + "gitBlob": "65b36bb33a34beb1f246d1f97384631c83ca631e" + }, + { + "path": "docs/SPEC_edict-language-v1.md", + "gitBlob": "dd3f1584b000678a12232b76836172e4e66be71b" + }, + { + "path": "docs/SPEC_edict-lawpack-abi-v1.md", + "gitBlob": "ea1d801f07ab3677f7a411a1f58a28feda589ec3" + }, + { + "path": "docs/SPEC_edict-target-profile-abi-v1.md", + "gitBlob": "91687bfe45565a21f5f93f6ce9eed84095268691" + }, + { + "path": "docs/TECHNICAL_EXPLANATION.md", + "gitBlob": "d88561c0552c0e75d1ecc2eef6f9afd003e99674" + }, + { + "path": "docs/abi/edict-authority-facts.cddl", + "gitBlob": "e9a6d8685706ae0d8dabda401655234161e94299" + }, + { + "path": "docs/abi/edict-common.cddl", + "gitBlob": "836c11b92425beb6d42b378c0defe6f02d144dd7" + }, + { + "path": "docs/abi/edict-core.cddl", + "gitBlob": "862f02939fcc3858b4a60cb75f9bf149eae8ffda" + }, + { + "path": "docs/abi/edict-lawpack-adapter.cddl", + "gitBlob": "8e887c2e196ba7502470ddb45dc7cfd10116ad6b" + }, + { + "path": "docs/abi/edict-lawpack.cddl", + "gitBlob": "96efd51d437ec785b108b51835e9e8bf87aeab51" + }, + { + "path": "docs/abi/edict-result-projection.cddl", + "gitBlob": "98b5c2e861e7e9b66b7481502287cb041f6e77e6" + }, + { + "path": "docs/abi/edict-target-ir.cddl", + "gitBlob": "98134f277ded1920a3a36e5e3946c51153f2e84d" + }, + { + "path": "docs/abi/edict-target-profile.cddl", + "gitBlob": "746ae03001310f3a83524e5332819dad1a4eea5a" + }, + { + "path": "docs/abi/edict-target-provider.wit", + "gitBlob": "0efa5903a52d38dc61e429619d86322c6c5f1fa0" + }, + { + "path": "docs/audit/2026-06-28_code-quality.md", + "gitBlob": "143cbf4f4491a76a6649e919c6edaba73f0bcf4b" + }, + { + "path": "docs/audit/2026-06-28_documentation-quality.md", + "gitBlob": "656b4fa8dea43306af1818f8622cafd72e82a370" + }, + { + "path": "docs/audit/2026-06-28_ship-readiness.md", + "gitBlob": "b9d34a8693564d0134f550092e7645e5d5137442" + }, + { + "path": "docs/design/authority-fact-governance.md", + "gitBlob": "8531061cf718c47ec791f5712b2f357d92adc9e4" + }, + { + "path": "docs/design/canonical-target-ir-v0.11.md", + "gitBlob": "a46acb84e3523b51e2348c776cfdb63a8b98107a" + }, + { + "path": "docs/design/contract-bundle-assembly-v0.11.md", + "gitBlob": "a364f8ade5445808f87cf0c63ab3484c03ad616a" + }, + { + "path": "docs/design/crate-scope-v0.11.md", + "gitBlob": "92fe92285d02465d84bbe82e29d051fdc461f3a6" + }, + { + "path": "docs/design/obstruction-strands-v0.md", + "gitBlob": "81f70fd688c12798cd23472a4e810191e61eabe2" + }, + { + "path": "docs/design/provider-artifact-pipeline-alpha.md", + "gitBlob": "60eefa7dc160aba986bcd1188b79610ff5e9f299" + }, + { + "path": "docs/design/schema-as-sot-codegen.md", + "gitBlob": "d818e0e3f1fafd1d3aba26cb37c739f3ebe69763" + }, + { + "path": "docs/design/v2-obligation-closure.md", + "gitBlob": "816d22d843a33c6f7e143da4cb45e80679609dc8" + }, + { + "path": "docs/releases/v0.1.0-alpha.1.md", + "gitBlob": "5dd96057ba7f109cf5e5acde16e29d18627f98d3" + }, + { + "path": "docs/releases/v0.10.0-alpha.1.md", + "gitBlob": "363c4e9ed6f5ea5758198c7124681b520098e583" + }, + { + "path": "docs/releases/v0.11.0-alpha.1.md", + "gitBlob": "4612dbb5a1aaf20710bdb199b658ded7ced4ebab" + }, + { + "path": "docs/releases/v0.2.0-alpha.1.md", + "gitBlob": "7302ef93ed5ff9b562d9cec92d49d85a6b789b27" + }, + { + "path": "docs/releases/v0.3.0-alpha.1.md", + "gitBlob": "bf023ba4ca2c38f0120c461781447d58fe239ae0" + }, + { + "path": "docs/releases/v0.4.0-alpha.1.md", + "gitBlob": "769500b59800c02c536b76b0eb850d06d6cd8f58" + }, + { + "path": "docs/releases/v0.5.0-alpha.1.md", + "gitBlob": "7c7354e89846ea816992aaf55d4ad04367d61a10" + }, + { + "path": "docs/releases/v0.6.0-alpha.1.md", + "gitBlob": "3f2a0edfc4bccd9f3c60a7443ef4f8cbcbac1971" + }, + { + "path": "docs/releases/v0.7.0-alpha.1.md", + "gitBlob": "57671d5ef5a6b9f16d1674e0a35ddeb86ff126a8" + }, + { + "path": "docs/releases/v0.8.0-alpha.1.md", + "gitBlob": "12f77bda185c54fbbd136bf0dc7292716ecdfa39" + }, + { + "path": "docs/releases/v0.9.0-alpha.1.md", + "gitBlob": "fa295fcf0967415bb052f238256919b32b3fe6ba" + }, + { + "path": "docs/schemas/edict.cli-check-result.v1.schema.json", + "gitBlob": "eef8cd11f07e06d68b7051efa60ae05f2cfd8a63" + }, + { + "path": "docs/schemas/edict.cli-diagnostic.v1.schema.json", + "gitBlob": "92a2151a76893c598a4191ed6cecd8a0e671613f" + }, + { + "path": "docs/schemas/edict.cli-event.v1.schema.json", + "gitBlob": "705d82a893c2ea91caa91ad6977a9be8646b47bb" + }, + { + "path": "docs/schemas/edict.cli-info.v1.schema.json", + "gitBlob": "2d9a0777b4190b56ff569625275d352d17363afa" + }, + { + "path": "docs/schemas/edict.compiler-input.v1.schema.json", + "gitBlob": "26da3ba0fe85fab4c826ad79f13968ce09c4f29b" + }, + { + "path": "docs/schemas/edict.compiler-settings.v1.schema.json", + "gitBlob": "a3e8ba469895b84ab81724da1075c73141a8dd0c" + }, + { + "path": "docs/schemas/edict.projection-core.v1.schema.json", + "gitBlob": "8c0afe3834256abd1e18efb5f31eae1c4bdf0374" + }, + { + "path": "docs/schemas/edict.projection-diagnostics.v1.schema.json", + "gitBlob": "28cfb0a67dff7b8f879122c74433158dc0a4e5df" + }, + { + "path": "docs/schemas/edict.projection-syntax.v1.schema.json", + "gitBlob": "a85f2e14f536863f5e7b107b1a9f3f10816e6234" + }, + { + "path": "docs/schemas/edict.projection-target-ir.v1.schema.json", + "gitBlob": "8bbb6495ad8800d775d1c08506e85351038d678a" + }, + { + "path": "docs/topics/README.md", + "gitBlob": "99b06d3124c71cb62dfe6faff7604c13063162a7" + }, + { + "path": "docs/topics/admission/README.md", + "gitBlob": "755dcba96c0a428eec18d58a529f3e26d57d118c" + }, + { + "path": "docs/topics/admission/test-plan.md", + "gitBlob": "68ee0a2d2502103285985bf862de9fadf2bac5a0" + }, + { + "path": "docs/topics/assurance/README.md", + "gitBlob": "cf382008f3d3094a5380a687abbf07538e07404d" + }, + { + "path": "docs/topics/assurance/test-plan.md", + "gitBlob": "0ea6c971924db763088577a0a52bbd30bfec814c" + }, + { + "path": "docs/topics/authority-facts/README.md", + "gitBlob": "c5589d2489d6e4a5729c0df2b2655ff281d8d88d" + }, + { + "path": "docs/topics/authority-facts/test-plan.md", + "gitBlob": "e3769edf8309347b23ffa2e8f0901e06feabd654" + }, + { + "path": "docs/topics/cli/README.md", + "gitBlob": "af38946c9ccae8da343877c3861b0f52b6076e1b" + }, + { + "path": "docs/topics/cli/test-plan.md", + "gitBlob": "d72d69ef1d340ffd7057a63dd7bc07e3dfb2c166" + }, + { + "path": "docs/topics/compiler-spine/README.md", + "gitBlob": "d09184ef695252b85d05fc79017015f18c3869ee" + }, + { + "path": "docs/topics/compiler-spine/test-plan.md", + "gitBlob": "1b2aaa924d95408bf0ef621d7a1a92b88a00611e" + }, + { + "path": "docs/topics/contract-bundles/README.md", + "gitBlob": "2347499e8da9dd57bb1588faf67fe386c7a70c03" + }, + { + "path": "docs/topics/contract-bundles/test-plan.md", + "gitBlob": "3ae4c7362f90fa89081ab9ff2bf1c3db1a811874" + }, + { + "path": "docs/topics/core-ir/README.md", + "gitBlob": "d747a18d1f53de2b29473ada7a06b819c77cd162" + }, + { + "path": "docs/topics/core-ir/canonical-encoding.md", + "gitBlob": "34927c69fb1de10b685294a155fc46bb4ac21628" + }, + { + "path": "docs/topics/core-ir/test-plan.md", + "gitBlob": "0f80304a4dd6b160c78674b73605bdbbb7e11066" + }, + { + "path": "docs/topics/developer-tooling/README.md", + "gitBlob": "8648d3c1bdf4f6b774bc5fec71c71aa8c59b0ce8" + }, + { + "path": "docs/topics/developer-tooling/test-plan.md", + "gitBlob": "9240f717434dfbca08a6366e6d3ebafd4ef2c908" + }, + { + "path": "docs/topics/documentation/README.md", + "gitBlob": "34fa7f4db136c274a88b680f99619d657fda15d5" + }, + { + "path": "docs/topics/documentation/test-plan.md", + "gitBlob": "47964954fbf640211bc30b0dd361c44c9955c488" + }, + { + "path": "docs/topics/external-action-requests/README.md", + "gitBlob": "45bc73e469919d3eff6e7eddbe9baa0383c7d91b" + }, + { + "path": "docs/topics/external-action-requests/test-plan.md", + "gitBlob": "38e7e53827d223c031d414f4ecd63720eb78eae0" + }, + { + "path": "docs/topics/fixtures/README.md", + "gitBlob": "c8b3b196109fb6d4e37d8ffa17635166010075fb" + }, + { + "path": "docs/topics/fixtures/test-plan.md", + "gitBlob": "624357dbc544d365835390d3d3c2f11015b7b82f" + }, + { + "path": "docs/topics/lawpack-authoring/README.md", + "gitBlob": "a7f781666822977d4ca2483024e1e451605cf9f5" + }, + { + "path": "docs/topics/lawpack-authoring/test-plan.md", + "gitBlob": "1cc83e6b0865257feb89a88787b1eb3b983d1f84" + }, + { + "path": "docs/topics/lawpacks/README.md", + "gitBlob": "dedaa524dc55663a44bf8101241ab4b6d4755531" + }, + { + "path": "docs/topics/lawpacks/test-plan.md", + "gitBlob": "f8aa2c7ce40dad2665134956dc95d951d311808f" + }, + { + "path": "docs/topics/lowerability/README.md", + "gitBlob": "fb9519af3539d846dc5bf2915bf5ca86816e46f8" + }, + { + "path": "docs/topics/lowerability/test-plan.md", + "gitBlob": "e0fbff0799ba805c9531097d6b8aeea657e2b815" + }, + { + "path": "docs/topics/obstruction-strands/README.md", + "gitBlob": "a2930645065390cecff8008bfd48b7f034bfcd18" + }, + { + "path": "docs/topics/obstruction-strands/test-plan.md", + "gitBlob": "20c54ffcaa19930a5bc772a49a5f01119054be2d" + }, + { + "path": "docs/topics/providers/README.md", + "gitBlob": "8b5a07fb9c708b753861a4e156b866115f4d687b" + }, + { + "path": "docs/topics/providers/architecture.md", + "gitBlob": "664b38347ccaf37f298d6ac9f19d3423c0277f9e" + }, + { + "path": "docs/topics/providers/test-plan.md", + "gitBlob": "95c55f9e132ca6859fd9df70470973e678ed8d92" + }, + { + "path": "docs/topics/public-rust-api/README.md", + "gitBlob": "c64a1081b7f693b02bd2ea63329f2610bae9d84c" + }, + { + "path": "docs/topics/public-rust-api/test-plan.md", + "gitBlob": "4c3b9e9662afd9edb790ba2b5c57ed5e93df595c" + }, + { + "path": "docs/topics/release-process/README.md", + "gitBlob": "a474ab8b6a4a58c5c73334c9e677be7c20d1837c" + }, + { + "path": "docs/topics/release-process/policy.toml", + "gitBlob": "e40b4f4ec721ae61210ec1bb022a847bcb49fb4a" + }, + { + "path": "docs/topics/release-process/runbook.md", + "gitBlob": "0b6bd8ef44cbfe8c7cdc347273fa74b7c96c4823" + }, + { + "path": "docs/topics/release-process/test-plan.md", + "gitBlob": "61ecded1d2318d7dd74070cd1c6155f353c947e9" + }, + { + "path": "docs/topics/result-projections/README.md", + "gitBlob": "d5c2f85a7681a15dcdc3e35f992a389c50d13461" + }, + { + "path": "docs/topics/result-projections/test-plan.md", + "gitBlob": "9e69d58c88d6a9b7389334a78b994a3449721faa" + }, + { + "path": "docs/topics/review-process/README.md", + "gitBlob": "25190d37dc30110f75ba5d3a41494575ffecc1c3" + }, + { + "path": "docs/topics/review-process/policy.toml", + "gitBlob": "a826ba58aad2e509220b65aa8f96c290b600e094" + }, + { + "path": "docs/topics/review-process/test-plan.md", + "gitBlob": "f1a50aeae47913e4513a8149c1679d9a94c5ef21" + }, + { + "path": "docs/topics/rust-standards/README.md", + "gitBlob": "2fe29258705d117f4d10604a83fd832a8476e303" + }, + { + "path": "docs/topics/rust-standards/test-plan.md", + "gitBlob": "0e0d6b306cd2b58db07a7a5da6a752925fe58764" + }, + { + "path": "docs/topics/semantic-validation/README.md", + "gitBlob": "51cd9761755e7b5879069bf3774eeb487982ca97" + }, + { + "path": "docs/topics/semantic-validation/test-plan.md", + "gitBlob": "b43969d8eb0a884c1663ab761662f9622617bb3b" + }, + { + "path": "docs/topics/syntax/README.md", + "gitBlob": "b2a372bf41b1976567c61f400bf000f33abc20cc" + }, + { + "path": "docs/topics/syntax/test-plan.md", + "gitBlob": "a69efaf12dfe12661fca049b8790b37fa3fb3665" + }, + { + "path": "docs/topics/target-ir/README.md", + "gitBlob": "73d6b50a99a6231bd0d337ded95bd2a960590328" + }, + { + "path": "docs/topics/target-ir/test-plan.md", + "gitBlob": "4ec0f497fc0c9e73599d602417acfbfe74e65ff0" + }, + { + "path": "docs/topics/target-profiles/README.md", + "gitBlob": "6a88f4d732f8069855b2ed2cb9a8769a117b2f60" + }, + { + "path": "docs/topics/target-profiles/test-plan.md", + "gitBlob": "90084c3f3a1296745469cd86e9b5f2bc928825be" + }, + { + "path": "docs/topics/tests/README.md", + "gitBlob": "4ad079b6a9718e2a8446a6c67ff45735015bef84" + }, + { + "path": "docs/topics/tests/test-plan.md", + "gitBlob": "46bc0572d02a41e86f71c6d46baf5be611a462a6" + }, + { + "path": "docs/topics/v2-design/README.md", + "gitBlob": "b33a07599e43e660aa4def7f119ddd02df6a16de" + }, + { + "path": "docs/topics/v2-design/test-plan.md", + "gitBlob": "f17f96d381f81b20842393f70ff55b9597858b84" + }, + { + "path": "editors/README.md", + "gitBlob": "7a933576262bc58bac197f9264fdbf649dd5e696" + }, + { + "path": "editors/vscode/.vscodeignore", + "gitBlob": "f15b3142e4b8af11d580789a0c82acee3499f571" + }, + { + "path": "editors/vscode/README.md", + "gitBlob": "8b29840ae9ec8f618b7364022329f694d0ed9746" + }, + { + "path": "editors/vscode/language-configuration.json", + "gitBlob": "b7f583841649c9c437785edbfcb70ee24e495c79" + }, + { + "path": "editors/vscode/package.json", + "gitBlob": "cd9e391e7c9afb6f9393fcead118e0e55aadc839" + }, + { + "path": "editors/vscode/syntaxes/edict.tmLanguage.json", + "gitBlob": "5847d8edfdb32d822f0f3950f41d00c947982185" + }, + { + "path": "fixtures/README.md", + "gitBlob": "470e3e0fc3aa00654930ecdef892ee9df8a42c8d" + }, + { + "path": "fixtures/authority-facts/canonical/README.md", + "gitBlob": "28692ce70add5d4f2d4ff5318309c3353924caf9" + }, + { + "path": "fixtures/authority-facts/canonical/example-effectful.authority-facts.cbor", + "gitBlob": "fe2e59a8e2602e02c52094010a130db2637c5227" + }, + { + "path": "fixtures/authority-facts/canonical/example-effectful.authority-facts.json", + "gitBlob": "009faa5d2dc1dcf55cf284dcfd14c0b6405f3e0d" + }, + { + "path": "fixtures/authority-facts/canonical/example-effectful.authority-facts.sha256", + "gitBlob": "a3d68f0a3b3a586e85b6a84cbd884866e662951f" + }, + { + "path": "fixtures/bundle/assembly/bounded-hello.bundle-digests.txt", + "gitBlob": "da5402db7bd41dd88c6152b7799723561130c91e" + }, + { + "path": "fixtures/cli/01-source-ok/expected.stdout.jsonl", + "gitBlob": "e08ccf8fdedd3a73beef5d06c443a1bc60274ce1" + }, + { + "path": "fixtures/cli/01-source-ok/request.jsonl", + "gitBlob": "002fea597e6b93c8468d6972b73cc1344600fa87" + }, + { + "path": "fixtures/cli/02-source-parse-rejection/exit", + "gitBlob": "d00491fd7e5bb6fa28c517a0bb32b8b506539d4d" + }, + { + "path": "fixtures/cli/02-source-parse-rejection/expected.stderr.jsonl", + "gitBlob": "1077b73c9a7c02eae99f737bea7b6ff8c64d04da" + }, + { + "path": "fixtures/cli/02-source-parse-rejection/request.jsonl", + "gitBlob": "dce01f0466bd9384fc6f5cbe2845b6e0bd9a9cfd" + }, + { + "path": "fixtures/cli/03-source-semantic-rejection/exit", + "gitBlob": "d00491fd7e5bb6fa28c517a0bb32b8b506539d4d" + }, + { + "path": "fixtures/cli/03-source-semantic-rejection/expected.stderr.jsonl", + "gitBlob": "5ec447700da52d0b4ce1f75825eb9bffaed4884b" + }, + { + "path": "fixtures/cli/03-source-semantic-rejection/request.jsonl", + "gitBlob": "ddfd529e5448760387961febbd4ce013e49de435" + }, + { + "path": "fixtures/cli/04-cli-missing-settings/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/04-cli-missing-settings/expected.stderr.jsonl", + "gitBlob": "5060bd2fd773ba9ea3ea6db8c80b86a846bfadbd" + }, + { + "path": "fixtures/cli/04-cli-missing-settings/request.jsonl", + "gitBlob": "8eb12e58d427bd64ccfe339190e05bdccf4c8634" + }, + { + "path": "fixtures/cli/05-path-input-ok/expected.stdout.jsonl", + "gitBlob": "a05fc582efc41b6414e785167b5deeb7532088ef" + }, + { + "path": "fixtures/cli/05-path-input-ok/inputs/hello.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/05-path-input-ok/request.jsonl", + "gitBlob": "18facaab79dc198134c535df389cba79efe7dce7" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/expected.stdout.jsonl", + "gitBlob": "ef59591526e2084ddf5057249bbc96ab660cf256" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/inputs/a.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/inputs/ignore.txt", + "gitBlob": "ed34ae8da336ff94a67b6125fbd6be730c976d91" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/inputs/nested/b.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/request.jsonl", + "gitBlob": "bd9aad14fe79caccacaa6d00ffd32b5e13b3551f" + }, + { + "path": "fixtures/cli/07-path-list-ok/expected.stdout.jsonl", + "gitBlob": "643ecb3e659c10cb98255ec1aced772778e76eb0" + }, + { + "path": "fixtures/cli/07-path-list-ok/inputs/first.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/07-path-list-ok/inputs/second.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/07-path-list-ok/request.jsonl", + "gitBlob": "f11265b02c5b7559ced4d975471a78b5bef3ee27" + }, + { + "path": "fixtures/cli/08-glob-expansion-ok/expected.stdout.jsonl", + "gitBlob": "90164a7fce6c51abdadef8f0586d2c56113d9712" + }, + { + "path": "fixtures/cli/08-glob-expansion-ok/inputs/x.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/08-glob-expansion-ok/inputs/y.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/08-glob-expansion-ok/request.jsonl", + "gitBlob": "9335acf3a008ab8fb9942b3e22d73c456ed3827e" + }, + { + "path": "fixtures/cli/09-shape-source-ok/expected.stdout.jsonl", + "gitBlob": "ac6f9259502ebfe484e1c07a5f53865888dd8207" + }, + { + "path": "fixtures/cli/09-shape-source-ok/request.jsonl", + "gitBlob": "64c75d9a7b40985bacf0e59a943a16e20419c602" + }, + { + "path": "fixtures/cli/10-input-extra-field/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/10-input-extra-field/expected.stderr.jsonl", + "gitBlob": "2f5a8fba093b71d15a5b37504ad0352191c8299c" + }, + { + "path": "fixtures/cli/10-input-extra-field/request.jsonl", + "gitBlob": "6052212c652d41f03144a7d3d4018b1cdd18cd09" + }, + { + "path": "fixtures/cli/11-input-hybrid-kind/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/11-input-hybrid-kind/expected.stderr.jsonl", + "gitBlob": "7b6d2ac0c8afbf5e3991498846c2fc4847ac9453" + }, + { + "path": "fixtures/cli/11-input-hybrid-kind/request.jsonl", + "gitBlob": "b893b640aa6631c77f2a889a807afa31632ac2db" + }, + { + "path": "fixtures/cli/12-input-too-large/env.json", + "gitBlob": "ab0c7f13fc6b22d61fc73da2f1787ff3aa298ecb" + }, + { + "path": "fixtures/cli/12-input-too-large/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/12-input-too-large/expected.stderr.jsonl", + "gitBlob": "ebda022d79c978d4ff511579512be2c642e3e902" + }, + { + "path": "fixtures/cli/12-input-too-large/request.jsonl", + "gitBlob": "1e2fbb102503356bbcc627f49a5b58590859f170" + }, + { + "path": "fixtures/cli/13-input-root-outside/allowed/.gitkeep", + "gitBlob": "8b137891791fe96927ad78e64b0aad7bded08bdc" + }, + { + "path": "fixtures/cli/13-input-root-outside/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/13-input-root-outside/expected.stderr.jsonl", + "gitBlob": "9c5b8567a755c9ea2ee6e0168bf96f429185f675" + }, + { + "path": "fixtures/cli/13-input-root-outside/outside/outside.edict", + "gitBlob": "44abebc15811c38cc266007484dd74ae10a26a4d" + }, + { + "path": "fixtures/cli/13-input-root-outside/request.jsonl", + "gitBlob": "116dbbb4b1a80938bc042e41747872cb6da161cd" + }, + { + "path": "fixtures/cli/README.md", + "gitBlob": "9388df4182fedec41c353e85cf9210e88906fa3d" + }, + { + "path": "fixtures/core/canonical/README.md", + "gitBlob": "d9a0ca79557c3623c0b843d9eff4808f94fd7b18" + }, + { + "path": "fixtures/core/canonical/bounded-hello.core.cbor", + "gitBlob": "a0ec54aa1a5e20624192091526445cfd803e6f0c" + }, + { + "path": "fixtures/core/canonical/bounded-hello.core.sha256", + "gitBlob": "86ba062c26a3ad3fd733ccd8c80d7faa7ed62d94" + }, + { + "path": "fixtures/core/canonical/statement-branch.core.hex", + "gitBlob": "c22760cace0e4d146a2fdc8d7c7b50c38497622a" + }, + { + "path": "fixtures/core/canonical/statement-branch.core.sha256", + "gitBlob": "0b62657b192232390479319f0a1c8f601020a58f" + }, + { + "path": "fixtures/core/canonical/workspace-snapshot.core.cbor", + "gitBlob": "58e4f724610861f5b61537bf386a87062e8a57a7" + }, + { + "path": "fixtures/core/canonical/workspace-snapshot.core.sha256", + "gitBlob": "4bcb3e0813cd3f4a7afc7cf311d846f1dfdd0a9d" + }, + { + "path": "fixtures/core/schema/accepted/core-fn-body-minimal.fields", + "gitBlob": "bef3ca412ab0ea97465b8658499ae5e05e1ec760" + }, + { + "path": "fixtures/core/schema/accepted/core-intent-minimal.fields", + "gitBlob": "268b28ce942fed4f139aafe5c7cd50c15a0ee640" + }, + { + "path": "fixtures/core/schema/accepted/core-module-minimal.fields", + "gitBlob": "249ff76349f936c9a5ff6cb65d81de8e80d53de8" + }, + { + "path": "fixtures/core/schema/rejected/core-fn-body-effect-node-field.fields", + "gitBlob": "9af8fa3540b25ec810936bc4dc82e26f6dd0dd48" + }, + { + "path": "fixtures/core/schema/rejected/core-intent-unknown-verified-mode.fields", + "gitBlob": "667ae032ee117f32c1bcbafd21393e406621f517" + }, + { + "path": "fixtures/core/schema/rejected/core-module-missing-intents.fields", + "gitBlob": "17f37c7ac4c199de4eace7f31e6a59b9a6d3a0f6" + }, + { + "path": "fixtures/core/schema/rejected/local-ref-missing-alpha-name.fields", + "gitBlob": "456a89528ffe74d892be40c9c9be4a078ff5c18a" + }, + { + "path": "fixtures/lang/bounds/bounded-hello.edict", + "gitBlob": "e3443a1d3b1c8f0e137ac698b621dd2f3afb673b" + }, + { + "path": "fixtures/lang/effects/conditional-blob.edict", + "gitBlob": "1e4f2ca6112f26d57ee4d20058666ec7cd693b75" + }, + { + "path": "fixtures/lang/effects/read-greeting.edict", + "gitBlob": "5e3838d1547be171e0a0384a7a200f52a2b9d139" + }, + { + "path": "fixtures/lang/external-actions/workspace-snapshot.edict", + "gitBlob": "e54b0fbccad2fd680505f3ee46ca28d39d7e776e" + }, + { + "path": "fixtures/lang/operations/explicit-basis-u64.edict", + "gitBlob": "444d8ca77b9827746df81885f0620dce2d1a3b73" + }, + { + "path": "fixtures/lang/tooling/highlight-smoke.edict", + "gitBlob": "8c2d91084be22e5e1594a42159992aca95c73612" + }, + { + "path": "fixtures/lang/types/color-match.edict", + "gitBlob": "dd98d6de677904f36d7601165a0094d92928e536" + }, + { + "path": "fixtures/lawpack/causal-cell/README.md", + "gitBlob": "52e8cc1e2af8aea86c1090a1b20b5f5ab3e07c06" + }, + { + "path": "fixtures/lawpack/causal-cell/adapter.cbor", + "gitBlob": "3b0c8b1b3a8591a322b6e785d9f963899319310c" + }, + { + "path": "fixtures/lawpack/causal-cell/adapter.sha256", + "gitBlob": "f8231bc941e1fbe02279865a82e183cbeeb0988a" + }, + { + "path": "fixtures/lawpack/causal-cell/echo-operation-configuration.cbor", + "gitBlob": "24527d30d0146b567fda157561ac6a2587cae919" + }, + { + "path": "fixtures/lawpack/causal-cell/echo-operation-configuration.sha256", + "gitBlob": "d293c8a14b1955a3e171703400c4df620c7871a1" + }, + { + "path": "fixtures/lawpack/causal-cell/exports.cbor", + "gitBlob": "384f4839adfe8e5b0f1aa848bfe2aeb1c3f640b6" + }, + { + "path": "fixtures/lawpack/causal-cell/exports.sha256", + "gitBlob": "4f836f6b03497338a1f8eacc55480cbe1a3b49e9" + }, + { + "path": "fixtures/lawpack/causal-cell/manifest.cbor", + "gitBlob": "b9311a236d7898861a0b90b1f30b852b35cef623" + }, + { + "path": "fixtures/lawpack/causal-cell/manifest.sha256", + "gitBlob": "685fd6a6c72fc3100d595d009b6198a81c731a40" + }, + { + "path": "fixtures/lawpack/hello-echo/README.md", + "gitBlob": "79f6612f1f5608a8f7dc4835e5470878cd27f96e" + }, + { + "path": "fixtures/lawpack/hello-echo/adapter.cbor", + "gitBlob": "24e2f546e2b97747b53462a72faaa1d5d85d62f1" + }, + { + "path": "fixtures/lawpack/hello-echo/adapter.sha256", + "gitBlob": "91df491028061e026ecaaeb4e1598e2ac369af44" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.core.cbor", + "gitBlob": "246b6135855c415def0bd89b275f0457752ee563" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.core.sha256", + "gitBlob": "9adc71605e0a275349161809614bd17de97d129c" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.edict", + "gitBlob": "825d50565230bd71d62bfbeb59d0399a89864b4c" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.result-projection.cbor", + "gitBlob": "981cba6e1c7ab6bdae6829116749c4796167e4e6" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.result-projection.sha256", + "gitBlob": "d55e4083771e1d9791f59cf87fd5cc5f1ea3b9f4" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.target-ir.cbor", + "gitBlob": "c8a934cefec17dbab0a43d9be9cebd2533268798" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.target-ir.sha256", + "gitBlob": "20186cbe9482e8a7df7c44fabec13ffd4efbcf36" + }, + { + "path": "fixtures/lawpack/hello-echo/echo-operation-configuration.cbor", + "gitBlob": "84838ab0d8627237232fa5a9b9fa39087bcc5f8a" + }, + { + "path": "fixtures/lawpack/hello-echo/echo-operation-configuration.sha256", + "gitBlob": "0898688f14067560dd22abd04b97f020071fd3e8" + }, + { + "path": "fixtures/lawpack/hello-echo/exports.cbor", + "gitBlob": "0e1220ceed9442a7b35870eeb02fcb65454d8c5c" + }, + { + "path": "fixtures/lawpack/hello-echo/exports.sha256", + "gitBlob": "e1f3e9223de9ce935bc7f60dda3cfa7d12d54fdc" + }, + { + "path": "fixtures/lawpack/hello-echo/manifest.cbor", + "gitBlob": "d715900f03ec454a0ad96e6710f52a46120d0b9d" + }, + { + "path": "fixtures/lawpack/hello-echo/manifest.sha256", + "gitBlob": "20171199b401cecace2dd74e18f3cc1d5c7ed3de" + }, + { + "path": "fixtures/lawpack/workspace-patch/README.md", + "gitBlob": "67cd35f2e0660aa7455de1c197ad821d5438679b" + }, + { + "path": "fixtures/lawpack/workspace-patch/adapter.cbor", + "gitBlob": "2d6f09a7e2fab381b97a05cfad1e692902e878c3" + }, + { + "path": "fixtures/lawpack/workspace-patch/adapter.sha256", + "gitBlob": "d44eb9675e126716e8a5ef3c53fd39ade49d76fb" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.core.cbor", + "gitBlob": "6a88c127e426288a3e51d4749d5c31d5b0cb60cb" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.core.sha256", + "gitBlob": "0204b6f1d8b346a67800a7738ee39df49e78571f" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.edict", + "gitBlob": "6e11a3d022a53a8fb2c20a77e35e29840f5fe086" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.cbor", + "gitBlob": "a6124a995a3cdbb5d39cd0a6e046b329048703aa" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.sha256", + "gitBlob": "f7ac419ce15b32d491e09bddbe7c75f8227f51d8" + }, + { + "path": "fixtures/lawpack/workspace-patch/exports.cbor", + "gitBlob": "3a6fd19dc8059b9fe1bde74fb1da61398b0e80cc" + }, + { + "path": "fixtures/lawpack/workspace-patch/exports.sha256", + "gitBlob": "b301dd883a31fffe324e9306ec90ae2b1ec44520" + }, + { + "path": "fixtures/lawpack/workspace-patch/input-schema.cbor", + "gitBlob": "3045d9b696864fefe111c3eb641b3b68532752d2" + }, + { + "path": "fixtures/lawpack/workspace-patch/input-schema.sha256", + "gitBlob": "9f1284b4f0a2c7f6dbe1915a6113cd13a9700cb8" + }, + { + "path": "fixtures/lawpack/workspace-patch/manifest.cbor", + "gitBlob": "77e56c7525f0e64ab191f0adfeac12b540c87848" + }, + { + "path": "fixtures/lawpack/workspace-patch/manifest.sha256", + "gitBlob": "8316978e68565f29a30a6978d33d907710185857" + }, + { + "path": "fixtures/lawpack/workspace-patch/reconciliation-law.cbor", + "gitBlob": "0736b75f81913fca7ac95c56ec45f66b95aea4cf" + }, + { + "path": "fixtures/lawpack/workspace-patch/reconciliation-law.sha256", + "gitBlob": "de31fc9fda59fa3c29397e5fc48db224e8e1fee7" + }, + { + "path": "fixtures/lawpack/workspace-patch/request-profile-configuration.cbor", + "gitBlob": "5e2870b2f562bafaa73a91a3fc192f5ed39257c7" + }, + { + "path": "fixtures/lawpack/workspace-patch/request-profile-configuration.sha256", + "gitBlob": "4345ae2e39ce3f4d9cfa6b0dddf4ce56d56c035c" + }, + { + "path": "fixtures/lawpack/workspace-patch/settlement-schema.cbor", + "gitBlob": "0a93ac19c51b341602eeba524769147e962d5d60" + }, + { + "path": "fixtures/lawpack/workspace-patch/settlement-schema.sha256", + "gitBlob": "f1bb3fb0313dd6815b4184345194949ec40fe9e1" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/README.md", + "gitBlob": "996bd1d29b28769fff477084d9118d0833ca2970" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/adapter.cbor", + "gitBlob": "9be4ea568b602b56269af505deb809989a3fa8b5" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/adapter.sha256", + "gitBlob": "1e287be0a322e5444dea15fa14bcfc7cf12975c4" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/exports.cbor", + "gitBlob": "33fe04db74775c191d4b7400e1fb2b6393c5a010" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/exports.sha256", + "gitBlob": "e057cac7fc360e6599b7ddab88508aaf0f2f55f8" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/input-schema.cbor", + "gitBlob": "49c849169946e44c8b5f300279dd085bd6b63aeb" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/input-schema.sha256", + "gitBlob": "9dd7bb6e48192e90d19fc346d1705f736b1d85d7" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/manifest.cbor", + "gitBlob": "d4e58e3d4646ca967170a6882f2a617cb8d81390" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/manifest.sha256", + "gitBlob": "0edb311125a89a5816ee3fa0c9b700c9b3bcff3d" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.core.cbor", + "gitBlob": "a4b249dfb197f1a6b4adc06855f16e4305a1c798" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.core.sha256", + "gitBlob": "ea6b914d14907d9fd915058e579aff33c954da2c" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.edict", + "gitBlob": "c2c10f1ef1009796d67061b9722c4db9bb4e031b" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.cbor", + "gitBlob": "bdab1b0c55a34360c7e9ab304af91fe2b1e4afce" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.sha256", + "gitBlob": "7342aaa96221d6c8efa75ead2af5563791ccfeff" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/reconciliation-law.cbor", + "gitBlob": "df55572b350002a3df98ccb3e72dd60c86b9aead" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/reconciliation-law.sha256", + "gitBlob": "957cd04c78c130b07d2cad2fd7e07ae69978be57" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/request-profile-configuration.cbor", + "gitBlob": "708f18918ee1703491a910df82e129e711a4cc46" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/request-profile-configuration.sha256", + "gitBlob": "d9953d9dcaa41c98387226d1980f40b24d2bc3cb" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/settlement-schema.cbor", + "gitBlob": "f01ad68531267666e6bf93bf30a37d5b311c1676" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/settlement-schema.sha256", + "gitBlob": "06fcc0ee2b976a09b3017bd93132a3c51eb1317e" + }, + { + "path": "fixtures/obstruction-strands/v0/stale-basis/README.md", + "gitBlob": "25efbfa04e2e6104c5434f329128333e895e2b0a" + }, + { + "path": "fixtures/obstruction-strands/v0/stale-basis/source.edict", + "gitBlob": "e487b46e81220c50e6f928922dada29f3a21ca6a" + }, + { + "path": "fixtures/provider-contracts/v1/README.md", + "gitBlob": "447692907f9268ce3b6b78c43b7cbbb0417aeadf" + }, + { + "path": "fixtures/provider-contracts/v1/edict-provider-contracts.cddl", + "gitBlob": "07048aeeadb5062eabb89e995713cbc0893b7d7e" + }, + { + "path": "fixtures/provider-contracts/v1/manifest.json", + "gitBlob": "d2c8de5d61049e9f4182c630bf82b138f0f96792" + }, + { + "path": "fixtures/providers/README.md", + "gitBlob": "c26ee60a4930e3e0784c76cb855e48234a5c6b58" + }, + { + "path": "fixtures/providers/components/guests/Cargo.lock", + "gitBlob": "d7858ce7bc67deabb5ff352a24c85a7caa0ef4b0" + }, + { + "path": "fixtures/providers/components/guests/Cargo.toml", + "gitBlob": "450a24aed25dc73661b0ae8adfe2630dfecc9b07" + }, + { + "path": "fixtures/providers/components/guests/lowerer/Cargo.toml", + "gitBlob": "568aa137fa215b6b973fe31e12322530b393b9dc" + }, + { + "path": "fixtures/providers/components/guests/lowerer/src/lib.rs", + "gitBlob": "b39a8a0b18fe9ed7cb90277f793056434afa1318" + }, + { + "path": "fixtures/providers/components/guests/verifier/Cargo.toml", + "gitBlob": "f814f2c8c248bbf03389f5a0936f80cd4dada5b6" + }, + { + "path": "fixtures/providers/components/guests/verifier/src/lib.rs", + "gitBlob": "3f07ffdfd808ff95b206a2c08c2d481ccaf0e165" + }, + { + "path": "fixtures/providers/components/instantiation-failure-lowerer.component.wasm", + "gitBlob": "bd2d7c0d31798d7676aedab0bd0d289fc2053bef" + }, + { + "path": "fixtures/providers/components/instantiation-failure-lowerer.wat", + "gitBlob": "f6f5a70edb80d3a7fa1dee13b34ab5b8b44274d7" + }, + { + "path": "fixtures/providers/components/instantiation-fuel-lowerer.component.wasm", + "gitBlob": "0804d26d3ddb428682ca87ecad03cf0e05ef64af" + }, + { + "path": "fixtures/providers/components/instantiation-fuel-lowerer.wat", + "gitBlob": "80e972463ef593602d27c7d7cec78d87d22ff727" + }, + { + "path": "fixtures/providers/components/inventory.json", + "gitBlob": "45cf2e8e937a17a8ee05dfa8d68e94dcc155e129" + }, + { + "path": "fixtures/providers/components/lowerer.component.wasm", + "gitBlob": "6c1cf123a44284d15b7b1e90f1905ae94e65c158" + }, + { + "path": "fixtures/providers/components/malformed-lowerer.component.wasm", + "gitBlob": "be873af81100dc76ed1f3f1f818a41da45a38e4c" + }, + { + "path": "fixtures/providers/components/malformed-lowerer.wat", + "gitBlob": "1e7bfffe0a0baf230d9fb5766083f82198f4029c" + }, + { + "path": "fixtures/providers/components/verifier.component.wasm", + "gitBlob": "671adbe7931d0a9a5e0c78d459c244d37a135a69" + }, + { + "path": "fixtures/providers/echo-generated/provider-manifest.json", + "gitBlob": "22c8560e7ddecacd5da388e52d3935d7fc1474b9" + }, + { + "path": "fixtures/providers/echo-target-profile/README.md", + "gitBlob": "350c33dcda2d66d2d50e589c58db7c6d7b14a80b" + }, + { + "path": "fixtures/providers/echo-target-profile/generated/primary/target-profile.echo-dpo.cbor", + "gitBlob": "9fa43529b1021dfd8e3a33256c832d4eee6f4a47" + }, + { + "path": "fixtures/providers/wit/legacy-target-profile.wit", + "gitBlob": "ae7d6af764012b16bf06bfa260ccba98a7f04868" + }, + { + "path": "fixtures/target-ir/canonical/echo-effectful.target-ir.cbor", + "gitBlob": "727a80eb37319dbdbea40d7d9b4e37f0d93d8d84" + }, + { + "path": "fixtures/target-ir/canonical/echo-effectful.target-ir.sha256", + "gitBlob": "6d050bb46ac8981ea8e47c7a52371027b941fd89" + }, + { + "path": "fixtures/target-ir/canonical/gitwarp-append.target-ir.cbor", + "gitBlob": "89b46b138a7b90252a4397c0e8b622bceff10a33" + }, + { + "path": "fixtures/target-ir/canonical/gitwarp-append.target-ir.sha256", + "gitBlob": "a59a4ab9d46095d5be1797ed9e60fe841f821bce" + }, + { + "path": "fixtures/target-ir/canonical/workspace-snapshot.target-ir.cbor", + "gitBlob": "1854eeb549b3719fa2b0114867dbece6db1819d4" + }, + { + "path": "fixtures/target-ir/canonical/workspace-snapshot.target-ir.sha256", + "gitBlob": "4d0e501323d415ef9e64c0a3d25bdd57dabfc998" + }, + { + "path": "fixtures/target-profile/contract-resources/README.md", + "gitBlob": "32dcab1dd9376a4eed2c73bb1b1a29255fe3ea05" + }, + { + "path": "fixtures/target-profile/contract-resources/canonical-cbor.cbor", + "gitBlob": "4a95ba3bd9dff190ca5ec9c83262bfa6254a91d3" + }, + { + "path": "fixtures/target-profile/contract-resources/canonical-cbor.sha256", + "gitBlob": "2168df5d4bf77ed2347139dd7c45fd808df8ec7e" + }, + { + "path": "fixtures/target-profile/contract-resources/determinism.cbor", + "gitBlob": "09cd11c36048939961408550763c04fad8241557" + }, + { + "path": "fixtures/target-profile/contract-resources/determinism.sha256", + "gitBlob": "5376d6bfe23bea659463a7e3c56ad1e8afd4095f" + }, + { + "path": "fixtures/target-profile/contract-resources/diagnostics.cbor", + "gitBlob": "c47fa05f463e0da745fbcdf8daf94d70e134eb8d" + }, + { + "path": "fixtures/target-profile/contract-resources/diagnostics.sha256", + "gitBlob": "69613ec4014f27b23245e23fbf7c9447566516b2" + }, + { + "path": "fixtures/target-profile/contract-resources/fuel.cbor", + "gitBlob": "b5a3484ec5b2bf7343c2fcedc67bcb2b63a37104" + }, + { + "path": "fixtures/target-profile/contract-resources/fuel.sha256", + "gitBlob": "6ec1c830358ee35bb12bd04cc1a6edf47fb20997" + }, + { + "path": "fixtures/target-profile/contract-resources/wasm-component.cbor", + "gitBlob": "6344996c283e0d1c332ea3ce597ad4593882a3c5" + }, + { + "path": "fixtures/target-profile/contract-resources/wasm-component.sha256", + "gitBlob": "24bf3e552e4216d8258d2b85c8878af46a176c52" + }, + { + "path": "grammars/textmate/README.md", + "gitBlob": "fc116a669725d4e965d658234d32d779955d5dc8" + }, + { + "path": "grammars/textmate/edict.tmLanguage.json", + "gitBlob": "5847d8edfdb32d822f0f3950f41d00c947982185" + }, + { + "path": "grammars/tree-sitter-edict/README.md", + "gitBlob": "e2992a839d6719f1461db78c4e3f33d2e5ab0c09" + }, + { + "path": "grammars/tree-sitter-edict/grammar.js", + "gitBlob": "a82f5b9d9b78525f17a59272543fdcddd7a0da40" + }, + { + "path": "grammars/tree-sitter-edict/queries/highlights.scm", + "gitBlob": "0f46530b36996d13449901aed4e376a126577cba" + }, + { + "path": "grammars/tree-sitter-edict/src/grammar.json", + "gitBlob": "55df730a06b83c9f622e3ec17845fc9897c7d8c0" + }, + { + "path": "grammars/tree-sitter-edict/src/node-types.json", + "gitBlob": "520f6c4f7b30cd6892dd60faf6d76f3fbaa6a5c7" + }, + { + "path": "grammars/tree-sitter-edict/src/parser.c", + "gitBlob": "81cc4713cb5e05f9aa8dac16da202a864faefee6" + }, + { + "path": "grammars/tree-sitter-edict/src/tree_sitter/alloc.h", + "gitBlob": "1abdd1201578605b8d05a3001f01ebc0d58826d9" + }, + { + "path": "grammars/tree-sitter-edict/src/tree_sitter/array.h", + "gitBlob": "56fc8cd470996ded64a5452be25e26dbd2aa682a" + }, + { + "path": "grammars/tree-sitter-edict/src/tree_sitter/parser.h", + "gitBlob": "858107deb9e4a1ffcd2ed5e6ffe98a5fcab3e1f6" + }, + { + "path": "grammars/tree-sitter-edict/test/corpus/current-subset.txt", + "gitBlob": "732c5eda8e1bf95eef799476296a6ee061eb58eb" + }, + { + "path": "grammars/tree-sitter-edict/tree-sitter.json", + "gitBlob": "97d3fdd498a3bef509c8615d98b9560b527c03cb" + }, + { + "path": "scripts/consumer-witnesses/README.md", + "gitBlob": "2b7d2b9d81f9598fd8df232b3a76bef106ff7ef2" + }, + { + "path": "scripts/consumer-witnesses/jedit-state-read.Dockerfile", + "gitBlob": "7462059be67686090d0097b24b9d14bfbbd4c6f7" + }, + { + "path": "scripts/consumer-witnesses/jedit-state-read.Dockerfile.dockerignore", + "gitBlob": "ee41b3ca0a68fd5eb20e1b777b4b368fd8b44e63" + }, + { + "path": "scripts/consumer-witnesses/jedit-state-read.py", + "gitBlob": "26db295d4eabfc4e57813fc9bf17314c23350777" + }, + { + "path": "scripts/consumer-witnesses/run-jedit-state-read.sh", + "gitBlob": "18cd72bbbdfb17a5ea30a7821d47035071556d10" + }, + { + "path": "spec.lock.json", + "gitBlob": "ef8b02386e0f269a99c1d2121764f70b76e67620" + }, + { + "path": "xtask/Cargo.toml", + "gitBlob": "795c70a5172363bfcd55174b1bc76c9c131d21a3" + }, + { + "path": "xtask/src/contract_check.rs", + "gitBlob": "9e80393accf79936033972fde0f2aa2cf40f1be3" + }, + { + "path": "xtask/src/goldens.rs", + "gitBlob": "713f1f8266d9f6993684ae86db105fcd7d69ee2a" + }, + { + "path": "xtask/src/lawpack_goldens.rs", + "gitBlob": "c499e8581c73313794b83c261937144b3917850a" + }, + { + "path": "xtask/src/main.rs", + "gitBlob": "6c2c06038bb5ecdde60620071b200d8191dc116c" + }, + { + "path": "xtask/src/provider_components.rs", + "gitBlob": "ee9d6a1028f9fbfad879faab4b15a94b996ef6d4" + }, + { + "path": "xtask/src/provider_contract_pack.rs", + "gitBlob": "cf60d89892b7a57cc33300f273d2522a6e8f43f9" + }, + { + "path": "xtask/src/provider_dependencies.rs", + "gitBlob": "c4b0539ed593d2a2777d294090d2a891b13ae628" + }, + { + "path": "xtask/src/release_dates.rs", + "gitBlob": "1c6d7acb872f6d820eab3a30ca580e9c5cfba2ee" + }, + { + "path": "xtask/src/release_prep.rs", + "gitBlob": "01ed64ccbb28c9d1e908b7b800ff58076e5e1a2b" + }, + { + "path": "xtask/src/tests.rs", + "gitBlob": "9a3f6543c2dbae31d53e93d56f781e5d54f74f41" + }, + { + "path": "xtask/src/util.rs", + "gitBlob": "c1bf39e93460c43ffdcfd9a76e0424750cbb9dfd" + } + ] +} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/decimal/ReplaceRange.edict b/edict/replace-range-probes/buffer-decoder/evidence/original/decimal/ReplaceRange.edict new file mode 100644 index 00000000..3927ed0e --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/original/decimal/ReplaceRange.edict @@ -0,0 +1,93 @@ +package jedit.text.replace_range@1; +use lawpack jedit.text@1 digest "sha256:2ea164293719d2b03231c4904eb75ddcdf55fd29cc31f4fc5a5319d9ae5e60e7" as text; + +// Jim's JSON boundary codec. These are internal scanner values, not intent inputs. +// A later bounded scanner must obtain each token from the retained Buffer atom. +type JsonByte = Bytes; +type DecimalState = variant { Start, Zero, Digits(U64) }; +type DecimalStep = variant { More(DecimalState), End(U64), Invalid, Overflow }; +type DecimalDigit = variant { Digit(U64), NotDigit }; + +// An End result leaves the delimiter unconsumed for the enclosing JSON scanner. +// Whitespace terminates a number; canonical-byte policy belongs to that scanner. +fn isNumberDelimiter(token: JsonByte) -> Bool { + return token == b"," || token == b"]" || token == b"}" + || token == b" " || token == b"\t" || token == b"\r" || token == b"\n"; +} + +fn decimalDigit(token: JsonByte) -> DecimalDigit { + return if token == b"0" then DecimalDigit::Digit(0u64) + else if token == b"1" then DecimalDigit::Digit(1u64) + else if token == b"2" then DecimalDigit::Digit(2u64) + else if token == b"3" then DecimalDigit::Digit(3u64) + else if token == b"4" then DecimalDigit::Digit(4u64) + else if token == b"5" then DecimalDigit::Digit(5u64) + else if token == b"6" then DecimalDigit::Digit(6u64) + else if token == b"7" then DecimalDigit::Digit(7u64) + else if token == b"8" then DecimalDigit::Digit(8u64) + else if token == b"9" then DecimalDigit::Digit(9u64) + else DecimalDigit::NotDigit; +} + +fn appendScaled(scaled: U64, digit: U64, limit: U64) -> DecimalStep { + let sum = checkedAdd(scaled, digit); + return if isSome(sum) then + if unwrap(sum) <= limit then DecimalStep::More(DecimalState::Digits(unwrap(sum))) + else DecimalStep::Overflow + else DecimalStep::Overflow; +} + +fn appendDigit(value: U64, digit: U64, limit: U64) -> DecimalStep { + let decimalRadix = 10u64; + let product = checkedMul(value, decimalRadix); + return if isSome(product) then appendScaled(unwrap(product), digit, limit) + else DecimalStep::Overflow; +} + +fn startDecimal(token: JsonByte, limit: U64) -> DecimalStep { + return match decimalDigit(token) { + Digit(value) => if value > limit then DecimalStep::Overflow + else if value == 0u64 then DecimalStep::More(DecimalState::Zero) + else DecimalStep::More(DecimalState::Digits(value)), + NotDigit => DecimalStep::Invalid, + }; +} + +fn continueDecimal(value: U64, token: JsonByte, limit: U64) -> DecimalStep { + return if value == 0u64 then DecimalStep::Invalid + else if value > limit then DecimalStep::Overflow + else match decimalDigit(token) { + Digit(digit) => appendDigit(value, digit, limit), + NotDigit => if isNumberDelimiter(token) then DecimalStep::End(value) + else DecimalStep::Invalid, + }; +} + +// canonical_head_id members use limit 255; version uses 18446744073709551615. +// The enclosing scanner owns these schema limits and starts at Start. +// Empty token, sign, leading zero, fraction, exponent and non-ASCII byte refuse. +fn stepJsonUnsigned(state: DecimalState, token: JsonByte, limit: U64) -> DecimalStep { + return match state { + Start => startDecimal(token, limit), + Zero => if isNumberDelimiter(token) then DecimalStep::End(0u64) + else DecimalStep::Invalid, + Digits(value) => continueDecimal(value, token, limit), + }; +} + +type Input = { address: text.FactAddress, expected: text.FactBytes }; +intent replaceRange(input: Input) returns text.FactBytes + profile text.replaceRange + basis input.address.nodeId + budget <= text.replaceRangeBudget +{ + let actual: text.FactBytes = text.readFact(input.address) + else { + missing(address) => text.FactMissing, + typeMismatch(address) => text.FactMalformed, + notAtom(address) => text.FactMalformed, + tooLarge(address) => text.FactMalformed, + }; + require actual == input.expected else text.BasisNotCanonical; + return actual; +} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/decimal/stderr.jsonl b/edict/replace-range-probes/buffer-decoder/evidence/original/decimal/stderr.jsonl new file mode 100644 index 00000000..a4cb8dfc --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/original/decimal/stderr.jsonl @@ -0,0 +1,2 @@ +{"command":"build","input":{"kind":"stdin"},"kind":"InvalidApplicationSource","message":"Edict source `/tmp/echo-726-runtime/jim-buffer-decoder-results/decimal/src/ReplaceRange.edict` did not parse: ParseError { kind: Lex, message: \"invalid string escape\", span: Span { start: 861, end: 862 } }","schema":"edict.cli.diagnostic/v1","severity":"error","stage":"cli","type":"diagnostic"} +{"checked":0,"command":"build","errors":1,"exitCode":2,"schema":"edict.cli.event/v1","status":"error","type":"status"} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/decimal/stdout.jsonl b/edict/replace-range-probes/buffer-decoder/evidence/original/decimal/stdout.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/fn-control/ReplaceRange.edict b/edict/replace-range-probes/buffer-decoder/evidence/original/fn-control/ReplaceRange.edict new file mode 100644 index 00000000..fe87ae1b --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/original/fn-control/ReplaceRange.edict @@ -0,0 +1,20 @@ +package jedit.text.replace_range@1; +use lawpack jedit.text@1 digest "sha256:2ea164293719d2b03231c4904eb75ddcdf55fd29cc31f4fc5a5319d9ae5e60e7" as text; +fn retainFact(value: text.FactBytes) -> text.FactBytes { return value; } + +type Input = { address: text.FactAddress, expected: text.FactBytes }; +intent replaceRange(input: Input) returns text.FactBytes + profile text.replaceRange + basis input.address.nodeId + budget <= text.replaceRangeBudget +{ + let actual: text.FactBytes = text.readFact(input.address) + else { + missing(address) => text.FactMissing, + typeMismatch(address) => text.FactMalformed, + notAtom(address) => text.FactMalformed, + tooLarge(address) => text.FactMalformed, + }; + require actual == input.expected else text.BasisNotCanonical; + return actual; +} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/fn-control/stderr.jsonl b/edict/replace-range-probes/buffer-decoder/evidence/original/fn-control/stderr.jsonl new file mode 100644 index 00000000..3ab04b49 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/original/fn-control/stderr.jsonl @@ -0,0 +1,2 @@ +{"command":"build","input":{"kind":"stdin"},"kind":"InvalidApplicationSource","message":"Edict source `/tmp/echo-726-runtime/jim-buffer-decoder-results/fn-control/src/ReplaceRange.edict` did not parse: ParseError { kind: ExpectedToken, message: \"expected `type`, `enum`, or `intent` declaration, found Ident(\\\"fn\\\")\", span: Span { start: 151, end: 153 } }","schema":"edict.cli.diagnostic/v1","severity":"error","stage":"cli","type":"diagnostic"} +{"checked":0,"command":"build","errors":1,"exitCode":2,"schema":"edict.cli.event/v1","status":"error","type":"status"} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/fn-control/stdout.jsonl b/edict/replace-range-probes/buffer-decoder/evidence/original/fn-control/stdout.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/git-locks-receipt.jsonl b/edict/replace-range-probes/buffer-decoder/evidence/original/git-locks-receipt.jsonl new file mode 100644 index 00000000..0e22e065 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/original/git-locks-receipt.jsonl @@ -0,0 +1,5 @@ +{"event":"claimed","job":"B7E81F92-3E24-4EE9-936A-8A34AC6B0DFA","holder":"jim-edict-authoring","note":"Guarded exact17397 compiler build and actual Buffer decimal fn refusal with accepted atom-read control","claimed":1791167534,"expires":1791168434,"paths":["host/docker/echo-read-runtime/","host/heavy-work"],"record":"df6150b65a0fff4e49c96bcf7ca1679687da1ca7","acquisition":"1791167534-76497-3105025734"} +PRE {"build": 6792403497, "data": 2956552745, "logs": 9643305, "host_free": 715318206464, "vm_free": 679804174336} CONTRACT /private/tmp/echo-739-resume/jim-buffer-public.launch.json +POST {"build": 6451069687, "data": 2959639287, "logs": 9646863, "host_free": 715316690944, "vm_free": 679804174336} EXIT 1 +GUARD_EXIT 1 +{"event":"released","job":"B7E81F92-3E24-4EE9-936A-8A34AC6B0DFA","paths":2} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/guard.launch.json b/edict/replace-range-probes/buffer-decoder/evidence/original/guard.launch.json new file mode 100644 index 00000000..f3648fa5 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/original/guard.launch.json @@ -0,0 +1,38 @@ +{ + "worker": "echo-read-runtime", + "image": "echo-read-runtime:red", + "lock": "/tmp/echo-validation-host.lock", + "inner_lock": "/tmp/echo-validation.lock", + "source": "/echo-audit", + "outputs": [ + "/lease-target", + "/usr/local/cargo", + "/tmp/echo-726-runtime", + "all container writable-layer paths", + "/dev/shm", + "/private/tmp/echo-739-resume/jim-buffer-public.log" + ], + "measurements": { + "build": 6792403497, + "data": 2956552745, + "logs": 9643305, + "host_free": 715318206464, + "vm_free": 679804174336 + }, + "build_limit": 21474836480, + "data_limit": 4294967296, + "log_limit": 134217728, + "cpus": 4.0, + "memory": 6442450944, + "logging": { + "Type": "json-file", + "Config": { + "max-file": "5", + "max-size": "20m" + } + }, + "timeout_seconds": 600, + "guard": "2-second fail-closed monitor; freeze owned process group across the entire size measurement, including cache du; pause container for snapshotter; accept an absent process group only after confirmed owned docker-exec completion; of aggregate writable layers, shared memory, host scratch and logs; no host binds or volumes", + "termination": "docker stop/kill owned worker and host docker-exec process group on monitoring failure or limit/timeout", + "command": "test ! -e /tmp/echo-726-runtime/jim-buffer-decoder-input\nmkdir /tmp/echo-726-runtime/jim-buffer-decoder-input\ntar -xf /tmp/echo-726-runtime/jim-buffer-decoder-input.tar -C /tmp/echo-726-runtime/jim-buffer-decoder-input\npython3 - <<'INNER'\nfrom pathlib import Path\nimport runpy,subprocess\nroot=Path('/tmp/echo-726-runtime/jim-buffer-decoder-input')\ncommon=runpy.run_path(str(root/'edict/replace-range-probes/leaf-slice/run.py'))\nprint(common['verify_compiler_source'](Path('/edict-207'),root/'compiler-source.json','17397e2aad18a83ffc617d1afd628764501f49cd'),flush=True)\nassert subprocess.check_output(['git','-C','/edict-207','rev-parse','HEAD'],text=True).strip()=='17397e2aad18a83ffc617d1afd628764501f49cd'\nassert not subprocess.check_output(['git','-C','/edict-207','status','--porcelain'],text=True).strip()\nINNER\ncd /edict-207\nexport CARGO_TARGET_DIR=/lease-target CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=4 CARGO_PROFILE_DEV_DEBUG=0 CARGO_PROFILE_TEST_DEBUG=0\ncargo +1.95.0 clean -p edict-cli -p edict-syntax\ncargo +1.95.0 build --locked -p edict-cli\nsha256sum /lease-target/debug/edict\npython3 /tmp/echo-726-runtime/jim-buffer-decoder-input/edict/replace-range-probes/buffer-decoder/run.py --compiler /lease-target/debug/edict --compiler-source /edict-207 --compiler-manifest /tmp/echo-726-runtime/jim-buffer-decoder-input/compiler-source.json --application-source /read-evidence/single --provider-package /read-provider --work-root /tmp/echo-726-runtime/jim-buffer-decoder-results\n" +} \ No newline at end of file diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/guard.log b/edict/replace-range-probes/buffer-decoder/evidence/original/guard.log new file mode 100644 index 00000000..2a0ac02c --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/original/guard.log @@ -0,0 +1,17 @@ +{'commit': '17397e2aad18a83ffc617d1afd628764501f49cd', 'tree': 'bcfd3112cd8b3d4630738a88761860679b45714b', 'fileCount': 449, 'manifestSha256': '625592ab9dd715349255bece0133378c64b3d4539fb50e437d116c2a4296f016'} + Removed 575 files, 474.9MiB total + Compiling edict-syntax v0.11.0-alpha.1 (/edict-207/crates/edict-syntax) + Compiling edict-provider-schema v0.11.0-alpha.1 (/edict-207/crates/edict-provider-schema) + Compiling edict-provider-host-wasmtime v0.11.0-alpha.1 (/edict-207/crates/edict-provider-host-wasmtime) + Compiling edict-cli v0.11.0-alpha.1 (/edict-207/crates/edict-cli) + Finished `dev` profile [unoptimized] target(s) in 6.08s +e2700698829b03f437c66425ed9878b002ef7a34ac183a39bac4eaf6a758cc6d /lease-target/debug/edict +{"artifactSha256": {"executable-operation-package.cbor": "afd931700018312d6c0d1e249871313d2c21c0ece1ae41d1f17f2be7af9e5284", "verification-report.cbor": "9114fdd983d456eb83f69969475f558b6e608be23520212a5db5f26bb095d04b"}, "artifacts": ["executable-operation-package.cbor", "verification-report.cbor"], "case": "read-control", "diagnostics": [], "exitCode": 0, "sourceSha256": "4ec3cbf32fd5d98987cbeeaff95d7c9c5ab734dac555e443aac52e8ab02bfbc5", "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61"} +{"artifactSha256": {}, "artifacts": [], "case": "fn-control", "diagnostics": [{"command": "build", "input": {"kind": "stdin"}, "kind": "InvalidApplicationSource", "message": "Edict source `/tmp/echo-726-runtime/jim-buffer-decoder-results/fn-control/src/ReplaceRange.edict` did not parse: ParseError { kind: ExpectedToken, message: \"expected `type`, `enum`, or `intent` declaration, found Ident(\\\"fn\\\")\", span: Span { start: 151, end: 153 } }", "schema": "edict.cli.diagnostic/v1", "severity": "error", "stage": "cli", "type": "diagnostic"}], "exitCode": 2, "sourceSha256": "97475b0e6aaf24d3268736efa3312df377b9153b89c8e59f0e2ceb25ce691218", "stderrSha256": "001929f74b4648fdd8c7946bdb80b1ccea0fae03e5f208012bb454d0ab94a831", "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} +{"artifactSha256": {}, "artifacts": [], "case": "decimal", "diagnostics": [{"command": "build", "input": {"kind": "stdin"}, "kind": "InvalidApplicationSource", "message": "Edict source `/tmp/echo-726-runtime/jim-buffer-decoder-results/decimal/src/ReplaceRange.edict` did not parse: ParseError { kind: Lex, message: \"invalid string escape\", span: Span { start: 861, end: 862 } }", "schema": "edict.cli.diagnostic/v1", "severity": "error", "stage": "cli", "type": "diagnostic"}], "exitCode": 2, "sourceSha256": "860712eaae8fad67499967e2475d9a2bef9d072762b3eab1004a3ddf4dba2b94", "stderrSha256": "04838a07257a87554d0c8d0f397c0a661adf68719f0e7f604c642217190bae8b", "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} +Traceback (most recent call last): + File "/tmp/echo-726-runtime/jim-buffer-decoder-input/edict/replace-range-probes/buffer-decoder/run.py", line 75, in + main() + File "/tmp/echo-726-runtime/jim-buffer-decoder-input/edict/replace-range-probes/buffer-decoder/run.py", line 70, in main + raise RuntimeError(f"{name} did not reach the source function parser boundary") +RuntimeError: fn-control did not reach the source function parser boundary diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/guard.result.json b/edict/replace-range-probes/buffer-decoder/evidence/original/guard.result.json new file mode 100644 index 00000000..9c7c9295 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/original/guard.result.json @@ -0,0 +1,10 @@ +{ + "measurements": { + "build": 6451069687, + "data": 2959639287, + "logs": 9646863, + "host_free": 715316690944, + "vm_free": 679804174336 + }, + "exit_code": 1 +} \ No newline at end of file diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/public-build.json b/edict/replace-range-probes/buffer-decoder/evidence/original/public-build.json new file mode 100644 index 00000000..63bd674f --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/original/public-build.json @@ -0,0 +1,101 @@ +{ + "compiler": { + "commit": "17397e2aad18a83ffc617d1afd628764501f49cd", + "tree": "bcfd3112cd8b3d4630738a88761860679b45714b", + "fileCount": 449, + "manifestSha256": "625592ab9dd715349255bece0133378c64b3d4539fb50e437d116c2a4296f016", + "binarySha256": "e2700698829b03f437c66425ed9878b002ef7a34ac183a39bac4eaf6a758cc6d" + }, + "providerManifestSha256": "5b38ae704a071b88aa0cc2f85020de41cb69e76d037afe3592a4d319e22587c8", + "providerFiles": { + "components/lowerer.echo-dpo.component.wasm": "4b594a8165079f0a973741b9e27b468cf041f4ad53108fccae641dc35355bd2a", + "components/verifier.echo-dpo.component.wasm": "d0be4d283399aefc45d75b395b3568f9983521ca5543c9dfd23b9495758050ed", + "generated/evidence/provenance.provider-generation.json": "11a8ef81063f769ccfe431047be3473523fadd49582d6c935b7f7f8d7ccd81d5", + "generated/evidence/review.provider-generation.json": "24836f4170809f343a64dcce095a66765cdb922d652458a658d2f896d7547b78", + "generated/primary/authority-facts.echo-dpo.cbor": "e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6", + "generated/primary/authority-facts.echo-lawpack.cbor": "ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9", + "generated/primary/generated-artifact-profile.echo-dpo-registration.cbor": "4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34", + "generated/primary/lawpack.echo-dpo.cbor": "8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c", + "generated/primary/schema.echo-provider-artifacts.cddl": "e8b2f078445f1e970bf8e92a33c69bded54a025469791dc3f4a7a418892a3252", + "generated/primary/target-profile.echo-dpo.cbor": "1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e", + "generated/resources/resource.conformance-corpus.cbor": "f1f29d990f83c5af33952a69b16e9c9bbb7c2feb1d3989860b74c9e6c2c19b08", + "generated/resources/resource.lawpack-compatibility.cbor": "642945761cb7d60e133008620dc2a6b48fd0f77901b985e02b1d3398fb1411af", + "generated/resources/resource.lawpack-exports.cbor": "e80f3597830f30079bae7428cc6fe1ca27e9f2626614284338c5f5c7bfd9f8b8", + "generated/resources/resource.lawpack-target-adapter.cbor": "d0cf6a5310c7aa3d5bf291e40221a50a9be676d0e7f9947b71de0c52f03f9a41", + "generated/resources/resource.lawpack-verifier.cbor": "a0ca53486f2e1181027cab255792150735a68fc01a93669ab90b58e7c32bd36e", + "generated/resources/resource.target-bundle-profile.cbor": "95cc3aab106f0d6d77ec76e88591ee24acac58f4345c031b77cfd1ecf2aa0db8", + "generated/resources/resource.target-cost-algebra.cbor": "29cc941cc96ffdb420a24a377146f0e9d5409a89f84cdbb2ad597e78dfde3503", + "generated/resources/resource.target-footprint-algebra.cbor": "c08b853b22fa1920cb8971b60a6622e4d8f400c68b8027a9c4f246c5cb4a222c", + "generated/resources/resource.target-intrinsics.cbor": "d4080b044ad95d88763f605d25d678dad0d44bbfdc32c212334a962eaf456588", + "generated/resources/resource.target-ir.cbor": "f0ead7a5dcb41532d5df9067a9735d7078456b59cc267b3a9f6bb6437431000c", + "generated/resources/resource.target-lowerer-contract.cbor": "c4d788a8ae876cfe8c9e9875144014d551d38ff13b4d90bb9dfc46bc562bf280", + "generated/resources/resource.target-obstruction-taxonomy.cbor": "5eb85dc3fbb53890f4f5accf6a7a3c03889bd25bf00e7c2a23c43e497652328e", + "generated/resources/resource.target-operation-profiles.cbor": "3d560e8df1bfb38e8ba9b70b0a4bc843c848a7900e3af76d8f798db51b6b1077", + "generated/resources/resource.target-verifier-contract.cbor": "9cef12fac8190156e152e7c8ab5adeed077bf2bdadf3add2225ce90ab4be8710", + "provider-manifest.echo.json": "5b38ae704a071b88aa0cc2f85020de41cb69e76d037afe3592a4d319e22587c8" + }, + "authoredSourceSha256": "9fc1b006c298866463ab83a28fcb1e54769b970970c571f11d0868d79edc6d87", + "literalCasesStatus": "not executed", + "compositionStatus": "helpers are not connected to a retained-byte scanner", + "results": { + "read-control": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "4ec3cbf32fd5d98987cbeeaff95d7c9c5ab734dac555e443aac52e8ab02bfbc5", + "artifactSha256": { + "executable-operation-package.cbor": "afd931700018312d6c0d1e249871313d2c21c0ece1ae41d1f17f2be7af9e5284", + "verification-report.cbor": "9114fdd983d456eb83f69969475f558b6e608be23520212a5db5f26bb095d04b" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "fn-control": { + "exitCode": 2, + "diagnostics": [ + { + "command": "build", + "input": { + "kind": "stdin" + }, + "kind": "InvalidApplicationSource", + "message": "Edict source `/tmp/echo-726-runtime/jim-buffer-decoder-results/fn-control/src/ReplaceRange.edict` did not parse: ParseError { kind: ExpectedToken, message: \"expected `type`, `enum`, or `intent` declaration, found Ident(\\\"fn\\\")\", span: Span { start: 151, end: 153 } }", + "schema": "edict.cli.diagnostic/v1", + "severity": "error", + "stage": "cli", + "type": "diagnostic" + } + ], + "artifacts": [], + "sourceSha256": "97475b0e6aaf24d3268736efa3312df377b9153b89c8e59f0e2ceb25ce691218", + "artifactSha256": {}, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "001929f74b4648fdd8c7946bdb80b1ccea0fae03e5f208012bb454d0ab94a831" + }, + "decimal": { + "exitCode": 2, + "diagnostics": [ + { + "command": "build", + "input": { + "kind": "stdin" + }, + "kind": "InvalidApplicationSource", + "message": "Edict source `/tmp/echo-726-runtime/jim-buffer-decoder-results/decimal/src/ReplaceRange.edict` did not parse: ParseError { kind: Lex, message: \"invalid string escape\", span: Span { start: 861, end: 862 } }", + "schema": "edict.cli.diagnostic/v1", + "severity": "error", + "stage": "cli", + "type": "diagnostic" + } + ], + "artifacts": [], + "sourceSha256": "860712eaae8fad67499967e2475d9a2bef9d072762b3eab1004a3ddf4dba2b94", + "artifactSha256": {}, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "04838a07257a87554d0c8d0f397c0a661adf68719f0e7f604c642217190bae8b" + } + } +} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/ReplaceRange.edict b/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/ReplaceRange.edict new file mode 100644 index 00000000..1031dfc9 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/ReplaceRange.edict @@ -0,0 +1,18 @@ +package jedit.text.replace_range@1; +use lawpack jedit.text@1 digest "sha256:2ea164293719d2b03231c4904eb75ddcdf55fd29cc31f4fc5a5319d9ae5e60e7" as text; +type Input = { address: text.FactAddress, expected: text.FactBytes }; +intent replaceRange(input: Input) returns text.FactBytes + profile text.replaceRange + basis input.address.nodeId + budget <= text.replaceRangeBudget +{ + let actual: text.FactBytes = text.readFact(input.address) + else { + missing(address) => text.FactMissing, + typeMismatch(address) => text.FactMalformed, + notAtom(address) => text.FactMalformed, + tooLarge(address) => text.FactMalformed, + }; + require actual == input.expected else text.BasisNotCanonical; + return actual; +} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/application/executable-operation-package.cbor b/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/application/executable-operation-package.cbor new file mode 100644 index 00000000..a14f9ea2 Binary files /dev/null and b/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/application/executable-operation-package.cbor differ diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/application/verification-report.cbor b/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/application/verification-report.cbor new file mode 100644 index 00000000..fb4ef5d0 Binary files /dev/null and b/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/application/verification-report.cbor differ diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/stderr.jsonl b/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/stderr.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/stdout.jsonl b/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/stdout.jsonl new file mode 100644 index 00000000..a668538e --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/original/read-control/stdout.jsonl @@ -0,0 +1 @@ +{"checked":1,"command":"build","errors":0,"exitCode":0,"schema":"edict.cli.event/v1","status":"ok","type":"status"} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/original/run.py b/edict/replace-range-probes/buffer-decoder/evidence/original/run.py new file mode 100644 index 00000000..22125b03 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/original/run.py @@ -0,0 +1,75 @@ +"""Retain the real Buffer decimal helper's first public compiler boundary.""" + +import argparse +import json +from pathlib import Path +import runpy + + +COMPILER_COMMIT = "17397e2aad18a83ffc617d1afd628764501f49cd" +TRIVIAL_FUNCTION = b"fn retainFact(value: text.FactBytes) -> text.FactBytes { return value; }\n\n" + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + for name in ("compiler", "compiler-source", "compiler-manifest", "application-source", + "provider-package", "work-root"): + parser.add_argument("--" + name, type=Path, required=True) + args = parser.parse_args() + if not Path("/.dockerenv").is_file(): + raise RuntimeError("Run under shared git-locks admission and the guarded Docker lease") + if not args.work_root.resolve().is_relative_to(Path("/tmp/echo-726-runtime")): + raise RuntimeError("Work must stay inside the declared runtime-data accounting root") + common = runpy.run_path(str(Path(__file__).parent.parent / "leaf-slice/run.py")) + sha256, snapshot, verify = common["sha256"], common["snapshot"], common["verify_compiler_source"] + compiler = verify(args.compiler_source, args.compiler_manifest, COMPILER_COMMIT) + compiler["binarySha256"] = sha256(args.compiler) + before = {"application": snapshot(args.application_source), "provider": snapshot(args.provider_package)} + original = (args.application_source / "src/ReplaceRange.edict").read_bytes() + authored = (Path(__file__).parent / "Decimal.edict").read_bytes() + package, declarations = authored.split(b"\n", 1) + if not original.startswith(package + b"\n") or b"type Input" not in original: + raise RuntimeError("Expected the unchanged generic read control's source layout") + sources = { + "read-control": original, + "fn-control": original.replace(b"type Input", TRIVIAL_FUNCTION + b"type Input", 1), + "decimal": original.replace(b"type Input", declarations + b"\ntype Input", 1), + } + args.work_root.mkdir() + evidence = {"compiler": compiler, + "providerManifestSha256": sha256(args.provider_package / "provider-manifest.echo.json"), + "providerFiles": before["provider"], + "authoredSourceSha256": sha256(Path(__file__).parent / "Decimal.edict"), + "literalCasesStatus": "not executed", + "compositionStatus": "helpers are not connected to a retained-byte scanner", + "results": {}} + for name, source in sources.items(): + root = args.work_root / name + common["prepare"](root, args.application_source, args.provider_package, source) + evidence["results"][name] = common["build"](root, args.compiler) + (args.work_root / "evidence.json").write_text(json.dumps(evidence, indent=2) + "\n") + for name, result in evidence["results"].items(): + print(json.dumps({"case": name, **result}, sort_keys=True), flush=True) + if before != {"application": snapshot(args.application_source), "provider": snapshot(args.provider_package)}: + raise RuntimeError("Public witness changed an authoritative input") + if compiler["binarySha256"] != sha256(args.compiler): + raise RuntimeError("Compiler binary changed during witness") + verify(args.compiler_source, args.compiler_manifest, COMPILER_COMMIT) + positive = evidence["results"]["read-control"] + if (positive["exitCode"] != 0 or positive["diagnostics"] or positive["artifacts"] != + ["executable-operation-package.cbor", "verification-report.cbor"]): + raise RuntimeError("Generic read control did not reach package/report success") + for name in ("fn-control", "decimal"): + negative = evidence["results"][name] + if negative["exitCode"] != 2 or negative["artifacts"] or len(negative["diagnostics"]) != 1: + raise RuntimeError(f"{name} did not refuse without application artifacts") + diagnostic = negative["diagnostics"][0] + if (diagnostic.get("kind") != "ApplicationCompilationFailed" + or "expected `type`, `enum`, or `intent` declaration" not in diagnostic.get("message", "") + or 'fn' not in diagnostic.get("message", "")): + raise RuntimeError(f"{name} did not reach the source function parser boundary") + print("JIM_BUFFER_DECIMAL_SOURCE_FUNCTION_BOUNDARY_CONFIRMED", flush=True) + + +if __name__ == "__main__": + main() diff --git a/edict/replace-range-probes/buffer-decoder/evidence/provider-manifest.echo.json b/edict/replace-range-probes/buffer-decoder/evidence/provider-manifest.echo.json new file mode 100644 index 00000000..0ce89ee2 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/provider-manifest.echo.json @@ -0,0 +1,380 @@ +{ + "apiVersion": "edict.provider-manifest/v1", + "providerAbi": "edict:target-provider@1.0.0", + "provider": { + "coordinate": "echo.edict-provider@1", + "digest": "sha256:d5971bc387d873814a60ac46e1fc500c089f0e60c6ac8a232ebb43de139d39e6" + }, + "artifacts": [ + { + "role": "authority-facts.echo-dpo", + "artifactKind": "authorityFacts", + "resource": { + "coordinate": "echo.dpo-authority-facts@1", + "digest": "sha256:0347dd3ef916b20314c9d33fbd028432dfb53043fcb333390d8825dce72d7388" + }, + "source": { + "kind": "generated", + "semanticSource": { + "coordinate": "echo.semantic-schema@1", + "digest": "sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852" + }, + "generator": { + "coordinate": "echo-wesley-gen.provider-artifact-generator@1", + "digest": "sha256:c083c08da330b9d37c7c17b12ce24c5724b5a59d61fc75c8192a53e204e0add5" + } + } + }, + { + "role": "authority-facts.echo-lawpack", + "artifactKind": "authorityFacts", + "resource": { + "coordinate": "echo.dpo-lawpack-authority-facts@1", + "digest": "sha256:0e74b34fa901809f3cfe2aacd52f4dea708aa6d8481761193d7e1cd1afeca879" + }, + "source": { + "kind": "generated", + "semanticSource": { + "coordinate": "echo.semantic-schema@1", + "digest": "sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852" + }, + "generator": { + "coordinate": "echo-wesley-gen.provider-artifact-generator@1", + "digest": "sha256:c083c08da330b9d37c7c17b12ce24c5724b5a59d61fc75c8192a53e204e0add5" + } + } + }, + { + "role": "generated-artifact-profile.echo-dpo-registration", + "artifactKind": "generatedArtifactProfile", + "resource": { + "coordinate": "echo.dpo.registration/v1", + "digest": "sha256:ff88be93c26cc533948d8a93601954dc391912d593ca1e96115c846cbf2c5b5d" + }, + "source": { + "kind": "generated", + "semanticSource": { + "coordinate": "echo.semantic-schema@1", + "digest": "sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852" + }, + "generator": { + "coordinate": "echo-wesley-gen.provider-artifact-generator@1", + "digest": "sha256:c083c08da330b9d37c7c17b12ce24c5724b5a59d61fc75c8192a53e204e0add5" + } + } + }, + { + "role": "lawpack.echo-dpo", + "artifactKind": "lawpack", + "resource": { + "coordinate": "echo.dpo-lawpack@1", + "digest": "sha256:8abe773a94945fe1f46573bf4dc166a10ef723f5f5479e27ad03f7c891b77330" + }, + "source": { + "kind": "generated", + "semanticSource": { + "coordinate": "echo.semantic-schema@1", + "digest": "sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852" + }, + "generator": { + "coordinate": "echo-wesley-gen.provider-artifact-generator@1", + "digest": "sha256:c083c08da330b9d37c7c17b12ce24c5724b5a59d61fc75c8192a53e204e0add5" + } + } + }, + { + "role": "lowerer.echo-dpo", + "artifactKind": "lowerer", + "resource": { + "coordinate": "echo.dpo.lowerer/component@1", + "digest": "sha256:4b594a8165079f0a973741b9e27b468cf041f4ad53108fccae641dc35355bd2a" + }, + "source": { + "kind": "component", + "component": { + "coordinate": "echo.dpo.lowerer/component@1", + "digest": "sha256:4b594a8165079f0a973741b9e27b468cf041f4ad53108fccae641dc35355bd2a" + } + } + }, + { + "role": "provenance.provider-generation", + "artifactKind": "generationProvenance", + "resource": { + "coordinate": "echo.edict-provider-generation-provenance@1", + "digest": "sha256:11a8ef81063f769ccfe431047be3473523fadd49582d6c935b7f7f8d7ccd81d5" + }, + "source": { + "kind": "generated", + "semanticSource": { + "coordinate": "echo.semantic-schema@1", + "digest": "sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852" + }, + "generator": { + "coordinate": "echo-wesley-gen.provider-artifact-generator@1", + "digest": "sha256:c083c08da330b9d37c7c17b12ce24c5724b5a59d61fc75c8192a53e204e0add5" + } + } + }, + { + "role": "review.provider-generation", + "artifactKind": "reviewArtifact", + "resource": { + "coordinate": "echo.edict-provider-generation-review@1", + "digest": "sha256:24836f4170809f343a64dcce095a66765cdb922d652458a658d2f896d7547b78" + }, + "source": { + "kind": "generated", + "semanticSource": { + "coordinate": "echo.semantic-schema@1", + "digest": "sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852" + }, + "generator": { + "coordinate": "echo-wesley-gen.provider-artifact-generator@1", + "digest": "sha256:c083c08da330b9d37c7c17b12ce24c5724b5a59d61fc75c8192a53e204e0add5" + } + } + }, + { + "role": "schema.echo-provider-artifacts", + "artifactKind": "artifactSchema", + "resource": { + "coordinate": "echo.provider-artifacts.cddl@1", + "digest": "sha256:e8b2f078445f1e970bf8e92a33c69bded54a025469791dc3f4a7a418892a3252" + }, + "source": { + "kind": "generated", + "semanticSource": { + "coordinate": "echo.semantic-schema@1", + "digest": "sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852" + }, + "generator": { + "coordinate": "echo-wesley-gen.provider-artifact-generator@1", + "digest": "sha256:c083c08da330b9d37c7c17b12ce24c5724b5a59d61fc75c8192a53e204e0add5" + } + } + }, + { + "role": "target-profile.echo-dpo", + "artifactKind": "targetProfile", + "resource": { + "coordinate": "echo.dpo@1", + "digest": "sha256:2e2494121aecf5e6a2d920f5fb85408825d394765fad41484c416397c920fb04" + }, + "source": { + "kind": "generated", + "semanticSource": { + "coordinate": "echo.semantic-schema@1", + "digest": "sha256:322d9eb5eb8273108eaa602f2eb58ba591efcf829fecb10bb705717efae18852" + }, + "generator": { + "coordinate": "echo-wesley-gen.provider-artifact-generator@1", + "digest": "sha256:c083c08da330b9d37c7c17b12ce24c5724b5a59d61fc75c8192a53e204e0add5" + } + } + }, + { + "role": "verifier.echo-dpo", + "artifactKind": "verifier", + "resource": { + "coordinate": "echo.dpo.verifier/component@1", + "digest": "sha256:d0be4d283399aefc45d75b395b3568f9983521ca5543c9dfd23b9495758050ed" + }, + "source": { + "kind": "component", + "component": { + "coordinate": "echo.dpo.verifier/component@1", + "digest": "sha256:d0be4d283399aefc45d75b395b3568f9983521ca5543c9dfd23b9495758050ed" + } + } + } + ], + "schemaBindings": [ + { + "domain": "echo.dpo-lawpack.adapter.echo-dpo@1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-provider-lawpack-target-adapter" + }, + { + "domain": "echo.dpo-lawpack.compatibility@1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-provider-lawpack-compatibility" + }, + { + "domain": "echo.dpo-lawpack.exports@1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "lawpack-exports" + }, + { + "domain": "echo.dpo-lawpack.verifier@1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-provider-lawpack-verifier" + }, + { + "domain": "echo.dpo.bundle/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-dpo-bundle" + }, + { + "domain": "echo.dpo.cost/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-dpo-cost" + }, + { + "domain": "echo.dpo.fixtures/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-provider-conformance-corpus" + }, + { + "domain": "echo.dpo.footprint/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-dpo-footprint" + }, + { + "domain": "echo.dpo.intrinsics/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "intrinsics-document" + }, + { + "domain": "echo.dpo.lowerer/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-dpo-lowerer" + }, + { + "domain": "echo.dpo.obstructions/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-dpo-obstructions" + }, + { + "domain": "echo.dpo.operation-profiles/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "operation-profiles-document" + }, + { + "domain": "echo.dpo.verifier/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-dpo-verifier" + }, + { + "domain": "echo.generated-artifact-profile/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "generated-artifact-profile" + }, + { + "domain": "echo.generated-artifact/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "generated-artifact" + }, + { + "domain": "echo.operation-lowering-configuration/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-operation-lowering-configuration" + }, + { + "domain": "echo.operation-package-verifier-report/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-operation-package-verifier-report" + }, + { + "domain": "echo.operation-package/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-operation-package" + }, + { + "domain": "echo.review-payload/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "review-payload" + }, + { + "domain": "echo.span-ir/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "echo-span-ir" + }, + { + "domain": "echo.verifier-report/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "verifier-report" + }, + { + "domain": "edict.authority-facts/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "authority-facts" + }, + { + "domain": "edict.core.module/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "core-module" + }, + { + "domain": "edict.lawpack-adapter/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "lawpack-adapter" + }, + { + "domain": "edict.lawpack-exports/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "lawpack-exports" + }, + { + "domain": "edict.lawpack/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "lawpack-manifest" + }, + { + "domain": "edict.lowering-requirements/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "lowering-requirements" + }, + { + "domain": "edict.result-projection.artifact/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "result-projection" + }, + { + "domain": "edict.source/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "edict-source-bytes" + }, + { + "domain": "edict.target-ir.artifact/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "target-ir-artifact" + }, + { + "domain": "edict.target-profile/v1", + "schemaRole": "schema.echo-provider-artifacts", + "format": "selfContainedCddlV1", + "rootRule": "target-profile-manifest" + } + ] +} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/decimal/ReplaceRange.edict b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/decimal/ReplaceRange.edict new file mode 100644 index 00000000..3927ed0e --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/decimal/ReplaceRange.edict @@ -0,0 +1,93 @@ +package jedit.text.replace_range@1; +use lawpack jedit.text@1 digest "sha256:2ea164293719d2b03231c4904eb75ddcdf55fd29cc31f4fc5a5319d9ae5e60e7" as text; + +// Jim's JSON boundary codec. These are internal scanner values, not intent inputs. +// A later bounded scanner must obtain each token from the retained Buffer atom. +type JsonByte = Bytes; +type DecimalState = variant { Start, Zero, Digits(U64) }; +type DecimalStep = variant { More(DecimalState), End(U64), Invalid, Overflow }; +type DecimalDigit = variant { Digit(U64), NotDigit }; + +// An End result leaves the delimiter unconsumed for the enclosing JSON scanner. +// Whitespace terminates a number; canonical-byte policy belongs to that scanner. +fn isNumberDelimiter(token: JsonByte) -> Bool { + return token == b"," || token == b"]" || token == b"}" + || token == b" " || token == b"\t" || token == b"\r" || token == b"\n"; +} + +fn decimalDigit(token: JsonByte) -> DecimalDigit { + return if token == b"0" then DecimalDigit::Digit(0u64) + else if token == b"1" then DecimalDigit::Digit(1u64) + else if token == b"2" then DecimalDigit::Digit(2u64) + else if token == b"3" then DecimalDigit::Digit(3u64) + else if token == b"4" then DecimalDigit::Digit(4u64) + else if token == b"5" then DecimalDigit::Digit(5u64) + else if token == b"6" then DecimalDigit::Digit(6u64) + else if token == b"7" then DecimalDigit::Digit(7u64) + else if token == b"8" then DecimalDigit::Digit(8u64) + else if token == b"9" then DecimalDigit::Digit(9u64) + else DecimalDigit::NotDigit; +} + +fn appendScaled(scaled: U64, digit: U64, limit: U64) -> DecimalStep { + let sum = checkedAdd(scaled, digit); + return if isSome(sum) then + if unwrap(sum) <= limit then DecimalStep::More(DecimalState::Digits(unwrap(sum))) + else DecimalStep::Overflow + else DecimalStep::Overflow; +} + +fn appendDigit(value: U64, digit: U64, limit: U64) -> DecimalStep { + let decimalRadix = 10u64; + let product = checkedMul(value, decimalRadix); + return if isSome(product) then appendScaled(unwrap(product), digit, limit) + else DecimalStep::Overflow; +} + +fn startDecimal(token: JsonByte, limit: U64) -> DecimalStep { + return match decimalDigit(token) { + Digit(value) => if value > limit then DecimalStep::Overflow + else if value == 0u64 then DecimalStep::More(DecimalState::Zero) + else DecimalStep::More(DecimalState::Digits(value)), + NotDigit => DecimalStep::Invalid, + }; +} + +fn continueDecimal(value: U64, token: JsonByte, limit: U64) -> DecimalStep { + return if value == 0u64 then DecimalStep::Invalid + else if value > limit then DecimalStep::Overflow + else match decimalDigit(token) { + Digit(digit) => appendDigit(value, digit, limit), + NotDigit => if isNumberDelimiter(token) then DecimalStep::End(value) + else DecimalStep::Invalid, + }; +} + +// canonical_head_id members use limit 255; version uses 18446744073709551615. +// The enclosing scanner owns these schema limits and starts at Start. +// Empty token, sign, leading zero, fraction, exponent and non-ASCII byte refuse. +fn stepJsonUnsigned(state: DecimalState, token: JsonByte, limit: U64) -> DecimalStep { + return match state { + Start => startDecimal(token, limit), + Zero => if isNumberDelimiter(token) then DecimalStep::End(0u64) + else DecimalStep::Invalid, + Digits(value) => continueDecimal(value, token, limit), + }; +} + +type Input = { address: text.FactAddress, expected: text.FactBytes }; +intent replaceRange(input: Input) returns text.FactBytes + profile text.replaceRange + basis input.address.nodeId + budget <= text.replaceRangeBudget +{ + let actual: text.FactBytes = text.readFact(input.address) + else { + missing(address) => text.FactMissing, + typeMismatch(address) => text.FactMalformed, + notAtom(address) => text.FactMalformed, + tooLarge(address) => text.FactMalformed, + }; + require actual == input.expected else text.BasisNotCanonical; + return actual; +} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/decimal/stderr.jsonl b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/decimal/stderr.jsonl new file mode 100644 index 00000000..015af157 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/decimal/stderr.jsonl @@ -0,0 +1,2 @@ +{"command":"build","input":{"kind":"stdin"},"kind":"InvalidApplicationSource","message":"Edict source `/tmp/echo-726-runtime/jim-buffer-decoder-reproduction196/decimal/src/ReplaceRange.edict` did not parse: ParseError { kind: Lex, message: \"invalid string escape\", span: Span { start: 861, end: 862 } }","schema":"edict.cli.diagnostic/v1","severity":"error","stage":"cli","type":"diagnostic"} +{"checked":0,"command":"build","errors":1,"exitCode":2,"schema":"edict.cli.event/v1","status":"error","type":"status"} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/decimal/stdout.jsonl b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/decimal/stdout.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/fn-control/ReplaceRange.edict b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/fn-control/ReplaceRange.edict new file mode 100644 index 00000000..fe87ae1b --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/fn-control/ReplaceRange.edict @@ -0,0 +1,20 @@ +package jedit.text.replace_range@1; +use lawpack jedit.text@1 digest "sha256:2ea164293719d2b03231c4904eb75ddcdf55fd29cc31f4fc5a5319d9ae5e60e7" as text; +fn retainFact(value: text.FactBytes) -> text.FactBytes { return value; } + +type Input = { address: text.FactAddress, expected: text.FactBytes }; +intent replaceRange(input: Input) returns text.FactBytes + profile text.replaceRange + basis input.address.nodeId + budget <= text.replaceRangeBudget +{ + let actual: text.FactBytes = text.readFact(input.address) + else { + missing(address) => text.FactMissing, + typeMismatch(address) => text.FactMalformed, + notAtom(address) => text.FactMalformed, + tooLarge(address) => text.FactMalformed, + }; + require actual == input.expected else text.BasisNotCanonical; + return actual; +} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/fn-control/stderr.jsonl b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/fn-control/stderr.jsonl new file mode 100644 index 00000000..eb0d4ec3 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/fn-control/stderr.jsonl @@ -0,0 +1,2 @@ +{"command":"build","input":{"kind":"stdin"},"kind":"InvalidApplicationSource","message":"Edict source `/tmp/echo-726-runtime/jim-buffer-decoder-reproduction196/fn-control/src/ReplaceRange.edict` did not parse: ParseError { kind: ExpectedToken, message: \"expected `type`, `enum`, or `intent` declaration, found Ident(\\\"fn\\\")\", span: Span { start: 151, end: 153 } }","schema":"edict.cli.diagnostic/v1","severity":"error","stage":"cli","type":"diagnostic"} +{"checked":0,"command":"build","errors":1,"exitCode":2,"schema":"edict.cli.event/v1","status":"error","type":"status"} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/fn-control/stdout.jsonl b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/fn-control/stdout.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/guard.launch.json b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/guard.launch.json new file mode 100644 index 00000000..e07fa2b7 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/guard.launch.json @@ -0,0 +1,38 @@ +{ + "worker": "echo-read-runtime", + "image": "echo-read-runtime:red", + "lock": "/tmp/echo-validation-host.lock", + "inner_lock": "/tmp/echo-validation.lock", + "source": "/echo-audit", + "outputs": [ + "/lease-target", + "/usr/local/cargo", + "/tmp/echo-726-runtime", + "all container writable-layer paths", + "/dev/shm", + "/private/tmp/echo-739-resume/jim-buffer-reproduction196.log" + ], + "measurements": { + "build": 14641243958, + "data": 4101269302, + "logs": 11301697, + "host_free": 709769887744, + "vm_free": 674522402816 + }, + "build_limit": 21474836480, + "data_limit": 4294967296, + "log_limit": 134217728, + "cpus": 4.0, + "memory": 6442450944, + "logging": { + "Type": "json-file", + "Config": { + "max-file": "5", + "max-size": "20m" + } + }, + "timeout_seconds": 600, + "guard": "2-second fail-closed monitor; freeze owned process group across the entire size measurement, including cache du; pause container for snapshotter; accept an absent process group only after confirmed owned docker-exec completion; of aggregate writable layers, shared memory, host scratch and logs; no host binds or volumes", + "termination": "docker stop/kill owned worker and host docker-exec process group on monitoring failure or limit/timeout", + "command": "test ! -e /tmp/echo-726-runtime/buffer-reproduction196-input\nmkdir /tmp/echo-726-runtime/buffer-reproduction196-input\ntar -xf /tmp/echo-726-runtime/buffer-reproduction196-input.tar -C /tmp/echo-726-runtime/buffer-reproduction196-input\ncd /edict-207\nexport CARGO_TARGET_DIR=/lease-target CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=4 CARGO_PROFILE_DEV_DEBUG=0 CARGO_PROFILE_TEST_DEBUG=0\npython3 - <<'INNER'\nfrom pathlib import Path\nimport runpy,hashlib,subprocess\nr=Path('/tmp/echo-726-runtime/buffer-reproduction196-input/edict/replace-range-probes')\ncommon=runpy.run_path(str(r/'leaf-slice/run.py'))\nprint(common['verify_compiler_source'](Path('/edict-207'),r/'buffer-decoder/evidence/compiler-source.json','17397e2aad18a83ffc617d1afd628764501f49cd'),flush=True)\nassert not subprocess.check_output(['git','-C','/edict-207','status','--porcelain'],text=True).strip()\nbinary=Path('/lease-target/debug/edict')\nexpected='e2700698829b03f437c66425ed9878b002ef7a34ac183a39bac4eaf6a758cc6d'\nif True:\n assert '1.96.0-aarch64-unknown-linux-gnu' in subprocess.check_output(['rustup','toolchain','list'],text=True)\n print(subprocess.check_output(['rustc','+1.96.0','--version','--verbose'],text=True),flush=True)\n subprocess.run(['cargo','+1.96.0','clean','-p','edict-cli','-p','edict-syntax'],check=True)\n subprocess.run(['cargo','+1.96.0','build','--locked','-p','edict-cli'],check=True)\nprint('ACTUAL_COMPILER_BINARY',hashlib.sha256(binary.read_bytes()).hexdigest(),flush=True)\nsubprocess.run(['python3',str(r/'buffer-decoder/run.py'),'--compiler',str(binary),'--compiler-sha256',hashlib.sha256(binary.read_bytes()).hexdigest(),'--compiler-source','/edict-207','--compiler-manifest',str(r/'buffer-decoder/evidence/compiler-source.json'),'--application-source',str(r/'buffer-decoder/control'),'--provider-package','/read-provider','--work-root','/tmp/echo-726-runtime/jim-buffer-decoder-reproduction196'],check=True)\nINNER\n" +} \ No newline at end of file diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/guard.log b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/guard.log new file mode 100644 index 00000000..a2e605f3 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/guard.log @@ -0,0 +1,20 @@ +{'commit': '17397e2aad18a83ffc617d1afd628764501f49cd', 'tree': 'bcfd3112cd8b3d4630738a88761860679b45714b', 'fileCount': 449, 'manifestSha256': '625592ab9dd715349255bece0133378c64b3d4539fb50e437d116c2a4296f016'} +rustc 1.96.0 (ac68faa20 2026-05-25) +binary: rustc +commit-hash: ac68faa20c58cbccd01ee7208bf3b6e93a7d7f96 +commit-date: 2026-05-25 +host: aarch64-unknown-linux-gnu +release: 1.96.0 +LLVM version: 22.1.2 + + Removed 140 files, 343.4MiB total + Compiling edict-syntax v0.11.0-alpha.1 (/edict-207/crates/edict-syntax) + Compiling edict-provider-schema v0.11.0-alpha.1 (/edict-207/crates/edict-provider-schema) + Compiling edict-provider-host-wasmtime v0.11.0-alpha.1 (/edict-207/crates/edict-provider-host-wasmtime) + Compiling edict-cli v0.11.0-alpha.1 (/edict-207/crates/edict-cli) + Finished `dev` profile [unoptimized] target(s) in 7.44s +ACTUAL_COMPILER_BINARY 83c70b3fdbb42ac43f0967a0c559c0cc8b66599987774a40412bda4fbc028d36 +{"artifactSha256": {"executable-operation-package.cbor": "afd931700018312d6c0d1e249871313d2c21c0ece1ae41d1f17f2be7af9e5284", "verification-report.cbor": "9114fdd983d456eb83f69969475f558b6e608be23520212a5db5f26bb095d04b"}, "artifacts": ["executable-operation-package.cbor", "verification-report.cbor"], "case": "read-control", "diagnostics": [], "exitCode": 0, "sourceSha256": "4ec3cbf32fd5d98987cbeeaff95d7c9c5ab734dac555e443aac52e8ab02bfbc5", "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61"} +{"artifactSha256": {}, "artifacts": [], "case": "fn-control", "diagnostics": [{"command": "build", "input": {"kind": "stdin"}, "kind": "InvalidApplicationSource", "message": "Edict source `/tmp/echo-726-runtime/jim-buffer-decoder-reproduction196/fn-control/src/ReplaceRange.edict` did not parse: ParseError { kind: ExpectedToken, message: \"expected `type`, `enum`, or `intent` declaration, found Ident(\\\"fn\\\")\", span: Span { start: 151, end: 153 } }", "schema": "edict.cli.diagnostic/v1", "severity": "error", "stage": "cli", "type": "diagnostic"}], "exitCode": 2, "sourceSha256": "97475b0e6aaf24d3268736efa3312df377b9153b89c8e59f0e2ceb25ce691218", "stderrSha256": "8ce5808f7da7f7457b8cdca7ad00e080f3358a4a35d502d6ac9aee5c83255090", "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} +{"artifactSha256": {}, "artifacts": [], "case": "decimal", "diagnostics": [{"command": "build", "input": {"kind": "stdin"}, "kind": "InvalidApplicationSource", "message": "Edict source `/tmp/echo-726-runtime/jim-buffer-decoder-reproduction196/decimal/src/ReplaceRange.edict` did not parse: ParseError { kind: Lex, message: \"invalid string escape\", span: Span { start: 861, end: 862 } }", "schema": "edict.cli.diagnostic/v1", "severity": "error", "stage": "cli", "type": "diagnostic"}], "exitCode": 2, "sourceSha256": "860712eaae8fad67499967e2475d9a2bef9d072762b3eab1004a3ddf4dba2b94", "stderrSha256": "2c45c51317aa6dffbcd96684a6b288ac9a429c2a19f3672e09c8b85b6ed1adb8", "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} +JIM_BUFFER_DECIMAL_DISTINCT_SOURCE_BOUNDARIES_CONFIRMED diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/guard.result.json b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/guard.result.json new file mode 100644 index 00000000..0c9df3b9 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/guard.result.json @@ -0,0 +1,10 @@ +{ + "measurements": { + "build": 14448304197, + "data": 4104511557, + "logs": 11304883, + "host_free": 709664010240, + "vm_free": 674522402816 + }, + "exit_code": 0 +} \ No newline at end of file diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/public-build.json b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/public-build.json new file mode 100644 index 00000000..47382e4c --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/public-build.json @@ -0,0 +1,101 @@ +{ + "compiler": { + "commit": "17397e2aad18a83ffc617d1afd628764501f49cd", + "tree": "bcfd3112cd8b3d4630738a88761860679b45714b", + "fileCount": 449, + "manifestSha256": "625592ab9dd715349255bece0133378c64b3d4539fb50e437d116c2a4296f016", + "binarySha256": "83c70b3fdbb42ac43f0967a0c559c0cc8b66599987774a40412bda4fbc028d36" + }, + "providerManifestSha256": "5b38ae704a071b88aa0cc2f85020de41cb69e76d037afe3592a4d319e22587c8", + "providerFiles": { + "components/lowerer.echo-dpo.component.wasm": "4b594a8165079f0a973741b9e27b468cf041f4ad53108fccae641dc35355bd2a", + "components/verifier.echo-dpo.component.wasm": "d0be4d283399aefc45d75b395b3568f9983521ca5543c9dfd23b9495758050ed", + "generated/evidence/provenance.provider-generation.json": "11a8ef81063f769ccfe431047be3473523fadd49582d6c935b7f7f8d7ccd81d5", + "generated/evidence/review.provider-generation.json": "24836f4170809f343a64dcce095a66765cdb922d652458a658d2f896d7547b78", + "generated/primary/authority-facts.echo-dpo.cbor": "e2a6a539a7156296c18ff1bc02f80dcabf62b42bb4314d0737527869e43986d6", + "generated/primary/authority-facts.echo-lawpack.cbor": "ce1af559551f8b8242c4b290b620c5a28323b9e43f8bc6bb161a191001b6f4b9", + "generated/primary/generated-artifact-profile.echo-dpo-registration.cbor": "4ef3aaad0d2131ba7129a3e2ae178d10c44f7e9b062af2c1fe211de781462f34", + "generated/primary/lawpack.echo-dpo.cbor": "8c570362671a0b1cd1a992d8210e4a90ffd153ad06dcdf1e0cb36033cc971e2c", + "generated/primary/schema.echo-provider-artifacts.cddl": "e8b2f078445f1e970bf8e92a33c69bded54a025469791dc3f4a7a418892a3252", + "generated/primary/target-profile.echo-dpo.cbor": "1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e", + "generated/resources/resource.conformance-corpus.cbor": "f1f29d990f83c5af33952a69b16e9c9bbb7c2feb1d3989860b74c9e6c2c19b08", + "generated/resources/resource.lawpack-compatibility.cbor": "642945761cb7d60e133008620dc2a6b48fd0f77901b985e02b1d3398fb1411af", + "generated/resources/resource.lawpack-exports.cbor": "e80f3597830f30079bae7428cc6fe1ca27e9f2626614284338c5f5c7bfd9f8b8", + "generated/resources/resource.lawpack-target-adapter.cbor": "d0cf6a5310c7aa3d5bf291e40221a50a9be676d0e7f9947b71de0c52f03f9a41", + "generated/resources/resource.lawpack-verifier.cbor": "a0ca53486f2e1181027cab255792150735a68fc01a93669ab90b58e7c32bd36e", + "generated/resources/resource.target-bundle-profile.cbor": "95cc3aab106f0d6d77ec76e88591ee24acac58f4345c031b77cfd1ecf2aa0db8", + "generated/resources/resource.target-cost-algebra.cbor": "29cc941cc96ffdb420a24a377146f0e9d5409a89f84cdbb2ad597e78dfde3503", + "generated/resources/resource.target-footprint-algebra.cbor": "c08b853b22fa1920cb8971b60a6622e4d8f400c68b8027a9c4f246c5cb4a222c", + "generated/resources/resource.target-intrinsics.cbor": "d4080b044ad95d88763f605d25d678dad0d44bbfdc32c212334a962eaf456588", + "generated/resources/resource.target-ir.cbor": "f0ead7a5dcb41532d5df9067a9735d7078456b59cc267b3a9f6bb6437431000c", + "generated/resources/resource.target-lowerer-contract.cbor": "c4d788a8ae876cfe8c9e9875144014d551d38ff13b4d90bb9dfc46bc562bf280", + "generated/resources/resource.target-obstruction-taxonomy.cbor": "5eb85dc3fbb53890f4f5accf6a7a3c03889bd25bf00e7c2a23c43e497652328e", + "generated/resources/resource.target-operation-profiles.cbor": "3d560e8df1bfb38e8ba9b70b0a4bc843c848a7900e3af76d8f798db51b6b1077", + "generated/resources/resource.target-verifier-contract.cbor": "9cef12fac8190156e152e7c8ab5adeed077bf2bdadf3add2225ce90ab4be8710", + "provider-manifest.echo.json": "5b38ae704a071b88aa0cc2f85020de41cb69e76d037afe3592a4d319e22587c8" + }, + "authoredSourceSha256": "9fc1b006c298866463ab83a28fcb1e54769b970970c571f11d0868d79edc6d87", + "literalCasesStatus": "not executed", + "compositionStatus": "helpers are not connected to a retained-byte scanner", + "results": { + "read-control": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "4ec3cbf32fd5d98987cbeeaff95d7c9c5ab734dac555e443aac52e8ab02bfbc5", + "artifactSha256": { + "executable-operation-package.cbor": "afd931700018312d6c0d1e249871313d2c21c0ece1ae41d1f17f2be7af9e5284", + "verification-report.cbor": "9114fdd983d456eb83f69969475f558b6e608be23520212a5db5f26bb095d04b" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "fn-control": { + "exitCode": 2, + "diagnostics": [ + { + "command": "build", + "input": { + "kind": "stdin" + }, + "kind": "InvalidApplicationSource", + "message": "Edict source `/tmp/echo-726-runtime/jim-buffer-decoder-reproduction196/fn-control/src/ReplaceRange.edict` did not parse: ParseError { kind: ExpectedToken, message: \"expected `type`, `enum`, or `intent` declaration, found Ident(\\\"fn\\\")\", span: Span { start: 151, end: 153 } }", + "schema": "edict.cli.diagnostic/v1", + "severity": "error", + "stage": "cli", + "type": "diagnostic" + } + ], + "artifacts": [], + "sourceSha256": "97475b0e6aaf24d3268736efa3312df377b9153b89c8e59f0e2ceb25ce691218", + "artifactSha256": {}, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "8ce5808f7da7f7457b8cdca7ad00e080f3358a4a35d502d6ac9aee5c83255090" + }, + "decimal": { + "exitCode": 2, + "diagnostics": [ + { + "command": "build", + "input": { + "kind": "stdin" + }, + "kind": "InvalidApplicationSource", + "message": "Edict source `/tmp/echo-726-runtime/jim-buffer-decoder-reproduction196/decimal/src/ReplaceRange.edict` did not parse: ParseError { kind: Lex, message: \"invalid string escape\", span: Span { start: 861, end: 862 } }", + "schema": "edict.cli.diagnostic/v1", + "severity": "error", + "stage": "cli", + "type": "diagnostic" + } + ], + "artifacts": [], + "sourceSha256": "860712eaae8fad67499967e2475d9a2bef9d072762b3eab1004a3ddf4dba2b94", + "artifactSha256": {}, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "2c45c51317aa6dffbcd96684a6b288ac9a429c2a19f3672e09c8b85b6ed1adb8" + } + } +} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/ReplaceRange.edict b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/ReplaceRange.edict new file mode 100644 index 00000000..1031dfc9 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/ReplaceRange.edict @@ -0,0 +1,18 @@ +package jedit.text.replace_range@1; +use lawpack jedit.text@1 digest "sha256:2ea164293719d2b03231c4904eb75ddcdf55fd29cc31f4fc5a5319d9ae5e60e7" as text; +type Input = { address: text.FactAddress, expected: text.FactBytes }; +intent replaceRange(input: Input) returns text.FactBytes + profile text.replaceRange + basis input.address.nodeId + budget <= text.replaceRangeBudget +{ + let actual: text.FactBytes = text.readFact(input.address) + else { + missing(address) => text.FactMissing, + typeMismatch(address) => text.FactMalformed, + notAtom(address) => text.FactMalformed, + tooLarge(address) => text.FactMalformed, + }; + require actual == input.expected else text.BasisNotCanonical; + return actual; +} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/application/executable-operation-package.cbor b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/application/executable-operation-package.cbor new file mode 100644 index 00000000..a14f9ea2 Binary files /dev/null and b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/application/executable-operation-package.cbor differ diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/application/verification-report.cbor b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/application/verification-report.cbor new file mode 100644 index 00000000..fb4ef5d0 Binary files /dev/null and b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/application/verification-report.cbor differ diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/stderr.jsonl b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/stderr.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/stdout.jsonl b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/stdout.jsonl new file mode 100644 index 00000000..a668538e --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/reproduction196/read-control/stdout.jsonl @@ -0,0 +1 @@ +{"checked":1,"command":"build","errors":0,"exitCode":0,"schema":"edict.cli.event/v1","status":"ok","type":"status"} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/after-cleanup-usage.json b/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/after-cleanup-usage.json new file mode 100644 index 00000000..a5ff90fc --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/after-cleanup-usage.json @@ -0,0 +1,7 @@ +{ + "build": 14968038699, + "data": 4074673451, + "logs": 11298083, + "host_free": 709162811392, + "vm_free": 673964335104 +} diff --git a/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/guard.launch.json b/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/guard.launch.json new file mode 100644 index 00000000..2fcf115f --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/guard.launch.json @@ -0,0 +1,38 @@ +{ + "worker": "echo-read-runtime", + "image": "echo-read-runtime:red", + "lock": "/tmp/echo-validation-host.lock", + "inner_lock": "/tmp/echo-validation.lock", + "source": "/echo-audit", + "outputs": [ + "/lease-target", + "/usr/local/cargo", + "/tmp/echo-726-runtime", + "all container writable-layer paths", + "/dev/shm", + "/private/tmp/echo-739-resume/jim-buffer-reproduction.log" + ], + "measurements": { + "build": 14967762459, + "data": 4074397211, + "logs": 11266512, + "host_free": 709436264448, + "vm_free": 674182402048 + }, + "build_limit": 21474836480, + "data_limit": 4294967296, + "log_limit": 134217728, + "cpus": 4.0, + "memory": 6442450944, + "logging": { + "Type": "json-file", + "Config": { + "max-file": "5", + "max-size": "20m" + } + }, + "timeout_seconds": 600, + "guard": "2-second fail-closed monitor; freeze owned process group across the entire size measurement, including cache du; pause container for snapshotter; accept an absent process group only after confirmed owned docker-exec completion; of aggregate writable layers, shared memory, host scratch and logs; no host binds or volumes", + "termination": "docker stop/kill owned worker and host docker-exec process group on monitoring failure or limit/timeout", + "command": "test ! -e /tmp/echo-726-runtime/buffer-reproduction-input\nmkdir /tmp/echo-726-runtime/buffer-reproduction-input\ntar -xf /tmp/echo-726-runtime/buffer-reproduction-input.tar -C /tmp/echo-726-runtime/buffer-reproduction-input\ncd /edict-207\nexport CARGO_TARGET_DIR=/lease-target CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=4 CARGO_PROFILE_DEV_DEBUG=0 CARGO_PROFILE_TEST_DEBUG=0\npython3 - <<'INNER'\nfrom pathlib import Path\nimport runpy,hashlib,subprocess\nr=Path('/tmp/echo-726-runtime/buffer-reproduction-input/edict/replace-range-probes')\ncommon=runpy.run_path(str(r/'leaf-slice/run.py'))\nprint(common['verify_compiler_source'](Path('/edict-207'),r/'buffer-decoder/evidence/compiler-source.json','17397e2aad18a83ffc617d1afd628764501f49cd'),flush=True)\nassert not subprocess.check_output(['git','-C','/edict-207','status','--porcelain'],text=True).strip()\nbinary=Path('/lease-target/debug/edict')\nexpected='e2700698829b03f437c66425ed9878b002ef7a34ac183a39bac4eaf6a758cc6d'\nif not binary.exists() or hashlib.sha256(binary.read_bytes()).hexdigest()!=expected:\n subprocess.run(['cargo','+1.95.0','clean','-p','edict-cli','-p','edict-syntax'],check=True)\n subprocess.run(['cargo','+1.95.0','build','--locked','-p','edict-cli'],check=True)\nprint('ACTUAL_COMPILER_BINARY',hashlib.sha256(binary.read_bytes()).hexdigest(),flush=True)\nsubprocess.run(['python3',str(r/'buffer-decoder/run.py'),'--compiler',str(binary),'--compiler-source','/edict-207','--compiler-manifest',str(r/'buffer-decoder/evidence/compiler-source.json'),'--application-source',str(r/'buffer-decoder/control'),'--provider-package','/read-provider','--work-root','/tmp/echo-726-runtime/jim-buffer-decoder-reproduction'],check=True)\nINNER\n" +} \ No newline at end of file diff --git a/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/guard.log b/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/guard.log new file mode 100644 index 00000000..a05413ce --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/guard.log @@ -0,0 +1,4 @@ +{'commit': '17397e2aad18a83ffc617d1afd628764501f49cd', 'tree': 'bcfd3112cd8b3d4630738a88761860679b45714b', 'fileCount': 449, 'manifestSha256': '625592ab9dd715349255bece0133378c64b3d4539fb50e437d116c2a4296f016'} +info: syncing channel updates for 1.95.0-aarch64-unknown-linux-gnu +info: latest update on 2026-04-16 for version 1.95.0 (59807616e 2026-04-14) +info: downloading 3 components diff --git a/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/observer-record.json b/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/observer-record.json new file mode 100644 index 00000000..a1c5adb4 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/observer-record.json @@ -0,0 +1,17 @@ +{ + "observer": "root Echo Edict Jim agent", + "evidenceSource": "functions.write_stdin session8441 terminal output", + "guard": "guarded-worker-v2.py measured_sizes raised RuntimeError(project budget)", + "exitCode": 1, + "measurementsAtRefusal": { + "build": 15219153753, + "data": 4325788505, + "logs": 11266897, + "host_free": 709395468288, + "vm_free": 674182402048 + }, + "dataLimit": 4294967296, + "compilerTestStarted": false, + "workerStopped": true, + "qualification": "Observer-authored record of the displayed guard exception; not a raw compiler diagnostic or raw controller stdout file" +} \ No newline at end of file diff --git a/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/partial-toolchain-cleanup.txt b/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/partial-toolchain-cleanup.txt new file mode 100644 index 00000000..b8131f67 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/evidence/resource-stop/partial-toolchain-cleanup.txt @@ -0,0 +1,35 @@ +[ + { + "path": "/usr/local/rustup/toolchains/1.95.0-aarch64-unknown-linux-gnu", + "mtime": 1791180435.339878, + "bytes": 199361672 + }, + { + "path": "/usr/local/rustup/downloads/7c070aeba9bbf12073646995a03f36c346bb5f541d0078ba6d9dc2a7adaaf6af", + "mtime": 1791180434.8780186, + "bytes": 10412640 + }, + { + "path": "/usr/local/rustup/downloads/0fe3689eeaed603e5ef24572d11597d3edadaefd2cb181674ad621260f2501d2.partial", + "mtime": 1791180445.4150162, + "bytes": 46322112 + }, + { + "path": "/usr/local/rustup/downloads/3a21b271b1ff973b94d69b25e7a39992f9fbcae1ab6d9475844a23e6ad3908ac", + "mtime": 1791180442.7890167, + "bytes": 28233468 + }, + { + "path": "/usr/local/rustup/tmp/nhqoekhftw1pdi7k_file", + "mtime": 1791180444.6051555, + "bytes": 32 + }, + { + "path": "/usr/local/rustup/tmp/7mlm87b4uhm30gts_file", + "mtime": 1791180444.606756, + "bytes": 1 + } +] +1.90.0-aarch64-unknown-linux-gnu (active, default) +1.96.0-aarch64-unknown-linux-gnu + diff --git a/edict/replace-range-probes/buffer-decoder/run.py b/edict/replace-range-probes/buffer-decoder/run.py new file mode 100644 index 00000000..fa56c6f1 --- /dev/null +++ b/edict/replace-range-probes/buffer-decoder/run.py @@ -0,0 +1,98 @@ +"""Reproduce the distinct function-parser and decimal-lexer boundaries.""" + +import argparse +import json +from pathlib import Path +import runpy + + +COMPILER_COMMIT = "17397e2aad18a83ffc617d1afd628764501f49cd" +HISTORICAL_COMPILER_SHA256 = "e2700698829b03f437c66425ed9878b002ef7a34ac183a39bac4eaf6a758cc6d" +TRIVIAL_FUNCTION = b"fn retainFact(value: text.FactBytes) -> text.FactBytes { return value; }\n\n" + + +def compiler_digest(value): + if len(value) != 64 or any(char not in "0123456789abcdef" for char in value): + raise argparse.ArgumentTypeError("compiler SHA-256 must be 64 lowercase hexadecimal digits") + return value + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + for name in ("compiler", "compiler-source", "compiler-manifest", "application-source", + "provider-package", "work-root"): + parser.add_argument("--" + name, type=Path, required=True) + parser.add_argument("--compiler-sha256", type=compiler_digest, + default=HISTORICAL_COMPILER_SHA256, + help="explicit binary pin from the controlled compiler build; defaults to the historical binary") + args = parser.parse_args() + if not Path("/.dockerenv").is_file(): + raise RuntimeError("Run under shared git-locks admission and the guarded Docker lease") + if not args.work_root.resolve().is_relative_to(Path("/tmp/echo-726-runtime")): + raise RuntimeError("Work must stay inside the declared runtime-data accounting root") + common = runpy.run_path(str(Path(__file__).parent.parent / "leaf-slice/run.py")) + sha256, snapshot, verify = common["sha256"], common["snapshot"], common["verify_compiler_source"] + compiler = verify(args.compiler_source, args.compiler_manifest, COMPILER_COMMIT) + compiler["binarySha256"] = sha256(args.compiler) + before = {"application": snapshot(args.application_source), "provider": snapshot(args.provider_package)} + original = (args.application_source / "src/ReplaceRange.edict").read_bytes() + authored = (Path(__file__).parent / "Decimal.edict").read_bytes() + package, declarations = authored.split(b"\n", 1) + if not original.startswith(package + b"\n") or b"type Input" not in original: + raise RuntimeError("Expected the unchanged generic read control's source layout") + expected = json.loads((Path(__file__).parent / "evidence/original/public-build.json").read_text()) + expected_compiler = dict(expected["compiler"], binarySha256=args.compiler_sha256) + if compiler != expected_compiler: + raise RuntimeError("Compiler source or explicitly pinned binary identity differs") + if before["provider"] != expected["providerFiles"]: + raise RuntimeError("Provider bytes differ from the retained public witness") + if sha256(Path(__file__).parent / "Decimal.edict") != expected["authoredSourceSha256"]: + raise RuntimeError("Authored source differs from the retained public witness") + if sha256(args.application_source / "src/ReplaceRange.edict") != expected["results"]["read-control"]["sourceSha256"]: + raise RuntimeError("Read control differs from the retained public witness") + sources = { + "read-control": original, + "fn-control": original.replace(b"type Input", TRIVIAL_FUNCTION + b"type Input", 1), + "decimal": original.replace(b"type Input", declarations + b"\ntype Input", 1), + } + args.work_root.mkdir() + evidence = {"compiler": compiler, + "providerManifestSha256": sha256(args.provider_package / "provider-manifest.echo.json"), + "providerFiles": before["provider"], + "authoredSourceSha256": sha256(Path(__file__).parent / "Decimal.edict"), + "literalCasesStatus": "not executed", + "compositionStatus": "helpers are not connected to a retained-byte scanner", + "results": {}} + for name, source in sources.items(): + root = args.work_root / name + common["prepare"](root, args.application_source, args.provider_package, source) + evidence["results"][name] = common["build"](root, args.compiler) + (args.work_root / "evidence.json").write_text(json.dumps(evidence, indent=2) + "\n") + for name, result in evidence["results"].items(): + print(json.dumps({"case": name, **result}, sort_keys=True), flush=True) + if before != {"application": snapshot(args.application_source), "provider": snapshot(args.provider_package)}: + raise RuntimeError("Public witness changed an authoritative input") + if compiler["binarySha256"] != sha256(args.compiler): + raise RuntimeError("Compiler binary changed during witness") + verify(args.compiler_source, args.compiler_manifest, COMPILER_COMMIT) + positive = evidence["results"]["read-control"] + if (positive["exitCode"] != 0 or positive["diagnostics"] or positive["artifacts"] != + ["executable-operation-package.cbor", "verification-report.cbor"]): + raise RuntimeError("Generic read control did not reach package/report success") + expected_messages = { + "fn-control": ("kind: ExpectedToken", "expected `type`, `enum`, or `intent` declaration", "fn"), + "decimal": ("kind: Lex", "invalid string escape"), + } + for name, markers in expected_messages.items(): + negative = evidence["results"][name] + if negative["exitCode"] != 2 or negative["artifacts"] or len(negative["diagnostics"]) != 1: + raise RuntimeError(f"{name} did not refuse without application artifacts") + diagnostic = negative["diagnostics"][0] + if (diagnostic.get("kind") != "InvalidApplicationSource" + or any(marker not in diagnostic.get("message", "") for marker in markers)): + raise RuntimeError(f"{name} did not reach its retained source boundary") + print("JIM_BUFFER_DECIMAL_DISTINCT_SOURCE_BOUNDARIES_CONFIRMED", flush=True) + + +if __name__ == "__main__": + main() diff --git a/edict/replace-range-probes/leaf-slice/LeafSlice.edict b/edict/replace-range-probes/leaf-slice/LeafSlice.edict new file mode 100644 index 00000000..63b51745 --- /dev/null +++ b/edict/replace-range-probes/leaf-slice/LeafSlice.edict @@ -0,0 +1,24 @@ +package jedit.text.replace_range@1; + +use lawpack jedit.text@1 digest "sha256:95758c1605894672cc9069fde01bb8b6e11842b053102660c9cd4f4d6f34d64e" as text; + +type Input = { + blobBytes: Bytes, + startByte: U64, + endByte: U64, +}; + +type LeafBytes = { + bytes: Bytes, +}; + +intent sliceLeaf(input: Input) returns LeafBytes + profile text.replaceRange + basis none + budget <= text.replaceRangeBudget + where input.startByte <= input.endByte, + input.endByte <= len(input.blobBytes) +{ + let bytes = slice(input.blobBytes, input.startByte, input.endByte); + return { bytes }; +} diff --git a/edict/replace-range-probes/leaf-slice/README.md b/edict/replace-range-probes/leaf-slice/README.md new file mode 100644 index 00000000..63cdda9f --- /dev/null +++ b/edict/replace-range-probes/leaf-slice/README.md @@ -0,0 +1,161 @@ +# Authored leaf-byte slicing pressure + +`LeafSlice.edict` isolates the byte extraction used by persistent leaf splitting +in [Jim #296](https://github.com/flyingrobots/jedit/issues/296). It is an authored +compiler input, not a completed rope operation or a native callback. + +The frozen [fact law](../../../contracts/jedit/lawpacks/replace-range-v1/text-schema-v1.json) +stores a leaf's `blob_id`, `byte_start`, and `byte_length`. The existing +[`locate_leaf_slice` and `make_leaf_slice`](../../../native/jedit-echo-host/src/rope/tree.rs) +first check absolute offsets, extract the half-open byte range, validate UTF-8, +and derive metrics. This source isolates extraction after absolute offsets have +been obtained. It does not decode facts, validate UTF-8, derive metrics, or +publish a new leaf. + +The proposed generic primitive is `slice(bytes, start, end)`. Offsets are U64; +the result retains the operand's maximum byte bound and drops any exact-length +refinement. The source requires `start <= end` and `end <= len(bytes)` before +evaluation. Invalid inputs must fail ordinary input constraints, without +clipping, truncation, wrapping, or a host panic. A slice inside a UTF-8 code +point is still a lawful byte slice; Jim's later UTF-8 validation owns rejection +as a text operation. + +[`cases.json`](cases.json) records literal runtime expectations, including +empty, full, interior, binary, Unicode, invalid-range, and U64-limit inputs. +They were not executed by the public compiler witnesses below. The file is a conformance specification, never +an executable lawpack input or a substitute for the retained 40-case rope +oracle. + +## Current boundary + +Source inspection of Edict main `ac63fe679973e8119244471c124cde44dea5984f` +found no implementation of this primitive. Its closed Bytes prelude currently +provides comparison and length. Its source compiler also rejects Option types, +so the first capability uses explicit range proofs instead of relying on an +unavailable Option result. + +The [retained public-build RED](evidence/public-build-red.json) uses the +already built experimental compiler `2405a550e93e1e97fff640caa44bbd0f65ffff3c`, +with the unchanged Echo provider from `49e9efb68001dfd78563d18bac9359a87671e431`. +It does **not** use or replace the frozen application's `3f81f759` compiler pin. +The witness checks all 440 copied compiler-source files against their Git blob +identities before and after execution and records the existing binary hash. +It reuses that binary; this run does not reproduce its compilation. + +| Authored input | Public build result | +| --- | --- | +| Frozen boundary source | Exit 0; executable package and separate verification report | +| Leaf source with only the `slice(...)` expression replaced by `input.blobBytes` | Exit 0; executable package and separate verification report | +| Exact `LeafSlice.edict` | Exit 2; `ApplicationCompilationFailed`, with `TypeCheck` / `UnresolvedFunction`: `pure helper \`slice\` has no compiler context fact`; no application artifacts | + +The primary source diagnostic covers bytes 521–575, the call at line 22. The +following unresolved-binding and return diagnostics are cascading failures. +The paired control proves the range constraints and output shape compile; the +new slice expression is the first missing source capability. Neither control +package was evaluated during this run. + +The first harness run incorrectly expected the guarded control to reach a +provider refusal. Its actual successful build disproved that expectation. The +harness assertion was corrected, with no source change, and the full paired +witness passed with `JIM_LEAF_SLICE_SOURCE_BOUNDARY_CONFIRMED`. + +## Candidate public build + +With Edict [PR #221](https://github.com/flyingrobots/edict/pull/221) at +`0835f398336ce1c693b5531b262228cd909c0b4b`, the **unchanged** source passes the +public application-build boundary with the same frozen provider. Both controls +also pass. The [retained candidate result](evidence/public-build-candidate.json) +records all source and output hashes. The witness checks all 445 compiler-source +files and the existing compiler binary before and after the run. + +The actual boundary is further than initially expected: the frozen provider +produces the [executable package](evidence/candidate-artifacts/executable-operation-package.cbor) +and [verification report](evidence/candidate-artifacts/verification-report.cbor). +A separate read-only CBOR inspection observed `outcome: accepted`, zero diagnostic +bytes, the `jedit.text.replace_range@1.sliceLeaf` coordinate, and the explicit +`core.bytes.slice` call in both retained Core and Target. Its +[inspection summary](evidence/candidate-report-inspection.json) records those +observations. This is an inspection of the existing verifier's report, not a +new independent verification implementation or evidence of evaluator support. + +| Retained artifact | Raw SHA-256 | +| --- | --- | +| Executable package | `bfacd029cf2dc9247cbcee47d747eca3f8298c7184cac3866eb36f3ab55573c1` | +| Verification report | `943ac86ea20c40d68881cc8413b926f98ba2a4ee99408e3dcede4eead1e7bb86` | + +The first candidate harness expected a provider refusal, so it failed its own +assertion after recording the successful builds. That was a harness expectation +mismatch, not a compiler failure. A fresh run with the correct package-boundary +assertion passed with `JIM_LEAF_SLICE_PACKAGE_BOUNDARY_CONFIRMED` and reproduced +identical package/report bytes for all three sources. The original source RED +and both positive controls are preserved. + +No evaluator was invoked during these public-build runs. The accepted report +does not establish runtime availability, metering, refusals, or rope behavior. +The separate runtime witness below covers the byte primitive. + +The frozen `edict/replace-range/` application, lawpack closure, producer pins, +and artifact locks remain authoritative for the existing pure-boundary witness. +This development source imports the same published lawpack in an isolated copy. +It does not repin or regenerate that application. + +## Separate generic runtime witness + +[Echo PR #746](https://github.com/flyingrobots/echo/pull/746) at +`bf11732478067e43dda400bab94aa0f6d186b614` consumes the exact retained package +and report. Its evaluator RED failed on the first interior slice with +`UnsupportedProgram`. Generic `core.bytes.slice` support then passed all twelve +literal cases, plus malformed-artifact and exact-budget controls. A test-only +application-name renaming control preserves outputs and costs; no Jim name +selects runtime behavior. Those mutated test controls are not new compiler or +verifier artifacts. + +The runtime change passed 40 relevant integration tests, four evaluator unit +tests, strict Clippy/formatting, and 187 routing assertions in guarded Docker. +[The exact test source](https://github.com/flyingrobots/echo/blob/bf11732478067e43dda400bab94aa0f6d186b614/crates/warp-core/tests/edict_byte_slice_tests.rs) +retains literal outputs and bounds. This establishes that generic primitive on +the named candidate; it does not migrate Jim's frozen evaluator pin, complete +rope traversal, or admit an edit with Tick/WAL/receipt/recovery evidence. + +## Reproduction discipline + +Use copied inputs in the existing guarded project Docker worker. Do not build +another image or use the older probe Dockerfiles as the default recipe: those +historical recipes bake Cargo output into image layers. Reuse the compiler and +provider only after identifying their exact source/build coordinates; retain +outputs outside image layers in the project's bounded owned storage. Follow the +shared lease, disk, memory, process, and log limits before invocation. + +Copy this directory and the unchanged application root into the worker, then +run the following command inside the guarded lease. The compiler-source root +must contain the copied `2405a550` tree; the provider root must be the pinned +`49e9efb` package. Use a fresh `work-root` under the existing accounted directory. + +```sh +python3 "$PROBE_ROOT/run.py" \ + --compiler "$EDICT_BINARY" \ + --compiler-source "$EDICT_SOURCE" \ + --compiler-manifest "$PROBE_ROOT/evidence/compiler-source.json" \ + --application-source "$APPLICATION_SOURCE" \ + --provider-package "$PROVIDER_PACKAGE" \ + --work-root /tmp/echo-726-runtime/jim-leaf-slice-proof +``` + +The source manifest is a read-only export of `git ls-tree -r` at `2405a550`, +not a compiler input. Its retained formatting differs from the original run's +manifest, so its raw file digest differs; its commit, tree, 440 paths, and blob +identities are unchanged. Logs and an evidence JSON file remain under the work +root. The runner's log-size check supplements the mandatory external resource +guard; it is not a disk quota or permission to run without the guard. + +For the candidate build, use the exact `0835f398` compiler source and existing +binary SHA-256 `a5ffea7b16b641448db4d5dc608bec1539211ab683df3ab78985e12bb1c2fd15`, +select `evidence/candidate-compiler-source.json`, and add `--boundary package`. +That manifest has the same formatting qualification as the RED manifest. +Keep the provider unchanged: its manifest SHA-256 is +`c5b9fb2fe3a0dc4dad282621a97413225c555be0071f3502b3272952069d42dc`. +The runner records its actual hash and refuses mutation during the run. + +The public source RED, candidate package construction, and separately named +generic runtime witness are established. Complete rope acceptance and an +explicit consumer migration remain separate gates. diff --git a/edict/replace-range-probes/leaf-slice/cases.json b/edict/replace-range-probes/leaf-slice/cases.json new file mode 100644 index 00000000..298fb677 --- /dev/null +++ b/edict/replace-range-probes/leaf-slice/cases.json @@ -0,0 +1,18 @@ +{ + "schema": "jedit.leaf-byte-slice-cases/v1", + "operation": "jedit.text.replace_range@1.sliceLeaf", + "cases": [ + {"name": "empty-blob", "blobHex": "", "startByte": "0", "endByte": "0", "bytesHex": ""}, + {"name": "full-blob", "blobHex": "61626364", "startByte": "0", "endByte": "4", "bytesHex": "61626364"}, + {"name": "interior", "blobHex": "61626364", "startByte": "1", "endByte": "3", "bytesHex": "6263"}, + {"name": "empty-interior", "blobHex": "61626364", "startByte": "2", "endByte": "2", "bytesHex": ""}, + {"name": "empty-at-end", "blobHex": "61626364", "startByte": "4", "endByte": "4", "bytesHex": ""}, + {"name": "binary-octets", "blobHex": "00017fff80", "startByte": "2", "endByte": "5", "bytesHex": "7fff80"}, + {"name": "unicode-codepoint", "blobHex": "61f09f98ba62", "startByte": "1", "endByte": "5", "bytesHex": "f09f98ba"}, + {"name": "inside-codepoint-remains-bytes", "blobHex": "61f09f98ba62", "startByte": "2", "endByte": "4", "bytesHex": "9f98"}, + {"name": "reversed", "blobHex": "61626364", "startByte": "3", "endByte": "2", "refusal": "input-constraint"}, + {"name": "end-past-blob", "blobHex": "61626364", "startByte": "1", "endByte": "5", "refusal": "input-constraint"}, + {"name": "both-past-blob", "blobHex": "61626364", "startByte": "5", "endByte": "5", "refusal": "input-constraint"}, + {"name": "u64-max", "blobHex": "61626364", "startByte": "0", "endByte": "18446744073709551615", "refusal": "input-constraint"} + ] +} diff --git a/edict/replace-range-probes/leaf-slice/evidence/candidate-artifacts/executable-operation-package.cbor b/edict/replace-range-probes/leaf-slice/evidence/candidate-artifacts/executable-operation-package.cbor new file mode 100644 index 00000000..fd9fa8b0 Binary files /dev/null and b/edict/replace-range-probes/leaf-slice/evidence/candidate-artifacts/executable-operation-package.cbor differ diff --git a/edict/replace-range-probes/leaf-slice/evidence/candidate-artifacts/verification-report.cbor b/edict/replace-range-probes/leaf-slice/evidence/candidate-artifacts/verification-report.cbor new file mode 100644 index 00000000..dce05960 Binary files /dev/null and b/edict/replace-range-probes/leaf-slice/evidence/candidate-artifacts/verification-report.cbor differ diff --git a/edict/replace-range-probes/leaf-slice/evidence/candidate-compiler-source.json b/edict/replace-range-probes/leaf-slice/evidence/candidate-compiler-source.json new file mode 100644 index 00000000..7874a8f8 --- /dev/null +++ b/edict/replace-range-probes/leaf-slice/evidence/candidate-compiler-source.json @@ -0,0 +1,451 @@ +{ + "commit": "0835f398336ce1c693b5531b262228cd909c0b4b", + "tree": "8f984b86c9053a9e570723271babeaaab12e140a", + "files": [ + {"path":".cargo/config.toml","gitBlob":"5592118f6c54bf8b53b16848e04ece896dd56384"}, + {"path":".github/workflows/auto-release-tag.yml","gitBlob":"87404ceb685191afd496c93494b0bc61e2a59504"}, + {"path":".github/workflows/ci.yml","gitBlob":"c6c6a17f59b6b96db88e3d4b2775bc64b7fe01f3"}, + {"path":".github/workflows/release.yml","gitBlob":"2c612fc786998bfa5b11e76ae1185114a7cc535f"}, + {"path":".gitignore","gitBlob":"30d7faf0fc8b7f010f99280302d4ed269d5da9ba"}, + {"path":".markdownlint.json","gitBlob":"f3ec2c8dc2fbacc425154a2baedec50c7474aefa"}, + {"path":"AGENTS.md","gitBlob":"0c48a5794454cf84e20640994a372316efde7bb5"}, + {"path":"ARCHITECTURE.md","gitBlob":"5b513dd25028092e7e75c8974f1d5f3cc31889ed"}, + {"path":"CHANGELOG.md","gitBlob":"e25e1b88744ad3972a51bfde03fb24219a009f79"}, + {"path":"CODE_OF_CONDUCT.md","gitBlob":"784cf2799bcf8d2a69db5f5781359ef7e18a05fc"}, + {"path":"CONTRIBUTING.md","gitBlob":"9676914060f734dc59eabd9075898dc8170d4d19"}, + {"path":"Cargo.lock","gitBlob":"bacb208de0583f182379af7b5e078d31b25e2ca5"}, + {"path":"Cargo.toml","gitBlob":"b2e7106eb78f79230c091492ef21b497bdc9ed19"}, + {"path":"EDICT.md","gitBlob":"35376134195082d506f0161ba7ecb97efa8b770a"}, + {"path":"LICENSE","gitBlob":"261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64"}, + {"path":"NOTICE","gitBlob":"c300687bdd9d931d1f257d291e1cb6ff9d7d3607"}, + {"path":"README.md","gitBlob":"0812ef9a0c4611bf655dfc67d2ecc3631af9a536"}, + {"path":"ROADMAP.md","gitBlob":"d0e0135780537afab1d1a3f53808b363b35a63f4"}, + {"path":"SECURITY.md","gitBlob":"0bcc4e7375442e1334405a2d046df316cee05cd5"}, + {"path":"crates/edict-cli/Cargo.toml","gitBlob":"e9d844553c395bd312f84e806eb5bac30c5c3a54"}, + {"path":"crates/edict-cli/src/application_build.rs","gitBlob":"9c56ae6b4dd4eef0b9fe6db40316e100b2ffa699"}, + {"path":"crates/edict-cli/src/lawpack_build.rs","gitBlob":"55e9579153f34a3d5b139141c9de6640808cd386"}, + {"path":"crates/edict-cli/src/lawpack_build_windows.rs","gitBlob":"f71d03b368ae83becc1608bbba11cd5f1afa4f07"}, + {"path":"crates/edict-cli/src/lib.rs","gitBlob":"60883af60cf4b441680952ecce7ef4fcbfeabb97"}, + {"path":"crates/edict-cli/src/main.rs","gitBlob":"0dd9776642c4090479322111e4164ee7049fb9d0"}, + {"path":"crates/edict-cli/tests/golden_cli.rs","gitBlob":"9897caad3bcc6fa8bb0f20a1d0e18032285b1fa7"}, + {"path":"crates/edict-cli/tests/jsonl_cli.rs","gitBlob":"9ed353ca27d073fc7da49d3800c81ba4c58edd5d"}, + {"path":"crates/edict-cli/tests/lawpack_authoring_cli.rs","gitBlob":"dd7d7bfebf0e051c77d894a55c0204d373b19c63"}, + {"path":"crates/edict-provider-host-wasmtime/Cargo.toml","gitBlob":"ebeeb941f09012293d9923fe0e6039b2761b328e"}, + {"path":"crates/edict-provider-host-wasmtime/src/conversion.rs","gitBlob":"62c3cd4a85eb156b8c9a405ef3ea4d8a09b80cc3"}, + {"path":"crates/edict-provider-host-wasmtime/src/invocation.rs","gitBlob":"a4d6680d289094afebc0f1063abccf706f8149db"}, + {"path":"crates/edict-provider-host-wasmtime/src/lib.rs","gitBlob":"353ea7394f265219ebdecad56a3070c9e7d2685c"}, + {"path":"crates/edict-provider-host-wasmtime/src/limits.rs","gitBlob":"9e4d12c1b606d2b180f732db17bfbc78f8e26e3a"}, + {"path":"crates/edict-provider-host-wasmtime/src/replay.rs","gitBlob":"b8fa7be7c7ee5039793dad4cd0fa6a4f14ce388e"}, + {"path":"crates/edict-provider-host-wasmtime/tests/invocation.rs","gitBlob":"7a59a3192852a80bc01221ebf3dd1c437bda9508"}, + {"path":"crates/edict-provider-host-wasmtime/tests/preflight.rs","gitBlob":"a295e7547b0294f0355a85d5b9b8d045c8fceefd"}, + {"path":"crates/edict-provider-schema/Cargo.toml","gitBlob":"0e74f58acdc054ecce192cb8341afeaddc40deb5"}, + {"path":"crates/edict-provider-schema/src/contract_pack.rs","gitBlob":"370480d9c606134dd08ee62ae29ef143941e2f54"}, + {"path":"crates/edict-provider-schema/src/lib.rs","gitBlob":"51f5bee8892c9fb2122cb20022edc4d414759ff7"}, + {"path":"crates/edict-provider-schema/src/recursive_dispatch.rs","gitBlob":"6d97565b96f941b359d16f7a1c201189968fbeff"}, + {"path":"crates/edict-provider-schema/src/schema_safety.rs","gitBlob":"a2f605f62a2bfedcb84b68e37db9ff84b1dc3b05"}, + {"path":"crates/edict-provider-schema/tests/authority_facts_abi.rs","gitBlob":"7dd4d0302805ceecffc2045cdb91e386f8e08517"}, + {"path":"crates/edict-provider-schema/tests/provider_contract_pack.rs","gitBlob":"a26be8054b39215048825dd8cae7e9bddcfe27c9"}, + {"path":"crates/edict-provider-schema/tests/registry.rs","gitBlob":"bdd13ec00e441aef9e67ba49f6592ecbc7dcb303"}, + {"path":"crates/edict-syntax/Cargo.toml","gitBlob":"f55bb23e528af78b1e97b52f9b72cbd876a44ba7"}, + {"path":"crates/edict-syntax/src/admission.rs","gitBlob":"471430dd13a617bac886fcd44afbf15263e7db3b"}, + {"path":"crates/edict-syntax/src/ast.rs","gitBlob":"2a5d208a53a82408f8a18d9a13ccb133ec6a7a2e"}, + {"path":"crates/edict-syntax/src/authority_facts.rs","gitBlob":"644de86d63983bdbfbf1279fdbf1dbdaecc151d5"}, + {"path":"crates/edict-syntax/src/canonical.rs","gitBlob":"6fb29d50ea4a55eb888a1b9600cdcb31713a6e20"}, + {"path":"crates/edict-syntax/src/compiler.rs","gitBlob":"ad3efd3e92c23a54a9a279cbfa22b108895af3fb"}, + {"path":"crates/edict-syntax/src/compiler/byte_length.rs","gitBlob":"0d8d6291064415baee9253d9fe1e11ad87945773"}, + {"path":"crates/edict-syntax/src/compiler/byte_slice.rs","gitBlob":"3a634d5d6d0fe1d89bb6a8218261326b898a1a2d"}, + {"path":"crates/edict-syntax/src/compiler/unsigned_subtraction.rs","gitBlob":"c2ef2deda74afb52e4346076a310df341556e1c8"}, + {"path":"crates/edict-syntax/src/contract_bundle.rs","gitBlob":"9a31645f0e30879d019787e29c21c82eebf58129"}, + {"path":"crates/edict-syntax/src/core_ir.rs","gitBlob":"119d69b75914db1357030ccc5aecb90448fe8f24"}, + {"path":"crates/edict-syntax/src/highlight.rs","gitBlob":"28b3f7dcdfe8d4982bdcfb05759f769ccdbffc7f"}, + {"path":"crates/edict-syntax/src/lawpack.rs","gitBlob":"54f85bda48c960ad0b7bc316d332b379ab5b6ae0"}, + {"path":"crates/edict-syntax/src/lawpack_adapter.rs","gitBlob":"e425960e2437faa2f9eeb5d089ff507417d39586"}, + {"path":"crates/edict-syntax/src/lawpack_authoring.rs","gitBlob":"11ff578f458b8a4c8e4df75c0c616e37fa468d49"}, + {"path":"crates/edict-syntax/src/lib.rs","gitBlob":"7323475cc7f846e11c2d73f4c26a5e581b7e6157"}, + {"path":"crates/edict-syntax/src/lowerability.rs","gitBlob":"c6a1323fd6a79b0460b43aaf338956c3906a633e"}, + {"path":"crates/edict-syntax/src/parser.rs","gitBlob":"0b3650e3012e49023ccbb9cc9effe9b5b102f19d"}, + {"path":"crates/edict-syntax/src/provider.rs","gitBlob":"18fa661d880979c53dd335fb7e68d5445b638d4c"}, + {"path":"crates/edict-syntax/src/provider_invocation.rs","gitBlob":"2526168f0a6f2d1d9b6181b689ff43e203434122"}, + {"path":"crates/edict-syntax/src/provider_lowering.rs","gitBlob":"50a4e60b561127cb8c78e3f7c04c6bbaca068e52"}, + {"path":"crates/edict-syntax/src/result_projection.rs","gitBlob":"79ba246d4c58960fe368eaca4c7d135fe187832a"}, + {"path":"crates/edict-syntax/src/semantic.rs","gitBlob":"76bd133ef5859bf7722d1987613f7fd84836ab62"}, + {"path":"crates/edict-syntax/src/target_ir.rs","gitBlob":"c322a874d8a2341ae46a99b1b62eb952f4a49dfe"}, + {"path":"crates/edict-syntax/src/target_ir/byte_length.rs","gitBlob":"972e6ffa943bc7a7a943d76f0af42b342e3d2aac"}, + {"path":"crates/edict-syntax/src/target_ir/byte_slice.rs","gitBlob":"62a1c0b9e84a331bb17ab78090cce6d8eb8da486"}, + {"path":"crates/edict-syntax/src/target_ir/execution_order.rs","gitBlob":"e69a28805dc5e414a64afdaafee34161c217a044"}, + {"path":"crates/edict-syntax/src/target_ir/totality.rs","gitBlob":"c32fe501838ce3e3979917e0aa1da67bb0cd68da"}, + {"path":"crates/edict-syntax/src/target_ir/unsigned_subtraction.rs","gitBlob":"b83522bfe9a2b506413b4d306f4bc49f8b053f36"}, + {"path":"crates/edict-syntax/src/target_profile.rs","gitBlob":"dd514f7380243e795f0655a78aecd06ee3fa2eda"}, + {"path":"crates/edict-syntax/src/target_profile_contract_resources.rs","gitBlob":"4efd22961c2fd7591440efd6087944ecaf21e991"}, + {"path":"crates/edict-syntax/src/token.rs","gitBlob":"2768586eea6d42d5df357c4cc62a011ee7f455de"}, + {"path":"crates/edict-syntax/tests/admission.rs","gitBlob":"57edbc320307c1d6daba85f03d8dc79558d7b849"}, + {"path":"crates/edict-syntax/tests/authority_facts.rs","gitBlob":"add9d272be6e8eb1cd6fdde2999a5fb452ecd852"}, + {"path":"crates/edict-syntax/tests/authority_facts_cbor.rs","gitBlob":"7359f047d9f731fee208efb5f69072b612d69547"}, + {"path":"crates/edict-syntax/tests/byte_length.rs","gitBlob":"50945944e8c2223abcc6b1081322432bc540c017"}, + {"path":"crates/edict-syntax/tests/byte_slice.rs","gitBlob":"65541ea8ddff550ddb8dfed27f03bf186792e71a"}, + {"path":"crates/edict-syntax/tests/canonical_encoding.rs","gitBlob":"e4c5d59a88f88193f522eb555359919f7034a264"}, + {"path":"crates/edict-syntax/tests/common/mod.rs","gitBlob":"89560bfacb3dab031485c2dfa30d7eb325966574"}, + {"path":"crates/edict-syntax/tests/compiler_spine.rs","gitBlob":"2237318cfc0d4209e8a629e45320e42a4b72dbef"}, + {"path":"crates/edict-syntax/tests/contract_bundle.rs","gitBlob":"e6a2948335a0efc86d8bbb2e9e2c3d634e53965a"}, + {"path":"crates/edict-syntax/tests/core_golden_fixtures.rs","gitBlob":"0e0e42d19b52dc0557902dad9e1b85f37edf53f8"}, + {"path":"crates/edict-syntax/tests/external_action_requests.rs","gitBlob":"3c07be4db0bfc49e67c2d7e1eda0ac0397987a37"}, + {"path":"crates/edict-syntax/tests/highlighting.rs","gitBlob":"17e6b9ba08c96f0efb6efd440590f0fc917316e2"}, + {"path":"crates/edict-syntax/tests/lawpack.rs","gitBlob":"a675999ed96309358c8552a9d32781b5eede20dc"}, + {"path":"crates/edict-syntax/tests/lawpack_authoring.rs","gitBlob":"3a905cbd6d7d2625bc1d7826a6f6f1e991efbab0"}, + {"path":"crates/edict-syntax/tests/lowerability.rs","gitBlob":"5cfa58f5cbc51cccc7f119caddc1c3fcbc2e4806"}, + {"path":"crates/edict-syntax/tests/operation_prerequisites.rs","gitBlob":"753659e1a6e7751c455b8518226fa0902157a745"}, + {"path":"crates/edict-syntax/tests/parse_control_flow.rs","gitBlob":"5245561866d8902c1fbd5ab21f2e34807d568e17"}, + {"path":"crates/edict-syntax/tests/parse_greeting.rs","gitBlob":"f214d0c17745b8203d562780caa8f37b71c1e62c"}, + {"path":"crates/edict-syntax/tests/parse_hello.rs","gitBlob":"bf7b1b065277188f4be8754eb11ace94298394ba"}, + {"path":"crates/edict-syntax/tests/parse_keywords.rs","gitBlob":"78d8a64d785136d42a32655afda3df240c54f884"}, + {"path":"crates/edict-syntax/tests/parse_loops.rs","gitBlob":"d9ece2fce96fd6835d080055f06955d139c7e0ce"}, + {"path":"crates/edict-syntax/tests/parse_negative.rs","gitBlob":"17fdb983b8250470368a8f19d3a7bd9680052548"}, + {"path":"crates/edict-syntax/tests/parse_review_regressions.rs","gitBlob":"560215cfe044a528e190aa1ea7670e52b9365bdf"}, + {"path":"crates/edict-syntax/tests/parse_variants.rs","gitBlob":"8849f68f5ca1e2b06d0f66496e59b20d1c0fd022"}, + {"path":"crates/edict-syntax/tests/provider.rs","gitBlob":"7e8a596109b1e1fd3f22b3a0ef82f4755f127291"}, + {"path":"crates/edict-syntax/tests/provider_invocation.rs","gitBlob":"402647dd6701be65a9e693fd3f5688f26d84988e"}, + {"path":"crates/edict-syntax/tests/provider_lowering.rs","gitBlob":"411c306f3ab641de9dc2f7aed229767eba9dbd72"}, + {"path":"crates/edict-syntax/tests/result_projection.rs","gitBlob":"a74dd2a419266cb77d846d83da27f726095660f1"}, + {"path":"crates/edict-syntax/tests/semantic_validation.rs","gitBlob":"a127988d178c00ed12a0a25f70df6b7fd5e6d931"}, + {"path":"crates/edict-syntax/tests/target_ir.rs","gitBlob":"928e1cf921dead0b559bd115bb6eef3faaddd37e"}, + {"path":"crates/edict-syntax/tests/target_ir/ordered.rs","gitBlob":"a1b05db81a97a43ec5a2dc2d9bcc9578bc286f30"}, + {"path":"crates/edict-syntax/tests/target_profile.rs","gitBlob":"42f1c907f6c60dea1e8a9b4558b56ffd0b3a59ab"}, + {"path":"crates/edict-syntax/tests/target_profile_contract_resources.rs","gitBlob":"270c180a12dc10fb7e208cc4dc1e202da82c85fb"}, + {"path":"crates/edict-syntax/tests/target_unsigned_subtraction.rs","gitBlob":"e30d91f896afda48eb3cf11617bccf1f9d160e32"}, + {"path":"crates/edict-syntax/tests/unsigned_subtraction.rs","gitBlob":"fbd24482fdad4c8ceb4df41302b33595ada337ec"}, + {"path":"crates/edict/Cargo.toml","gitBlob":"525403f4f36db4040531e4dd747ec2398f9052cd"}, + {"path":"crates/edict/README.md","gitBlob":"a1ecf50bff3443d25a23fabfa6374d3f0a28ca82"}, + {"path":"crates/edict/src/lib.rs","gitBlob":"169d820759d6333f27a45ebb712bfcc4f0115107"}, + {"path":"crates/edict/tests/artifact_models.rs","gitBlob":"b923109c7195ce2c0071dc54179f0746b95329f0"}, + {"path":"crates/edict/tests/public_surface.rs","gitBlob":"a24c4bc9d9484f540da9b280790896701922968a"}, + {"path":"deny.toml","gitBlob":"e3f0f54060cead9a0d48b96ed86948d0909c4f78"}, + {"path":"docs/DESIGN_runtime-neutral-edict-sha-lock-assurance.md","gitBlob":"ea3badf78ebd19545147a93671fdb5f9af4a61ea"}, + {"path":"docs/GUIDE_edict-assurance-transparency.md","gitBlob":"100321157ec43055c45794f1c161b1e5281ba6b4"}, + {"path":"docs/README.md","gitBlob":"e21739b842be14d91a17f2508b1a1b629754af01"}, + {"path":"docs/REQUIREMENTS.md","gitBlob":"52d98fecd60eb04ce55105ae2eb33997248698cb"}, + {"path":"docs/RETRO_phase1-parser.md","gitBlob":"5cfb7b85ca2f140fc58f9186c47e4635e94a1e6f"}, + {"path":"docs/SPEC_continuum-admission-v1.md","gitBlob":"0a74a0bfc642337d5d7a85133ce50a0a22caffbd"}, + {"path":"docs/SPEC_continuum-contract-bundle-v1.md","gitBlob":"65b36bb33a34beb1f246d1f97384631c83ca631e"}, + {"path":"docs/SPEC_edict-language-v1.md","gitBlob":"1575bc83ae20eec154d09333d59e240162057633"}, + {"path":"docs/SPEC_edict-lawpack-abi-v1.md","gitBlob":"ea1d801f07ab3677f7a411a1f58a28feda589ec3"}, + {"path":"docs/SPEC_edict-target-profile-abi-v1.md","gitBlob":"91687bfe45565a21f5f93f6ce9eed84095268691"}, + {"path":"docs/TECHNICAL_EXPLANATION.md","gitBlob":"d88561c0552c0e75d1ecc2eef6f9afd003e99674"}, + {"path":"docs/abi/edict-authority-facts.cddl","gitBlob":"e9a6d8685706ae0d8dabda401655234161e94299"}, + {"path":"docs/abi/edict-common.cddl","gitBlob":"836c11b92425beb6d42b378c0defe6f02d144dd7"}, + {"path":"docs/abi/edict-core.cddl","gitBlob":"862f02939fcc3858b4a60cb75f9bf149eae8ffda"}, + {"path":"docs/abi/edict-lawpack-adapter.cddl","gitBlob":"8e887c2e196ba7502470ddb45dc7cfd10116ad6b"}, + {"path":"docs/abi/edict-lawpack.cddl","gitBlob":"96efd51d437ec785b108b51835e9e8bf87aeab51"}, + {"path":"docs/abi/edict-result-projection.cddl","gitBlob":"98b5c2e861e7e9b66b7481502287cb041f6e77e6"}, + {"path":"docs/abi/edict-target-ir.cddl","gitBlob":"98134f277ded1920a3a36e5e3946c51153f2e84d"}, + {"path":"docs/abi/edict-target-profile.cddl","gitBlob":"746ae03001310f3a83524e5332819dad1a4eea5a"}, + {"path":"docs/abi/edict-target-provider.wit","gitBlob":"0efa5903a52d38dc61e429619d86322c6c5f1fa0"}, + {"path":"docs/audit/2026-06-28_code-quality.md","gitBlob":"143cbf4f4491a76a6649e919c6edaba73f0bcf4b"}, + {"path":"docs/audit/2026-06-28_documentation-quality.md","gitBlob":"656b4fa8dea43306af1818f8622cafd72e82a370"}, + {"path":"docs/audit/2026-06-28_ship-readiness.md","gitBlob":"b9d34a8693564d0134f550092e7645e5d5137442"}, + {"path":"docs/design/authority-fact-governance.md","gitBlob":"8531061cf718c47ec791f5712b2f357d92adc9e4"}, + {"path":"docs/design/canonical-target-ir-v0.11.md","gitBlob":"a46acb84e3523b51e2348c776cfdb63a8b98107a"}, + {"path":"docs/design/contract-bundle-assembly-v0.11.md","gitBlob":"a364f8ade5445808f87cf0c63ab3484c03ad616a"}, + {"path":"docs/design/crate-scope-v0.11.md","gitBlob":"92fe92285d02465d84bbe82e29d051fdc461f3a6"}, + {"path":"docs/design/obstruction-strands-v0.md","gitBlob":"81f70fd688c12798cd23472a4e810191e61eabe2"}, + {"path":"docs/design/provider-artifact-pipeline-alpha.md","gitBlob":"60eefa7dc160aba986bcd1188b79610ff5e9f299"}, + {"path":"docs/design/schema-as-sot-codegen.md","gitBlob":"d818e0e3f1fafd1d3aba26cb37c739f3ebe69763"}, + {"path":"docs/design/v2-obligation-closure.md","gitBlob":"816d22d843a33c6f7e143da4cb45e80679609dc8"}, + {"path":"docs/releases/v0.1.0-alpha.1.md","gitBlob":"5dd96057ba7f109cf5e5acde16e29d18627f98d3"}, + {"path":"docs/releases/v0.10.0-alpha.1.md","gitBlob":"363c4e9ed6f5ea5758198c7124681b520098e583"}, + {"path":"docs/releases/v0.11.0-alpha.1.md","gitBlob":"4612dbb5a1aaf20710bdb199b658ded7ced4ebab"}, + {"path":"docs/releases/v0.2.0-alpha.1.md","gitBlob":"7302ef93ed5ff9b562d9cec92d49d85a6b789b27"}, + {"path":"docs/releases/v0.3.0-alpha.1.md","gitBlob":"bf023ba4ca2c38f0120c461781447d58fe239ae0"}, + {"path":"docs/releases/v0.4.0-alpha.1.md","gitBlob":"769500b59800c02c536b76b0eb850d06d6cd8f58"}, + {"path":"docs/releases/v0.5.0-alpha.1.md","gitBlob":"7c7354e89846ea816992aaf55d4ad04367d61a10"}, + {"path":"docs/releases/v0.6.0-alpha.1.md","gitBlob":"3f2a0edfc4bccd9f3c60a7443ef4f8cbcbac1971"}, + {"path":"docs/releases/v0.7.0-alpha.1.md","gitBlob":"57671d5ef5a6b9f16d1674e0a35ddeb86ff126a8"}, + {"path":"docs/releases/v0.8.0-alpha.1.md","gitBlob":"12f77bda185c54fbbd136bf0dc7292716ecdfa39"}, + {"path":"docs/releases/v0.9.0-alpha.1.md","gitBlob":"fa295fcf0967415bb052f238256919b32b3fe6ba"}, + {"path":"docs/schemas/edict.cli-check-result.v1.schema.json","gitBlob":"eef8cd11f07e06d68b7051efa60ae05f2cfd8a63"}, + {"path":"docs/schemas/edict.cli-diagnostic.v1.schema.json","gitBlob":"92a2151a76893c598a4191ed6cecd8a0e671613f"}, + {"path":"docs/schemas/edict.cli-event.v1.schema.json","gitBlob":"705d82a893c2ea91caa91ad6977a9be8646b47bb"}, + {"path":"docs/schemas/edict.cli-info.v1.schema.json","gitBlob":"2d9a0777b4190b56ff569625275d352d17363afa"}, + {"path":"docs/schemas/edict.compiler-input.v1.schema.json","gitBlob":"26da3ba0fe85fab4c826ad79f13968ce09c4f29b"}, + {"path":"docs/schemas/edict.compiler-settings.v1.schema.json","gitBlob":"a3e8ba469895b84ab81724da1075c73141a8dd0c"}, + {"path":"docs/schemas/edict.projection-core.v1.schema.json","gitBlob":"8c0afe3834256abd1e18efb5f31eae1c4bdf0374"}, + {"path":"docs/schemas/edict.projection-diagnostics.v1.schema.json","gitBlob":"28cfb0a67dff7b8f879122c74433158dc0a4e5df"}, + {"path":"docs/schemas/edict.projection-syntax.v1.schema.json","gitBlob":"a85f2e14f536863f5e7b107b1a9f3f10816e6234"}, + {"path":"docs/schemas/edict.projection-target-ir.v1.schema.json","gitBlob":"8bbb6495ad8800d775d1c08506e85351038d678a"}, + {"path":"docs/topics/README.md","gitBlob":"99b06d3124c71cb62dfe6faff7604c13063162a7"}, + {"path":"docs/topics/admission/README.md","gitBlob":"755dcba96c0a428eec18d58a529f3e26d57d118c"}, + {"path":"docs/topics/admission/test-plan.md","gitBlob":"68ee0a2d2502103285985bf862de9fadf2bac5a0"}, + {"path":"docs/topics/assurance/README.md","gitBlob":"cf382008f3d3094a5380a687abbf07538e07404d"}, + {"path":"docs/topics/assurance/test-plan.md","gitBlob":"0ea6c971924db763088577a0a52bbd30bfec814c"}, + {"path":"docs/topics/authority-facts/README.md","gitBlob":"c5589d2489d6e4a5729c0df2b2655ff281d8d88d"}, + {"path":"docs/topics/authority-facts/test-plan.md","gitBlob":"e3769edf8309347b23ffa2e8f0901e06feabd654"}, + {"path":"docs/topics/cli/README.md","gitBlob":"af38946c9ccae8da343877c3861b0f52b6076e1b"}, + {"path":"docs/topics/cli/test-plan.md","gitBlob":"d72d69ef1d340ffd7057a63dd7bc07e3dfb2c166"}, + {"path":"docs/topics/compiler-spine/README.md","gitBlob":"8ecdf52fb0d75a7082906916de5fc02812c95a49"}, + {"path":"docs/topics/compiler-spine/test-plan.md","gitBlob":"99fb5b94194292f12def0924d9d49e61c0dbb3d1"}, + {"path":"docs/topics/contract-bundles/README.md","gitBlob":"2347499e8da9dd57bb1588faf67fe386c7a70c03"}, + {"path":"docs/topics/contract-bundles/test-plan.md","gitBlob":"3ae4c7362f90fa89081ab9ff2bf1c3db1a811874"}, + {"path":"docs/topics/core-ir/README.md","gitBlob":"a8759d0f26569a60590792aadc9ba28d8daea004"}, + {"path":"docs/topics/core-ir/canonical-encoding.md","gitBlob":"34927c69fb1de10b685294a155fc46bb4ac21628"}, + {"path":"docs/topics/core-ir/test-plan.md","gitBlob":"00d55085e24a6639b02558ea48af68beea97cb65"}, + {"path":"docs/topics/developer-tooling/README.md","gitBlob":"8648d3c1bdf4f6b774bc5fec71c71aa8c59b0ce8"}, + {"path":"docs/topics/developer-tooling/test-plan.md","gitBlob":"9240f717434dfbca08a6366e6d3ebafd4ef2c908"}, + {"path":"docs/topics/documentation/README.md","gitBlob":"34fa7f4db136c274a88b680f99619d657fda15d5"}, + {"path":"docs/topics/documentation/test-plan.md","gitBlob":"47964954fbf640211bc30b0dd361c44c9955c488"}, + {"path":"docs/topics/external-action-requests/README.md","gitBlob":"73aae64e1adb730c00b680d18aea76f64adc23cb"}, + {"path":"docs/topics/external-action-requests/test-plan.md","gitBlob":"438184fc13353250a0c0976e3c3cc8cba605fa00"}, + {"path":"docs/topics/fixtures/README.md","gitBlob":"c8b3b196109fb6d4e37d8ffa17635166010075fb"}, + {"path":"docs/topics/fixtures/test-plan.md","gitBlob":"624357dbc544d365835390d3d3c2f11015b7b82f"}, + {"path":"docs/topics/lawpack-authoring/README.md","gitBlob":"74bb25cc22e1f88cf4ee952b42313d919339113a"}, + {"path":"docs/topics/lawpack-authoring/test-plan.md","gitBlob":"d7ad2eacde45dbce3eeb2b1a22c6482134b841ba"}, + {"path":"docs/topics/lawpacks/README.md","gitBlob":"dedaa524dc55663a44bf8101241ab4b6d4755531"}, + {"path":"docs/topics/lawpacks/test-plan.md","gitBlob":"f8aa2c7ce40dad2665134956dc95d951d311808f"}, + {"path":"docs/topics/lowerability/README.md","gitBlob":"fb9519af3539d846dc5bf2915bf5ca86816e46f8"}, + {"path":"docs/topics/lowerability/test-plan.md","gitBlob":"e0fbff0799ba805c9531097d6b8aeea657e2b815"}, + {"path":"docs/topics/obstruction-strands/README.md","gitBlob":"a2930645065390cecff8008bfd48b7f034bfcd18"}, + {"path":"docs/topics/obstruction-strands/test-plan.md","gitBlob":"20c54ffcaa19930a5bc772a49a5f01119054be2d"}, + {"path":"docs/topics/providers/README.md","gitBlob":"8b5a07fb9c708b753861a4e156b866115f4d687b"}, + {"path":"docs/topics/providers/architecture.md","gitBlob":"664b38347ccaf37f298d6ac9f19d3423c0277f9e"}, + {"path":"docs/topics/providers/test-plan.md","gitBlob":"95c55f9e132ca6859fd9df70470973e678ed8d92"}, + {"path":"docs/topics/public-rust-api/README.md","gitBlob":"c64a1081b7f693b02bd2ea63329f2610bae9d84c"}, + {"path":"docs/topics/public-rust-api/test-plan.md","gitBlob":"4c3b9e9662afd9edb790ba2b5c57ed5e93df595c"}, + {"path":"docs/topics/release-process/README.md","gitBlob":"a474ab8b6a4a58c5c73334c9e677be7c20d1837c"}, + {"path":"docs/topics/release-process/policy.toml","gitBlob":"e40b4f4ec721ae61210ec1bb022a847bcb49fb4a"}, + {"path":"docs/topics/release-process/runbook.md","gitBlob":"0b6bd8ef44cbfe8c7cdc347273fa74b7c96c4823"}, + {"path":"docs/topics/release-process/test-plan.md","gitBlob":"61ecded1d2318d7dd74070cd1c6155f353c947e9"}, + {"path":"docs/topics/result-projections/README.md","gitBlob":"d5c2f85a7681a15dcdc3e35f992a389c50d13461"}, + {"path":"docs/topics/result-projections/test-plan.md","gitBlob":"9e69d58c88d6a9b7389334a78b994a3449721faa"}, + {"path":"docs/topics/review-process/README.md","gitBlob":"25190d37dc30110f75ba5d3a41494575ffecc1c3"}, + {"path":"docs/topics/review-process/policy.toml","gitBlob":"a826ba58aad2e509220b65aa8f96c290b600e094"}, + {"path":"docs/topics/review-process/test-plan.md","gitBlob":"f1a50aeae47913e4513a8149c1679d9a94c5ef21"}, + {"path":"docs/topics/rust-standards/README.md","gitBlob":"2fe29258705d117f4d10604a83fd832a8476e303"}, + {"path":"docs/topics/rust-standards/test-plan.md","gitBlob":"0e0d6b306cd2b58db07a7a5da6a752925fe58764"}, + {"path":"docs/topics/semantic-validation/README.md","gitBlob":"51cd9761755e7b5879069bf3774eeb487982ca97"}, + {"path":"docs/topics/semantic-validation/test-plan.md","gitBlob":"b43969d8eb0a884c1663ab761662f9622617bb3b"}, + {"path":"docs/topics/syntax/README.md","gitBlob":"b2a372bf41b1976567c61f400bf000f33abc20cc"}, + {"path":"docs/topics/syntax/test-plan.md","gitBlob":"a69efaf12dfe12661fca049b8790b37fa3fb3665"}, + {"path":"docs/topics/target-ir/README.md","gitBlob":"f904839af7a5136af9430a0efc1f28e0adfa63c7"}, + {"path":"docs/topics/target-ir/test-plan.md","gitBlob":"cb0b736f4a68effb0d44ca70cc7bc27ae2b4cc37"}, + {"path":"docs/topics/target-profiles/README.md","gitBlob":"6a88f4d732f8069855b2ed2cb9a8769a117b2f60"}, + {"path":"docs/topics/target-profiles/test-plan.md","gitBlob":"90084c3f3a1296745469cd86e9b5f2bc928825be"}, + {"path":"docs/topics/tests/README.md","gitBlob":"4ad079b6a9718e2a8446a6c67ff45735015bef84"}, + {"path":"docs/topics/tests/test-plan.md","gitBlob":"46bc0572d02a41e86f71c6d46baf5be611a462a6"}, + {"path":"docs/topics/v2-design/README.md","gitBlob":"b33a07599e43e660aa4def7f119ddd02df6a16de"}, + {"path":"docs/topics/v2-design/test-plan.md","gitBlob":"f17f96d381f81b20842393f70ff55b9597858b84"}, + {"path":"editors/README.md","gitBlob":"7a933576262bc58bac197f9264fdbf649dd5e696"}, + {"path":"editors/vscode/.vscodeignore","gitBlob":"f15b3142e4b8af11d580789a0c82acee3499f571"}, + {"path":"editors/vscode/README.md","gitBlob":"8b29840ae9ec8f618b7364022329f694d0ed9746"}, + {"path":"editors/vscode/language-configuration.json","gitBlob":"b7f583841649c9c437785edbfcb70ee24e495c79"}, + {"path":"editors/vscode/package.json","gitBlob":"cd9e391e7c9afb6f9393fcead118e0e55aadc839"}, + {"path":"editors/vscode/syntaxes/edict.tmLanguage.json","gitBlob":"5847d8edfdb32d822f0f3950f41d00c947982185"}, + {"path":"fixtures/README.md","gitBlob":"470e3e0fc3aa00654930ecdef892ee9df8a42c8d"}, + {"path":"fixtures/authority-facts/canonical/README.md","gitBlob":"28692ce70add5d4f2d4ff5318309c3353924caf9"}, + {"path":"fixtures/authority-facts/canonical/example-effectful.authority-facts.cbor","gitBlob":"fe2e59a8e2602e02c52094010a130db2637c5227"}, + {"path":"fixtures/authority-facts/canonical/example-effectful.authority-facts.json","gitBlob":"009faa5d2dc1dcf55cf284dcfd14c0b6405f3e0d"}, + {"path":"fixtures/authority-facts/canonical/example-effectful.authority-facts.sha256","gitBlob":"a3d68f0a3b3a586e85b6a84cbd884866e662951f"}, + {"path":"fixtures/bundle/assembly/bounded-hello.bundle-digests.txt","gitBlob":"da5402db7bd41dd88c6152b7799723561130c91e"}, + {"path":"fixtures/cli/01-source-ok/expected.stdout.jsonl","gitBlob":"e08ccf8fdedd3a73beef5d06c443a1bc60274ce1"}, + {"path":"fixtures/cli/01-source-ok/request.jsonl","gitBlob":"002fea597e6b93c8468d6972b73cc1344600fa87"}, + {"path":"fixtures/cli/02-source-parse-rejection/exit","gitBlob":"d00491fd7e5bb6fa28c517a0bb32b8b506539d4d"}, + {"path":"fixtures/cli/02-source-parse-rejection/expected.stderr.jsonl","gitBlob":"1077b73c9a7c02eae99f737bea7b6ff8c64d04da"}, + {"path":"fixtures/cli/02-source-parse-rejection/request.jsonl","gitBlob":"dce01f0466bd9384fc6f5cbe2845b6e0bd9a9cfd"}, + {"path":"fixtures/cli/03-source-semantic-rejection/exit","gitBlob":"d00491fd7e5bb6fa28c517a0bb32b8b506539d4d"}, + {"path":"fixtures/cli/03-source-semantic-rejection/expected.stderr.jsonl","gitBlob":"5ec447700da52d0b4ce1f75825eb9bffaed4884b"}, + {"path":"fixtures/cli/03-source-semantic-rejection/request.jsonl","gitBlob":"ddfd529e5448760387961febbd4ce013e49de435"}, + {"path":"fixtures/cli/04-cli-missing-settings/exit","gitBlob":"0cfbf08886fca9a91cb753ec8734c84fcbe52c9f"}, + {"path":"fixtures/cli/04-cli-missing-settings/expected.stderr.jsonl","gitBlob":"5060bd2fd773ba9ea3ea6db8c80b86a846bfadbd"}, + {"path":"fixtures/cli/04-cli-missing-settings/request.jsonl","gitBlob":"8eb12e58d427bd64ccfe339190e05bdccf4c8634"}, + {"path":"fixtures/cli/05-path-input-ok/expected.stdout.jsonl","gitBlob":"a05fc582efc41b6414e785167b5deeb7532088ef"}, + {"path":"fixtures/cli/05-path-input-ok/inputs/hello.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/05-path-input-ok/request.jsonl","gitBlob":"18facaab79dc198134c535df389cba79efe7dce7"}, + {"path":"fixtures/cli/06-directory-expansion-ok/expected.stdout.jsonl","gitBlob":"ef59591526e2084ddf5057249bbc96ab660cf256"}, + {"path":"fixtures/cli/06-directory-expansion-ok/inputs/a.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/06-directory-expansion-ok/inputs/ignore.txt","gitBlob":"ed34ae8da336ff94a67b6125fbd6be730c976d91"}, + {"path":"fixtures/cli/06-directory-expansion-ok/inputs/nested/b.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/06-directory-expansion-ok/request.jsonl","gitBlob":"bd9aad14fe79caccacaa6d00ffd32b5e13b3551f"}, + {"path":"fixtures/cli/07-path-list-ok/expected.stdout.jsonl","gitBlob":"643ecb3e659c10cb98255ec1aced772778e76eb0"}, + {"path":"fixtures/cli/07-path-list-ok/inputs/first.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/07-path-list-ok/inputs/second.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/07-path-list-ok/request.jsonl","gitBlob":"f11265b02c5b7559ced4d975471a78b5bef3ee27"}, + {"path":"fixtures/cli/08-glob-expansion-ok/expected.stdout.jsonl","gitBlob":"90164a7fce6c51abdadef8f0586d2c56113d9712"}, + {"path":"fixtures/cli/08-glob-expansion-ok/inputs/x.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/08-glob-expansion-ok/inputs/y.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/08-glob-expansion-ok/request.jsonl","gitBlob":"9335acf3a008ab8fb9942b3e22d73c456ed3827e"}, + {"path":"fixtures/cli/09-shape-source-ok/expected.stdout.jsonl","gitBlob":"ac6f9259502ebfe484e1c07a5f53865888dd8207"}, + {"path":"fixtures/cli/09-shape-source-ok/request.jsonl","gitBlob":"64c75d9a7b40985bacf0e59a943a16e20419c602"}, + {"path":"fixtures/cli/10-input-extra-field/exit","gitBlob":"0cfbf08886fca9a91cb753ec8734c84fcbe52c9f"}, + {"path":"fixtures/cli/10-input-extra-field/expected.stderr.jsonl","gitBlob":"2f5a8fba093b71d15a5b37504ad0352191c8299c"}, + {"path":"fixtures/cli/10-input-extra-field/request.jsonl","gitBlob":"6052212c652d41f03144a7d3d4018b1cdd18cd09"}, + {"path":"fixtures/cli/11-input-hybrid-kind/exit","gitBlob":"0cfbf08886fca9a91cb753ec8734c84fcbe52c9f"}, + {"path":"fixtures/cli/11-input-hybrid-kind/expected.stderr.jsonl","gitBlob":"7b6d2ac0c8afbf5e3991498846c2fc4847ac9453"}, + {"path":"fixtures/cli/11-input-hybrid-kind/request.jsonl","gitBlob":"b893b640aa6631c77f2a889a807afa31632ac2db"}, + {"path":"fixtures/cli/12-input-too-large/env.json","gitBlob":"ab0c7f13fc6b22d61fc73da2f1787ff3aa298ecb"}, + {"path":"fixtures/cli/12-input-too-large/exit","gitBlob":"0cfbf08886fca9a91cb753ec8734c84fcbe52c9f"}, + {"path":"fixtures/cli/12-input-too-large/expected.stderr.jsonl","gitBlob":"ebda022d79c978d4ff511579512be2c642e3e902"}, + {"path":"fixtures/cli/12-input-too-large/request.jsonl","gitBlob":"1e2fbb102503356bbcc627f49a5b58590859f170"}, + {"path":"fixtures/cli/13-input-root-outside/allowed/.gitkeep","gitBlob":"8b137891791fe96927ad78e64b0aad7bded08bdc"}, + {"path":"fixtures/cli/13-input-root-outside/exit","gitBlob":"0cfbf08886fca9a91cb753ec8734c84fcbe52c9f"}, + {"path":"fixtures/cli/13-input-root-outside/expected.stderr.jsonl","gitBlob":"9c5b8567a755c9ea2ee6e0168bf96f429185f675"}, + {"path":"fixtures/cli/13-input-root-outside/outside/outside.edict","gitBlob":"44abebc15811c38cc266007484dd74ae10a26a4d"}, + {"path":"fixtures/cli/13-input-root-outside/request.jsonl","gitBlob":"116dbbb4b1a80938bc042e41747872cb6da161cd"}, + {"path":"fixtures/cli/README.md","gitBlob":"9388df4182fedec41c353e85cf9210e88906fa3d"}, + {"path":"fixtures/core/canonical/README.md","gitBlob":"d9a0ca79557c3623c0b843d9eff4808f94fd7b18"}, + {"path":"fixtures/core/canonical/bounded-hello.core.cbor","gitBlob":"a0ec54aa1a5e20624192091526445cfd803e6f0c"}, + {"path":"fixtures/core/canonical/bounded-hello.core.sha256","gitBlob":"86ba062c26a3ad3fd733ccd8c80d7faa7ed62d94"}, + {"path":"fixtures/core/canonical/statement-branch.core.hex","gitBlob":"c22760cace0e4d146a2fdc8d7c7b50c38497622a"}, + {"path":"fixtures/core/canonical/statement-branch.core.sha256","gitBlob":"0b62657b192232390479319f0a1c8f601020a58f"}, + {"path":"fixtures/core/canonical/workspace-snapshot.core.cbor","gitBlob":"58e4f724610861f5b61537bf386a87062e8a57a7"}, + {"path":"fixtures/core/canonical/workspace-snapshot.core.sha256","gitBlob":"4bcb3e0813cd3f4a7afc7cf311d846f1dfdd0a9d"}, + {"path":"fixtures/core/schema/accepted/core-fn-body-minimal.fields","gitBlob":"bef3ca412ab0ea97465b8658499ae5e05e1ec760"}, + {"path":"fixtures/core/schema/accepted/core-intent-minimal.fields","gitBlob":"268b28ce942fed4f139aafe5c7cd50c15a0ee640"}, + {"path":"fixtures/core/schema/accepted/core-module-minimal.fields","gitBlob":"249ff76349f936c9a5ff6cb65d81de8e80d53de8"}, + {"path":"fixtures/core/schema/rejected/core-fn-body-effect-node-field.fields","gitBlob":"9af8fa3540b25ec810936bc4dc82e26f6dd0dd48"}, + {"path":"fixtures/core/schema/rejected/core-intent-unknown-verified-mode.fields","gitBlob":"667ae032ee117f32c1bcbafd21393e406621f517"}, + {"path":"fixtures/core/schema/rejected/core-module-missing-intents.fields","gitBlob":"17f37c7ac4c199de4eace7f31e6a59b9a6d3a0f6"}, + {"path":"fixtures/core/schema/rejected/local-ref-missing-alpha-name.fields","gitBlob":"456a89528ffe74d892be40c9c9be4a078ff5c18a"}, + {"path":"fixtures/lang/bounds/bounded-hello.edict","gitBlob":"e3443a1d3b1c8f0e137ac698b621dd2f3afb673b"}, + {"path":"fixtures/lang/effects/conditional-blob.edict","gitBlob":"1e4f2ca6112f26d57ee4d20058666ec7cd693b75"}, + {"path":"fixtures/lang/effects/read-greeting.edict","gitBlob":"5e3838d1547be171e0a0384a7a200f52a2b9d139"}, + {"path":"fixtures/lang/external-actions/workspace-snapshot.edict","gitBlob":"e54b0fbccad2fd680505f3ee46ca28d39d7e776e"}, + {"path":"fixtures/lang/operations/explicit-basis-u64.edict","gitBlob":"444d8ca77b9827746df81885f0620dce2d1a3b73"}, + {"path":"fixtures/lang/tooling/highlight-smoke.edict","gitBlob":"8c2d91084be22e5e1594a42159992aca95c73612"}, + {"path":"fixtures/lang/types/color-match.edict","gitBlob":"dd98d6de677904f36d7601165a0094d92928e536"}, + {"path":"fixtures/lawpack/causal-cell/README.md","gitBlob":"52e8cc1e2af8aea86c1090a1b20b5f5ab3e07c06"}, + {"path":"fixtures/lawpack/causal-cell/adapter.cbor","gitBlob":"3b0c8b1b3a8591a322b6e785d9f963899319310c"}, + {"path":"fixtures/lawpack/causal-cell/adapter.sha256","gitBlob":"f8231bc941e1fbe02279865a82e183cbeeb0988a"}, + {"path":"fixtures/lawpack/causal-cell/echo-operation-configuration.cbor","gitBlob":"24527d30d0146b567fda157561ac6a2587cae919"}, + {"path":"fixtures/lawpack/causal-cell/echo-operation-configuration.sha256","gitBlob":"d293c8a14b1955a3e171703400c4df620c7871a1"}, + {"path":"fixtures/lawpack/causal-cell/exports.cbor","gitBlob":"384f4839adfe8e5b0f1aa848bfe2aeb1c3f640b6"}, + {"path":"fixtures/lawpack/causal-cell/exports.sha256","gitBlob":"4f836f6b03497338a1f8eacc55480cbe1a3b49e9"}, + {"path":"fixtures/lawpack/causal-cell/manifest.cbor","gitBlob":"b9311a236d7898861a0b90b1f30b852b35cef623"}, + {"path":"fixtures/lawpack/causal-cell/manifest.sha256","gitBlob":"685fd6a6c72fc3100d595d009b6198a81c731a40"}, + {"path":"fixtures/lawpack/hello-echo/README.md","gitBlob":"79f6612f1f5608a8f7dc4835e5470878cd27f96e"}, + {"path":"fixtures/lawpack/hello-echo/adapter.cbor","gitBlob":"24e2f546e2b97747b53462a72faaa1d5d85d62f1"}, + {"path":"fixtures/lawpack/hello-echo/adapter.sha256","gitBlob":"91df491028061e026ecaaeb4e1598e2ac369af44"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.core.cbor","gitBlob":"246b6135855c415def0bd89b275f0457752ee563"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.core.sha256","gitBlob":"9adc71605e0a275349161809614bd17de97d129c"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.edict","gitBlob":"825d50565230bd71d62bfbeb59d0399a89864b4c"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.result-projection.cbor","gitBlob":"981cba6e1c7ab6bdae6829116749c4796167e4e6"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.result-projection.sha256","gitBlob":"d55e4083771e1d9791f59cf87fd5cc5f1ea3b9f4"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.target-ir.cbor","gitBlob":"c8a934cefec17dbab0a43d9be9cebd2533268798"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.target-ir.sha256","gitBlob":"20186cbe9482e8a7df7c44fabec13ffd4efbcf36"}, + {"path":"fixtures/lawpack/hello-echo/echo-operation-configuration.cbor","gitBlob":"84838ab0d8627237232fa5a9b9fa39087bcc5f8a"}, + {"path":"fixtures/lawpack/hello-echo/echo-operation-configuration.sha256","gitBlob":"0898688f14067560dd22abd04b97f020071fd3e8"}, + {"path":"fixtures/lawpack/hello-echo/exports.cbor","gitBlob":"0e1220ceed9442a7b35870eeb02fcb65454d8c5c"}, + {"path":"fixtures/lawpack/hello-echo/exports.sha256","gitBlob":"e1f3e9223de9ce935bc7f60dda3cfa7d12d54fdc"}, + {"path":"fixtures/lawpack/hello-echo/manifest.cbor","gitBlob":"d715900f03ec454a0ad96e6710f52a46120d0b9d"}, + {"path":"fixtures/lawpack/hello-echo/manifest.sha256","gitBlob":"20171199b401cecace2dd74e18f3cc1d5c7ed3de"}, + {"path":"fixtures/lawpack/workspace-patch/README.md","gitBlob":"67cd35f2e0660aa7455de1c197ad821d5438679b"}, + {"path":"fixtures/lawpack/workspace-patch/adapter.cbor","gitBlob":"2d6f09a7e2fab381b97a05cfad1e692902e878c3"}, + {"path":"fixtures/lawpack/workspace-patch/adapter.sha256","gitBlob":"d44eb9675e126716e8a5ef3c53fd39ade49d76fb"}, + {"path":"fixtures/lawpack/workspace-patch/apply-validated-patch.core.cbor","gitBlob":"6a88c127e426288a3e51d4749d5c31d5b0cb60cb"}, + {"path":"fixtures/lawpack/workspace-patch/apply-validated-patch.core.sha256","gitBlob":"0204b6f1d8b346a67800a7738ee39df49e78571f"}, + {"path":"fixtures/lawpack/workspace-patch/apply-validated-patch.edict","gitBlob":"6e11a3d022a53a8fb2c20a77e35e29840f5fe086"}, + {"path":"fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.cbor","gitBlob":"a6124a995a3cdbb5d39cd0a6e046b329048703aa"}, + {"path":"fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.sha256","gitBlob":"f7ac419ce15b32d491e09bddbe7c75f8227f51d8"}, + {"path":"fixtures/lawpack/workspace-patch/exports.cbor","gitBlob":"3a6fd19dc8059b9fe1bde74fb1da61398b0e80cc"}, + {"path":"fixtures/lawpack/workspace-patch/exports.sha256","gitBlob":"b301dd883a31fffe324e9306ec90ae2b1ec44520"}, + {"path":"fixtures/lawpack/workspace-patch/input-schema.cbor","gitBlob":"3045d9b696864fefe111c3eb641b3b68532752d2"}, + {"path":"fixtures/lawpack/workspace-patch/input-schema.sha256","gitBlob":"9f1284b4f0a2c7f6dbe1915a6113cd13a9700cb8"}, + {"path":"fixtures/lawpack/workspace-patch/manifest.cbor","gitBlob":"77e56c7525f0e64ab191f0adfeac12b540c87848"}, + {"path":"fixtures/lawpack/workspace-patch/manifest.sha256","gitBlob":"8316978e68565f29a30a6978d33d907710185857"}, + {"path":"fixtures/lawpack/workspace-patch/reconciliation-law.cbor","gitBlob":"0736b75f81913fca7ac95c56ec45f66b95aea4cf"}, + {"path":"fixtures/lawpack/workspace-patch/reconciliation-law.sha256","gitBlob":"de31fc9fda59fa3c29397e5fc48db224e8e1fee7"}, + {"path":"fixtures/lawpack/workspace-patch/request-profile-configuration.cbor","gitBlob":"5e2870b2f562bafaa73a91a3fc192f5ed39257c7"}, + {"path":"fixtures/lawpack/workspace-patch/request-profile-configuration.sha256","gitBlob":"4345ae2e39ce3f4d9cfa6b0dddf4ce56d56c035c"}, + {"path":"fixtures/lawpack/workspace-patch/settlement-schema.cbor","gitBlob":"0a93ac19c51b341602eeba524769147e962d5d60"}, + {"path":"fixtures/lawpack/workspace-patch/settlement-schema.sha256","gitBlob":"f1bb3fb0313dd6815b4184345194949ec40fe9e1"}, + {"path":"fixtures/lawpack/workspace-snapshot/README.md","gitBlob":"996bd1d29b28769fff477084d9118d0833ca2970"}, + {"path":"fixtures/lawpack/workspace-snapshot/adapter.cbor","gitBlob":"9be4ea568b602b56269af505deb809989a3fa8b5"}, + {"path":"fixtures/lawpack/workspace-snapshot/adapter.sha256","gitBlob":"1e287be0a322e5444dea15fa14bcfc7cf12975c4"}, + {"path":"fixtures/lawpack/workspace-snapshot/exports.cbor","gitBlob":"33fe04db74775c191d4b7400e1fb2b6393c5a010"}, + {"path":"fixtures/lawpack/workspace-snapshot/exports.sha256","gitBlob":"e057cac7fc360e6599b7ddab88508aaf0f2f55f8"}, + {"path":"fixtures/lawpack/workspace-snapshot/input-schema.cbor","gitBlob":"49c849169946e44c8b5f300279dd085bd6b63aeb"}, + {"path":"fixtures/lawpack/workspace-snapshot/input-schema.sha256","gitBlob":"9dd7bb6e48192e90d19fc346d1705f736b1d85d7"}, + {"path":"fixtures/lawpack/workspace-snapshot/manifest.cbor","gitBlob":"d4e58e3d4646ca967170a6882f2a617cb8d81390"}, + {"path":"fixtures/lawpack/workspace-snapshot/manifest.sha256","gitBlob":"0edb311125a89a5816ee3fa0c9b700c9b3bcff3d"}, + {"path":"fixtures/lawpack/workspace-snapshot/observe-workspace.core.cbor","gitBlob":"a4b249dfb197f1a6b4adc06855f16e4305a1c798"}, + {"path":"fixtures/lawpack/workspace-snapshot/observe-workspace.core.sha256","gitBlob":"ea6b914d14907d9fd915058e579aff33c954da2c"}, + {"path":"fixtures/lawpack/workspace-snapshot/observe-workspace.edict","gitBlob":"c2c10f1ef1009796d67061b9722c4db9bb4e031b"}, + {"path":"fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.cbor","gitBlob":"bdab1b0c55a34360c7e9ab304af91fe2b1e4afce"}, + {"path":"fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.sha256","gitBlob":"7342aaa96221d6c8efa75ead2af5563791ccfeff"}, + {"path":"fixtures/lawpack/workspace-snapshot/reconciliation-law.cbor","gitBlob":"df55572b350002a3df98ccb3e72dd60c86b9aead"}, + {"path":"fixtures/lawpack/workspace-snapshot/reconciliation-law.sha256","gitBlob":"957cd04c78c130b07d2cad2fd7e07ae69978be57"}, + {"path":"fixtures/lawpack/workspace-snapshot/request-profile-configuration.cbor","gitBlob":"708f18918ee1703491a910df82e129e711a4cc46"}, + {"path":"fixtures/lawpack/workspace-snapshot/request-profile-configuration.sha256","gitBlob":"d9953d9dcaa41c98387226d1980f40b24d2bc3cb"}, + {"path":"fixtures/lawpack/workspace-snapshot/settlement-schema.cbor","gitBlob":"f01ad68531267666e6bf93bf30a37d5b311c1676"}, + {"path":"fixtures/lawpack/workspace-snapshot/settlement-schema.sha256","gitBlob":"06fcc0ee2b976a09b3017bd93132a3c51eb1317e"}, + {"path":"fixtures/obstruction-strands/v0/stale-basis/README.md","gitBlob":"25efbfa04e2e6104c5434f329128333e895e2b0a"}, + {"path":"fixtures/obstruction-strands/v0/stale-basis/source.edict","gitBlob":"e487b46e81220c50e6f928922dada29f3a21ca6a"}, + {"path":"fixtures/provider-contracts/v1/README.md","gitBlob":"447692907f9268ce3b6b78c43b7cbbb0417aeadf"}, + {"path":"fixtures/provider-contracts/v1/edict-provider-contracts.cddl","gitBlob":"07048aeeadb5062eabb89e995713cbc0893b7d7e"}, + {"path":"fixtures/provider-contracts/v1/manifest.json","gitBlob":"d2c8de5d61049e9f4182c630bf82b138f0f96792"}, + {"path":"fixtures/providers/README.md","gitBlob":"c26ee60a4930e3e0784c76cb855e48234a5c6b58"}, + {"path":"fixtures/providers/components/guests/Cargo.lock","gitBlob":"d7858ce7bc67deabb5ff352a24c85a7caa0ef4b0"}, + {"path":"fixtures/providers/components/guests/Cargo.toml","gitBlob":"450a24aed25dc73661b0ae8adfe2630dfecc9b07"}, + {"path":"fixtures/providers/components/guests/lowerer/Cargo.toml","gitBlob":"568aa137fa215b6b973fe31e12322530b393b9dc"}, + {"path":"fixtures/providers/components/guests/lowerer/src/lib.rs","gitBlob":"b39a8a0b18fe9ed7cb90277f793056434afa1318"}, + {"path":"fixtures/providers/components/guests/verifier/Cargo.toml","gitBlob":"f814f2c8c248bbf03389f5a0936f80cd4dada5b6"}, + {"path":"fixtures/providers/components/guests/verifier/src/lib.rs","gitBlob":"3f07ffdfd808ff95b206a2c08c2d481ccaf0e165"}, + {"path":"fixtures/providers/components/instantiation-failure-lowerer.component.wasm","gitBlob":"bd2d7c0d31798d7676aedab0bd0d289fc2053bef"}, + {"path":"fixtures/providers/components/instantiation-failure-lowerer.wat","gitBlob":"f6f5a70edb80d3a7fa1dee13b34ab5b8b44274d7"}, + {"path":"fixtures/providers/components/instantiation-fuel-lowerer.component.wasm","gitBlob":"0804d26d3ddb428682ca87ecad03cf0e05ef64af"}, + {"path":"fixtures/providers/components/instantiation-fuel-lowerer.wat","gitBlob":"80e972463ef593602d27c7d7cec78d87d22ff727"}, + {"path":"fixtures/providers/components/inventory.json","gitBlob":"45cf2e8e937a17a8ee05dfa8d68e94dcc155e129"}, + {"path":"fixtures/providers/components/lowerer.component.wasm","gitBlob":"6c1cf123a44284d15b7b1e90f1905ae94e65c158"}, + {"path":"fixtures/providers/components/malformed-lowerer.component.wasm","gitBlob":"be873af81100dc76ed1f3f1f818a41da45a38e4c"}, + {"path":"fixtures/providers/components/malformed-lowerer.wat","gitBlob":"1e7bfffe0a0baf230d9fb5766083f82198f4029c"}, + {"path":"fixtures/providers/components/verifier.component.wasm","gitBlob":"671adbe7931d0a9a5e0c78d459c244d37a135a69"}, + {"path":"fixtures/providers/echo-generated/provider-manifest.json","gitBlob":"22c8560e7ddecacd5da388e52d3935d7fc1474b9"}, + {"path":"fixtures/providers/echo-target-profile/README.md","gitBlob":"350c33dcda2d66d2d50e589c58db7c6d7b14a80b"}, + {"path":"fixtures/providers/echo-target-profile/generated/primary/target-profile.echo-dpo.cbor","gitBlob":"9fa43529b1021dfd8e3a33256c832d4eee6f4a47"}, + {"path":"fixtures/providers/wit/legacy-target-profile.wit","gitBlob":"ae7d6af764012b16bf06bfa260ccba98a7f04868"}, + {"path":"fixtures/target-ir/canonical/echo-effectful.target-ir.cbor","gitBlob":"727a80eb37319dbdbea40d7d9b4e37f0d93d8d84"}, + {"path":"fixtures/target-ir/canonical/echo-effectful.target-ir.sha256","gitBlob":"6d050bb46ac8981ea8e47c7a52371027b941fd89"}, + {"path":"fixtures/target-ir/canonical/gitwarp-append.target-ir.cbor","gitBlob":"89b46b138a7b90252a4397c0e8b622bceff10a33"}, + {"path":"fixtures/target-ir/canonical/gitwarp-append.target-ir.sha256","gitBlob":"a59a4ab9d46095d5be1797ed9e60fe841f821bce"}, + {"path":"fixtures/target-ir/canonical/workspace-snapshot.target-ir.cbor","gitBlob":"1854eeb549b3719fa2b0114867dbece6db1819d4"}, + {"path":"fixtures/target-ir/canonical/workspace-snapshot.target-ir.sha256","gitBlob":"4d0e501323d415ef9e64c0a3d25bdd57dabfc998"}, + {"path":"fixtures/target-profile/contract-resources/README.md","gitBlob":"32dcab1dd9376a4eed2c73bb1b1a29255fe3ea05"}, + {"path":"fixtures/target-profile/contract-resources/canonical-cbor.cbor","gitBlob":"4a95ba3bd9dff190ca5ec9c83262bfa6254a91d3"}, + {"path":"fixtures/target-profile/contract-resources/canonical-cbor.sha256","gitBlob":"2168df5d4bf77ed2347139dd7c45fd808df8ec7e"}, + {"path":"fixtures/target-profile/contract-resources/determinism.cbor","gitBlob":"09cd11c36048939961408550763c04fad8241557"}, + {"path":"fixtures/target-profile/contract-resources/determinism.sha256","gitBlob":"5376d6bfe23bea659463a7e3c56ad1e8afd4095f"}, + {"path":"fixtures/target-profile/contract-resources/diagnostics.cbor","gitBlob":"c47fa05f463e0da745fbcdf8daf94d70e134eb8d"}, + {"path":"fixtures/target-profile/contract-resources/diagnostics.sha256","gitBlob":"69613ec4014f27b23245e23fbf7c9447566516b2"}, + {"path":"fixtures/target-profile/contract-resources/fuel.cbor","gitBlob":"b5a3484ec5b2bf7343c2fcedc67bcb2b63a37104"}, + {"path":"fixtures/target-profile/contract-resources/fuel.sha256","gitBlob":"6ec1c830358ee35bb12bd04cc1a6edf47fb20997"}, + {"path":"fixtures/target-profile/contract-resources/wasm-component.cbor","gitBlob":"6344996c283e0d1c332ea3ce597ad4593882a3c5"}, + {"path":"fixtures/target-profile/contract-resources/wasm-component.sha256","gitBlob":"24bf3e552e4216d8258d2b85c8878af46a176c52"}, + {"path":"grammars/textmate/README.md","gitBlob":"fc116a669725d4e965d658234d32d779955d5dc8"}, + {"path":"grammars/textmate/edict.tmLanguage.json","gitBlob":"5847d8edfdb32d822f0f3950f41d00c947982185"}, + {"path":"grammars/tree-sitter-edict/README.md","gitBlob":"e2992a839d6719f1461db78c4e3f33d2e5ab0c09"}, + {"path":"grammars/tree-sitter-edict/grammar.js","gitBlob":"a82f5b9d9b78525f17a59272543fdcddd7a0da40"}, + {"path":"grammars/tree-sitter-edict/queries/highlights.scm","gitBlob":"0f46530b36996d13449901aed4e376a126577cba"}, + {"path":"grammars/tree-sitter-edict/src/grammar.json","gitBlob":"55df730a06b83c9f622e3ec17845fc9897c7d8c0"}, + {"path":"grammars/tree-sitter-edict/src/node-types.json","gitBlob":"520f6c4f7b30cd6892dd60faf6d76f3fbaa6a5c7"}, + {"path":"grammars/tree-sitter-edict/src/parser.c","gitBlob":"81cc4713cb5e05f9aa8dac16da202a864faefee6"}, + {"path":"grammars/tree-sitter-edict/src/tree_sitter/alloc.h","gitBlob":"1abdd1201578605b8d05a3001f01ebc0d58826d9"}, + {"path":"grammars/tree-sitter-edict/src/tree_sitter/array.h","gitBlob":"56fc8cd470996ded64a5452be25e26dbd2aa682a"}, + {"path":"grammars/tree-sitter-edict/src/tree_sitter/parser.h","gitBlob":"858107deb9e4a1ffcd2ed5e6ffe98a5fcab3e1f6"}, + {"path":"grammars/tree-sitter-edict/test/corpus/current-subset.txt","gitBlob":"732c5eda8e1bf95eef799476296a6ee061eb58eb"}, + {"path":"grammars/tree-sitter-edict/tree-sitter.json","gitBlob":"97d3fdd498a3bef509c8615d98b9560b527c03cb"}, + {"path":"scripts/consumer-witnesses/README.md","gitBlob":"2b7d2b9d81f9598fd8df232b3a76bef106ff7ef2"}, + {"path":"scripts/consumer-witnesses/jedit-state-read.Dockerfile","gitBlob":"7462059be67686090d0097b24b9d14bfbbd4c6f7"}, + {"path":"scripts/consumer-witnesses/jedit-state-read.Dockerfile.dockerignore","gitBlob":"ee41b3ca0a68fd5eb20e1b777b4b368fd8b44e63"}, + {"path":"scripts/consumer-witnesses/jedit-state-read.py","gitBlob":"26db295d4eabfc4e57813fc9bf17314c23350777"}, + {"path":"scripts/consumer-witnesses/run-jedit-state-read.sh","gitBlob":"18cd72bbbdfb17a5ea30a7821d47035071556d10"}, + {"path":"spec.lock.json","gitBlob":"ef8b02386e0f269a99c1d2121764f70b76e67620"}, + {"path":"xtask/Cargo.toml","gitBlob":"795c70a5172363bfcd55174b1bc76c9c131d21a3"}, + {"path":"xtask/src/contract_check.rs","gitBlob":"9e80393accf79936033972fde0f2aa2cf40f1be3"}, + {"path":"xtask/src/goldens.rs","gitBlob":"713f1f8266d9f6993684ae86db105fcd7d69ee2a"}, + {"path":"xtask/src/lawpack_goldens.rs","gitBlob":"c499e8581c73313794b83c261937144b3917850a"}, + {"path":"xtask/src/main.rs","gitBlob":"6c2c06038bb5ecdde60620071b200d8191dc116c"}, + {"path":"xtask/src/provider_components.rs","gitBlob":"ee9d6a1028f9fbfad879faab4b15a94b996ef6d4"}, + {"path":"xtask/src/provider_contract_pack.rs","gitBlob":"cf60d89892b7a57cc33300f273d2522a6e8f43f9"}, + {"path":"xtask/src/provider_dependencies.rs","gitBlob":"c4b0539ed593d2a2777d294090d2a891b13ae628"}, + {"path":"xtask/src/release_dates.rs","gitBlob":"1c6d7acb872f6d820eab3a30ca580e9c5cfba2ee"}, + {"path":"xtask/src/release_prep.rs","gitBlob":"01ed64ccbb28c9d1e908b7b800ff58076e5e1a2b"}, + {"path":"xtask/src/tests.rs","gitBlob":"9a3f6543c2dbae31d53e93d56f781e5d54f74f41"}, + {"path":"xtask/src/util.rs","gitBlob":"c1bf39e93460c43ffdcfd9a76e0424750cbb9dfd"} + ] +} diff --git a/edict/replace-range-probes/leaf-slice/evidence/candidate-report-inspection.json b/edict/replace-range-probes/leaf-slice/evidence/candidate-report-inspection.json new file mode 100644 index 00000000..227a0df3 --- /dev/null +++ b/edict/replace-range-probes/leaf-slice/evidence/candidate-report-inspection.json @@ -0,0 +1,70 @@ +{ + "packageCoordinate": "jedit.text.replace_range@1.sliceLeaf", + "report": { + "outcome": "accepted", + "package": { + "id": "executable-operation-package.echo", + "digest": [ + "sha256", + { + "byteLength": 32, + "sha256": "b1acdfe0db3286d81604186a3588f595f19aaf21a78209f42a61f90476eba2ab" + } + ] + }, + "targetIr": { + "id": "echo.span-ir/v1", + "digest": [ + "sha256", + { + "byteLength": 32, + "sha256": "78b4e450233527ad0007a95ae2af76ba1cdfbe086b1f19a14291cf7cbd2fd84d" + } + ] + }, + "apiVersion": "echo.operation-package-verifier-report/v1", + "diagnosticAbi": { + "id": "edict.diagnostics/v1", + "digest": [ + "sha256", + { + "byteLength": 32, + "sha256": "60f5dfb53db3c4b4cebb44bcaf5689796495b017f0e34e1f30b48f8c292065e4" + } + ] + }, + "diagnosticBytes": { + "byteLength": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "executableSubject": { + "bytes": { + "byteLength": 334, + "sha256": "a390af915f4493e811cd75322d09968c93f5f09e3d142e8a121cdaad32b65ece" + }, + "reference": { + "id": "echo.executable-subject/v1", + "digest": [ + "sha256", + { + "byteLength": 32, + "sha256": "2b6d0f2561348e957e414edf7ad16cdf09b5ba934b5f26112f3c2444b26b4db9" + } + ] + } + }, + "applicationResultProjection": { + "id": "jedit.text.replace_range@1.sliceLeaf", + "digest": [ + "sha256", + { + "byteLength": 32, + "sha256": "0f974cde2e2d5e222ff03745fb42e6e6a00c36b2b340887d5e53e45fbc93fb8a" + } + ] + } + }, + "retainedCoreContainsSlice": true, + "retainedTargetContainsSlice": true, + "runtimeEvaluated": false +} diff --git a/edict/replace-range-probes/leaf-slice/evidence/compiler-source.json b/edict/replace-range-probes/leaf-slice/evidence/compiler-source.json new file mode 100644 index 00000000..d0b18a0d --- /dev/null +++ b/edict/replace-range-probes/leaf-slice/evidence/compiler-source.json @@ -0,0 +1,446 @@ +{ + "commit": "2405a550e93e1e97fff640caa44bbd0f65ffff3c", + "tree": "257d3e6aa10c2248fdbddaa8e9b3638866396169", + "files": [ + {"path":".cargo/config.toml","gitBlob":"5592118f6c54bf8b53b16848e04ece896dd56384"}, + {"path":".github/workflows/auto-release-tag.yml","gitBlob":"87404ceb685191afd496c93494b0bc61e2a59504"}, + {"path":".github/workflows/ci.yml","gitBlob":"c6c6a17f59b6b96db88e3d4b2775bc64b7fe01f3"}, + {"path":".github/workflows/release.yml","gitBlob":"2c612fc786998bfa5b11e76ae1185114a7cc535f"}, + {"path":".gitignore","gitBlob":"30d7faf0fc8b7f010f99280302d4ed269d5da9ba"}, + {"path":".markdownlint.json","gitBlob":"f3ec2c8dc2fbacc425154a2baedec50c7474aefa"}, + {"path":"AGENTS.md","gitBlob":"0c48a5794454cf84e20640994a372316efde7bb5"}, + {"path":"ARCHITECTURE.md","gitBlob":"5b513dd25028092e7e75c8974f1d5f3cc31889ed"}, + {"path":"CHANGELOG.md","gitBlob":"9cc14cfa4891c9ff5167c569bb80567e8f670e0d"}, + {"path":"CODE_OF_CONDUCT.md","gitBlob":"784cf2799bcf8d2a69db5f5781359ef7e18a05fc"}, + {"path":"CONTRIBUTING.md","gitBlob":"9676914060f734dc59eabd9075898dc8170d4d19"}, + {"path":"Cargo.lock","gitBlob":"bacb208de0583f182379af7b5e078d31b25e2ca5"}, + {"path":"Cargo.toml","gitBlob":"b2e7106eb78f79230c091492ef21b497bdc9ed19"}, + {"path":"EDICT.md","gitBlob":"35376134195082d506f0161ba7ecb97efa8b770a"}, + {"path":"LICENSE","gitBlob":"261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64"}, + {"path":"NOTICE","gitBlob":"c300687bdd9d931d1f257d291e1cb6ff9d7d3607"}, + {"path":"README.md","gitBlob":"0812ef9a0c4611bf655dfc67d2ecc3631af9a536"}, + {"path":"ROADMAP.md","gitBlob":"d0e0135780537afab1d1a3f53808b363b35a63f4"}, + {"path":"SECURITY.md","gitBlob":"0bcc4e7375442e1334405a2d046df316cee05cd5"}, + {"path":"crates/edict-cli/Cargo.toml","gitBlob":"e9d844553c395bd312f84e806eb5bac30c5c3a54"}, + {"path":"crates/edict-cli/src/application_build.rs","gitBlob":"9c56ae6b4dd4eef0b9fe6db40316e100b2ffa699"}, + {"path":"crates/edict-cli/src/lawpack_build.rs","gitBlob":"55e9579153f34a3d5b139141c9de6640808cd386"}, + {"path":"crates/edict-cli/src/lawpack_build_windows.rs","gitBlob":"f71d03b368ae83becc1608bbba11cd5f1afa4f07"}, + {"path":"crates/edict-cli/src/lib.rs","gitBlob":"60883af60cf4b441680952ecce7ef4fcbfeabb97"}, + {"path":"crates/edict-cli/src/main.rs","gitBlob":"0dd9776642c4090479322111e4164ee7049fb9d0"}, + {"path":"crates/edict-cli/tests/golden_cli.rs","gitBlob":"9897caad3bcc6fa8bb0f20a1d0e18032285b1fa7"}, + {"path":"crates/edict-cli/tests/jsonl_cli.rs","gitBlob":"9ed353ca27d073fc7da49d3800c81ba4c58edd5d"}, + {"path":"crates/edict-cli/tests/lawpack_authoring_cli.rs","gitBlob":"dd7d7bfebf0e051c77d894a55c0204d373b19c63"}, + {"path":"crates/edict-provider-host-wasmtime/Cargo.toml","gitBlob":"ebeeb941f09012293d9923fe0e6039b2761b328e"}, + {"path":"crates/edict-provider-host-wasmtime/src/conversion.rs","gitBlob":"62c3cd4a85eb156b8c9a405ef3ea4d8a09b80cc3"}, + {"path":"crates/edict-provider-host-wasmtime/src/invocation.rs","gitBlob":"a4d6680d289094afebc0f1063abccf706f8149db"}, + {"path":"crates/edict-provider-host-wasmtime/src/lib.rs","gitBlob":"353ea7394f265219ebdecad56a3070c9e7d2685c"}, + {"path":"crates/edict-provider-host-wasmtime/src/limits.rs","gitBlob":"9e4d12c1b606d2b180f732db17bfbc78f8e26e3a"}, + {"path":"crates/edict-provider-host-wasmtime/src/replay.rs","gitBlob":"b8fa7be7c7ee5039793dad4cd0fa6a4f14ce388e"}, + {"path":"crates/edict-provider-host-wasmtime/tests/invocation.rs","gitBlob":"7a59a3192852a80bc01221ebf3dd1c437bda9508"}, + {"path":"crates/edict-provider-host-wasmtime/tests/preflight.rs","gitBlob":"a295e7547b0294f0355a85d5b9b8d045c8fceefd"}, + {"path":"crates/edict-provider-schema/Cargo.toml","gitBlob":"0e74f58acdc054ecce192cb8341afeaddc40deb5"}, + {"path":"crates/edict-provider-schema/src/contract_pack.rs","gitBlob":"370480d9c606134dd08ee62ae29ef143941e2f54"}, + {"path":"crates/edict-provider-schema/src/lib.rs","gitBlob":"51f5bee8892c9fb2122cb20022edc4d414759ff7"}, + {"path":"crates/edict-provider-schema/src/recursive_dispatch.rs","gitBlob":"6d97565b96f941b359d16f7a1c201189968fbeff"}, + {"path":"crates/edict-provider-schema/src/schema_safety.rs","gitBlob":"a2f605f62a2bfedcb84b68e37db9ff84b1dc3b05"}, + {"path":"crates/edict-provider-schema/tests/authority_facts_abi.rs","gitBlob":"7dd4d0302805ceecffc2045cdb91e386f8e08517"}, + {"path":"crates/edict-provider-schema/tests/provider_contract_pack.rs","gitBlob":"a26be8054b39215048825dd8cae7e9bddcfe27c9"}, + {"path":"crates/edict-provider-schema/tests/registry.rs","gitBlob":"bdd13ec00e441aef9e67ba49f6592ecbc7dcb303"}, + {"path":"crates/edict-syntax/Cargo.toml","gitBlob":"f55bb23e528af78b1e97b52f9b72cbd876a44ba7"}, + {"path":"crates/edict-syntax/src/admission.rs","gitBlob":"471430dd13a617bac886fcd44afbf15263e7db3b"}, + {"path":"crates/edict-syntax/src/ast.rs","gitBlob":"2a5d208a53a82408f8a18d9a13ccb133ec6a7a2e"}, + {"path":"crates/edict-syntax/src/authority_facts.rs","gitBlob":"644de86d63983bdbfbf1279fdbf1dbdaecc151d5"}, + {"path":"crates/edict-syntax/src/canonical.rs","gitBlob":"6fb29d50ea4a55eb888a1b9600cdcb31713a6e20"}, + {"path":"crates/edict-syntax/src/compiler.rs","gitBlob":"7d2ef5f503aef28b6878467749200aea99843114"}, + {"path":"crates/edict-syntax/src/compiler/byte_length.rs","gitBlob":"0d8d6291064415baee9253d9fe1e11ad87945773"}, + {"path":"crates/edict-syntax/src/compiler/unsigned_subtraction.rs","gitBlob":"e714094b05f69559ec69f1b9b45fb054d06c1919"}, + {"path":"crates/edict-syntax/src/contract_bundle.rs","gitBlob":"9a31645f0e30879d019787e29c21c82eebf58129"}, + {"path":"crates/edict-syntax/src/core_ir.rs","gitBlob":"119d69b75914db1357030ccc5aecb90448fe8f24"}, + {"path":"crates/edict-syntax/src/highlight.rs","gitBlob":"28b3f7dcdfe8d4982bdcfb05759f769ccdbffc7f"}, + {"path":"crates/edict-syntax/src/lawpack.rs","gitBlob":"54f85bda48c960ad0b7bc316d332b379ab5b6ae0"}, + {"path":"crates/edict-syntax/src/lawpack_adapter.rs","gitBlob":"e425960e2437faa2f9eeb5d089ff507417d39586"}, + {"path":"crates/edict-syntax/src/lawpack_authoring.rs","gitBlob":"11ff578f458b8a4c8e4df75c0c616e37fa468d49"}, + {"path":"crates/edict-syntax/src/lib.rs","gitBlob":"7323475cc7f846e11c2d73f4c26a5e581b7e6157"}, + {"path":"crates/edict-syntax/src/lowerability.rs","gitBlob":"c6a1323fd6a79b0460b43aaf338956c3906a633e"}, + {"path":"crates/edict-syntax/src/parser.rs","gitBlob":"0b3650e3012e49023ccbb9cc9effe9b5b102f19d"}, + {"path":"crates/edict-syntax/src/provider.rs","gitBlob":"18fa661d880979c53dd335fb7e68d5445b638d4c"}, + {"path":"crates/edict-syntax/src/provider_invocation.rs","gitBlob":"2526168f0a6f2d1d9b6181b689ff43e203434122"}, + {"path":"crates/edict-syntax/src/provider_lowering.rs","gitBlob":"50a4e60b561127cb8c78e3f7c04c6bbaca068e52"}, + {"path":"crates/edict-syntax/src/result_projection.rs","gitBlob":"79ba246d4c58960fe368eaca4c7d135fe187832a"}, + {"path":"crates/edict-syntax/src/semantic.rs","gitBlob":"3314c1ac95904d2b3d92cd67a9d7babad5182123"}, + {"path":"crates/edict-syntax/src/target_ir.rs","gitBlob":"c6cac206a5e4342ebda323070d3dc18baf68a3ce"}, + {"path":"crates/edict-syntax/src/target_ir/byte_length.rs","gitBlob":"84e93d15c61936061323485a8408d3f1fbf95f55"}, + {"path":"crates/edict-syntax/src/target_ir/execution_order.rs","gitBlob":"e69a28805dc5e414a64afdaafee34161c217a044"}, + {"path":"crates/edict-syntax/src/target_ir/unsigned_subtraction.rs","gitBlob":"2170e31b98dfa7ab48a0441a2355e9824b3fcab6"}, + {"path":"crates/edict-syntax/src/target_profile.rs","gitBlob":"dd514f7380243e795f0655a78aecd06ee3fa2eda"}, + {"path":"crates/edict-syntax/src/target_profile_contract_resources.rs","gitBlob":"4efd22961c2fd7591440efd6087944ecaf21e991"}, + {"path":"crates/edict-syntax/src/token.rs","gitBlob":"2768586eea6d42d5df357c4cc62a011ee7f455de"}, + {"path":"crates/edict-syntax/tests/admission.rs","gitBlob":"57edbc320307c1d6daba85f03d8dc79558d7b849"}, + {"path":"crates/edict-syntax/tests/authority_facts.rs","gitBlob":"add9d272be6e8eb1cd6fdde2999a5fb452ecd852"}, + {"path":"crates/edict-syntax/tests/authority_facts_cbor.rs","gitBlob":"7359f047d9f731fee208efb5f69072b612d69547"}, + {"path":"crates/edict-syntax/tests/byte_length.rs","gitBlob":"032a62da58ae4ef933ef9dcd92d6510f627ff102"}, + {"path":"crates/edict-syntax/tests/canonical_encoding.rs","gitBlob":"e4c5d59a88f88193f522eb555359919f7034a264"}, + {"path":"crates/edict-syntax/tests/common/mod.rs","gitBlob":"89560bfacb3dab031485c2dfa30d7eb325966574"}, + {"path":"crates/edict-syntax/tests/compiler_spine.rs","gitBlob":"2237318cfc0d4209e8a629e45320e42a4b72dbef"}, + {"path":"crates/edict-syntax/tests/contract_bundle.rs","gitBlob":"e6a2948335a0efc86d8bbb2e9e2c3d634e53965a"}, + {"path":"crates/edict-syntax/tests/core_golden_fixtures.rs","gitBlob":"0e0e42d19b52dc0557902dad9e1b85f37edf53f8"}, + {"path":"crates/edict-syntax/tests/external_action_requests.rs","gitBlob":"3c07be4db0bfc49e67c2d7e1eda0ac0397987a37"}, + {"path":"crates/edict-syntax/tests/highlighting.rs","gitBlob":"17e6b9ba08c96f0efb6efd440590f0fc917316e2"}, + {"path":"crates/edict-syntax/tests/lawpack.rs","gitBlob":"a675999ed96309358c8552a9d32781b5eede20dc"}, + {"path":"crates/edict-syntax/tests/lawpack_authoring.rs","gitBlob":"3a905cbd6d7d2625bc1d7826a6f6f1e991efbab0"}, + {"path":"crates/edict-syntax/tests/lowerability.rs","gitBlob":"5cfa58f5cbc51cccc7f119caddc1c3fcbc2e4806"}, + {"path":"crates/edict-syntax/tests/operation_prerequisites.rs","gitBlob":"753659e1a6e7751c455b8518226fa0902157a745"}, + {"path":"crates/edict-syntax/tests/parse_control_flow.rs","gitBlob":"5245561866d8902c1fbd5ab21f2e34807d568e17"}, + {"path":"crates/edict-syntax/tests/parse_greeting.rs","gitBlob":"f214d0c17745b8203d562780caa8f37b71c1e62c"}, + {"path":"crates/edict-syntax/tests/parse_hello.rs","gitBlob":"bf7b1b065277188f4be8754eb11ace94298394ba"}, + {"path":"crates/edict-syntax/tests/parse_keywords.rs","gitBlob":"78d8a64d785136d42a32655afda3df240c54f884"}, + {"path":"crates/edict-syntax/tests/parse_loops.rs","gitBlob":"d9ece2fce96fd6835d080055f06955d139c7e0ce"}, + {"path":"crates/edict-syntax/tests/parse_negative.rs","gitBlob":"17fdb983b8250470368a8f19d3a7bd9680052548"}, + {"path":"crates/edict-syntax/tests/parse_review_regressions.rs","gitBlob":"560215cfe044a528e190aa1ea7670e52b9365bdf"}, + {"path":"crates/edict-syntax/tests/parse_variants.rs","gitBlob":"8849f68f5ca1e2b06d0f66496e59b20d1c0fd022"}, + {"path":"crates/edict-syntax/tests/provider.rs","gitBlob":"7e8a596109b1e1fd3f22b3a0ef82f4755f127291"}, + {"path":"crates/edict-syntax/tests/provider_invocation.rs","gitBlob":"402647dd6701be65a9e693fd3f5688f26d84988e"}, + {"path":"crates/edict-syntax/tests/provider_lowering.rs","gitBlob":"411c306f3ab641de9dc2f7aed229767eba9dbd72"}, + {"path":"crates/edict-syntax/tests/result_projection.rs","gitBlob":"a74dd2a419266cb77d846d83da27f726095660f1"}, + {"path":"crates/edict-syntax/tests/semantic_validation.rs","gitBlob":"a127988d178c00ed12a0a25f70df6b7fd5e6d931"}, + {"path":"crates/edict-syntax/tests/target_ir.rs","gitBlob":"928e1cf921dead0b559bd115bb6eef3faaddd37e"}, + {"path":"crates/edict-syntax/tests/target_ir/ordered.rs","gitBlob":"a1b05db81a97a43ec5a2dc2d9bcc9578bc286f30"}, + {"path":"crates/edict-syntax/tests/target_profile.rs","gitBlob":"42f1c907f6c60dea1e8a9b4558b56ffd0b3a59ab"}, + {"path":"crates/edict-syntax/tests/target_profile_contract_resources.rs","gitBlob":"270c180a12dc10fb7e208cc4dc1e202da82c85fb"}, + {"path":"crates/edict-syntax/tests/target_unsigned_subtraction.rs","gitBlob":"6884e55a45baa4f423056a10b6dea9f8b08fb60f"}, + {"path":"crates/edict-syntax/tests/unsigned_subtraction.rs","gitBlob":"b4b870cea63f440a52c949529077336a0b58b4ee"}, + {"path":"crates/edict/Cargo.toml","gitBlob":"525403f4f36db4040531e4dd747ec2398f9052cd"}, + {"path":"crates/edict/README.md","gitBlob":"a1ecf50bff3443d25a23fabfa6374d3f0a28ca82"}, + {"path":"crates/edict/src/lib.rs","gitBlob":"169d820759d6333f27a45ebb712bfcc4f0115107"}, + {"path":"crates/edict/tests/artifact_models.rs","gitBlob":"b923109c7195ce2c0071dc54179f0746b95329f0"}, + {"path":"crates/edict/tests/public_surface.rs","gitBlob":"a24c4bc9d9484f540da9b280790896701922968a"}, + {"path":"deny.toml","gitBlob":"e3f0f54060cead9a0d48b96ed86948d0909c4f78"}, + {"path":"docs/DESIGN_runtime-neutral-edict-sha-lock-assurance.md","gitBlob":"ea3badf78ebd19545147a93671fdb5f9af4a61ea"}, + {"path":"docs/GUIDE_edict-assurance-transparency.md","gitBlob":"100321157ec43055c45794f1c161b1e5281ba6b4"}, + {"path":"docs/README.md","gitBlob":"e21739b842be14d91a17f2508b1a1b629754af01"}, + {"path":"docs/REQUIREMENTS.md","gitBlob":"a00535b05e265bca945229debabd36e2e36016bf"}, + {"path":"docs/RETRO_phase1-parser.md","gitBlob":"5cfb7b85ca2f140fc58f9186c47e4635e94a1e6f"}, + {"path":"docs/SPEC_continuum-admission-v1.md","gitBlob":"0a74a0bfc642337d5d7a85133ce50a0a22caffbd"}, + {"path":"docs/SPEC_continuum-contract-bundle-v1.md","gitBlob":"65b36bb33a34beb1f246d1f97384631c83ca631e"}, + {"path":"docs/SPEC_edict-language-v1.md","gitBlob":"a8187fa158f8f510a364dc40e5fee2e7c390f675"}, + {"path":"docs/SPEC_edict-lawpack-abi-v1.md","gitBlob":"ea1d801f07ab3677f7a411a1f58a28feda589ec3"}, + {"path":"docs/SPEC_edict-target-profile-abi-v1.md","gitBlob":"91687bfe45565a21f5f93f6ce9eed84095268691"}, + {"path":"docs/TECHNICAL_EXPLANATION.md","gitBlob":"d88561c0552c0e75d1ecc2eef6f9afd003e99674"}, + {"path":"docs/abi/edict-authority-facts.cddl","gitBlob":"e9a6d8685706ae0d8dabda401655234161e94299"}, + {"path":"docs/abi/edict-common.cddl","gitBlob":"836c11b92425beb6d42b378c0defe6f02d144dd7"}, + {"path":"docs/abi/edict-core.cddl","gitBlob":"862f02939fcc3858b4a60cb75f9bf149eae8ffda"}, + {"path":"docs/abi/edict-lawpack-adapter.cddl","gitBlob":"8e887c2e196ba7502470ddb45dc7cfd10116ad6b"}, + {"path":"docs/abi/edict-lawpack.cddl","gitBlob":"96efd51d437ec785b108b51835e9e8bf87aeab51"}, + {"path":"docs/abi/edict-result-projection.cddl","gitBlob":"98b5c2e861e7e9b66b7481502287cb041f6e77e6"}, + {"path":"docs/abi/edict-target-ir.cddl","gitBlob":"98134f277ded1920a3a36e5e3946c51153f2e84d"}, + {"path":"docs/abi/edict-target-profile.cddl","gitBlob":"746ae03001310f3a83524e5332819dad1a4eea5a"}, + {"path":"docs/abi/edict-target-provider.wit","gitBlob":"0efa5903a52d38dc61e429619d86322c6c5f1fa0"}, + {"path":"docs/audit/2026-06-28_code-quality.md","gitBlob":"143cbf4f4491a76a6649e919c6edaba73f0bcf4b"}, + {"path":"docs/audit/2026-06-28_documentation-quality.md","gitBlob":"656b4fa8dea43306af1818f8622cafd72e82a370"}, + {"path":"docs/audit/2026-06-28_ship-readiness.md","gitBlob":"b9d34a8693564d0134f550092e7645e5d5137442"}, + {"path":"docs/design/authority-fact-governance.md","gitBlob":"8531061cf718c47ec791f5712b2f357d92adc9e4"}, + {"path":"docs/design/canonical-target-ir-v0.11.md","gitBlob":"a46acb84e3523b51e2348c776cfdb63a8b98107a"}, + {"path":"docs/design/contract-bundle-assembly-v0.11.md","gitBlob":"a364f8ade5445808f87cf0c63ab3484c03ad616a"}, + {"path":"docs/design/crate-scope-v0.11.md","gitBlob":"92fe92285d02465d84bbe82e29d051fdc461f3a6"}, + {"path":"docs/design/obstruction-strands-v0.md","gitBlob":"81f70fd688c12798cd23472a4e810191e61eabe2"}, + {"path":"docs/design/provider-artifact-pipeline-alpha.md","gitBlob":"60eefa7dc160aba986bcd1188b79610ff5e9f299"}, + {"path":"docs/design/schema-as-sot-codegen.md","gitBlob":"d818e0e3f1fafd1d3aba26cb37c739f3ebe69763"}, + {"path":"docs/design/v2-obligation-closure.md","gitBlob":"816d22d843a33c6f7e143da4cb45e80679609dc8"}, + {"path":"docs/releases/v0.1.0-alpha.1.md","gitBlob":"5dd96057ba7f109cf5e5acde16e29d18627f98d3"}, + {"path":"docs/releases/v0.10.0-alpha.1.md","gitBlob":"363c4e9ed6f5ea5758198c7124681b520098e583"}, + {"path":"docs/releases/v0.11.0-alpha.1.md","gitBlob":"4612dbb5a1aaf20710bdb199b658ded7ced4ebab"}, + {"path":"docs/releases/v0.2.0-alpha.1.md","gitBlob":"7302ef93ed5ff9b562d9cec92d49d85a6b789b27"}, + {"path":"docs/releases/v0.3.0-alpha.1.md","gitBlob":"bf023ba4ca2c38f0120c461781447d58fe239ae0"}, + {"path":"docs/releases/v0.4.0-alpha.1.md","gitBlob":"769500b59800c02c536b76b0eb850d06d6cd8f58"}, + {"path":"docs/releases/v0.5.0-alpha.1.md","gitBlob":"7c7354e89846ea816992aaf55d4ad04367d61a10"}, + {"path":"docs/releases/v0.6.0-alpha.1.md","gitBlob":"3f2a0edfc4bccd9f3c60a7443ef4f8cbcbac1971"}, + {"path":"docs/releases/v0.7.0-alpha.1.md","gitBlob":"57671d5ef5a6b9f16d1674e0a35ddeb86ff126a8"}, + {"path":"docs/releases/v0.8.0-alpha.1.md","gitBlob":"12f77bda185c54fbbd136bf0dc7292716ecdfa39"}, + {"path":"docs/releases/v0.9.0-alpha.1.md","gitBlob":"fa295fcf0967415bb052f238256919b32b3fe6ba"}, + {"path":"docs/schemas/edict.cli-check-result.v1.schema.json","gitBlob":"eef8cd11f07e06d68b7051efa60ae05f2cfd8a63"}, + {"path":"docs/schemas/edict.cli-diagnostic.v1.schema.json","gitBlob":"92a2151a76893c598a4191ed6cecd8a0e671613f"}, + {"path":"docs/schemas/edict.cli-event.v1.schema.json","gitBlob":"705d82a893c2ea91caa91ad6977a9be8646b47bb"}, + {"path":"docs/schemas/edict.cli-info.v1.schema.json","gitBlob":"2d9a0777b4190b56ff569625275d352d17363afa"}, + {"path":"docs/schemas/edict.compiler-input.v1.schema.json","gitBlob":"26da3ba0fe85fab4c826ad79f13968ce09c4f29b"}, + {"path":"docs/schemas/edict.compiler-settings.v1.schema.json","gitBlob":"a3e8ba469895b84ab81724da1075c73141a8dd0c"}, + {"path":"docs/schemas/edict.projection-core.v1.schema.json","gitBlob":"8c0afe3834256abd1e18efb5f31eae1c4bdf0374"}, + {"path":"docs/schemas/edict.projection-diagnostics.v1.schema.json","gitBlob":"28cfb0a67dff7b8f879122c74433158dc0a4e5df"}, + {"path":"docs/schemas/edict.projection-syntax.v1.schema.json","gitBlob":"a85f2e14f536863f5e7b107b1a9f3f10816e6234"}, + {"path":"docs/schemas/edict.projection-target-ir.v1.schema.json","gitBlob":"8bbb6495ad8800d775d1c08506e85351038d678a"}, + {"path":"docs/topics/README.md","gitBlob":"99b06d3124c71cb62dfe6faff7604c13063162a7"}, + {"path":"docs/topics/admission/README.md","gitBlob":"755dcba96c0a428eec18d58a529f3e26d57d118c"}, + {"path":"docs/topics/admission/test-plan.md","gitBlob":"68ee0a2d2502103285985bf862de9fadf2bac5a0"}, + {"path":"docs/topics/assurance/README.md","gitBlob":"cf382008f3d3094a5380a687abbf07538e07404d"}, + {"path":"docs/topics/assurance/test-plan.md","gitBlob":"0ea6c971924db763088577a0a52bbd30bfec814c"}, + {"path":"docs/topics/authority-facts/README.md","gitBlob":"c5589d2489d6e4a5729c0df2b2655ff281d8d88d"}, + {"path":"docs/topics/authority-facts/test-plan.md","gitBlob":"e3769edf8309347b23ffa2e8f0901e06feabd654"}, + {"path":"docs/topics/cli/README.md","gitBlob":"af38946c9ccae8da343877c3861b0f52b6076e1b"}, + {"path":"docs/topics/cli/test-plan.md","gitBlob":"d72d69ef1d340ffd7057a63dd7bc07e3dfb2c166"}, + {"path":"docs/topics/compiler-spine/README.md","gitBlob":"6cc754abfdced28d919d5ae9f9ec4d924afc16d7"}, + {"path":"docs/topics/compiler-spine/test-plan.md","gitBlob":"8a73925d919a6fb6ee62f713b1603c5f4fe9c179"}, + {"path":"docs/topics/contract-bundles/README.md","gitBlob":"2347499e8da9dd57bb1588faf67fe386c7a70c03"}, + {"path":"docs/topics/contract-bundles/test-plan.md","gitBlob":"3ae4c7362f90fa89081ab9ff2bf1c3db1a811874"}, + {"path":"docs/topics/core-ir/README.md","gitBlob":"a8759d0f26569a60590792aadc9ba28d8daea004"}, + {"path":"docs/topics/core-ir/canonical-encoding.md","gitBlob":"34927c69fb1de10b685294a155fc46bb4ac21628"}, + {"path":"docs/topics/core-ir/test-plan.md","gitBlob":"00d55085e24a6639b02558ea48af68beea97cb65"}, + {"path":"docs/topics/developer-tooling/README.md","gitBlob":"8648d3c1bdf4f6b774bc5fec71c71aa8c59b0ce8"}, + {"path":"docs/topics/developer-tooling/test-plan.md","gitBlob":"9240f717434dfbca08a6366e6d3ebafd4ef2c908"}, + {"path":"docs/topics/documentation/README.md","gitBlob":"34fa7f4db136c274a88b680f99619d657fda15d5"}, + {"path":"docs/topics/documentation/test-plan.md","gitBlob":"47964954fbf640211bc30b0dd361c44c9955c488"}, + {"path":"docs/topics/external-action-requests/README.md","gitBlob":"73aae64e1adb730c00b680d18aea76f64adc23cb"}, + {"path":"docs/topics/external-action-requests/test-plan.md","gitBlob":"438184fc13353250a0c0976e3c3cc8cba605fa00"}, + {"path":"docs/topics/fixtures/README.md","gitBlob":"c8b3b196109fb6d4e37d8ffa17635166010075fb"}, + {"path":"docs/topics/fixtures/test-plan.md","gitBlob":"624357dbc544d365835390d3d3c2f11015b7b82f"}, + {"path":"docs/topics/lawpack-authoring/README.md","gitBlob":"74bb25cc22e1f88cf4ee952b42313d919339113a"}, + {"path":"docs/topics/lawpack-authoring/test-plan.md","gitBlob":"d7ad2eacde45dbce3eeb2b1a22c6482134b841ba"}, + {"path":"docs/topics/lawpacks/README.md","gitBlob":"dedaa524dc55663a44bf8101241ab4b6d4755531"}, + {"path":"docs/topics/lawpacks/test-plan.md","gitBlob":"f8aa2c7ce40dad2665134956dc95d951d311808f"}, + {"path":"docs/topics/lowerability/README.md","gitBlob":"fb9519af3539d846dc5bf2915bf5ca86816e46f8"}, + {"path":"docs/topics/lowerability/test-plan.md","gitBlob":"e0fbff0799ba805c9531097d6b8aeea657e2b815"}, + {"path":"docs/topics/obstruction-strands/README.md","gitBlob":"a2930645065390cecff8008bfd48b7f034bfcd18"}, + {"path":"docs/topics/obstruction-strands/test-plan.md","gitBlob":"20c54ffcaa19930a5bc772a49a5f01119054be2d"}, + {"path":"docs/topics/providers/README.md","gitBlob":"8b5a07fb9c708b753861a4e156b866115f4d687b"}, + {"path":"docs/topics/providers/architecture.md","gitBlob":"664b38347ccaf37f298d6ac9f19d3423c0277f9e"}, + {"path":"docs/topics/providers/test-plan.md","gitBlob":"95c55f9e132ca6859fd9df70470973e678ed8d92"}, + {"path":"docs/topics/public-rust-api/README.md","gitBlob":"c64a1081b7f693b02bd2ea63329f2610bae9d84c"}, + {"path":"docs/topics/public-rust-api/test-plan.md","gitBlob":"4c3b9e9662afd9edb790ba2b5c57ed5e93df595c"}, + {"path":"docs/topics/release-process/README.md","gitBlob":"a474ab8b6a4a58c5c73334c9e677be7c20d1837c"}, + {"path":"docs/topics/release-process/policy.toml","gitBlob":"e40b4f4ec721ae61210ec1bb022a847bcb49fb4a"}, + {"path":"docs/topics/release-process/runbook.md","gitBlob":"0b6bd8ef44cbfe8c7cdc347273fa74b7c96c4823"}, + {"path":"docs/topics/release-process/test-plan.md","gitBlob":"61ecded1d2318d7dd74070cd1c6155f353c947e9"}, + {"path":"docs/topics/result-projections/README.md","gitBlob":"d5c2f85a7681a15dcdc3e35f992a389c50d13461"}, + {"path":"docs/topics/result-projections/test-plan.md","gitBlob":"9e69d58c88d6a9b7389334a78b994a3449721faa"}, + {"path":"docs/topics/review-process/README.md","gitBlob":"25190d37dc30110f75ba5d3a41494575ffecc1c3"}, + {"path":"docs/topics/review-process/policy.toml","gitBlob":"a826ba58aad2e509220b65aa8f96c290b600e094"}, + {"path":"docs/topics/review-process/test-plan.md","gitBlob":"f1a50aeae47913e4513a8149c1679d9a94c5ef21"}, + {"path":"docs/topics/rust-standards/README.md","gitBlob":"2fe29258705d117f4d10604a83fd832a8476e303"}, + {"path":"docs/topics/rust-standards/test-plan.md","gitBlob":"0e0d6b306cd2b58db07a7a5da6a752925fe58764"}, + {"path":"docs/topics/semantic-validation/README.md","gitBlob":"51cd9761755e7b5879069bf3774eeb487982ca97"}, + {"path":"docs/topics/semantic-validation/test-plan.md","gitBlob":"b43969d8eb0a884c1663ab761662f9622617bb3b"}, + {"path":"docs/topics/syntax/README.md","gitBlob":"b2a372bf41b1976567c61f400bf000f33abc20cc"}, + {"path":"docs/topics/syntax/test-plan.md","gitBlob":"a69efaf12dfe12661fca049b8790b37fa3fb3665"}, + {"path":"docs/topics/target-ir/README.md","gitBlob":"3970b7e10985a1f1f0628eb6066a09821bce2856"}, + {"path":"docs/topics/target-ir/test-plan.md","gitBlob":"c6bed244f422eb39b30b886bfc7bf44f54fad0e6"}, + {"path":"docs/topics/target-profiles/README.md","gitBlob":"6a88f4d732f8069855b2ed2cb9a8769a117b2f60"}, + {"path":"docs/topics/target-profiles/test-plan.md","gitBlob":"90084c3f3a1296745469cd86e9b5f2bc928825be"}, + {"path":"docs/topics/tests/README.md","gitBlob":"4ad079b6a9718e2a8446a6c67ff45735015bef84"}, + {"path":"docs/topics/tests/test-plan.md","gitBlob":"46bc0572d02a41e86f71c6d46baf5be611a462a6"}, + {"path":"docs/topics/v2-design/README.md","gitBlob":"b33a07599e43e660aa4def7f119ddd02df6a16de"}, + {"path":"docs/topics/v2-design/test-plan.md","gitBlob":"f17f96d381f81b20842393f70ff55b9597858b84"}, + {"path":"editors/README.md","gitBlob":"7a933576262bc58bac197f9264fdbf649dd5e696"}, + {"path":"editors/vscode/.vscodeignore","gitBlob":"f15b3142e4b8af11d580789a0c82acee3499f571"}, + {"path":"editors/vscode/README.md","gitBlob":"8b29840ae9ec8f618b7364022329f694d0ed9746"}, + {"path":"editors/vscode/language-configuration.json","gitBlob":"b7f583841649c9c437785edbfcb70ee24e495c79"}, + {"path":"editors/vscode/package.json","gitBlob":"cd9e391e7c9afb6f9393fcead118e0e55aadc839"}, + {"path":"editors/vscode/syntaxes/edict.tmLanguage.json","gitBlob":"5847d8edfdb32d822f0f3950f41d00c947982185"}, + {"path":"fixtures/README.md","gitBlob":"470e3e0fc3aa00654930ecdef892ee9df8a42c8d"}, + {"path":"fixtures/authority-facts/canonical/README.md","gitBlob":"28692ce70add5d4f2d4ff5318309c3353924caf9"}, + {"path":"fixtures/authority-facts/canonical/example-effectful.authority-facts.cbor","gitBlob":"fe2e59a8e2602e02c52094010a130db2637c5227"}, + {"path":"fixtures/authority-facts/canonical/example-effectful.authority-facts.json","gitBlob":"009faa5d2dc1dcf55cf284dcfd14c0b6405f3e0d"}, + {"path":"fixtures/authority-facts/canonical/example-effectful.authority-facts.sha256","gitBlob":"a3d68f0a3b3a586e85b6a84cbd884866e662951f"}, + {"path":"fixtures/bundle/assembly/bounded-hello.bundle-digests.txt","gitBlob":"da5402db7bd41dd88c6152b7799723561130c91e"}, + {"path":"fixtures/cli/01-source-ok/expected.stdout.jsonl","gitBlob":"e08ccf8fdedd3a73beef5d06c443a1bc60274ce1"}, + {"path":"fixtures/cli/01-source-ok/request.jsonl","gitBlob":"002fea597e6b93c8468d6972b73cc1344600fa87"}, + {"path":"fixtures/cli/02-source-parse-rejection/exit","gitBlob":"d00491fd7e5bb6fa28c517a0bb32b8b506539d4d"}, + {"path":"fixtures/cli/02-source-parse-rejection/expected.stderr.jsonl","gitBlob":"1077b73c9a7c02eae99f737bea7b6ff8c64d04da"}, + {"path":"fixtures/cli/02-source-parse-rejection/request.jsonl","gitBlob":"dce01f0466bd9384fc6f5cbe2845b6e0bd9a9cfd"}, + {"path":"fixtures/cli/03-source-semantic-rejection/exit","gitBlob":"d00491fd7e5bb6fa28c517a0bb32b8b506539d4d"}, + {"path":"fixtures/cli/03-source-semantic-rejection/expected.stderr.jsonl","gitBlob":"5ec447700da52d0b4ce1f75825eb9bffaed4884b"}, + {"path":"fixtures/cli/03-source-semantic-rejection/request.jsonl","gitBlob":"ddfd529e5448760387961febbd4ce013e49de435"}, + {"path":"fixtures/cli/04-cli-missing-settings/exit","gitBlob":"0cfbf08886fca9a91cb753ec8734c84fcbe52c9f"}, + {"path":"fixtures/cli/04-cli-missing-settings/expected.stderr.jsonl","gitBlob":"5060bd2fd773ba9ea3ea6db8c80b86a846bfadbd"}, + {"path":"fixtures/cli/04-cli-missing-settings/request.jsonl","gitBlob":"8eb12e58d427bd64ccfe339190e05bdccf4c8634"}, + {"path":"fixtures/cli/05-path-input-ok/expected.stdout.jsonl","gitBlob":"a05fc582efc41b6414e785167b5deeb7532088ef"}, + {"path":"fixtures/cli/05-path-input-ok/inputs/hello.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/05-path-input-ok/request.jsonl","gitBlob":"18facaab79dc198134c535df389cba79efe7dce7"}, + {"path":"fixtures/cli/06-directory-expansion-ok/expected.stdout.jsonl","gitBlob":"ef59591526e2084ddf5057249bbc96ab660cf256"}, + {"path":"fixtures/cli/06-directory-expansion-ok/inputs/a.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/06-directory-expansion-ok/inputs/ignore.txt","gitBlob":"ed34ae8da336ff94a67b6125fbd6be730c976d91"}, + {"path":"fixtures/cli/06-directory-expansion-ok/inputs/nested/b.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/06-directory-expansion-ok/request.jsonl","gitBlob":"bd9aad14fe79caccacaa6d00ffd32b5e13b3551f"}, + {"path":"fixtures/cli/07-path-list-ok/expected.stdout.jsonl","gitBlob":"643ecb3e659c10cb98255ec1aced772778e76eb0"}, + {"path":"fixtures/cli/07-path-list-ok/inputs/first.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/07-path-list-ok/inputs/second.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/07-path-list-ok/request.jsonl","gitBlob":"f11265b02c5b7559ced4d975471a78b5bef3ee27"}, + {"path":"fixtures/cli/08-glob-expansion-ok/expected.stdout.jsonl","gitBlob":"90164a7fce6c51abdadef8f0586d2c56113d9712"}, + {"path":"fixtures/cli/08-glob-expansion-ok/inputs/x.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/08-glob-expansion-ok/inputs/y.edict","gitBlob":"39c53bb184a7c10de61da0c637b607eb1d7cc454"}, + {"path":"fixtures/cli/08-glob-expansion-ok/request.jsonl","gitBlob":"9335acf3a008ab8fb9942b3e22d73c456ed3827e"}, + {"path":"fixtures/cli/09-shape-source-ok/expected.stdout.jsonl","gitBlob":"ac6f9259502ebfe484e1c07a5f53865888dd8207"}, + {"path":"fixtures/cli/09-shape-source-ok/request.jsonl","gitBlob":"64c75d9a7b40985bacf0e59a943a16e20419c602"}, + {"path":"fixtures/cli/10-input-extra-field/exit","gitBlob":"0cfbf08886fca9a91cb753ec8734c84fcbe52c9f"}, + {"path":"fixtures/cli/10-input-extra-field/expected.stderr.jsonl","gitBlob":"2f5a8fba093b71d15a5b37504ad0352191c8299c"}, + {"path":"fixtures/cli/10-input-extra-field/request.jsonl","gitBlob":"6052212c652d41f03144a7d3d4018b1cdd18cd09"}, + {"path":"fixtures/cli/11-input-hybrid-kind/exit","gitBlob":"0cfbf08886fca9a91cb753ec8734c84fcbe52c9f"}, + {"path":"fixtures/cli/11-input-hybrid-kind/expected.stderr.jsonl","gitBlob":"7b6d2ac0c8afbf5e3991498846c2fc4847ac9453"}, + {"path":"fixtures/cli/11-input-hybrid-kind/request.jsonl","gitBlob":"b893b640aa6631c77f2a889a807afa31632ac2db"}, + {"path":"fixtures/cli/12-input-too-large/env.json","gitBlob":"ab0c7f13fc6b22d61fc73da2f1787ff3aa298ecb"}, + {"path":"fixtures/cli/12-input-too-large/exit","gitBlob":"0cfbf08886fca9a91cb753ec8734c84fcbe52c9f"}, + {"path":"fixtures/cli/12-input-too-large/expected.stderr.jsonl","gitBlob":"ebda022d79c978d4ff511579512be2c642e3e902"}, + {"path":"fixtures/cli/12-input-too-large/request.jsonl","gitBlob":"1e2fbb102503356bbcc627f49a5b58590859f170"}, + {"path":"fixtures/cli/13-input-root-outside/allowed/.gitkeep","gitBlob":"8b137891791fe96927ad78e64b0aad7bded08bdc"}, + {"path":"fixtures/cli/13-input-root-outside/exit","gitBlob":"0cfbf08886fca9a91cb753ec8734c84fcbe52c9f"}, + {"path":"fixtures/cli/13-input-root-outside/expected.stderr.jsonl","gitBlob":"9c5b8567a755c9ea2ee6e0168bf96f429185f675"}, + {"path":"fixtures/cli/13-input-root-outside/outside/outside.edict","gitBlob":"44abebc15811c38cc266007484dd74ae10a26a4d"}, + {"path":"fixtures/cli/13-input-root-outside/request.jsonl","gitBlob":"116dbbb4b1a80938bc042e41747872cb6da161cd"}, + {"path":"fixtures/cli/README.md","gitBlob":"9388df4182fedec41c353e85cf9210e88906fa3d"}, + {"path":"fixtures/core/canonical/README.md","gitBlob":"d9a0ca79557c3623c0b843d9eff4808f94fd7b18"}, + {"path":"fixtures/core/canonical/bounded-hello.core.cbor","gitBlob":"a0ec54aa1a5e20624192091526445cfd803e6f0c"}, + {"path":"fixtures/core/canonical/bounded-hello.core.sha256","gitBlob":"86ba062c26a3ad3fd733ccd8c80d7faa7ed62d94"}, + {"path":"fixtures/core/canonical/statement-branch.core.hex","gitBlob":"c22760cace0e4d146a2fdc8d7c7b50c38497622a"}, + {"path":"fixtures/core/canonical/statement-branch.core.sha256","gitBlob":"0b62657b192232390479319f0a1c8f601020a58f"}, + {"path":"fixtures/core/canonical/workspace-snapshot.core.cbor","gitBlob":"58e4f724610861f5b61537bf386a87062e8a57a7"}, + {"path":"fixtures/core/canonical/workspace-snapshot.core.sha256","gitBlob":"4bcb3e0813cd3f4a7afc7cf311d846f1dfdd0a9d"}, + {"path":"fixtures/core/schema/accepted/core-fn-body-minimal.fields","gitBlob":"bef3ca412ab0ea97465b8658499ae5e05e1ec760"}, + {"path":"fixtures/core/schema/accepted/core-intent-minimal.fields","gitBlob":"268b28ce942fed4f139aafe5c7cd50c15a0ee640"}, + {"path":"fixtures/core/schema/accepted/core-module-minimal.fields","gitBlob":"249ff76349f936c9a5ff6cb65d81de8e80d53de8"}, + {"path":"fixtures/core/schema/rejected/core-fn-body-effect-node-field.fields","gitBlob":"9af8fa3540b25ec810936bc4dc82e26f6dd0dd48"}, + {"path":"fixtures/core/schema/rejected/core-intent-unknown-verified-mode.fields","gitBlob":"667ae032ee117f32c1bcbafd21393e406621f517"}, + {"path":"fixtures/core/schema/rejected/core-module-missing-intents.fields","gitBlob":"17f37c7ac4c199de4eace7f31e6a59b9a6d3a0f6"}, + {"path":"fixtures/core/schema/rejected/local-ref-missing-alpha-name.fields","gitBlob":"456a89528ffe74d892be40c9c9be4a078ff5c18a"}, + {"path":"fixtures/lang/bounds/bounded-hello.edict","gitBlob":"e3443a1d3b1c8f0e137ac698b621dd2f3afb673b"}, + {"path":"fixtures/lang/effects/conditional-blob.edict","gitBlob":"1e4f2ca6112f26d57ee4d20058666ec7cd693b75"}, + {"path":"fixtures/lang/effects/read-greeting.edict","gitBlob":"5e3838d1547be171e0a0384a7a200f52a2b9d139"}, + {"path":"fixtures/lang/external-actions/workspace-snapshot.edict","gitBlob":"e54b0fbccad2fd680505f3ee46ca28d39d7e776e"}, + {"path":"fixtures/lang/operations/explicit-basis-u64.edict","gitBlob":"444d8ca77b9827746df81885f0620dce2d1a3b73"}, + {"path":"fixtures/lang/tooling/highlight-smoke.edict","gitBlob":"8c2d91084be22e5e1594a42159992aca95c73612"}, + {"path":"fixtures/lang/types/color-match.edict","gitBlob":"dd98d6de677904f36d7601165a0094d92928e536"}, + {"path":"fixtures/lawpack/causal-cell/README.md","gitBlob":"52e8cc1e2af8aea86c1090a1b20b5f5ab3e07c06"}, + {"path":"fixtures/lawpack/causal-cell/adapter.cbor","gitBlob":"3b0c8b1b3a8591a322b6e785d9f963899319310c"}, + {"path":"fixtures/lawpack/causal-cell/adapter.sha256","gitBlob":"f8231bc941e1fbe02279865a82e183cbeeb0988a"}, + {"path":"fixtures/lawpack/causal-cell/echo-operation-configuration.cbor","gitBlob":"24527d30d0146b567fda157561ac6a2587cae919"}, + {"path":"fixtures/lawpack/causal-cell/echo-operation-configuration.sha256","gitBlob":"d293c8a14b1955a3e171703400c4df620c7871a1"}, + {"path":"fixtures/lawpack/causal-cell/exports.cbor","gitBlob":"384f4839adfe8e5b0f1aa848bfe2aeb1c3f640b6"}, + {"path":"fixtures/lawpack/causal-cell/exports.sha256","gitBlob":"4f836f6b03497338a1f8eacc55480cbe1a3b49e9"}, + {"path":"fixtures/lawpack/causal-cell/manifest.cbor","gitBlob":"b9311a236d7898861a0b90b1f30b852b35cef623"}, + {"path":"fixtures/lawpack/causal-cell/manifest.sha256","gitBlob":"685fd6a6c72fc3100d595d009b6198a81c731a40"}, + {"path":"fixtures/lawpack/hello-echo/README.md","gitBlob":"79f6612f1f5608a8f7dc4835e5470878cd27f96e"}, + {"path":"fixtures/lawpack/hello-echo/adapter.cbor","gitBlob":"24e2f546e2b97747b53462a72faaa1d5d85d62f1"}, + {"path":"fixtures/lawpack/hello-echo/adapter.sha256","gitBlob":"91df491028061e026ecaaeb4e1598e2ac369af44"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.core.cbor","gitBlob":"246b6135855c415def0bd89b275f0457752ee563"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.core.sha256","gitBlob":"9adc71605e0a275349161809614bd17de97d129c"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.edict","gitBlob":"825d50565230bd71d62bfbeb59d0399a89864b4c"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.result-projection.cbor","gitBlob":"981cba6e1c7ab6bdae6829116749c4796167e4e6"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.result-projection.sha256","gitBlob":"d55e4083771e1d9791f59cf87fd5cc5f1ea3b9f4"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.target-ir.cbor","gitBlob":"c8a934cefec17dbab0a43d9be9cebd2533268798"}, + {"path":"fixtures/lawpack/hello-echo/create-greeting.target-ir.sha256","gitBlob":"20186cbe9482e8a7df7c44fabec13ffd4efbcf36"}, + {"path":"fixtures/lawpack/hello-echo/echo-operation-configuration.cbor","gitBlob":"84838ab0d8627237232fa5a9b9fa39087bcc5f8a"}, + {"path":"fixtures/lawpack/hello-echo/echo-operation-configuration.sha256","gitBlob":"0898688f14067560dd22abd04b97f020071fd3e8"}, + {"path":"fixtures/lawpack/hello-echo/exports.cbor","gitBlob":"0e1220ceed9442a7b35870eeb02fcb65454d8c5c"}, + {"path":"fixtures/lawpack/hello-echo/exports.sha256","gitBlob":"e1f3e9223de9ce935bc7f60dda3cfa7d12d54fdc"}, + {"path":"fixtures/lawpack/hello-echo/manifest.cbor","gitBlob":"d715900f03ec454a0ad96e6710f52a46120d0b9d"}, + {"path":"fixtures/lawpack/hello-echo/manifest.sha256","gitBlob":"20171199b401cecace2dd74e18f3cc1d5c7ed3de"}, + {"path":"fixtures/lawpack/workspace-patch/README.md","gitBlob":"67cd35f2e0660aa7455de1c197ad821d5438679b"}, + {"path":"fixtures/lawpack/workspace-patch/adapter.cbor","gitBlob":"2d6f09a7e2fab381b97a05cfad1e692902e878c3"}, + {"path":"fixtures/lawpack/workspace-patch/adapter.sha256","gitBlob":"d44eb9675e126716e8a5ef3c53fd39ade49d76fb"}, + {"path":"fixtures/lawpack/workspace-patch/apply-validated-patch.core.cbor","gitBlob":"6a88c127e426288a3e51d4749d5c31d5b0cb60cb"}, + {"path":"fixtures/lawpack/workspace-patch/apply-validated-patch.core.sha256","gitBlob":"0204b6f1d8b346a67800a7738ee39df49e78571f"}, + {"path":"fixtures/lawpack/workspace-patch/apply-validated-patch.edict","gitBlob":"6e11a3d022a53a8fb2c20a77e35e29840f5fe086"}, + {"path":"fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.cbor","gitBlob":"a6124a995a3cdbb5d39cd0a6e046b329048703aa"}, + {"path":"fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.sha256","gitBlob":"f7ac419ce15b32d491e09bddbe7c75f8227f51d8"}, + {"path":"fixtures/lawpack/workspace-patch/exports.cbor","gitBlob":"3a6fd19dc8059b9fe1bde74fb1da61398b0e80cc"}, + {"path":"fixtures/lawpack/workspace-patch/exports.sha256","gitBlob":"b301dd883a31fffe324e9306ec90ae2b1ec44520"}, + {"path":"fixtures/lawpack/workspace-patch/input-schema.cbor","gitBlob":"3045d9b696864fefe111c3eb641b3b68532752d2"}, + {"path":"fixtures/lawpack/workspace-patch/input-schema.sha256","gitBlob":"9f1284b4f0a2c7f6dbe1915a6113cd13a9700cb8"}, + {"path":"fixtures/lawpack/workspace-patch/manifest.cbor","gitBlob":"77e56c7525f0e64ab191f0adfeac12b540c87848"}, + {"path":"fixtures/lawpack/workspace-patch/manifest.sha256","gitBlob":"8316978e68565f29a30a6978d33d907710185857"}, + {"path":"fixtures/lawpack/workspace-patch/reconciliation-law.cbor","gitBlob":"0736b75f81913fca7ac95c56ec45f66b95aea4cf"}, + {"path":"fixtures/lawpack/workspace-patch/reconciliation-law.sha256","gitBlob":"de31fc9fda59fa3c29397e5fc48db224e8e1fee7"}, + {"path":"fixtures/lawpack/workspace-patch/request-profile-configuration.cbor","gitBlob":"5e2870b2f562bafaa73a91a3fc192f5ed39257c7"}, + {"path":"fixtures/lawpack/workspace-patch/request-profile-configuration.sha256","gitBlob":"4345ae2e39ce3f4d9cfa6b0dddf4ce56d56c035c"}, + {"path":"fixtures/lawpack/workspace-patch/settlement-schema.cbor","gitBlob":"0a93ac19c51b341602eeba524769147e962d5d60"}, + {"path":"fixtures/lawpack/workspace-patch/settlement-schema.sha256","gitBlob":"f1bb3fb0313dd6815b4184345194949ec40fe9e1"}, + {"path":"fixtures/lawpack/workspace-snapshot/README.md","gitBlob":"996bd1d29b28769fff477084d9118d0833ca2970"}, + {"path":"fixtures/lawpack/workspace-snapshot/adapter.cbor","gitBlob":"9be4ea568b602b56269af505deb809989a3fa8b5"}, + {"path":"fixtures/lawpack/workspace-snapshot/adapter.sha256","gitBlob":"1e287be0a322e5444dea15fa14bcfc7cf12975c4"}, + {"path":"fixtures/lawpack/workspace-snapshot/exports.cbor","gitBlob":"33fe04db74775c191d4b7400e1fb2b6393c5a010"}, + {"path":"fixtures/lawpack/workspace-snapshot/exports.sha256","gitBlob":"e057cac7fc360e6599b7ddab88508aaf0f2f55f8"}, + {"path":"fixtures/lawpack/workspace-snapshot/input-schema.cbor","gitBlob":"49c849169946e44c8b5f300279dd085bd6b63aeb"}, + {"path":"fixtures/lawpack/workspace-snapshot/input-schema.sha256","gitBlob":"9dd7bb6e48192e90d19fc346d1705f736b1d85d7"}, + {"path":"fixtures/lawpack/workspace-snapshot/manifest.cbor","gitBlob":"d4e58e3d4646ca967170a6882f2a617cb8d81390"}, + {"path":"fixtures/lawpack/workspace-snapshot/manifest.sha256","gitBlob":"0edb311125a89a5816ee3fa0c9b700c9b3bcff3d"}, + {"path":"fixtures/lawpack/workspace-snapshot/observe-workspace.core.cbor","gitBlob":"a4b249dfb197f1a6b4adc06855f16e4305a1c798"}, + {"path":"fixtures/lawpack/workspace-snapshot/observe-workspace.core.sha256","gitBlob":"ea6b914d14907d9fd915058e579aff33c954da2c"}, + {"path":"fixtures/lawpack/workspace-snapshot/observe-workspace.edict","gitBlob":"c2c10f1ef1009796d67061b9722c4db9bb4e031b"}, + {"path":"fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.cbor","gitBlob":"bdab1b0c55a34360c7e9ab304af91fe2b1e4afce"}, + {"path":"fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.sha256","gitBlob":"7342aaa96221d6c8efa75ead2af5563791ccfeff"}, + {"path":"fixtures/lawpack/workspace-snapshot/reconciliation-law.cbor","gitBlob":"df55572b350002a3df98ccb3e72dd60c86b9aead"}, + {"path":"fixtures/lawpack/workspace-snapshot/reconciliation-law.sha256","gitBlob":"957cd04c78c130b07d2cad2fd7e07ae69978be57"}, + {"path":"fixtures/lawpack/workspace-snapshot/request-profile-configuration.cbor","gitBlob":"708f18918ee1703491a910df82e129e711a4cc46"}, + {"path":"fixtures/lawpack/workspace-snapshot/request-profile-configuration.sha256","gitBlob":"d9953d9dcaa41c98387226d1980f40b24d2bc3cb"}, + {"path":"fixtures/lawpack/workspace-snapshot/settlement-schema.cbor","gitBlob":"f01ad68531267666e6bf93bf30a37d5b311c1676"}, + {"path":"fixtures/lawpack/workspace-snapshot/settlement-schema.sha256","gitBlob":"06fcc0ee2b976a09b3017bd93132a3c51eb1317e"}, + {"path":"fixtures/obstruction-strands/v0/stale-basis/README.md","gitBlob":"25efbfa04e2e6104c5434f329128333e895e2b0a"}, + {"path":"fixtures/obstruction-strands/v0/stale-basis/source.edict","gitBlob":"e487b46e81220c50e6f928922dada29f3a21ca6a"}, + {"path":"fixtures/provider-contracts/v1/README.md","gitBlob":"447692907f9268ce3b6b78c43b7cbbb0417aeadf"}, + {"path":"fixtures/provider-contracts/v1/edict-provider-contracts.cddl","gitBlob":"07048aeeadb5062eabb89e995713cbc0893b7d7e"}, + {"path":"fixtures/provider-contracts/v1/manifest.json","gitBlob":"d2c8de5d61049e9f4182c630bf82b138f0f96792"}, + {"path":"fixtures/providers/README.md","gitBlob":"c26ee60a4930e3e0784c76cb855e48234a5c6b58"}, + {"path":"fixtures/providers/components/guests/Cargo.lock","gitBlob":"d7858ce7bc67deabb5ff352a24c85a7caa0ef4b0"}, + {"path":"fixtures/providers/components/guests/Cargo.toml","gitBlob":"450a24aed25dc73661b0ae8adfe2630dfecc9b07"}, + {"path":"fixtures/providers/components/guests/lowerer/Cargo.toml","gitBlob":"568aa137fa215b6b973fe31e12322530b393b9dc"}, + {"path":"fixtures/providers/components/guests/lowerer/src/lib.rs","gitBlob":"b39a8a0b18fe9ed7cb90277f793056434afa1318"}, + {"path":"fixtures/providers/components/guests/verifier/Cargo.toml","gitBlob":"f814f2c8c248bbf03389f5a0936f80cd4dada5b6"}, + {"path":"fixtures/providers/components/guests/verifier/src/lib.rs","gitBlob":"3f07ffdfd808ff95b206a2c08c2d481ccaf0e165"}, + {"path":"fixtures/providers/components/instantiation-failure-lowerer.component.wasm","gitBlob":"bd2d7c0d31798d7676aedab0bd0d289fc2053bef"}, + {"path":"fixtures/providers/components/instantiation-failure-lowerer.wat","gitBlob":"f6f5a70edb80d3a7fa1dee13b34ab5b8b44274d7"}, + {"path":"fixtures/providers/components/instantiation-fuel-lowerer.component.wasm","gitBlob":"0804d26d3ddb428682ca87ecad03cf0e05ef64af"}, + {"path":"fixtures/providers/components/instantiation-fuel-lowerer.wat","gitBlob":"80e972463ef593602d27c7d7cec78d87d22ff727"}, + {"path":"fixtures/providers/components/inventory.json","gitBlob":"45cf2e8e937a17a8ee05dfa8d68e94dcc155e129"}, + {"path":"fixtures/providers/components/lowerer.component.wasm","gitBlob":"6c1cf123a44284d15b7b1e90f1905ae94e65c158"}, + {"path":"fixtures/providers/components/malformed-lowerer.component.wasm","gitBlob":"be873af81100dc76ed1f3f1f818a41da45a38e4c"}, + {"path":"fixtures/providers/components/malformed-lowerer.wat","gitBlob":"1e7bfffe0a0baf230d9fb5766083f82198f4029c"}, + {"path":"fixtures/providers/components/verifier.component.wasm","gitBlob":"671adbe7931d0a9a5e0c78d459c244d37a135a69"}, + {"path":"fixtures/providers/echo-generated/provider-manifest.json","gitBlob":"22c8560e7ddecacd5da388e52d3935d7fc1474b9"}, + {"path":"fixtures/providers/echo-target-profile/README.md","gitBlob":"350c33dcda2d66d2d50e589c58db7c6d7b14a80b"}, + {"path":"fixtures/providers/echo-target-profile/generated/primary/target-profile.echo-dpo.cbor","gitBlob":"9fa43529b1021dfd8e3a33256c832d4eee6f4a47"}, + {"path":"fixtures/providers/wit/legacy-target-profile.wit","gitBlob":"ae7d6af764012b16bf06bfa260ccba98a7f04868"}, + {"path":"fixtures/target-ir/canonical/echo-effectful.target-ir.cbor","gitBlob":"727a80eb37319dbdbea40d7d9b4e37f0d93d8d84"}, + {"path":"fixtures/target-ir/canonical/echo-effectful.target-ir.sha256","gitBlob":"6d050bb46ac8981ea8e47c7a52371027b941fd89"}, + {"path":"fixtures/target-ir/canonical/gitwarp-append.target-ir.cbor","gitBlob":"89b46b138a7b90252a4397c0e8b622bceff10a33"}, + {"path":"fixtures/target-ir/canonical/gitwarp-append.target-ir.sha256","gitBlob":"a59a4ab9d46095d5be1797ed9e60fe841f821bce"}, + {"path":"fixtures/target-ir/canonical/workspace-snapshot.target-ir.cbor","gitBlob":"1854eeb549b3719fa2b0114867dbece6db1819d4"}, + {"path":"fixtures/target-ir/canonical/workspace-snapshot.target-ir.sha256","gitBlob":"4d0e501323d415ef9e64c0a3d25bdd57dabfc998"}, + {"path":"fixtures/target-profile/contract-resources/README.md","gitBlob":"32dcab1dd9376a4eed2c73bb1b1a29255fe3ea05"}, + {"path":"fixtures/target-profile/contract-resources/canonical-cbor.cbor","gitBlob":"4a95ba3bd9dff190ca5ec9c83262bfa6254a91d3"}, + {"path":"fixtures/target-profile/contract-resources/canonical-cbor.sha256","gitBlob":"2168df5d4bf77ed2347139dd7c45fd808df8ec7e"}, + {"path":"fixtures/target-profile/contract-resources/determinism.cbor","gitBlob":"09cd11c36048939961408550763c04fad8241557"}, + {"path":"fixtures/target-profile/contract-resources/determinism.sha256","gitBlob":"5376d6bfe23bea659463a7e3c56ad1e8afd4095f"}, + {"path":"fixtures/target-profile/contract-resources/diagnostics.cbor","gitBlob":"c47fa05f463e0da745fbcdf8daf94d70e134eb8d"}, + {"path":"fixtures/target-profile/contract-resources/diagnostics.sha256","gitBlob":"69613ec4014f27b23245e23fbf7c9447566516b2"}, + {"path":"fixtures/target-profile/contract-resources/fuel.cbor","gitBlob":"b5a3484ec5b2bf7343c2fcedc67bcb2b63a37104"}, + {"path":"fixtures/target-profile/contract-resources/fuel.sha256","gitBlob":"6ec1c830358ee35bb12bd04cc1a6edf47fb20997"}, + {"path":"fixtures/target-profile/contract-resources/wasm-component.cbor","gitBlob":"6344996c283e0d1c332ea3ce597ad4593882a3c5"}, + {"path":"fixtures/target-profile/contract-resources/wasm-component.sha256","gitBlob":"24bf3e552e4216d8258d2b85c8878af46a176c52"}, + {"path":"grammars/textmate/README.md","gitBlob":"fc116a669725d4e965d658234d32d779955d5dc8"}, + {"path":"grammars/textmate/edict.tmLanguage.json","gitBlob":"5847d8edfdb32d822f0f3950f41d00c947982185"}, + {"path":"grammars/tree-sitter-edict/README.md","gitBlob":"e2992a839d6719f1461db78c4e3f33d2e5ab0c09"}, + {"path":"grammars/tree-sitter-edict/grammar.js","gitBlob":"a82f5b9d9b78525f17a59272543fdcddd7a0da40"}, + {"path":"grammars/tree-sitter-edict/queries/highlights.scm","gitBlob":"0f46530b36996d13449901aed4e376a126577cba"}, + {"path":"grammars/tree-sitter-edict/src/grammar.json","gitBlob":"55df730a06b83c9f622e3ec17845fc9897c7d8c0"}, + {"path":"grammars/tree-sitter-edict/src/node-types.json","gitBlob":"520f6c4f7b30cd6892dd60faf6d76f3fbaa6a5c7"}, + {"path":"grammars/tree-sitter-edict/src/parser.c","gitBlob":"81cc4713cb5e05f9aa8dac16da202a864faefee6"}, + {"path":"grammars/tree-sitter-edict/src/tree_sitter/alloc.h","gitBlob":"1abdd1201578605b8d05a3001f01ebc0d58826d9"}, + {"path":"grammars/tree-sitter-edict/src/tree_sitter/array.h","gitBlob":"56fc8cd470996ded64a5452be25e26dbd2aa682a"}, + {"path":"grammars/tree-sitter-edict/src/tree_sitter/parser.h","gitBlob":"858107deb9e4a1ffcd2ed5e6ffe98a5fcab3e1f6"}, + {"path":"grammars/tree-sitter-edict/test/corpus/current-subset.txt","gitBlob":"732c5eda8e1bf95eef799476296a6ee061eb58eb"}, + {"path":"grammars/tree-sitter-edict/tree-sitter.json","gitBlob":"97d3fdd498a3bef509c8615d98b9560b527c03cb"}, + {"path":"scripts/consumer-witnesses/README.md","gitBlob":"262ba30223afa1a3782b17dd5272a02b40a541fb"}, + {"path":"scripts/consumer-witnesses/jedit-state-read.Dockerfile","gitBlob":"b76948f9b5d337f3681d645cceb56e32f8e9c69f"}, + {"path":"scripts/consumer-witnesses/jedit-state-read.Dockerfile.dockerignore","gitBlob":"ee41b3ca0a68fd5eb20e1b777b4b368fd8b44e63"}, + {"path":"scripts/consumer-witnesses/jedit-state-read.py","gitBlob":"26db295d4eabfc4e57813fc9bf17314c23350777"}, + {"path":"spec.lock.json","gitBlob":"ef8b02386e0f269a99c1d2121764f70b76e67620"}, + {"path":"xtask/Cargo.toml","gitBlob":"795c70a5172363bfcd55174b1bc76c9c131d21a3"}, + {"path":"xtask/src/contract_check.rs","gitBlob":"9e80393accf79936033972fde0f2aa2cf40f1be3"}, + {"path":"xtask/src/goldens.rs","gitBlob":"713f1f8266d9f6993684ae86db105fcd7d69ee2a"}, + {"path":"xtask/src/lawpack_goldens.rs","gitBlob":"c499e8581c73313794b83c261937144b3917850a"}, + {"path":"xtask/src/main.rs","gitBlob":"6c2c06038bb5ecdde60620071b200d8191dc116c"}, + {"path":"xtask/src/provider_components.rs","gitBlob":"ee9d6a1028f9fbfad879faab4b15a94b996ef6d4"}, + {"path":"xtask/src/provider_contract_pack.rs","gitBlob":"cf60d89892b7a57cc33300f273d2522a6e8f43f9"}, + {"path":"xtask/src/provider_dependencies.rs","gitBlob":"c4b0539ed593d2a2777d294090d2a891b13ae628"}, + {"path":"xtask/src/release_dates.rs","gitBlob":"1c6d7acb872f6d820eab3a30ca580e9c5cfba2ee"}, + {"path":"xtask/src/release_prep.rs","gitBlob":"01ed64ccbb28c9d1e908b7b800ff58076e5e1a2b"}, + {"path":"xtask/src/tests.rs","gitBlob":"9a3f6543c2dbae31d53e93d56f781e5d54f74f41"}, + {"path":"xtask/src/util.rs","gitBlob":"c1bf39e93460c43ffdcfd9a76e0424750cbb9dfd"} + ] +} diff --git a/edict/replace-range-probes/leaf-slice/evidence/public-build-candidate.json b/edict/replace-range-probes/leaf-slice/evidence/public-build-candidate.json new file mode 100644 index 00000000..7dd105f4 --- /dev/null +++ b/edict/replace-range-probes/leaf-slice/evidence/public-build-candidate.json @@ -0,0 +1,57 @@ +{ + "compiler": { + "commit": "0835f398336ce1c693b5531b262228cd909c0b4b", + "tree": "8f984b86c9053a9e570723271babeaaab12e140a", + "fileCount": 445, + "manifestSha256": "522c6decea5a96058f1dda96e1e5d2632a70d49c6b193a658c3464048cd8e41f", + "binarySha256": "a5ffea7b16b641448db4d5dc608bec1539211ab683df3ab78985e12bb1c2fd15" + }, + "providerManifestSha256": "c5b9fb2fe3a0dc4dad282621a97413225c555be0071f3502b3272952069d42dc", + "results": { + "baseline": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "51797e77062585a9f59083ee8a1da3faaf486ef7691e1b62203369a9d9356ee0", + "artifactSha256": { + "executable-operation-package.cbor": "1860ab8a6cb9a4bfd63a1db99d1c2bc00aa53dae52a9d1998295654379a95d85", + "verification-report.cbor": "d96e5d21eecbc1e5bbf6ce76ab438d55cc8e74f6843121d4ffb0f4343e648267" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "guard-control": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "066f7f3858f31bfd2ddc8490470942ae56da2f9a461399a872f7f158b1bc9774", + "artifactSha256": { + "executable-operation-package.cbor": "361888511419c3689c92d0e4fab0ca5bbd9196ad827fc212f2e7a1a3394f2e74", + "verification-report.cbor": "5580f1247b900a862eaf6b6c3eccc87bc23bbd53e40fde0bdc1f66826c5966c2" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "slice": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "81ffc0dae8c5d8900badf66b1ca4b8cac92378935702374785f2b20781e6934c", + "artifactSha256": { + "executable-operation-package.cbor": "bfacd029cf2dc9247cbcee47d747eca3f8298c7184cac3866eb36f3ab55573c1", + "verification-report.cbor": "943ac86ea20c40d68881cc8413b926f98ba2a4ee99408e3dcede4eead1e7bb86" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + } +} diff --git a/edict/replace-range-probes/leaf-slice/evidence/public-build-red.json b/edict/replace-range-probes/leaf-slice/evidence/public-build-red.json new file mode 100644 index 00000000..1245f6c9 --- /dev/null +++ b/edict/replace-range-probes/leaf-slice/evidence/public-build-red.json @@ -0,0 +1,54 @@ +{ + "compiler": { + "commit": "2405a550e93e1e97fff640caa44bbd0f65ffff3c", + "tree": "257d3e6aa10c2248fdbddaa8e9b3638866396169", + "fileCount": 440, + "manifestSha256": "9cc2cb4f711ef4038091559587099bbe65d6c54c8316c3e373752d0783b25173", + "binarySha256": "3b082d61c8cd23b0f917efb55c4eebd54e75c0df5d31c72f90ad856853678bf5" + }, + "results": { + "baseline": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "51797e77062585a9f59083ee8a1da3faaf486ef7691e1b62203369a9d9356ee0", + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "guard-control": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "066f7f3858f31bfd2ddc8490470942ae56da2f9a461399a872f7f158b1bc9774", + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "slice": { + "exitCode": 2, + "diagnostics": [ + { + "command": "build", + "input": { + "kind": "stdin" + }, + "kind": "ApplicationCompilationFailed", + "message": "Edict application did not compile to Core: [CompilerError { stage: TypeCheck, kind: UnresolvedFunction, message: \"pure helper `slice` has no compiler context fact\", span: Span { start: 521, end: 575 } }, CompilerError { stage: TypeCheck, kind: UnresolvedType, message: \"record shorthand `bytes` has no typed binding\", span: Span { start: 588, end: 593 } }, CompilerError { stage: TypeCheck, kind: TypeMismatch, message: \"return value does not match declared output type\", span: Span { start: 291, end: 598 } }, CompilerError { stage: TypeCheck, kind: TypeMismatch, message: \"intent body must return a value\", span: Span { start: 291, end: 598 } }]", + "schema": "edict.cli.diagnostic/v1", + "severity": "error", + "stage": "cli", + "type": "diagnostic" + } + ], + "artifacts": [], + "sourceSha256": "81ffc0dae8c5d8900badf66b1ca4b8cac92378935702374785f2b20781e6934c", + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "6181544d23ab4e8bf02f3719bfbe9a86a9f851490995eb23983d55af61525e64" + } + } +} diff --git a/edict/replace-range-probes/leaf-slice/run.py b/edict/replace-range-probes/leaf-slice/run.py new file mode 100644 index 00000000..98bab443 --- /dev/null +++ b/edict/replace-range-probes/leaf-slice/run.py @@ -0,0 +1,141 @@ +"""Exercise authored byte slicing at the public compiler build boundary.""" + +import argparse +import hashlib +import json +from pathlib import Path +import shutil +import subprocess + + +COMPILER_COMMIT = "2405a550e93e1e97fff640caa44bbd0f65ffff3c" +CANDIDATE_COMPILER_COMMIT = "0835f398336ce1c693b5531b262228cd909c0b4b" +SOURCE_EXPRESSION = "slice(input.blobBytes, input.startByte, input.endByte)" +MAX_LOG_BYTES = 1024 * 1024 + + +def sha256(path): + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def snapshot(root): + return {str(path.relative_to(root)): sha256(path) + for path in sorted(root.rglob("*")) if path.is_file()} + + +def verify_compiler_source(root, manifest_path, expected_commit): + manifest = json.loads(manifest_path.read_text()) + if manifest["commit"] != expected_commit: + raise RuntimeError("The witness requires its explicit experimental compiler pin") + for entry in manifest["files"]: + relative = Path(entry["path"]) + if relative.is_absolute() or ".." in relative.parts: + raise RuntimeError("Compiler source manifest contains an unsafe path") + data = (root / relative).read_bytes() + blob = hashlib.sha1(b"blob " + str(len(data)).encode() + b"\0" + data).hexdigest() + if blob != entry["gitBlob"]: + raise RuntimeError(f"Compiler source differs at {relative}") + return {"commit": manifest["commit"], "tree": manifest["tree"], + "fileCount": len(manifest["files"]), + "manifestSha256": sha256(manifest_path)} + + +def prepare(root, application_source, provider_source, source): + root.mkdir() + shutil.copy2(application_source / "edict.application.json", root) + shutil.copytree(application_source / "vendor", root / "vendor") + (root / "src").mkdir() + (root / "src/ReplaceRange.edict").write_bytes(source) + shutil.copytree(provider_source, root / ".build/echo-provider") + + +def build(root, compiler): + request = {"schema": "edict.compiler.settings/v1", "type": "compilerSettings", + "operation": "build", "application": "edict.application.json"} + stdout_path, stderr_path = root / "stdout.jsonl", root / "stderr.jsonl" + with stdout_path.open("wb") as stdout, stderr_path.open("wb") as stderr: + result = subprocess.run([str(compiler)], cwd=root, + input=(json.dumps(request) + "\n").encode(), + stdout=stdout, stderr=stderr, timeout=120, check=False) + events = [] + for path in (stdout_path, stderr_path): + if path.stat().st_size > MAX_LOG_BYTES: + raise RuntimeError("Compiler output exceeded witness log ceiling") + events.extend(json.loads(line) for line in path.read_text().splitlines()) + statuses = [event for event in events if event.get("type") == "status"] + if len(statuses) != 1 or statuses[0].get("exitCode") != result.returncode: + raise RuntimeError(f"Invalid compiler status stream: {events}") + diagnostics = [event for event in events if event.get("type") == "diagnostic"] + output = root / ".build/application" + artifacts = sorted(str(path.relative_to(output)) for path in output.rglob("*") + if path.is_file()) if output.exists() else [] + return {"exitCode": result.returncode, "diagnostics": diagnostics, + "artifacts": artifacts, "sourceSha256": sha256(root / "src/ReplaceRange.edict"), + "artifactSha256": {name: sha256(output / name) for name in artifacts}, + "stdoutSha256": sha256(stdout_path), "stderrSha256": sha256(stderr_path)} + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + for name in ("compiler", "compiler-source", "compiler-manifest", "application-source", + "provider-package", "work-root"): + parser.add_argument("--" + name, type=Path, required=True) + parser.add_argument("--boundary", choices=("source", "package"), default="source") + args = parser.parse_args() + if not Path("/.dockerenv").is_file(): + raise RuntimeError("Run only under the shared guarded Docker-worker lease") + if not args.work_root.resolve().is_relative_to(Path("/tmp/echo-726-runtime")): + raise RuntimeError("Work must stay inside the declared runtime-data accounting root") + args.work_root.mkdir() + expected_commit = COMPILER_COMMIT if args.boundary == "source" else CANDIDATE_COMPILER_COMMIT + compiler_identity = verify_compiler_source(args.compiler_source, args.compiler_manifest, + expected_commit) + compiler_identity["binarySha256"] = sha256(args.compiler) + before = {"application": snapshot(args.application_source), + "provider": snapshot(args.provider_package)} + source = (Path(__file__).parent / "LeafSlice.edict").read_bytes() + if source.count(SOURCE_EXPRESSION.encode()) != 1: + raise RuntimeError("Expected one exact authored slice expression") + sources = { + "baseline": (args.application_source / "src/ReplaceRange.edict").read_bytes(), + "guard-control": source.replace(SOURCE_EXPRESSION.encode(), b"input.blobBytes"), + "slice": source, + } + evidence = {"compiler": compiler_identity, + "providerManifestSha256": sha256(args.provider_package / "provider-manifest.echo.json"), + "results": {}} + for name, authored in sources.items(): + root = args.work_root / name + prepare(root, args.application_source, args.provider_package, authored) + evidence["results"][name] = build(root, args.compiler) + (args.work_root / "evidence.json").write_text(json.dumps(evidence, indent=2) + "\n") + for name, result in evidence["results"].items(): + print(json.dumps({"case": name, **result}, sort_keys=True), flush=True) + if before != {"application": snapshot(args.application_source), + "provider": snapshot(args.provider_package)}: + raise RuntimeError("Witness changed an authoritative input") + if compiler_identity["binarySha256"] != sha256(args.compiler): + raise RuntimeError("Compiler binary changed during the witness") + verify_compiler_source(args.compiler_source, args.compiler_manifest, expected_commit) + for name in ("baseline", "guard-control"): + result = evidence["results"][name] + if result["exitCode"] != 0 or result["diagnostics"] or not result["artifacts"]: + raise RuntimeError(f"{name} positive control did not build") + result = evidence["results"]["slice"] + if args.boundary == "package": + if (result["exitCode"] != 0 or result["diagnostics"] + or result["artifacts"] != ["executable-operation-package.cbor", "verification-report.cbor"]): + raise RuntimeError("Slice did not reach the expected package build boundary") + print("JIM_LEAF_SLICE_PACKAGE_BOUNDARY_CONFIRMED", flush=True) + return + if result["exitCode"] != 2 or result["artifacts"]: + raise RuntimeError("Slice must refuse without application artifacts") + refusal = evidence["results"]["slice"]["diagnostics"] + if (len(refusal) != 1 or refusal[0].get("kind") != "ApplicationCompilationFailed" + or "pure helper `slice` has no compiler context fact" not in refusal[0].get("message", "")): + raise RuntimeError("Slice did not produce the expected source refusal") + print("JIM_LEAF_SLICE_SOURCE_BOUNDARY_CONFIRMED", flush=True) + + +if __name__ == "__main__": + main() diff --git a/edict/replace-range-probes/node-atom-read/Dockerfile b/edict/replace-range-probes/node-atom-read/Dockerfile new file mode 100644 index 00000000..679dc849 --- /dev/null +++ b/edict/replace-range-probes/node-atom-read/Dockerfile @@ -0,0 +1,24 @@ +FROM rust:1.95.0-bookworm AS compiler +RUN apt-get update && apt-get install -y --no-install-recommends python3 \ + && rm -rf /var/lib/apt/lists/* +WORKDIR /edict +RUN git init && git remote add origin https://github.com/flyingrobots/edict.git \ + && git fetch --depth=1 origin 2405a550e93e1e97fff640caa44bbd0f65ffff3c \ + && git archive FETCH_HEAD | tar -x +RUN cargo build --locked -p edict-cli +WORKDIR /echo-source +RUN git init && git remote add origin https://github.com/flyingrobots/echo.git \ + && git fetch --depth=1 origin 49e9efb68001dfd78563d18bac9359a87671e431 \ + && git archive FETCH_HEAD schemas/edict-provider/package/v1 | tar -x + +FROM rust:1.90.0-bookworm AS provider +WORKDIR /echo +RUN git init && git remote add origin https://github.com/flyingrobots/echo.git \ + && git fetch --depth=1 origin 84ccbcec0640f2c7d0565464fd55655007689b42 \ + && git archive FETCH_HEAD | tar -x +RUN cargo run --locked -p echo-wesley-gen --example ordered_publication_witness -- /ordered-provider + +FROM compiler AS witness +COPY --from=provider /ordered-provider /ordered-provider +COPY edict/replace-range-probes/node-atom-read /probe +CMD ["python3", "/probe/run.py"] diff --git a/edict/replace-range-probes/node-atom-read/Dockerfile.dockerignore b/edict/replace-range-probes/node-atom-read/Dockerfile.dockerignore new file mode 100644 index 00000000..7c923dc8 --- /dev/null +++ b/edict/replace-range-probes/node-atom-read/Dockerfile.dockerignore @@ -0,0 +1,5 @@ +** +!edict/ +!edict/replace-range-probes/ +!edict/replace-range-probes/node-atom-read/ +!edict/replace-range-probes/node-atom-read/** diff --git a/edict/replace-range-probes/node-atom-read/README.md b/edict/replace-range-probes/node-atom-read/README.md new file mode 100644 index 00000000..2eb63885 --- /dev/null +++ b/edict/replace-range-probes/node-atom-read/README.md @@ -0,0 +1,67 @@ +# Node atom read and guard probe + +This is authored consumer evidence for +[Echo #740](https://github.com/flyingrobots/echo/issues/740), +[Jedit #296](https://github.com/flyingrobots/jedit/issues/296), and +[PR #302](https://github.com/flyingrobots/jedit/pull/302). It reproduces an +unsupported provider boundary. **It does not implement reads or ReplaceRange.** +The frozen application and producer pins under `edict/replace-range/` remain +unchanged. + +The source requests the opaque atom bytes at an explicit address, compares +them with expected bytes, then returns them. The proposed address contains +32-byte WARP, node, and expected atom-type IDs. Four named failure arms cover +missing data, wrong atom type, non-atom attachments, and the byte bound. The +exported type uses Edict's canonical `Record<...>` syntax with sorted fields. +The output is bounded to 1 MiB. + +`echo.dpo@1.node-atom-read` and its failure coordinates are **proposed** target +contracts. Echo does not implement them. The pure provider configuration is +retained deliberately to identify its refusal boundary; it must not be treated +as permission for stateful execution. The experimental `echo.span-ir/v2` +selection binds the pinned Edict CDDL bytes, not a released semantic profile. + +## Reproduce + +From the repository root, with no host repository mounted into Docker: + +```sh +docker build -f edict/replace-range-probes/node-atom-read/Dockerfile \ + -t jedit-node-atom-read-boundary . +docker run --rm jedit-node-atom-read-boundary +``` + +The Dockerfile fetches exact revisions: + +- Edict `2405a550e93e1e97fff640caa44bbd0f65ffff3c` supplies ordered Target IR. +- Echo `49e9efb68001dfd78563d18bac9359a87671e431` supplies the old provider control. +- Echo `84ccbcec0640f2c7d0565464fd55655007689b42` supplies the public generator + example that assembles and digest-admits an ordered-schema provider candidate. + +The witness uses the public lawpack/application JSONL build API. It checks: + +1. The lawpack builds and its generated digest equals the authored import. +2. The old provider refuses ordered IR at `InvalidProviderInvocation`, naming + `ArtifactSchemaMismatch` and `06-target-ir`. +3. Changing only the provider to the ordered-schema candidate reaches + `ProviderLowererRefused`, naming `UnsupportedSemantics` and + `core.echo-pure-operation`. +4. Neither refusal publishes application outputs; the authored body is unchanged. + +Success prints `JEDIT_NODE_ATOM_READ_PROVIDER_BOUNDARY_CONFIRMED`. That means +the limitation was reproduced, not that an executable read package was emitted. +The harness neither fabricates intermediate artifacts nor substitutes a native +read implementation. + +## What remains + +Echo #740 owns explicit read-capable provider configuration, independent +verification, real bounded evaluation over graph storage, basis/aperture +enforcement, ordered guards, typed failures, and deterministic accounting. +No ordinary caller-provided bytes may stand in for an authorized read view. + +Jim owns fact decoding. Its canonical Buffer head is a field inside an encoded +fact, not the entire atom payload. Returning raw bytes does not supply that head +without the application-owned decoding step. Rope operations, staged writes, +admission, oracle agreement, Tick/WAL/receipts, and recovery remain the parent +issues' requirements. diff --git a/edict/replace-range-probes/node-atom-read/edict.application.json b/edict/replace-range-probes/node-atom-read/edict.application.json new file mode 100644 index 00000000..9bad89fb --- /dev/null +++ b/edict/replace-range-probes/node-atom-read/edict.application.json @@ -0,0 +1,20 @@ +{ + "schema": "edict.application/v1", + "coordinate": "jedit.text.replace_range@1", + "sources": [ + "src/ReplaceRange.edict" + ], + "lawpacks": [ + { + "manifest": "vendor/atom-read/manifest.cbor", + "exports": "vendor/atom-read/exports.cbor", + "adapter": "vendor/atom-read/adapter.cbor", + "targetConfiguration": "vendor/atom-read/echo-operation-configuration.cbor" + } + ], + "target": { + "profile": "echo.dpo@1", + "providerPackage": ".build/echo-provider" + }, + "outputDirectory": ".build/application" +} diff --git a/edict/replace-range-probes/node-atom-read/edict.lawpack.json b/edict/replace-range-probes/node-atom-read/edict.lawpack.json new file mode 100644 index 00000000..d74d67de --- /dev/null +++ b/edict/replace-range-probes/node-atom-read/edict.lawpack.json @@ -0,0 +1,183 @@ +{ + "schema": "edict.lawpack-build/v1", + "outputDirectory": "vendor/atom-read", + "lawpack": { + "schema": "edict.lawpack-authoring/v1", + "id": "jedit.text", + "version": "1", + "acceptedCoreAbi": [ + "edict.core/v1" + ], + "dependencies": [], + "exportsCoordinate": "jedit.text.exports/v1", + "exports": { + "types": [ + { + "coordinate": "jedit.text@1.FactAddress", + "definition": "Record,typeId:Bytes,warpId:Bytes>" + }, + { + "coordinate": "jedit.text@1.FactBytes", + "definition": "Bytes" + }, + { + "coordinate": "jedit.text@1.ObstructionDetail", + "definition": "String" + } + ], + "constants": [], + "pureFunctions": [], + "effects": [ + { + "coordinate": "jedit.text@1.readFact", + "typeParameters": [], + "inputType": "jedit.text@1.FactAddress", + "outputType": "jedit.text@1.FactBytes", + "executionClass": "runtime", + "effectKindHint": "read", + "footprintObligation": "jedit.text@1.replaceRangeFootprint", + "costObligation": "jedit.text@1.replaceRangeBudget", + "effectFailures": { + "missing": { + "authorityClass": "resourceFault", + "payloadType": "jedit.text@1.FactAddress" + }, + "typeMismatch": { + "authorityClass": "integrityFault", + "payloadType": "jedit.text@1.FactAddress" + }, + "notAtom": { + "authorityClass": "integrityFault", + "payloadType": "jedit.text@1.FactAddress" + }, + "tooLarge": { + "authorityClass": "integrityFault", + "payloadType": "jedit.text@1.FactAddress" + } + }, + "guardSupport": true + } + ], + "obstructions": [ + { + "coordinate": "jedit.text@1.BasisNotCanonical", + "authorityClass": "domainMappable", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.FactMissing", + "authorityClass": "resourceFault", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.FactMalformed", + "authorityClass": "integrityFault", + "payloadSchema": "jedit.text@1.ObstructionDetail" + } + ], + "operationProfiles": { + "jedit.text@1.replaceRange": { + "opticTemplate": { + "opticKind": "affectReintegration", + "boundaryKind": "affect", + "supportPolicy": "jedit.text@1.basisBoundSupport", + "lossDisposition": "jedit.text@1.lossless", + "basisTemplate": "jedit.text@1.exactHeadBasis", + "apertureRequirement": { + "kind": "abstractFootprintObligation", + "reference": "jedit.text@1.replaceRangeFootprint" + } + }, + "effectPredicate": "jedit.text@1.replaceRangeEffects" + } + } + }, + "targetAdapters": [ + { + "coordinate": "jedit.text.echo-adapter/v1", + "output": "adapter.cbor", + "acceptedTargetProfile": { + "id": "echo.dpo@1", + "digest": "sha256:2e2494121aecf5e6a2d920f5fb85408825d394765fad41484c416397c920fb04" + }, + "acceptedTargetIr": { + "id": "echo.span-ir/v2", + "digest": "sha256:123e7f805dc5e831e88befec4cd49ec02c39858b6f3990da8a73b50c6086ae39" + }, + "operationProfiles": { + "jedit.text@1.replaceRange": { + "core": "continuum.profile.read-only/v1", + "semanticEffects": [ + "jedit.text@1.readFact" + ], + "budgetObligation": "jedit.text@1.replaceRangeBudget", + "targetConfiguration": { + "local": "echo-config" + } + } + }, + "effectImplementations": { + "jedit.text@1.readFact": { + "targetIntrinsic": "echo.dpo@1.node-atom-read", + "targetConfiguration": { + "local": "echo-config" + }, + "writeClass": "read", + "footprintObligation": "jedit.text@1.replaceRangeFootprint", + "costObligation": "jedit.text@1.replaceRangeBudget", + "failureMappings": { + "missing": "echo.atom-missing/v1", + "typeMismatch": "echo.atom-type-mismatch/v1", + "notAtom": "echo.atom-required/v1", + "tooLarge": "echo.atom-byte-bound-exceeded/v1" + } + } + }, + "budgets": { + "jedit.text@1.replaceRangeBudget": { + "maxSteps": 1048576, + "maxAllocatedBytes": 16777216, + "maxOutputBytes": 8388608 + } + } + } + ], + "verifier": { + "class": "declarative", + "ruleset": { + "local": "verifier-rules" + } + }, + "compatibility": { + "id": "jedit.text.compatibility/v1", + "digest": "sha256:2adf83f798205f52636ad64ca45178f33a8e1cc663874f8a6113484c945e3052" + }, + "conformanceFixtureCorpus": { + "id": "jedit.text.ReplaceRange.oracle@1", + "digest": "sha256:b9b4707dd5e07897cbe7af36d88928401887e6af5d167d1a88a8d6181b4dbb0e" + }, + "localResources": [ + { + "name": "echo-config", + "coordinate": "echo.operation-lowering-configuration/v1", + "output": "echo-operation-configuration.cbor", + "value": { + "apiVersion": "echo.operation-lowering-configuration/v1", + "programKind": "compiler-produced-bounded-pure/v1" + } + }, + { + "name": "verifier-rules", + "coordinate": "jedit.text.verifier-rules/v1", + "output": "verifier-rules.cbor", + "value": { + "schema": "jedit.text.schema@1", + "schemaDigest": "sha256:f49b0ff6c9c7010d3a72b46734d47832853f496739a083edc41dddec3431bac7", + "oracleIsExecutableInput": false, + "runtimeOntology": "generic-bounded-graph" + } + } + ] + }, + "dependencyBundles": [] +} diff --git a/edict/replace-range-probes/node-atom-read/run.py b/edict/replace-range-probes/node-atom-read/run.py new file mode 100644 index 00000000..12af67b7 --- /dev/null +++ b/edict/replace-range-probes/node-atom-read/run.py @@ -0,0 +1,82 @@ +"""Reproduce the raw atom read/guard boundary through the public Edict CLI.""" + +import hashlib +import json +from pathlib import Path +import shutil +import subprocess +import tempfile + + +def build(root, document, expected_kind=None, required_details=()): + request = { + "schema": "edict.compiler.settings/v1", + "type": "compilerSettings", + "operation": "build", + document: f"edict.{document}.json", + } + result = subprocess.run( + ["/edict/target/debug/edict"], cwd=root, + input=json.dumps(request) + "\n", text=True, capture_output=True, + timeout=120, check=False, + ) + events = [json.loads(line) for stream in (result.stdout, result.stderr) + for line in stream.splitlines()] + diagnostics = [event for event in events if event.get("type") == "diagnostic"] + statuses = [event for event in events if event.get("type") == "status"] + expected_code = 0 if expected_kind is None else 2 + if (result.returncode != expected_code or len(statuses) != 1 + or statuses[0].get("exitCode") != expected_code): + raise RuntimeError(f"Unexpected public build result: {result}") + if expected_kind is None: + if diagnostics: + raise RuntimeError(f"Lawpack build produced diagnostics: {diagnostics}") + elif (len(diagnostics) != 1 or diagnostics[0].get("kind") != expected_kind + or any(detail not in diagnostics[0].get("message", "") + for detail in required_details)): + raise RuntimeError(f"Unexpected refusal boundary: {diagnostics}") + if document == "application": + output = root / ".build/application" + if output.exists() and any(output.rglob("*")): + raise RuntimeError("Refused build published application artifacts") + for event in events: + print(json.dumps(event, sort_keys=True), flush=True) + + +def main(): + if not Path("/.dockerenv").is_file(): + raise RuntimeError("Run with the COPY-based node-atom-read Dockerfile") + source = Path("/probe") + definition = json.loads((source / "edict.lawpack.json").read_text()) + selection = definition["lawpack"]["targetAdapters"][0]["acceptedTargetIr"] + schema = Path("/edict/docs/abi/edict-target-ir.cddl").read_bytes() + if selection != { + "id": "echo.span-ir/v2", + "digest": "sha256:" + hashlib.sha256(schema).hexdigest(), + }: + raise RuntimeError("Probe does not select the pinned experimental IR contract") + with tempfile.TemporaryDirectory(prefix="jedit-atom-read-") as scratch: + root = Path(scratch) + for document in ("edict.lawpack.json", "edict.application.json"): + shutil.copyfile(source / document, root / document) + shutil.copytree(source / "src", root / "src") + build(root, "lawpack") + digest = (root / "vendor/atom-read/manifest.sha256").read_text().strip() + authored = (root / "src/ReplaceRange.edict").read_text() + if authored.count(f'digest "{digest}"') != 1: + raise RuntimeError("Authored lawpack import does not match generated bytes") + provider = root / ".build/echo-provider" + shutil.copytree("/echo-source/schemas/edict-provider/package/v1", provider) + build(root, "application", "InvalidProviderInvocation", + ("ArtifactSchemaMismatch", "06-target-ir")) + shutil.rmtree(provider) + shutil.copytree("/ordered-provider", provider) + build(root, "application", "ProviderLowererRefused", + ("UnsupportedSemantics", "core.echo-pure-operation")) + if (root / "src/ReplaceRange.edict").read_text() != authored: + raise RuntimeError("Witness changed the authored operation") + print("JEDIT_NODE_ATOM_READ_PROVIDER_BOUNDARY_CONFIRMED", flush=True) + + +if __name__ == "__main__": + main() diff --git a/edict/replace-range-probes/node-atom-read/src/ReplaceRange.edict b/edict/replace-range-probes/node-atom-read/src/ReplaceRange.edict new file mode 100644 index 00000000..dd33b7f7 --- /dev/null +++ b/edict/replace-range-probes/node-atom-read/src/ReplaceRange.edict @@ -0,0 +1,18 @@ +package jedit.text.replace_range@1; +use lawpack jedit.text@1 digest "sha256:add46dc12d57a1df57847d501092b2d91dceab011d8781a747ed39437b01737e" as text; +type Input = { address: text.FactAddress, expected: text.FactBytes }; +intent replaceRange(input: Input) returns text.FactBytes + profile text.replaceRange + basis input.address.nodeId + budget <= text.replaceRangeBudget +{ + let actual: text.FactBytes = text.readFact(input.address) + else { + missing(address) => text.FactMissing, + typeMismatch(address) => text.FactMalformed, + notAtom(address) => text.FactMalformed, + tooLarge(address) => text.FactMalformed, + }; + require actual == input.expected else text.BasisNotCanonical; + return actual; +} diff --git a/edict/replace-range-probes/range-assembly/README.md b/edict/replace-range-probes/range-assembly/README.md new file mode 100644 index 00000000..4d4d97bf --- /dev/null +++ b/edict/replace-range-probes/range-assembly/README.md @@ -0,0 +1,149 @@ +# Authored range-fragment assembly pressure + +`RangeAssembly.edict` isolates one append step of Jim's native range reader: +[`plan_replace_with_reason`](../../../native/jedit-echo-host/src/rope/replace.rs) +reads current range bytes at line 176 and compares them with replacement bytes +for the no-op decision. [`read_range_bytes`](../../../native/jedit-echo-host/src/rope/window.rs) +at line 136 calls `collect_range`, which visits left before right and appends +each selected leaf slice with `output.extend_from_slice(slice)` at line 244. +These source coordinates are inspected at Jim `0cd880224fafcd1f26f78552e7b34ad170ae6a04`. + +The authored operation receives two already selected fragments and joins them +in order with `+`. Each fragment has an eight-byte probe aperture, making the +sixteen-byte summed output bound explicit and testable with literal data. +Those small apertures are specimen bounds, not the application's rope limits. +This is raw byte concatenation: it does not interpret UTF-8, classify no-op, +traverse nodes, prove range length, fold a collection, join tree references, +or publish facts. Those semantics remain Jim-owned authored work under +[Jim #296](https://github.com/flyingrobots/jedit/issues/296) and draft PR #302. + +[`cases.json`](cases.json) specifies ten literal outputs and two input-type +refusals. These are future runtime conformance expectations, not executed +results, executable lawpack input, or the full rope oracle. Empty input has +its literal identity result; reversed fragment order changes the expected +bytes; invalid UTF-8 stays bytes. The full-aperture case requires the sum of +both static bounds, not either operand's bound alone. + +## Compiler boundary + +Inspection of Edict `ac836e5c42a5c47b0dab30cfb0b09848cca73215` found source `+` +dispatched to `check_string_concat`, which rejects non-String operands. The +[public compiler probe](evidence/public-build-red.json) confirms the source +failure below. GitHub merge `0f38fce33c2b8c0cad7bd8aeba110a34c9166a2d` and this +compiler have the identical source tree `dadd4703a9905a37ff366c7134aea5cfe351e2fd`. +The witness explicitly names the built compiler, not a substituted frozen pin. + +Two controls replace only the addition expression with `input.firstFragment` +or `input.secondFragment`. They retain both input fields and the declared +sixteen-byte output bound, so their actual build outcomes distinguish missing +byte concatenation from basic field/projection/type-bound failures. The frozen +boundary application is a third positive control. + +| Input | Public result | +| --- | --- | +| Frozen boundary source | Exit 0, package and separate report | +| First-fragment-only control | Exit 0, package and separate report | +| Second-fragment-only control | Exit 0, package and separate report | +| Exact `RangeAssembly.edict` | Exit 2, `ApplicationCompilationFailed` with `TypeCheck/TypeMismatch`; no application artifacts | + +The primary diagnostic is `string concatenation requires string operands`, +covering source bytes 430–472 at line 19. Later shorthand/return diagnostics are +cascades. [Raw assembly diagnostics](evidence/assembly-stderr.jsonl) and all +control streams are retained unchanged. The successful paired witness ends with +`JIM_RANGE_ASSEMBLY_SOURCE_BOUNDARY_CONFIRMED`. No runtime case was executed. + +The guarded worker rebuilt Edict with Rust 1.95.0 from the verified 446-file +source manifest, reproducing binary SHA-256 +`a937e6f150f73fa20e9868c84adee0a8270cc62130d4aef18e5b891ec268fee2`. +The frozen provider remains Echo `49e9efb68001dfd78563d18bac9359a87671e431`, +manifest SHA-256 +`c5b9fb2fe3a0dc4dad282621a97413225c555be0071f3502b3272952069d42dc`. +Source, binary, application, and provider identities were checked before and +after the public builds. One earlier preflight stopped before compilation +because the preserved `/edict/target` symlink appeared as an untracked file; +its destination was verified as the existing shared target before proceeding. +That setup stop is not the source RED. + +The unchanged published lawpack provides the profile and budget. The frozen +application root, producer pins, closure, and artifact locks are authoritative +for their existing witness and are not migrated by this development source. + +## Candidate package boundary + +The unchanged authored source and all three controls also built with +[Edict's bounded-byte concatenation candidate](https://github.com/flyingrobots/edict/issues/222) +`01dc5abb9a8a74f8fd8b0e0a6d1041d0adb86d6e`. The +[retained public result](evidence/candidate/public-build.json) records exit 0, +no diagnostics, and an executable package plus separate verification report +for each source. This advances the source/compiler/package boundary; it does +not execute byte concatenation or any of the twelve runtime expectations. + +The candidate's 449 tracked source files and Git identity were verified before +and after the builds against the [original SHA-256 manifest](evidence/candidate/compiler-source-sha256.json). +Its tree is `74e571125a1da6ac5b2eac80944e343811708d51`; CLI SHA-256 is +`e2700698829b03f437c66425ed9878b002ef7a34ac183a39bac4eaf6a758cc6d`. +The [portable Git-blob manifest](evidence/candidate/compiler-source.json) +derives from the same exact commit and was checked against that original +manifest. The frozen provider manifest remains `c5b9fb2fe3a0dc4dad282621a97413225c555be0071f3502b3272952069d42dc`. + +Exact assembly artifacts are retained unchanged: + +- [Executable package](evidence/candidate/assembly/application/executable-operation-package.cbor): + SHA-256 `e889d4680435139fe76f45762f0529c090afcf3d73ef7d17f787d44a49bda534`. +- [Verification report](evidence/candidate/assembly/application/verification-report.cbor): + SHA-256 `7eec90854e0663aa2346ec5005ff7d05eeb50fc2229b32b407dda3cfa0280077`. + +The candidate directory also retains each control's package/report, all raw +compiler streams, the [guard output](evidence/candidate/guard.log), +[completion measurements](evidence/candidate/guard.result.json), and the +unchanged admission/release event records. The original RED above is preserved. +The application manifest, producer pins, source closure, and artifact locks remain unchanged. +The [portable runner replay](evidence/candidate/portable-public-build.json) +reproduced all four complete public result records, including identical source, +stream, package and report hashes. Its [guard log](evidence/candidate/portable-guard.log) +ends with `JIM_RANGE_ASSEMBLY_PACKAGE_BOUNDARY_CONFIRMED`; the +[completion receipt](evidence/candidate/portable-guard.result.json) records exit 0. +This checks the checked-in harness's package mode without replacing the +original observational replay. + +Full traversal, no-op classification, rope consequences and admitted execution +remain open under #296. + +## Reproduction discipline + +Use copied inputs, the existing compiler and frozen provider package, the +shared Docker worker and Cargo target, workstation git-locks admission, +native locks, and the mandatory fail-closed disk/process guard. Record exact +compiler source and binary identities before a build. Keep generated apps, +artifacts, and streams under the owned bounded runtime-data directory. Do not +use historical build-in-image recipes or create another image, worker, or +cache. The twelve runtime expectations require separate generic evaluator +execution of the successfully built candidate package. + +Copy both this directory and the unchanged sibling `leaf-slice/run.py`; the +runner reuses that file's public-build and identity helpers. Provide the frozen +application root and provider package as read-only copied inputs, then invoke +inside the admitted guarded worker: + +```sh +python3 "$PROBE_ROOT/range-assembly/run.py" \ + --compiler "$EDICT_BINARY" \ + --compiler-source "$EDICT_SOURCE" \ + --compiler-manifest "$PROBE_ROOT/range-assembly/evidence/compiler-source.json" \ + --application-source "$APPLICATION_SOURCE" \ + --provider-package "$PROVIDER_PACKAGE" \ + --work-root /tmp/echo-726-runtime/jim-range-assembly-proof +``` + +The default `--boundary source` preserves the original RED assertion and its +compiler identity. To reproduce the candidate package witness, use the exact +candidate compiler binary/source, add `--boundary package`, and select +`evidence/candidate/compiler-source.json` as the compiler manifest. Both modes +retain the same source and controls; package mode requires the actual package +and separate report without claiming runtime support. + +The source manifest is read-only provenance, not executable compiler input. +Use a fresh work-root; retain unique evidence and recycle only owned disposable +copies after export. The runner's stream-size check does not replace the external +disk/process guard. The retained results establish their named compiler boundaries, not +byte-concatenation runtime support or complete `ReplaceRange` behavior. diff --git a/edict/replace-range-probes/range-assembly/RangeAssembly.edict b/edict/replace-range-probes/range-assembly/RangeAssembly.edict new file mode 100644 index 00000000..f8905c8a --- /dev/null +++ b/edict/replace-range-probes/range-assembly/RangeAssembly.edict @@ -0,0 +1,21 @@ +package jedit.text.replace_range@1; + +use lawpack jedit.text@1 digest "sha256:95758c1605894672cc9069fde01bb8b6e11842b053102660c9cd4f4d6f34d64e" as text; + +type Input = { + firstFragment: Bytes, + secondFragment: Bytes, +}; + +type RangeBytes = { + bytes: Bytes, +}; + +intent assembleRange(input: Input) returns RangeBytes + profile text.replaceRange + basis none + budget <= text.replaceRangeBudget +{ + let bytes = input.firstFragment + input.secondFragment; + return { bytes }; +} diff --git a/edict/replace-range-probes/range-assembly/cases.json b/edict/replace-range-probes/range-assembly/cases.json new file mode 100644 index 00000000..ee8bcf9a --- /dev/null +++ b/edict/replace-range-probes/range-assembly/cases.json @@ -0,0 +1,78 @@ +{ + "schema": "jedit.range-fragment-assembly-cases/v1", + "operation": "jedit.text.replace_range@1.assembleRange", + "cases": [ + { + "name": "both-empty", + "firstHex": "", + "secondHex": "", + "bytesHex": "" + }, + { + "name": "first-empty", + "firstHex": "", + "secondHex": "6162", + "bytesHex": "6162" + }, + { + "name": "second-empty", + "firstHex": "6162", + "secondHex": "", + "bytesHex": "6162" + }, + { + "name": "in-order", + "firstHex": "61626364", + "secondHex": "65666768", + "bytesHex": "6162636465666768" + }, + { + "name": "different-order", + "firstHex": "65666768", + "secondHex": "61626364", + "bytesHex": "6566676861626364" + }, + { + "name": "binary-octets", + "firstHex": "00ff", + "secondHex": "807f", + "bytesHex": "00ff807f" + }, + { + "name": "codepoint-fragments", + "firstHex": "f09f", + "secondHex": "98ba", + "bytesHex": "f09f98ba" + }, + { + "name": "incomplete-codepoint-remains-bytes", + "firstHex": "f0", + "secondHex": "9f", + "bytesHex": "f09f" + }, + { + "name": "full-apertures", + "firstHex": "0001020304050607", + "secondHex": "08090a0b0c0d0e0f", + "bytesHex": "000102030405060708090a0b0c0d0e0f" + }, + { + "name": "repeated-bytes-preserved", + "firstHex": "ff00ff", + "secondHex": "ff00ff", + "bytesHex": "ff00ffff00ff" + }, + { + "name": "first-over-bound", + "firstHex": "000102030405060708", + "secondHex": "", + "refusal": "input-type" + }, + { + "name": "second-over-bound", + "firstHex": "", + "secondHex": "000102030405060708", + "refusal": "input-type" + } + ] +} diff --git a/edict/replace-range-probes/range-assembly/evidence/assembly-stderr.jsonl b/edict/replace-range-probes/range-assembly/evidence/assembly-stderr.jsonl new file mode 100644 index 00000000..8ae2e3aa --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/assembly-stderr.jsonl @@ -0,0 +1,2 @@ +{"command":"build","input":{"kind":"stdin"},"kind":"ApplicationCompilationFailed","message":"Edict application did not compile to Core: [CompilerError { stage: TypeCheck, kind: TypeMismatch, message: \"string concatenation requires string operands\", span: Span { start: 430, end: 472 } }, CompilerError { stage: TypeCheck, kind: UnresolvedType, message: \"record shorthand `bytes` has no typed binding\", span: Span { start: 485, end: 490 } }, CompilerError { stage: TypeCheck, kind: TypeMismatch, message: \"return value does not match declared output type\", span: Span { start: 283, end: 495 } }, CompilerError { stage: TypeCheck, kind: TypeMismatch, message: \"intent body must return a value\", span: Span { start: 283, end: 495 } }]","schema":"edict.cli.diagnostic/v1","severity":"error","stage":"cli","type":"diagnostic"} +{"checked":0,"command":"build","errors":1,"exitCode":2,"schema":"edict.cli.event/v1","status":"error","type":"status"} diff --git a/edict/replace-range-probes/range-assembly/evidence/assembly-stdout.jsonl b/edict/replace-range-probes/range-assembly/evidence/assembly-stdout.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/range-assembly/evidence/baseline-stderr.jsonl b/edict/replace-range-probes/range-assembly/evidence/baseline-stderr.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/range-assembly/evidence/baseline-stdout.jsonl b/edict/replace-range-probes/range-assembly/evidence/baseline-stdout.jsonl new file mode 100644 index 00000000..a668538e --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/baseline-stdout.jsonl @@ -0,0 +1 @@ +{"checked":1,"command":"build","errors":0,"exitCode":0,"schema":"edict.cli.event/v1","status":"ok","type":"status"} diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/assembly/application/executable-operation-package.cbor b/edict/replace-range-probes/range-assembly/evidence/candidate/assembly/application/executable-operation-package.cbor new file mode 100644 index 00000000..27b20864 Binary files /dev/null and b/edict/replace-range-probes/range-assembly/evidence/candidate/assembly/application/executable-operation-package.cbor differ diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/assembly/application/verification-report.cbor b/edict/replace-range-probes/range-assembly/evidence/candidate/assembly/application/verification-report.cbor new file mode 100644 index 00000000..6f3a5a61 --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/assembly/application/verification-report.cbor @@ -0,0 +1,3 @@ +¨goutcomehacceptedgpackage¢bidx!executable-operation-package.echofdigest‚fsha256X íH +3*�_„÷B^F« ̨†È @àH[ˆû¡æàA_htargetIr¢bidoecho.span-ir/v1fdigest‚fsha256X �è•|ø‹x`ç&9 ¤ðh~ÇHÌ¢ô¸`$7®³japiVersionx)echo.operation-package-verifier-report/v1mdiagnosticAbi¢bidtedict.diagnostics/v1fdigest‚fsha256X (ýr©‚#9‚ÊL)Û±²Ô0b9g«;m¹×þæhæ¹odiagnosticBytes@qexecutableSubject¢ebytesYR¤gpackage¢bidx!executable-operation-package.echofdigest‚fsha256X íH +3*�_„÷B^F« ̨†È @àH[ˆû¡æàA_htargetIr¢bidoecho.span-ir/v1fdigest‚fsha256X �è•|ø‹x`ç&9 ¤ðh~ÇHÌ¢ô¸`$7®³japiVersionxecho.executable-subject/v1xapplicationResultProjection¢bidx(jedit.text.replace_range@1.assembleRangefdigest‚fsha256X ¸{¡��ò„(�²0è_FPº8â2‚šÕŽŠkü¿å••ireference¢bidxecho.executable-subject/v1fdigest‚fsha256X cøžv­UÏìGÒÌmŠÛrY`HùŠ}t'ÙƒR`gèòxapplicationResultProjection¢bidx(jedit.text.replace_range@1.assembleRangefdigest‚fsha256X ¸{¡��ò„(�²0è_FPº8â2‚šÕŽŠkü¿å•• \ No newline at end of file diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/assembly/stderr.jsonl b/edict/replace-range-probes/range-assembly/evidence/candidate/assembly/stderr.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/assembly/stdout.jsonl b/edict/replace-range-probes/range-assembly/evidence/candidate/assembly/stdout.jsonl new file mode 100644 index 00000000..a668538e --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/assembly/stdout.jsonl @@ -0,0 +1 @@ +{"checked":1,"command":"build","errors":0,"exitCode":0,"schema":"edict.cli.event/v1","status":"ok","type":"status"} diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/baseline/application/executable-operation-package.cbor b/edict/replace-range-probes/range-assembly/evidence/candidate/baseline/application/executable-operation-package.cbor new file mode 100644 index 00000000..8e13c184 Binary files /dev/null and b/edict/replace-range-probes/range-assembly/evidence/candidate/baseline/application/executable-operation-package.cbor differ diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/baseline/application/verification-report.cbor b/edict/replace-range-probes/range-assembly/evidence/candidate/baseline/application/verification-report.cbor new file mode 100644 index 00000000..c34f2faf --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/baseline/application/verification-report.cbor @@ -0,0 +1 @@ +¨goutcomehacceptedgpackage¢bidx!executable-operation-package.echofdigest‚fsha256X ¹-<@‡ŠŸË§v‹æ|�ºPÏu‚3�üÝXqA[htargetIr¢bidoecho.span-ir/v1fdigest‚fsha256X ,×ÕçÓ¿–‰æn{Àx$d6öâ>Ø9`™ÊŽ$çŸùjapiVersionx)echo.operation-package-verifier-report/v1mdiagnosticAbi¢bidtedict.diagnostics/v1fdigest‚fsha256X (ýr©‚#9‚ÊL)Û±²Ô0b9g«;m¹×þæhæ¹odiagnosticBytes@qexecutableSubject¢ebytesYQ¤gpackage¢bidx!executable-operation-package.echofdigest‚fsha256X ¹-<@‡ŠŸË§v‹æ|�ºPÏu‚3�üÝXqA[htargetIr¢bidoecho.span-ir/v1fdigest‚fsha256X ,×ÕçÓ¿–‰æn{Àx$d6öâ>Ø9`™ÊŽ$çŸùjapiVersionxecho.executable-subject/v1xapplicationResultProjection¢bidx'jedit.text.replace_range@1.replaceRangefdigest‚fsha256X øº 5~^ÕN†÷Rê‚äT­ GÁýèÇÜ*ë¦ireference¢bidxecho.executable-subject/v1fdigest‚fsha256X “ÑÂîk—˜d�'ïoû°Ä&¯Ø†3#ÔR`_¼;ͬËxapplicationResultProjection¢bidx'jedit.text.replace_range@1.replaceRangefdigest‚fsha256X øº 5~^ÕN†÷Rê‚äT­ GÁýèÇÜ*ë¦ \ No newline at end of file diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/baseline/stderr.jsonl b/edict/replace-range-probes/range-assembly/evidence/candidate/baseline/stderr.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/baseline/stdout.jsonl b/edict/replace-range-probes/range-assembly/evidence/candidate/baseline/stdout.jsonl new file mode 100644 index 00000000..a668538e --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/baseline/stdout.jsonl @@ -0,0 +1 @@ +{"checked":1,"command":"build","errors":0,"exitCode":0,"schema":"edict.cli.event/v1","status":"ok","type":"status"} diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/compiler-source-sha256.json b/edict/replace-range-probes/range-assembly/evidence/candidate/compiler-source-sha256.json new file mode 100644 index 00000000..9bc9f80a --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/compiler-source-sha256.json @@ -0,0 +1,454 @@ +{ + "revision": "01dc5abb9a8a74f8fd8b0e0a6d1041d0adb86d6e", + "files": { + ".cargo/config.toml": "c185a2b859850d94af015a9672c1568e1ef73b12612d820f596ef967b835f637", + ".github/workflows/auto-release-tag.yml": "8f9769cc8ebd110cd9887562368b17b7cf640ea70487ab9e329b5efa4ad34aea", + ".github/workflows/ci.yml": "21fb0536c7ceb84136baa7f60e636df7f59739943c1a67692a789ee4598d19e1", + ".github/workflows/release.yml": "eece9419c92837bc90bb645ed00c19b4c4d7e05e9737b9dddb4bf4e750903eb7", + ".gitignore": "4a2b3d736804960e55dba16b8e00bc85084195608e4b9b3877859e745f4ddca1", + ".markdownlint.json": "d56624af462cadbbd8f8b2cfebec943cd2a34fe82c3f7eb517f3d63bb3d21a7e", + "AGENTS.md": "c43bd85432ee58d57041a389533c9531d26267af3e260346cf53a75932bd5c50", + "ARCHITECTURE.md": "7b476013a54a2b0ca2faf9b8c41a28d8042bd66999b385dea90e7fc1f6bab116", + "CHANGELOG.md": "35c1e5fb285701a09f0cf6794b4becf9b446a274287c7d7051ffa12023f3bfba", + "CODE_OF_CONDUCT.md": "46e5940b4f1f0f259b1c0ca3c5aa73e2804ea916370f70dff742f4978020e810", + "CONTRIBUTING.md": "cbf1a4cbab1891a55f86baf7aba1726aa496fe0d54e6ec91c3c5c66981242527", + "Cargo.lock": "668623d1ad8e50c2e2dd28fabacefccf852d8f234b1029bdf72943b0a7e47eaf", + "Cargo.toml": "59e341299663a5c63c48cf2752c25e4cfce724c1ead492258569d8261f4ab731", + "EDICT.md": "8117c4c7dc611490e3913afadd9e7dab9353fb6eb0ab1c35eac345bcaf7546c6", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "NOTICE": "7acbac1eec94174678c6517ec3d0c087774176afe7ecc10dad13f006437d33da", + "README.md": "e94fb534ff7ce849c2e10ac7ea527b89dda9b2ead35e1ce7b582b1d077a52e27", + "ROADMAP.md": "12657f335e177d42c7f424657ff02488e4856568028ed7dc3b0adc99745da7bc", + "SECURITY.md": "b9f33ffbdc334812c53a7ab91c5ee20174fab455de5cf8b06adc151c57d46386", + "crates/edict-cli/Cargo.toml": "97bd5d56fb3d5a8b9ae92e10a33e1ee2a91ed4f7b07567e997cc4c074e0a6057", + "crates/edict-cli/src/application_build.rs": "0f3684e93fe79949e5bf7cee1f94e1f5044841b689ba7a8c1f963847a78179d7", + "crates/edict-cli/src/lawpack_build.rs": "ec63d3fef595ae4f9267e01fc1fa729e8b0f283e8c8f850dd26ee837bbeb7348", + "crates/edict-cli/src/lawpack_build_windows.rs": "f8df381586aeeb0ae9809cccff1fe00249b13117b681583fe16124017aada96c", + "crates/edict-cli/src/lib.rs": "5861d6e444dbb0c0583c5ce265ff0262915600978162bc9c15e5ca35ae42cbc0", + "crates/edict-cli/src/main.rs": "3605ed96c2c23b0a49108a466dc3622af1164c45702ddcc6de1714bda033c1a7", + "crates/edict-cli/tests/golden_cli.rs": "601ce4fbe45719fb465c3ba53f15745a3d6f6a4fb70c901b4edaf76b1ace6b1e", + "crates/edict-cli/tests/jsonl_cli.rs": "9b6b84b2c5c95c90148d3b370b84b95901a76332d64e75288e3f4a7c8e77336f", + "crates/edict-cli/tests/lawpack_authoring_cli.rs": "00a7a4c68262fcafdde1e4284c3f0f46bb5f5e508eefff42a2ae4b0cc49dc690", + "crates/edict-provider-host-wasmtime/Cargo.toml": "1c32708d174e52a50f26705907042a0912d393781d9f4fb3a04f31c4656eef90", + "crates/edict-provider-host-wasmtime/src/conversion.rs": "3cdf3773fd80ec49e34ff162212df79c0f0b41e4a9747e8cb3ab9e3fbde2c2d1", + "crates/edict-provider-host-wasmtime/src/invocation.rs": "517cd7631a172a948cdb86a69a91f43c43b4b2752939272e2ede05ddab36ff54", + "crates/edict-provider-host-wasmtime/src/lib.rs": "87dab846338d6e53e47ba6d818a6b7c8b321537c62cc4970076b89851b18f3aa", + "crates/edict-provider-host-wasmtime/src/limits.rs": "b8395e16dde588f75375e6ff635650aa25607ae63c024f0d05eae46c561bfb19", + "crates/edict-provider-host-wasmtime/src/replay.rs": "91d55f288cc84021bee48a1b10581c2bedcd56c95c7bf071a627a9a38b68940b", + "crates/edict-provider-host-wasmtime/tests/invocation.rs": "18fb18970d51ec3e105bfc9a3907044962e88681a6d7971b3e56e0480c278845", + "crates/edict-provider-host-wasmtime/tests/preflight.rs": "3de8dffbbcc26c3efa06aa7e8a9d281d874ea1365269552caf46d3d54ce18dee", + "crates/edict-provider-schema/Cargo.toml": "04e9de090fe8a0ef20237b3c0dac6a846fc04653399b49c45934cae64dbc444d", + "crates/edict-provider-schema/src/contract_pack.rs": "4ba5aa93fa6c82a0df6f82708cffbe7f1ea0690f1cb315ad9ea76318e87af8e5", + "crates/edict-provider-schema/src/lib.rs": "77391e3c7e0785c771f4dbb5c1618934fba82940b11dfafa5148dc4fa9b1b742", + "crates/edict-provider-schema/src/recursive_dispatch.rs": "2aff6c1350b3c93d7f5c75377462c860b44c5aaaa390e21e0ad3e58f255adf14", + "crates/edict-provider-schema/src/schema_safety.rs": "715d59a014750e4785c6127b73d301f92a3f2e59e63e296adc94315c92810702", + "crates/edict-provider-schema/tests/authority_facts_abi.rs": "877a5487f2c6e38cb2dc358cf66cbd40975076da2ce628ef0642e99971c7c7a3", + "crates/edict-provider-schema/tests/provider_contract_pack.rs": "2c45670654fd3171f75c935e0bcc2bcabf07d3c4d021145d52b45d735e942094", + "crates/edict-provider-schema/tests/registry.rs": "dc774cfc6f4f09af239831ae116f4cb55b764d8a863f121cde9762eb8e72b37b", + "crates/edict-syntax/Cargo.toml": "12058f9ae36c1b2ab78d683f56eb1e41af8c8185dcbf3c993ef097acd097283d", + "crates/edict-syntax/src/admission.rs": "5cd08a9c05a5c9be22d9720b137d25dec019efdf23c41289010e5f107cb93f45", + "crates/edict-syntax/src/ast.rs": "27770c7eda15838e99f7b790727b7d3a1ad93a22804b3d50054fdbc9eb95d827", + "crates/edict-syntax/src/authority_facts.rs": "3beea380b1f617a452e7a66e508ebdaa1262ede41c60381cfb96c2544f50de13", + "crates/edict-syntax/src/canonical.rs": "f0e1e60b272ff1b623aa6e018f8e3d1def4c90d1f0f66b0aba82d5ab2397ce42", + "crates/edict-syntax/src/compiler.rs": "0f1a1f9e14b7eb910838e08dfc6e67f71184b708d082a0bfaef9334f6e5a5f67", + "crates/edict-syntax/src/compiler/byte_concat.rs": "2f608fcd0c7f797f587cc0efb356be06437cfb372feb1d8b4516840d2e261ef4", + "crates/edict-syntax/src/compiler/byte_length.rs": "088b3a62ee8debd9512758ab2d670abcb5b0f04f9dacfe130b70a65567af1421", + "crates/edict-syntax/src/compiler/byte_slice.rs": "375297492ff393f6d132034c24c34aaa86e81d615f7b0a7c0d54ed9196fe7749", + "crates/edict-syntax/src/compiler/unsigned_subtraction.rs": "89f0b8275549e639a133b7466125811d7205ab320ab0ba6f1e30d11f5015c925", + "crates/edict-syntax/src/contract_bundle.rs": "4796496d79f7a3d9fb17afed1d79e54873007b84fe690706af66e127dd1c33f7", + "crates/edict-syntax/src/core_ir.rs": "0426224018a6990b60217739250f6f60232badd76df420e83d35bc7ee99cf533", + "crates/edict-syntax/src/highlight.rs": "98d63bbc547c44f01e7f6e665071c707352e94e6a1da9427db6ca9bd34c64c1a", + "crates/edict-syntax/src/lawpack.rs": "f85fb5b23be638f87cbc13ab9dcd63cecbfd3c6c8546f0c681eabb0a747a6d14", + "crates/edict-syntax/src/lawpack_adapter.rs": "3e535a54e09d14f204347e8e6c5d76fbde421fdd83d0f81ab96aa34254778261", + "crates/edict-syntax/src/lawpack_authoring.rs": "d841eb54a05de902dec2d5c051bc6bb1fc63fb860bd90c329d6d651c6defa864", + "crates/edict-syntax/src/lib.rs": "a61378d8f1747d2cad3b08999fed72f39643acbea262cafee993ff0a8cf95cca", + "crates/edict-syntax/src/lowerability.rs": "bbe4a2c194fdbf3ecaac891a0283bc565c29a50da7b88add56a84bf7f8d38612", + "crates/edict-syntax/src/parser.rs": "7000c9597582f9d4e40acd35c22c9a3ae11c60f98e06ca87166faa5674044c4d", + "crates/edict-syntax/src/provider.rs": "1664029ea4a946ef4583a89679936e6b617af4cb7f85ddf172d6d021e15f53dc", + "crates/edict-syntax/src/provider_invocation.rs": "41705963f052c64fbca5223d932c50f81bf475758a45ec60ce43388039b72420", + "crates/edict-syntax/src/provider_lowering.rs": "2d9db78159a0fed1edd39293eb245a9af723991654d5ee8b2b9b4bedb4ce3829", + "crates/edict-syntax/src/result_projection.rs": "3ebc8d04690127e713a3068adda28eadaa273e00efdb3b25c3d493aa9c31e3e9", + "crates/edict-syntax/src/semantic.rs": "c62ab97f2f23cdc90373b3e7b96d897776fbecf4f2a05a5e0cbcabf6a4521402", + "crates/edict-syntax/src/target_ir.rs": "f3efc95f75ab5a4cb85020a8ada65e7de224829c66ad44f18570ca4d015100ff", + "crates/edict-syntax/src/target_ir/byte_concat.rs": "212f25d55f29609a4f27990c3c8b635a88234908aee96a895079c31826a9e480", + "crates/edict-syntax/src/target_ir/byte_length.rs": "eccde25dc6bc2afa0bbe94ae295fe808853cb0020afd9c5b26601f2fb81f0339", + "crates/edict-syntax/src/target_ir/byte_slice.rs": "aa670da555ab42224fc1a5771589a9a4e08c62eea2707a7a8bcc932432d59da6", + "crates/edict-syntax/src/target_ir/execution_order.rs": "36351597b015491712c1cc2a3372a9d9a67c76c94d7f162aa04fadcbfde48495", + "crates/edict-syntax/src/target_ir/totality.rs": "b838eb8eb45bb8fe4f44a939e68b628ece8eb7be8de24c054c9ae162236abe07", + "crates/edict-syntax/src/target_ir/unsigned_subtraction.rs": "61263d52c0aa531f43a7962c673a7178d9325ea92ef37a159ad0979cf2b287e0", + "crates/edict-syntax/src/target_profile.rs": "904baf82f4f1a59287eef88e5f6cc5f14f6f5426be01625840c5bc5557d28775", + "crates/edict-syntax/src/target_profile_contract_resources.rs": "4307121aafc4081a744ae9a51457cddc2ac7a020bd528513a41c8a815825867d", + "crates/edict-syntax/src/token.rs": "fd89e2f658c1e4b1c4f3135ad377898755296343e899b12260a0880519e00f66", + "crates/edict-syntax/tests/admission.rs": "1bcea2e01578ccbcda98751a995dfa52d013ee10caa612f41e450ba713376f3b", + "crates/edict-syntax/tests/authority_facts.rs": "d3ccb5d407694ef040c8f6e8de4cac37d0c6c2a26ae29261b10cd754c01a9be3", + "crates/edict-syntax/tests/authority_facts_cbor.rs": "07fafcb7e611b260b4040098dfeaf6d1f1ca172ec2726f4eb084fd4c503070fb", + "crates/edict-syntax/tests/byte_concat.rs": "830ee7cd2bee0e2235a9b2dcd6af968a8e88fb9b3f7af34d5b26163a294e90fc", + "crates/edict-syntax/tests/byte_length.rs": "4ee3ff7844377d59f3461b20bbf8fb1e44824faba8a3768c901eba9ffe4f1694", + "crates/edict-syntax/tests/byte_slice.rs": "d479160e1fc462223fddc60ee2faf504487231480ff68a136cb5597535170e4d", + "crates/edict-syntax/tests/canonical_encoding.rs": "2e81d33a525c01708f0329e0117128fd9d969b785dbd6539919ef9179a251d9b", + "crates/edict-syntax/tests/common/mod.rs": "e4ab06daed846140ea87e5b5bc53094bec8e9121d63e209fa2f9cc7f8c8c56e4", + "crates/edict-syntax/tests/compiler_spine.rs": "bb27dcfce0c09a713b4841dd25276b2e5eb6cfefbf6612678c32b40e4c1169f2", + "crates/edict-syntax/tests/contract_bundle.rs": "652e4270f9ff90cb207a5e52d2863ea3077e1cb8e6ab753603a2784614da2985", + "crates/edict-syntax/tests/core_golden_fixtures.rs": "65bd63e543bbb9a6c9f9ea494d16690231355410e5dc9fce331ea5fa8667252c", + "crates/edict-syntax/tests/core_graph_depth.rs": "1ac9a0bbb6df7ef4a084a4b352384f397724bc2c105057de85c6c568d5158d92", + "crates/edict-syntax/tests/external_action_requests.rs": "351b65ef2e335120513e2f525c33c4b5ffc4920b5df71615a299c40c6dda981d", + "crates/edict-syntax/tests/highlighting.rs": "4a66ba0da9b05e10665230ad3f1151f07b5990a51a1b33a07ba2c408c49a67c0", + "crates/edict-syntax/tests/lawpack.rs": "06eb48d7e28a04eff94d2726f725209e980d04240bc6fa181f13cbefb838535e", + "crates/edict-syntax/tests/lawpack_authoring.rs": "0eabfad59ac99d18b50a5efa7f2c9bc763dbd1cb593719b568b2747947b8f18a", + "crates/edict-syntax/tests/lowerability.rs": "25654daf28c4543551fbc698c177a8b36a2b23ebe3792d51f59fca64a3a6dd5c", + "crates/edict-syntax/tests/operation_prerequisites.rs": "5d1762ded6d5132b72aba8973e45b1d1c13918fcc7a3bb9841432d4d5b5461dc", + "crates/edict-syntax/tests/parse_control_flow.rs": "5568c5d9616830cec8905811672738dd373e981b96e6f2fa7059ab9b2b125da9", + "crates/edict-syntax/tests/parse_greeting.rs": "12892d5a25393afcd7a3d13addb840c2ef478e96ea0896690c4bfdcdb08cf7cc", + "crates/edict-syntax/tests/parse_hello.rs": "3ff047d05d54f03538e4448427756c577adf19bb1d6b016ea885c2453f3ee9b4", + "crates/edict-syntax/tests/parse_keywords.rs": "e9bcd4f76a6254fa5bd2c38dad65818540fad013e8e1de4056ab8ef9136fc859", + "crates/edict-syntax/tests/parse_loops.rs": "909e08d646a6cf85f6cd9bc0a46ff6bf87c7d3fd0e67b5198313b8e46093ea9f", + "crates/edict-syntax/tests/parse_negative.rs": "3f6d3417192c7bac2da4117827e37024ee78af4766f906c93a49fb68be018901", + "crates/edict-syntax/tests/parse_review_regressions.rs": "5c2e5b24f64f72e8c5f0faad2e0bf87810b7e7c4d07a5f065d528bb2fff98974", + "crates/edict-syntax/tests/parse_variants.rs": "91a011215e0a058cc99546930f9f0dbb0eab5763f6efebc1bc3c3a3ba0071500", + "crates/edict-syntax/tests/provider.rs": "cf23cf7eaa0e7e5225220333091db869e4041f9362724e1bf436067cb0005d75", + "crates/edict-syntax/tests/provider_invocation.rs": "2bcd5c801ddc2c9104db7dd5f59375b7c34a28a70f0f3a24331c78b3123cc5b4", + "crates/edict-syntax/tests/provider_lowering.rs": "5db0737afd40d8d405dc49dc68d9190a91feaba02cff827c8e7c7587626d49fd", + "crates/edict-syntax/tests/result_projection.rs": "fb1a22dba15c177d8b65aae4ad46173c0345e84b9f87ba92d3c725bf6f901601", + "crates/edict-syntax/tests/semantic_validation.rs": "8176193d9abc9bab7cf36bf026059a64cfc95cb7d7126b0862ddd1336ee2f1ab", + "crates/edict-syntax/tests/target_ir.rs": "293d463a72a0770383fe43fa332cfa67d537ca3dc87ab1d9020f41960ccdb820", + "crates/edict-syntax/tests/target_ir/ordered.rs": "db4e7eb38ad4d2e04a5a63b94d6c21e8c2fd901a88f4c40a1130a1c1eb94f61b", + "crates/edict-syntax/tests/target_profile.rs": "78c360c9f16b97698338a9759cdfc60d61b700d6a486be7547b428d1cfdd525a", + "crates/edict-syntax/tests/target_profile_contract_resources.rs": "07947308744e307877bc1cc91bfd69c24f4d6752e1c8091fd31e68fc6b121211", + "crates/edict-syntax/tests/target_unsigned_subtraction.rs": "3905adb9dadfe23e93343bded17445b16a783771929d776c5e0fb4a166461c72", + "crates/edict-syntax/tests/unsigned_subtraction.rs": "4a33ebb4cfc854a16cff8f9eeb1465d871857d9dc9ce60604acc192a5f254627", + "crates/edict/Cargo.toml": "7ef565369c0108d463d9804fc494298cc80a5833aa26273bbf9abad328e342ef", + "crates/edict/README.md": "a4c923bf99c34bf42775286c73de35a8bf023e9105ff3f6827c67a0cde2193c5", + "crates/edict/src/lib.rs": "29962d09fd96bee5b9b7059a46732a7d8e965716185c1efc383ab68720b5b973", + "crates/edict/tests/artifact_models.rs": "4c635858a21e4e939f0c41c17da8ef874379191c13141ccb862b15ba6e9d3814", + "crates/edict/tests/public_surface.rs": "b6b2f9aa3c48be671ebb452ec5ee14d59c29b55184ee274f85b50f7477d77e6d", + "deny.toml": "b140f4619f9705b58bbdd9f82a82e3ca2c3c410545b2087940751e6a407ef6dd", + "docs/DESIGN_runtime-neutral-edict-sha-lock-assurance.md": "ec8cd6cb513a259458d932d0ed684a1773759ed4dbe2d5f3e561addc9b92b2ae", + "docs/GUIDE_edict-assurance-transparency.md": "30e26b75cfc7f4873ba0679a60c6611ce80cf5b206787488115630a3c49505f0", + "docs/README.md": "1d45afb7244c51e06130ca222b150d8777c4d93e79b05562dec111f1a359d79a", + "docs/REQUIREMENTS.md": "be8ca1f6c7f45f0d495d97e7a1e889a7f05fbd97a09515923eb34be80b1079b3", + "docs/RETRO_phase1-parser.md": "f88d661fc50ac6c62595d4db73214ba92adf180e59d6dbc3ce8a7c353a62946d", + "docs/SPEC_continuum-admission-v1.md": "32eaa3ae802b47c041cd5b289a9ce59cb5456a971b803794a2d0913a3a08295d", + "docs/SPEC_continuum-contract-bundle-v1.md": "01a899ce5b2b901b5b5dd8e7794ea4540926bef6eeade03775111f3fd0773ede", + "docs/SPEC_edict-language-v1.md": "a3e1f99eaf97e59628d59719db3921c4814814144b66211c6ea9bcf5e95489d2", + "docs/SPEC_edict-lawpack-abi-v1.md": "a2a1816167df73365f309228012abf33374861afb857ce71538a4ff760b83831", + "docs/SPEC_edict-target-profile-abi-v1.md": "b659e8139469ebb94ccb93cfac1300591e6ad5e02142bd0bbe6fc3f6d8af5d01", + "docs/TECHNICAL_EXPLANATION.md": "25b837b0639c340d871f86e4e6830c2572f6dffb7a405e12620cf6db014ac1f0", + "docs/abi/edict-authority-facts.cddl": "1b01189e5e95c583f5c07820b1572bb00ad75d87b9246079ff039e4897a49595", + "docs/abi/edict-common.cddl": "cce1c85f1a64e0b87098781cf606c5f251d09e1a851c50386fee6ef09b7844a1", + "docs/abi/edict-core.cddl": "07cf44011a58ecb29e849e81a3f2e33712299d06f5060bfab4737be48d22ac13", + "docs/abi/edict-lawpack-adapter.cddl": "3db613aa72379b50ad5ccd931e791fc2b6334e3c3ae4d4385ded0eda607948ca", + "docs/abi/edict-lawpack.cddl": "2e42f18af14089b5d3faaf2eef76b1412f828ca77dfd5df5c22fcf7abd222fb8", + "docs/abi/edict-result-projection.cddl": "5194be961826186ad678d8962e1453334b162d44c1eee443fed3079395554df4", + "docs/abi/edict-target-ir.cddl": "123e7f805dc5e831e88befec4cd49ec02c39858b6f3990da8a73b50c6086ae39", + "docs/abi/edict-target-profile.cddl": "a465b1214232de00029b8d6fa11747dc187f43c4901511e358adc45f04d54d7b", + "docs/abi/edict-target-provider.wit": "2971fe44def7e51d5271dfc0f04f3088aa58754cffdc847681a587605aac749e", + "docs/audit/2026-06-28_code-quality.md": "de796db9655ba262a27d940ff5aae9bdfce1e5932e913cfcd88b1c2fc012b9e4", + "docs/audit/2026-06-28_documentation-quality.md": "583d5f7ed077ae1dc7d76c675a35956a687e81d94490d942991532b8e84410a5", + "docs/audit/2026-06-28_ship-readiness.md": "a236c18ef7f1051ff68dcce11d4f5a2e4d31cc2be2d4ffc95afb03494d5d3204", + "docs/design/authority-fact-governance.md": "27fa454182a1366b2a85d467b323201ccf6e7ad0b0fd72c60af768ec4c0ce192", + "docs/design/canonical-target-ir-v0.11.md": "19bd1166f6d236946b0b98800c7a4000f862a395bab8273906360bc03c23f4d3", + "docs/design/contract-bundle-assembly-v0.11.md": "62752f8a85b2eec0ee27e65fd3fae7b895d5eca70856386dde69fbcc608ae736", + "docs/design/crate-scope-v0.11.md": "fbe735625d79951f7dfa1d500595d5257e48b4f89d67b8030a29cd791d6b59bf", + "docs/design/obstruction-strands-v0.md": "33bee298c20b64b09fdf6a09f9de369abb17a5a840993c2e1c624c5c7ea73b2b", + "docs/design/provider-artifact-pipeline-alpha.md": "d03b04b3b54be6f030336eed0745d7bdf7a3fdb27e46ae2715a1a2ce1c929e44", + "docs/design/schema-as-sot-codegen.md": "92072da960c24424784fdcc3c8a437d5ac7bdd9391d249af22c89db05a6bdf0c", + "docs/design/v2-obligation-closure.md": "8e0927734597a64f30451831f3a3aeda661242b3622de3d81b8a9cec723b5bfd", + "docs/releases/v0.1.0-alpha.1.md": "45edbd919f16d6a8e83364f6932b230e5021a4fe22efa4637a07411ed6c0fdb5", + "docs/releases/v0.10.0-alpha.1.md": "a5e587e70ed7b5c061153c98cd3712811518d9f5a4d6a9cd7fb3a4a83afffb42", + "docs/releases/v0.11.0-alpha.1.md": "52d21f35a92db8bc3cea9f065a93ef27db19a38ee2d54ae707a9e96b843e5f55", + "docs/releases/v0.2.0-alpha.1.md": "7bf1f65a05f647155ec5e649f40128da16dbf9073dc1e50416127470366644ae", + "docs/releases/v0.3.0-alpha.1.md": "9b4feca3ec64332a613b21bb9d712c09b1d2a516bec2e5a44add9532a76672ec", + "docs/releases/v0.4.0-alpha.1.md": "55bacd3162c6ff5ff82bf8a2823ab10d118d7371ed5299d7351ffe916d55394a", + "docs/releases/v0.5.0-alpha.1.md": "fd8585076e7b8bdb9c3ab863785a4c8a7febe9547e06def7c29f97fd239aa5a8", + "docs/releases/v0.6.0-alpha.1.md": "b8827f5c16c65b09bf13c9d2fb9354e969d52f668d3cd7681f488e2f135dd2a5", + "docs/releases/v0.7.0-alpha.1.md": "25848f2d35e31dd685553fd2b5e6cdd651be8864e49c902c73e1833b5287506e", + "docs/releases/v0.8.0-alpha.1.md": "c3c98f5461b74d72f83fdf2d65bf5fbdb54dad18825bbbb3cdf364769d395aa2", + "docs/releases/v0.9.0-alpha.1.md": "f41dadaa36ed8e48ca9a4ae5ae68e6898ca2a3eee2e677a5995448295eda5063", + "docs/schemas/edict.cli-check-result.v1.schema.json": "36547692662d017c57f2812598c19e64da3f19410ccb9e6c14386ae8714d0972", + "docs/schemas/edict.cli-diagnostic.v1.schema.json": "918d72cdf5356930959ccd590034653fc735b1b9aad9a4891d91c739420d4cb7", + "docs/schemas/edict.cli-event.v1.schema.json": "7294ae819dfd5e657f0ec677f5c945520c9e4e7c929b81a73c9cf79b49ff3767", + "docs/schemas/edict.cli-info.v1.schema.json": "8ccd6fa256b9cf5c7448480e884b202d2ed7eee2a427ad7f7f64cda3f79d847d", + "docs/schemas/edict.compiler-input.v1.schema.json": "478995c3d92ec08ad3a5d3ec8441592bfd87d5918ce6e5c023d7a658f19499f4", + "docs/schemas/edict.compiler-settings.v1.schema.json": "8dc2c56e77feedbbb407b653c838939ac7b31eb758b4964bb85a5a6c4febfd4f", + "docs/schemas/edict.projection-core.v1.schema.json": "3bb8ba3316e3ecd16513715fe0d0832b140aad98a20a7b4a44a698981f9c942d", + "docs/schemas/edict.projection-diagnostics.v1.schema.json": "5ef5f91600829158b74768f48e1dfe85b433313197c7db21f36e4e514052a4db", + "docs/schemas/edict.projection-syntax.v1.schema.json": "b235d88786554f2cec390193ae961b4579cc08a7379e0330070dcd46667ad655", + "docs/schemas/edict.projection-target-ir.v1.schema.json": "adcdff6d97e228dccb59219a8ad65da376208984201e9a23e257601f9ee51545", + "docs/topics/README.md": "f8b9d8b6cff5df545180d31d307295507db3d6fe61c6591af1bd9007995ed384", + "docs/topics/admission/README.md": "4d4dd43243a8ebe9b93bdaa9da3cbc22ef0e740039ac9319cd49777866c86a43", + "docs/topics/admission/test-plan.md": "ca413dbccca92fb5526502127034d51d815d141234172b82428bf167aaf9b056", + "docs/topics/assurance/README.md": "a9f4d173dad1bd5bf6d904166da7dcbbe57a02792d4f11b3bb5eff8c55a768f4", + "docs/topics/assurance/test-plan.md": "a80bb51c7c3492037c71a74ac865c96da03b95f39cc382da15261ae210a3f584", + "docs/topics/authority-facts/README.md": "499dd2e23d6f934cc8c443bafe9c580fb2196c87f7e5030fe8742528fd769e20", + "docs/topics/authority-facts/test-plan.md": "1acb5c38dfe610ab3660313b1fd19eae32f45fbd9896190f1474a212bcf7ca9f", + "docs/topics/cli/README.md": "72a05856737cb6f22285966fdde3e59d1770d43d45e155d41a41202f6b525525", + "docs/topics/cli/test-plan.md": "fc012a6cc4421053d606bed6ea6a083f9ffdd6bfc479483d1f315de25c1d2867", + "docs/topics/compiler-spine/README.md": "c0a1d9f9323d77365af089bcc3bbcc46d6aa9f020e087ea7d545af52f9104df1", + "docs/topics/compiler-spine/test-plan.md": "99c33b257107884c1b77b964682eb16cb4f44ced10dc3c77fc2b173d3c530ada", + "docs/topics/contract-bundles/README.md": "1f083c59ec1bf06350b0e3553cc359f48cbfe96a5fe112376ad853c2057a673e", + "docs/topics/contract-bundles/test-plan.md": "90c6bdd9dfd353ac6b884c8a77892aca88bc3da054f9fb7261b9e066a7effcc9", + "docs/topics/core-ir/README.md": "fafc02e14a18b4c93f2a2f598256227a11e2847161be6cd9c474cf39461ef632", + "docs/topics/core-ir/canonical-encoding.md": "0e798dda2d8ca6e30c5b8a03c0d891cd0828b32fab77ec7fd765bf4c4ed41368", + "docs/topics/core-ir/test-plan.md": "d61b97ebfbfeb04e83ac9533b78c819580d3fa1c15300ac00b13c64f4382e2c9", + "docs/topics/developer-tooling/README.md": "982186d3f43a9e2fcd107b997212a2783c2894f20c8c3e72ee602a575bc2b627", + "docs/topics/developer-tooling/test-plan.md": "ec2f8f8d708d9c4da72e718ae5ab21f982de1bfaf5ed0ec3a11f91ab24625094", + "docs/topics/documentation/README.md": "37e6fb6bf67035459646e8ae03a9aad74a8e2ee97f746aae2e852dd05da1a1e5", + "docs/topics/documentation/test-plan.md": "e6a75f6160f27f7aea8f224ab830bbf05298f9241ff90f6c3311d989e82fc45e", + "docs/topics/external-action-requests/README.md": "0dade9953c656da44dd0cdfc747181c087aca4190a886a35a35c4dc8b07c8d7d", + "docs/topics/external-action-requests/test-plan.md": "7a53705e10776768bc9aa8b9c2fc625cfad4a7f6f74f41e18dab7e512f1399ff", + "docs/topics/fixtures/README.md": "79079486ffeca402ccf9e67b2a9c5d848efb4d9109887cdd2bb711678a3730e3", + "docs/topics/fixtures/test-plan.md": "261248e06c2da1840039b990258dfd1bcf7db5748e38fa169f4067916c52f348", + "docs/topics/lawpack-authoring/README.md": "ff55f321cd12899d63c0968841dcfbdfffaafb4c03d457ccd51a3dffabc73881", + "docs/topics/lawpack-authoring/test-plan.md": "56693e41a6fd25c6aa92065225f610bab767ba109689425cd385b57484422112", + "docs/topics/lawpacks/README.md": "22b8560e228f4608cd77f8de057a21fb618a6b10c7e7636691d4682d06e7b409", + "docs/topics/lawpacks/test-plan.md": "574f246ce5c7c815e8f9f5fa56270ed1361df32ccc7570d3f9c3eafffcc1b321", + "docs/topics/lowerability/README.md": "0272cd674d01c80f26d77fb01d2f9a1471cca71dc496afa1d539bb419b280573", + "docs/topics/lowerability/test-plan.md": "9cfca95e5d4212e84d93a6d2875a96d9bfd8d34edbfb41f2be83791b470dc6ae", + "docs/topics/obstruction-strands/README.md": "bdbc56030383f514ce09aa1c3a38fc62ae2ba23985c26af1c0b4f2f0c21a69a9", + "docs/topics/obstruction-strands/test-plan.md": "9f6d5086d1808bdea1bf50bb7547b7f9949ecf5240a2137080f306372dbc918a", + "docs/topics/providers/README.md": "7d93a17892e4995c7e2fb5813f0d3113f03778f6bd62ea09fbe4373d52ce95ab", + "docs/topics/providers/architecture.md": "87a1f565ed08a3b83996e990ca403b3720ce850bba65d126790809b62572fb16", + "docs/topics/providers/test-plan.md": "839d25b278debf152468729c0eccec3d1b2829883781f624425814bcaeddc978", + "docs/topics/public-rust-api/README.md": "5452ae2c536ddace20e83f1f5aaa33921634efa468745d43331608b12d15acda", + "docs/topics/public-rust-api/test-plan.md": "4529a6bc909a2d98b76c415b7e03aa5f1eea0da04f65f309cac10d6403c504a4", + "docs/topics/release-process/README.md": "04276147621f5ef8daa09e3d2921d8f7b8ede4b1190bdfbe9642989c0e224383", + "docs/topics/release-process/policy.toml": "203a7da2e6b327ca5664c4abbc813cf42ef9cf608cb105344944bc3241e81cff", + "docs/topics/release-process/runbook.md": "900f89932c5664d64f27f2ad5ecf5bda4e59e216770c8bab8ddc456a0ae4cd39", + "docs/topics/release-process/test-plan.md": "d4401f8b6819c9128dd09f7761f2fff5fca52b3fe82daa3ed922bb98f0c2f44f", + "docs/topics/result-projections/README.md": "0c845ca6e2c94c3af767edce3e4734a57a90542cd22759425fe4a950d0c13316", + "docs/topics/result-projections/test-plan.md": "9c7b9003189f6be6c67232281d7559152f49bc29b144b6bf0a4f20c5f351bb0a", + "docs/topics/review-process/README.md": "ad39e621572f4a472627cce3054909de645b6d5f882d88596f58cda073f13b88", + "docs/topics/review-process/policy.toml": "4ef2212a5c0843061ac64c0e568728ccc9ed1fc5091179177865ac21a8f55be3", + "docs/topics/review-process/test-plan.md": "387fb196d75b41096efd8e01d078f8ae946e46e23504d2798263074bced0aac5", + "docs/topics/rust-standards/README.md": "458ac52d1f35c2a2dc6a7b8904538d3f7db01b5c0e6986232440b797c1a167ed", + "docs/topics/rust-standards/test-plan.md": "9ca0677387942cd93c4fd2ff2196ee58303988e04d343990d623662f1d05d2f6", + "docs/topics/semantic-validation/README.md": "d39c0a87fb27d4c628345cf7dc84936ad49b5c87d7c3b318d234c1bcc0423054", + "docs/topics/semantic-validation/test-plan.md": "5b419c5c96760709cb889aa7f00aeea54b1eb14bed6d7f1ebf8250688326de47", + "docs/topics/syntax/README.md": "60ab4d64ddecf3757155b837c048eb2906023c8b324b41c7e43258b154b3388e", + "docs/topics/syntax/test-plan.md": "11ce0ebab9bb67eb67571404812e1a2ce141d8c2a3aaf6a760f40dfc47d91f33", + "docs/topics/target-ir/README.md": "0115bca1607aad12517b0c9339d87ede338d67cafd6e5c1b7c01380c98ae807f", + "docs/topics/target-ir/test-plan.md": "1904169bb88b7738eb3414b1db71b8d6a5e09ebbc668162e58e8e1f2aea852d8", + "docs/topics/target-profiles/README.md": "b42a301c561d9ea6fd7455263762752c89393d6c48d518180969a1b5211d3978", + "docs/topics/target-profiles/test-plan.md": "523f92ed32ae20f1a319e6eb5b21d2d18dffcd23aa4dbd83288ecc59a96ec86f", + "docs/topics/tests/README.md": "756221e24179a044b9d46c98e7340c01f2608a64388fffa0666d81a868a3236d", + "docs/topics/tests/test-plan.md": "58b750304af182e5033e2a4e0decee1fd2ce08aa99626272d131f13548280993", + "docs/topics/v2-design/README.md": "bbeb46d1ca9745e0809340f42166220d0911a6728230bdf24bab2dcc06705956", + "docs/topics/v2-design/test-plan.md": "6484de0febe1c061e0da0cdfbf07c59d849f9aa1a5419e62e248e2a15ec887c7", + "editors/README.md": "6fe19fe526c03268e29e45034fa6194883211dcc492b917d666f0c8af875e0e4", + "editors/vscode/.vscodeignore": "350c3f2808c5afc7de666c9a1b52c8fcf6f17c56d473c2e9f2f350174badd40a", + "editors/vscode/README.md": "05910adb7ad6ebfe78777324b7429cc275f0c954ce39ea87d74ddc17753a06b8", + "editors/vscode/language-configuration.json": "c48833f0c475f5f47b24ea3f50224ab93e91c5cf4be948a3ed1d45e6c3ff695b", + "editors/vscode/package.json": "d78a1cbdba4fa4ba3924ff9091918885d945b0e0320287ad6853502165d2fdb5", + "editors/vscode/syntaxes/edict.tmLanguage.json": "3384038419ccd7300453255e07a4c2fd8b6bc357fb83ee9eabe7a9ea3c1a8c21", + "fixtures/README.md": "f5b662bbe9cb2e771948945ce375aa451aa64c27a24bf21ff7714c92ffd97fd8", + "fixtures/authority-facts/canonical/README.md": "cae609cf8e98447c47e8e88c72e92b8a8c3a8d7f633ceb8e2e679e9a22142d04", + "fixtures/authority-facts/canonical/example-effectful.authority-facts.cbor": "d5ef9ae4c3ed7ad9ea6d82e0ddd79b2d4f2f1b231f084a009299f2c37a738074", + "fixtures/authority-facts/canonical/example-effectful.authority-facts.json": "16971188ce3f09095b890131b5c57c82eed608fb28495dba1c89b2c96e3397d4", + "fixtures/authority-facts/canonical/example-effectful.authority-facts.sha256": "54164d1d71430a87cfda496a9b5dc0885e7a9d7b4e66630e183d099432b15f74", + "fixtures/bundle/assembly/bounded-hello.bundle-digests.txt": "bd8d2d2a03e2a6b32911c7eee4eb1bdd390efb7011b95b34974d52a400e47cbd", + "fixtures/cli/01-source-ok/expected.stdout.jsonl": "d283f2ee7e143a6b60b803a627e2dee90f339241cd63bef1229c1a8e315fd274", + "fixtures/cli/01-source-ok/request.jsonl": "49a53d641de070134b686e545f2929d067ec7af4396c3a6702216cc1e9d3782a", + "fixtures/cli/02-source-parse-rejection/exit": "4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865", + "fixtures/cli/02-source-parse-rejection/expected.stderr.jsonl": "1c104870ac2bac548fb272e3672227b1ac8d85eb480637b9a09c4a2d31bbc654", + "fixtures/cli/02-source-parse-rejection/request.jsonl": "086cb795184703d2fc0eb07f7f425961bf2348aaa1e4e1af9dee2ed0d1971ab3", + "fixtures/cli/03-source-semantic-rejection/exit": "4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865", + "fixtures/cli/03-source-semantic-rejection/expected.stderr.jsonl": "90125d225064524dc65ceb0f5b90b8713c345aa4af0152c5b476fc389eb2e449", + "fixtures/cli/03-source-semantic-rejection/request.jsonl": "6e24d2bae9ba37e25177830b2b5c6b983adad8276835dcd6c226d11518e9f7d7", + "fixtures/cli/04-cli-missing-settings/exit": "53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3", + "fixtures/cli/04-cli-missing-settings/expected.stderr.jsonl": "29572d578b44c71f8b6f78b0932dc14997be05cc9881e43ff1255a36347cc6f2", + "fixtures/cli/04-cli-missing-settings/request.jsonl": "9e5abbd3690d9a7af8a9b57ef7282596aef168d453be14314a6f89d6d11a82f2", + "fixtures/cli/05-path-input-ok/expected.stdout.jsonl": "68d4ad7ce44ec648cfbb4157a47e64a96a9005f6ae7ce3c718bd27abb8a04ac9", + "fixtures/cli/05-path-input-ok/inputs/hello.edict": "459640d110280d466496c4b74ab33fb2d1b499421d0cf069a6271c80c6a8bfa9", + "fixtures/cli/05-path-input-ok/request.jsonl": "8ec7682d92d628d12ab42b7dd7f271246001ba6e8c253be8818658905e88ae07", + "fixtures/cli/06-directory-expansion-ok/expected.stdout.jsonl": "ad161bbc118eeffd176dd4a4012f4f7eff179e9099a550d72baa690897b6884b", + "fixtures/cli/06-directory-expansion-ok/inputs/a.edict": "459640d110280d466496c4b74ab33fb2d1b499421d0cf069a6271c80c6a8bfa9", + "fixtures/cli/06-directory-expansion-ok/inputs/ignore.txt": "4c434d1d1573ce9a0ee2770f8668f7ea9d3a432625abc3f9c9370f84a2a5b4c2", + "fixtures/cli/06-directory-expansion-ok/inputs/nested/b.edict": "459640d110280d466496c4b74ab33fb2d1b499421d0cf069a6271c80c6a8bfa9", + "fixtures/cli/06-directory-expansion-ok/request.jsonl": "17831d76d91e32f7f18bfaf3a9cb4c069419d96be7d50be5641c8a22101b4522", + "fixtures/cli/07-path-list-ok/expected.stdout.jsonl": "b406e74333b798f86b73a87f3f528ecd7651cabf21f642e7b49120a12d2b5c49", + "fixtures/cli/07-path-list-ok/inputs/first.edict": "459640d110280d466496c4b74ab33fb2d1b499421d0cf069a6271c80c6a8bfa9", + "fixtures/cli/07-path-list-ok/inputs/second.edict": "459640d110280d466496c4b74ab33fb2d1b499421d0cf069a6271c80c6a8bfa9", + "fixtures/cli/07-path-list-ok/request.jsonl": "99a931efb17b128401f9e7c2efcff07d58ef424939d675a5f5fb2fa01b2ffd82", + "fixtures/cli/08-glob-expansion-ok/expected.stdout.jsonl": "1becf0452a9dbecc53d7b89f06ec62903c21cbe034c2dec0c5e2413641d8ebba", + "fixtures/cli/08-glob-expansion-ok/inputs/x.edict": "459640d110280d466496c4b74ab33fb2d1b499421d0cf069a6271c80c6a8bfa9", + "fixtures/cli/08-glob-expansion-ok/inputs/y.edict": "459640d110280d466496c4b74ab33fb2d1b499421d0cf069a6271c80c6a8bfa9", + "fixtures/cli/08-glob-expansion-ok/request.jsonl": "460c88f3012149a427fa33c187fbb4c540cbb5a04ac1bb962df9d842b9e19681", + "fixtures/cli/09-shape-source-ok/expected.stdout.jsonl": "ced445625029b147a51d44dedfa4e1de45bb4d118547dd3b35f8e231aebb897d", + "fixtures/cli/09-shape-source-ok/request.jsonl": "7c61374ae76501e1ec541ae00cb9ffcf0f573e8e891494622639738ab56e669a", + "fixtures/cli/10-input-extra-field/exit": "53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3", + "fixtures/cli/10-input-extra-field/expected.stderr.jsonl": "72b2e4740ce4f08c37716f7134bb4bbd6404e1a87b7767a27f73543c6b89df75", + "fixtures/cli/10-input-extra-field/request.jsonl": "1f0687ce65f17e71f7d0c85da8c9032abf9d137ca188d47a569639387d6b93d7", + "fixtures/cli/11-input-hybrid-kind/exit": "53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3", + "fixtures/cli/11-input-hybrid-kind/expected.stderr.jsonl": "7228a6f4b15cc3e2c814bc9d2a5c71505445da120c6643d8cc462d374c3debb3", + "fixtures/cli/11-input-hybrid-kind/request.jsonl": "2237ebf045c7eba20756f21b64df67257cf81c0f89f9a408ed828b7cf08db3b2", + "fixtures/cli/12-input-too-large/env.json": "959ceca4ff72c2d041c96a0976e7d9359564ad7e08f0015fd5683d2b61914c2a", + "fixtures/cli/12-input-too-large/exit": "53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3", + "fixtures/cli/12-input-too-large/expected.stderr.jsonl": "41a0b8447fa06b80587334650e4ab6eb7049301bf5613926bd17d1d6845e39be", + "fixtures/cli/12-input-too-large/request.jsonl": "beffabf8d4dfd383a2f1f3e6d2a36cd9e10dc9da39d348056bf73b4c6eab8d26", + "fixtures/cli/13-input-root-outside/allowed/.gitkeep": "01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b", + "fixtures/cli/13-input-root-outside/exit": "53c234e5e8472b6ac51c1ae1cab3fe06fad053beb8ebfd8977b010655bfdd3c3", + "fixtures/cli/13-input-root-outside/expected.stderr.jsonl": "c52a20d7c9c59096b93931060f4daa8903d76a07de450745b0380d20099357ae", + "fixtures/cli/13-input-root-outside/outside/outside.edict": "856152b284b005af913b8aa037e68e9abfeb2c068e21ca644c09646c41180e0a", + "fixtures/cli/13-input-root-outside/request.jsonl": "aa6bec1d8ca29503be3937b16d807d0dbdb419ca1699bd069758341260e4f094", + "fixtures/cli/README.md": "43699191655d06e2120651e05824fae33a49193cd8c6a9f86556d33b094c56d9", + "fixtures/core/canonical/README.md": "2be0425a72900ad00c18b03cd7dcd01c7ae2ed021d30752e8ee36b3ed238008e", + "fixtures/core/canonical/bounded-hello.core.cbor": "66c0b4e91baaa68a95d84e389539fbd4c1013aa1cf12157f3eb0f09cb4297331", + "fixtures/core/canonical/bounded-hello.core.sha256": "cb888280d435adb2c3139145c6937179e0e3f89b45b701471a279d277b0e01fc", + "fixtures/core/canonical/statement-branch.core.hex": "32c4ee079fd92bb70d278338d76a12de9e822c8023794e5319f6241e04f81580", + "fixtures/core/canonical/statement-branch.core.sha256": "e3b20f92dcf8c502f85d9906a6b7ed84da348384f5900ce8a4d7772eb89c301e", + "fixtures/core/canonical/workspace-snapshot.core.cbor": "d026d06daa6b9b6180f0273f275b350ff0a9d19d69116b35eb1b5959a943d7ef", + "fixtures/core/canonical/workspace-snapshot.core.sha256": "eeda93c7fc42a3ceb496285243016d1171b14b08827ca31bc2afc0c39e97af10", + "fixtures/core/schema/accepted/core-fn-body-minimal.fields": "7878a67508fc3c430ee1e2467139383bab65baf3b792ac2695223e95f163b774", + "fixtures/core/schema/accepted/core-intent-minimal.fields": "6b8e17aa243289cd55e0974bec0d3a8f37918804e04e85e678d5405519a88ea8", + "fixtures/core/schema/accepted/core-module-minimal.fields": "2abb412e1cd98b085f9ea2122ca616bb425b29551669376b8f6d720c874fac02", + "fixtures/core/schema/rejected/core-fn-body-effect-node-field.fields": "af63e1ac9f50f5eb2cda472163a14d2de9d3741e8af336b8f36e20a67fc047c8", + "fixtures/core/schema/rejected/core-intent-unknown-verified-mode.fields": "a9447cecad7deee7ecd3938fe8a68991072a6c4ae5fc4bb02e1d83ae3f8cc2d4", + "fixtures/core/schema/rejected/core-module-missing-intents.fields": "1a78fead2c7b8dd9674c718ba21a053c673ea9c47228a1167864335c5f2abc91", + "fixtures/core/schema/rejected/local-ref-missing-alpha-name.fields": "8ee072e0337146e0418cf56212c7de898bfc7152fe8ec1b779c10585911fc87e", + "fixtures/lang/bounds/bounded-hello.edict": "c03b747de8c642f6c64e83cca82736b70445c2919b57ac5f4cf5ee42aa63305d", + "fixtures/lang/effects/conditional-blob.edict": "7e03df8e17288d90df94ba39922847e48ee35f34ed9feac802747d599ebbffc8", + "fixtures/lang/effects/read-greeting.edict": "2fa8822ba5d99aebeffedeb85537868c8b55ebe472a7de08e7b849f57262122b", + "fixtures/lang/external-actions/workspace-snapshot.edict": "4d5098f0c836db135981348f45eef9c537752ae495911b2709e1c7775f4c876e", + "fixtures/lang/operations/explicit-basis-u64.edict": "261e30f6e76684acfc9b112d1fe2439770deb2e6dc04659492cbb29a91e7d4b4", + "fixtures/lang/tooling/highlight-smoke.edict": "9d1f0f8314b60aab75e148e2ef3cda9c083d3748018d2ceb1c575cf8628f592e", + "fixtures/lang/types/color-match.edict": "82ce21d9a500f4f10249102f363762998b9841d4b016771b04ad29cc18735987", + "fixtures/lawpack/causal-cell/README.md": "9d2f2fe3a6949a8bcd3b7d5e66e9af428fce7b1837e0ae3835645c2da602ef55", + "fixtures/lawpack/causal-cell/adapter.cbor": "9ff972460a34a566ebc2d9fd34853468ec6c7378a642f9026767f0d16a841ca3", + "fixtures/lawpack/causal-cell/adapter.sha256": "8b50d9ac114a6cb6d8ea20bec9dc7bdd9837661070db92ca5d73adbd4c0983cf", + "fixtures/lawpack/causal-cell/echo-operation-configuration.cbor": "c3101946866fcc4c353f212e649aef1a367fe6b4155859486f71a3e4b2b8d89a", + "fixtures/lawpack/causal-cell/echo-operation-configuration.sha256": "4eb0e0c5e2a600adcdd34f7f7c97d8111318876a474fe00a368e1fb78bb35cbb", + "fixtures/lawpack/causal-cell/exports.cbor": "acd2912e8746bd0389b8782793fdc8549f5b8f9070ad25592bb293bee814f3e3", + "fixtures/lawpack/causal-cell/exports.sha256": "03eab6548701dd258759440e54ad42a898b691a80b768f63f6110a056c39ca42", + "fixtures/lawpack/causal-cell/manifest.cbor": "d38f1012fc3d111e501903dd39820a61149e59bd13b09377ec37670cfeab7761", + "fixtures/lawpack/causal-cell/manifest.sha256": "817105062c5e6691880bcf0e4cc3698ee720b33f811f9671a3f85ae6d144f1f6", + "fixtures/lawpack/hello-echo/README.md": "2f83ca775b06ceff1a1df5fc6b8ca22c7cd37c8f4b1db671ac52acf80a34760c", + "fixtures/lawpack/hello-echo/adapter.cbor": "5ca8fecd2127d6ea5aff28fefdd2711ac9a92460247668bc57ea651c313d393e", + "fixtures/lawpack/hello-echo/adapter.sha256": "4de4924c943bfbf8f14427d1bf7cdf047e9a7b9f3f395067bae655785b6a4eb8", + "fixtures/lawpack/hello-echo/create-greeting.core.cbor": "bbf7e69a9146d5dbffb7f7e234830821bbc38070159ff0821c1dbf191ddebeca", + "fixtures/lawpack/hello-echo/create-greeting.core.sha256": "88cfe6dc6a54cc32a0be81f79a9ad7d8e4f51a1b1117df70b8e08007814de850", + "fixtures/lawpack/hello-echo/create-greeting.edict": "3bc0abfbaa561d4b5c08a0cc7effe8ad1a9101b5792cc4a7a5a8dcaf020acca2", + "fixtures/lawpack/hello-echo/create-greeting.result-projection.cbor": "adcd5863f896276b633d1954924849851e38a482b4fed2a600314c7e9625b35f", + "fixtures/lawpack/hello-echo/create-greeting.result-projection.sha256": "cb06288e8b212ac10e765309271a0088f2b2ab4bf952dea54f41a3e3bf5449dc", + "fixtures/lawpack/hello-echo/create-greeting.target-ir.cbor": "4ee7334328d505c54b7c61a6b1a966bd39805e273208bfe56289ea4ac60cf205", + "fixtures/lawpack/hello-echo/create-greeting.target-ir.sha256": "3f4af5f826a0d887b4c5e72b0d9808b04938223285352ad5b44fa5e90239c2bf", + "fixtures/lawpack/hello-echo/echo-operation-configuration.cbor": "fa8eb9bc27f729d33a87e70a23a0b4ac15eb5302306e2aa2664fe74415ba9d91", + "fixtures/lawpack/hello-echo/echo-operation-configuration.sha256": "18ac8912c9ee4577441518ebcceb15b06b3564590cd61586434d0b9bcae657fa", + "fixtures/lawpack/hello-echo/exports.cbor": "542cfff96f940ae83b6444b6eae1735e491b36f07b259cb2c1f6fd6642cfa1f8", + "fixtures/lawpack/hello-echo/exports.sha256": "918bece8922d623158172d78a24923abb6271f37e943b177de55ea83fc45f755", + "fixtures/lawpack/hello-echo/manifest.cbor": "1ad4ff3dbe1fa7293f542b4b82e3726a18008f53bfb137e58592d2f815cbc857", + "fixtures/lawpack/hello-echo/manifest.sha256": "69aea9344dc5dc4322ee05ba1ddbaad8906f6765c8b0f98c8d0c0ecad6d25477", + "fixtures/lawpack/workspace-patch/README.md": "a467e07814c52766583c608c683ebcb55d1f784e3b27b49da3c3f3d0cd81c331", + "fixtures/lawpack/workspace-patch/adapter.cbor": "2d9ddd3d8b00896b6bdb2f7dd3d6d06c11905b0858a1a56a2b71eb0c511cdd86", + "fixtures/lawpack/workspace-patch/adapter.sha256": "54353255601a3a3cfbb925de17bec3d0b2e16754865b9394d1470e5c43833d5b", + "fixtures/lawpack/workspace-patch/apply-validated-patch.core.cbor": "d7d11106b50d2c63606accbec221067afe86d0bb72098f9ef074d6e01e4e87ad", + "fixtures/lawpack/workspace-patch/apply-validated-patch.core.sha256": "124f6f036c6b5d7029a4cee9a9176d95c798643654c41c60e9653220abeba37d", + "fixtures/lawpack/workspace-patch/apply-validated-patch.edict": "eaaa47ab28f011938eb12dce7cda5ceb8af4bc5fa7128d72114f50652849ba1d", + "fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.cbor": "fc1d262af3da243b50a65ab4b726f049c0b3820f39d997b81eca7d7ffad2dbf5", + "fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.sha256": "5863b4b0538094c005db4294e2e73a3ef2a31f1d9277c92e5b9f35cf374a4295", + "fixtures/lawpack/workspace-patch/exports.cbor": "6c2c162d038bab0ebbf353b81f64f0f9cdfa569a953d99f9a1dc8288f2f97bbb", + "fixtures/lawpack/workspace-patch/exports.sha256": "145c439ceeed642e2497a4a1f77cadc80d7581d019ae9dc55f52653d685e62b6", + "fixtures/lawpack/workspace-patch/input-schema.cbor": "d691aae9de3a6473602c691b62eea441475efbffac9874c518c4702dee20f2c4", + "fixtures/lawpack/workspace-patch/input-schema.sha256": "8ce51f680414aee6726519ee97dde0c456ef982dc16216d9efe7ffc258d4f4e5", + "fixtures/lawpack/workspace-patch/manifest.cbor": "96900d03412a204547779707f404db2518640962856f99fc05efca5d704abd2b", + "fixtures/lawpack/workspace-patch/manifest.sha256": "d4bc64cd59615534c04b759620ff43c43a3462a7531a2ec557de814fa340ea97", + "fixtures/lawpack/workspace-patch/reconciliation-law.cbor": "776377f8d2c7c282af179aee48787913bcac053d293947143064be2fe13965a4", + "fixtures/lawpack/workspace-patch/reconciliation-law.sha256": "7620adc1e00d1d8449bac8d53671d87afa61228294196f84dc3d328419d9fd7e", + "fixtures/lawpack/workspace-patch/request-profile-configuration.cbor": "ef4bc2665b9867392c37e0378532a1410434f8fdb66e5d198b5882a74816481a", + "fixtures/lawpack/workspace-patch/request-profile-configuration.sha256": "9da854a686d5c76998a7516dc121985de895441e727b435cb7b3a237cd40d9fe", + "fixtures/lawpack/workspace-patch/settlement-schema.cbor": "d2aa24697b9fdfca6f8bdff244c99dbcb08ca128308507044057ad3836cfa017", + "fixtures/lawpack/workspace-patch/settlement-schema.sha256": "67f58bf6eb1df74f660304499ec49a97bd13d7fa1f71e6f3437157789e01ebdf", + "fixtures/lawpack/workspace-snapshot/README.md": "37ebb6d1ffa4e45197c986b823e3aaba20255123dc8111a2ffca5d4b7a85b566", + "fixtures/lawpack/workspace-snapshot/adapter.cbor": "0b06dae097530b5c6e5246a998320170a9612f55c8099711c08a388fa050c0aa", + "fixtures/lawpack/workspace-snapshot/adapter.sha256": "a00af1e62a1ade6e226ae1572cc8e2542e1e8256b8a2c377167bede46ccb99c0", + "fixtures/lawpack/workspace-snapshot/exports.cbor": "788ba1741529248ca4cd902cf56a529d79ac30d0cdd2122c8a631cd626c27059", + "fixtures/lawpack/workspace-snapshot/exports.sha256": "49c890f3a194283109b211875646e558584e27c0c0cf51ecc5d442fb667947c7", + "fixtures/lawpack/workspace-snapshot/input-schema.cbor": "bbbff7ff8ee3aff2d80a2ecdf67cc5d61b56a9dec6feb3f913369d80a35809a0", + "fixtures/lawpack/workspace-snapshot/input-schema.sha256": "b85d50e4a42a610fe1869c0ef97d17e6f6154c043d560fa35b83a8c4150c1658", + "fixtures/lawpack/workspace-snapshot/manifest.cbor": "de562334ed0ad8b868af7c7f2664a0e27adbed5633b20f8f78191d52891c8583", + "fixtures/lawpack/workspace-snapshot/manifest.sha256": "54d24bac38ebcbf1474f70b6d53ed68ed73e3fb4b3ebb85f7bf2963c3b8004fc", + "fixtures/lawpack/workspace-snapshot/observe-workspace.core.cbor": "86fa2cf6ed6edf12a92ca4bbf7d576f2a5eab32c2ff9a84a12ca25e7b843e3f6", + "fixtures/lawpack/workspace-snapshot/observe-workspace.core.sha256": "bba1e6ebcab0430e459f31ebe82004aae33a5ab32219b9f51a80416b6e6b7fbc", + "fixtures/lawpack/workspace-snapshot/observe-workspace.edict": "da2c10b6ca53a43ec0fda6a74a1a9296c533f42ee50b4ff8eaaa7d57f4b17289", + "fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.cbor": "9fc28d791ef91a2e7cecfca9244f1bf3826665d715ebaf00f73ef5f782ea82a9", + "fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.sha256": "dfbee2c71b5dfef18ddf840ab6913769cf8d85b233bdbba851feb1013a4d61b8", + "fixtures/lawpack/workspace-snapshot/reconciliation-law.cbor": "c6c3ec51e17ce74b3fd779b41f8d4a686a43df9f164b7381abda56b0f4f45d12", + "fixtures/lawpack/workspace-snapshot/reconciliation-law.sha256": "910723163a789e058922e914ba37540dc49aec320f58680218bfef0e45b90036", + "fixtures/lawpack/workspace-snapshot/request-profile-configuration.cbor": "61314a4f79e8ad572feb2a6f5479d45da11430f2ad902ed8cf1f7ff5d2211007", + "fixtures/lawpack/workspace-snapshot/request-profile-configuration.sha256": "e11e858751fb2e39205a605d7aa9a9512c8ff06b788cfbc0c5a98aa53e671bf6", + "fixtures/lawpack/workspace-snapshot/settlement-schema.cbor": "6689e3b655d25cbbbfdf7b75d52039db614d3d408677181afbbc5e7e02e0e2bd", + "fixtures/lawpack/workspace-snapshot/settlement-schema.sha256": "4775b7c7fc507035788dc3bf5fcdbe488c522114f128ca09f87ac3a28dc16e6b", + "fixtures/obstruction-strands/v0/stale-basis/README.md": "6d53a559e38c214f3850b848526fee8f1d83b38be376d284bf2ffe2d5f7ba723", + "fixtures/obstruction-strands/v0/stale-basis/source.edict": "fb36a7017af8f8f5735ea0b62f788caab1f7cd56bfb5f9f3a0509b7664b92d85", + "fixtures/provider-contracts/v1/README.md": "ce3c381dd6dab67c092b288d36558b331a7066ba2fed21d53c56d600db59502b", + "fixtures/provider-contracts/v1/edict-provider-contracts.cddl": "82273f3ea016a421c881f15b0fd451802205903ac9177bac8accbf3173f66d2c", + "fixtures/provider-contracts/v1/manifest.json": "6303668861667a30418870ef25e5f169017905ae1f9d261451ba298120afdd9d", + "fixtures/providers/README.md": "7178ed08686953bf7a3c03c4761c637808ac259b279b2fc3e0fbec9183fa60e2", + "fixtures/providers/components/guests/Cargo.lock": "85a7e30f09abcd23033599b6426b419d35c1b2ddacb69331967587b0c55745c0", + "fixtures/providers/components/guests/Cargo.toml": "3d78e0001225560207cbe97a9f6f12f71dcc8b4f1f7a06a85e7092209f4dc0d0", + "fixtures/providers/components/guests/lowerer/Cargo.toml": "62689501ef19bcfed24ca965e6dea0c301e76640907bdb5a2048847844e4691c", + "fixtures/providers/components/guests/lowerer/src/lib.rs": "76d83548c76ac6d3a1c20a24b4dbe1c8843a0facdbbf0c05015e858f05c5be7b", + "fixtures/providers/components/guests/verifier/Cargo.toml": "0fcdd68f536887afab601c04e252445f9393fc89d7b020db60da5deb5ffe3afd", + "fixtures/providers/components/guests/verifier/src/lib.rs": "426f45e8617caf5974a6e13a5cfec36e620f84f99338e3e1f5aab3407937055f", + "fixtures/providers/components/instantiation-failure-lowerer.component.wasm": "4ca29c3c16f1c0c3c3d80d5fa877cd853d41b9a84d5f30dbb11e2387f81b6e7c", + "fixtures/providers/components/instantiation-failure-lowerer.wat": "add5541aad2743d9ff16d0fed5326a9c528859b2616c34c0ab89319bd39118ba", + "fixtures/providers/components/instantiation-fuel-lowerer.component.wasm": "6511898df2801170b40323038ef642e32d57c9a9e3f0fd97b616cd2873031bdd", + "fixtures/providers/components/instantiation-fuel-lowerer.wat": "cb6ed1588c48274a6de4c36aa5f28c0315b37e89590ff1cab7f50d4e8041541d", + "fixtures/providers/components/inventory.json": "6d5d19359134e3e8cb701bd9df8c80e38dc56ac2f9ab928b88e755f80e7ea96f", + "fixtures/providers/components/lowerer.component.wasm": "0d16533735fa00f90bdb55f82495e1888802f4c857b35a5b3931429f24143885", + "fixtures/providers/components/malformed-lowerer.component.wasm": "dfcd171918373d18b9dff16778e98b7618eeb4ac85976dd7134b9e201562f41b", + "fixtures/providers/components/malformed-lowerer.wat": "b8044e5caa50bcc3a80e8b7af2eaab29d3a0d51d62725458909e1bfdf42241b6", + "fixtures/providers/components/verifier.component.wasm": "e889007a621d05820261eeb9fd69ce555f5761dbdbf82c6e9f55220ea529776d", + "fixtures/providers/echo-generated/provider-manifest.json": "96974d26f39f6cfccfe91bf499b59bdff50bc103cbaff8d1fbf7e4252c916ca5", + "fixtures/providers/echo-target-profile/README.md": "c9041ceeb1210ce520167b12fe9e8b6caff0c5fac87177aa6cf5b4c51d6b0721", + "fixtures/providers/echo-target-profile/generated/primary/target-profile.echo-dpo.cbor": "1b105d1b1f6cdf5fecdef98b7adeb238525047d43581fe9fd8c44fd213e1788e", + "fixtures/providers/wit/legacy-target-profile.wit": "9db5841289178228f2583927f02fe40a2cf71bfd0a9ea4e664ccb358506a6d57", + "fixtures/target-ir/canonical/echo-effectful.target-ir.cbor": "7a60cd64823eeb9801abcc887bb4deaa0ed4af0ca378dc84d142b3df650702bb", + "fixtures/target-ir/canonical/echo-effectful.target-ir.sha256": "522e896587f5eeeabb0b3680584a230b2521b97675c40152b43c7c7c94370483", + "fixtures/target-ir/canonical/gitwarp-append.target-ir.cbor": "49259a149d2fe02856059a7683a9a3a02fcec84ca6937b2401a08f6536391735", + "fixtures/target-ir/canonical/gitwarp-append.target-ir.sha256": "930af94de85ffe09f75afea9e112ac659062ec2c6b62af166a3ccd6e3a9daacb", + "fixtures/target-ir/canonical/workspace-snapshot.target-ir.cbor": "1c4a8bafa1fdaa681a028f5bff381904b613f951ad3a65dfaecf16a4aedfeba4", + "fixtures/target-ir/canonical/workspace-snapshot.target-ir.sha256": "218b558b825a1fa59d52e816bb74fbd3a0d359a5437a8263c8562fed381b08d6", + "fixtures/target-profile/contract-resources/README.md": "ceba47e8308c06e484aec1c30d9e4aef8ee7886d0cab13f860894e4bc62fc7dc", + "fixtures/target-profile/contract-resources/canonical-cbor.cbor": "8306e4f08c1e4e7d29ab22bcf55c324312712aac3eeeb675857ced57c3e48bdc", + "fixtures/target-profile/contract-resources/canonical-cbor.sha256": "1571de5dddfaa963952eb89b1e40e9749f5e92668645c221ff8d92c515af8e19", + "fixtures/target-profile/contract-resources/determinism.cbor": "84073f5c1734b625e16799048e28458d43e0a10befdae56a79d906f5e37ef76a", + "fixtures/target-profile/contract-resources/determinism.sha256": "bd9465934a18f73def0c38c75358440f84ec98d39d3b688ce44cdcd5c280e72e", + "fixtures/target-profile/contract-resources/diagnostics.cbor": "e465a28f1170fe478db5ff65d96a1fdbfbbcb95d327e6965021c252437991e4b", + "fixtures/target-profile/contract-resources/diagnostics.sha256": "e3cf575631bc142ae67786269211383352bb869a9690b8c5190669788bedddb7", + "fixtures/target-profile/contract-resources/fuel.cbor": "c712c2d831cc8e731bdc1dfb8ea536f4630f38f0b0e0c6448b2df57176d3d0bd", + "fixtures/target-profile/contract-resources/fuel.sha256": "afa42a66b0df107eab464a08e5c358639edb4ca9b72f77d8abf21a165d4e293e", + "fixtures/target-profile/contract-resources/wasm-component.cbor": "cd09d702db1d10be825e72effe35627bec56963cb3d78601b69478c58787e34d", + "fixtures/target-profile/contract-resources/wasm-component.sha256": "1f960c0ae125ad146775c3f40d4fe7402b7fbfc619195968d019d4213149bcb2", + "grammars/textmate/README.md": "d68a6d01eb366626b7b66e72b210e0ccfd0de961e7dcf67bf23ca11d24683791", + "grammars/textmate/edict.tmLanguage.json": "3384038419ccd7300453255e07a4c2fd8b6bc357fb83ee9eabe7a9ea3c1a8c21", + "grammars/tree-sitter-edict/README.md": "d01a9a5d0823ff83bd7eae709796d2ba9f60827258e83f4acc61a8f67cd166be", + "grammars/tree-sitter-edict/grammar.js": "648d883aeeb95276e50b83cbeb11c478ba494671a883c4156ea185cd9e1fb689", + "grammars/tree-sitter-edict/queries/highlights.scm": "c5eebabd4ecfab6d61e1a81e534be40e678313e7f62de45a012b363184051883", + "grammars/tree-sitter-edict/src/grammar.json": "ec1d17ccdab6c8c7a1b3d819f80ceb63e5fef4217b51771a19ff1b292a960172", + "grammars/tree-sitter-edict/src/node-types.json": "a79d4870fcb31450660570279de5cbb0571ec9751565eb70e663a08e78857f2c", + "grammars/tree-sitter-edict/src/parser.c": "db53b6f1984be6857920a3b669fd02ac5a61ab4c4adc297cd13d1a698200d67a", + "grammars/tree-sitter-edict/src/tree_sitter/alloc.h": "b29c1c9fb7cc82f58c84b376df1297d6e2737a1d655fd356db0859e3c29c2fea", + "grammars/tree-sitter-edict/src/tree_sitter/array.h": "31e60a1bff6f715afacce03b5b70efe42b58371b4f9595dd4af52a577ff9608c", + "grammars/tree-sitter-edict/src/tree_sitter/parser.h": "180b893c8734778fd32f372dfbc27bd6ad1cd2221f26150b31256ff6716320d2", + "grammars/tree-sitter-edict/test/corpus/current-subset.txt": "0ece2b4025504030e241bf7dc86e100d90de01ecf47be7187c69fc109402616e", + "grammars/tree-sitter-edict/tree-sitter.json": "ffd900f458d520c326b084c950c0683da5110326dfef664d2845671e9e0ba1c2", + "scripts/consumer-witnesses/README.md": "97bb29ed4ba509f5c52c6d3fc4862d0bfd2e6f1098f31441a9c6d10a0058e107", + "scripts/consumer-witnesses/jedit-state-read.Dockerfile": "33ab296609d366955e95bdfafdac88d8fd89c334a95392e0d840757372682a04", + "scripts/consumer-witnesses/jedit-state-read.Dockerfile.dockerignore": "e4281aa8c5c9399a71fc801b3f39f1d639d12ddc5e36a7bf4df684366d2a92b9", + "scripts/consumer-witnesses/jedit-state-read.py": "30933061c52eb82a511bc290c367c003129ac1853e717595ce1976fd9b6da015", + "scripts/consumer-witnesses/run-jedit-state-read.sh": "3fb7e4d9f91b8ea2506916dc70968cfc61cb481ea67a7780c44c8dc442523482", + "spec.lock.json": "0d44a0f5d8fbd77e198edd776a7d9b9bc4babae1c820b10e340c2bfda772fd0f", + "xtask/Cargo.toml": "127c5b19d72856e62c9e19766035af7122f76b12d41dbbcf2ad0c48a95291d31", + "xtask/src/contract_check.rs": "aefa5117e7bc547c85c67bef5f67756ff9f676314ea3d245be7f63e949d4f13d", + "xtask/src/goldens.rs": "33d10989d188149517bc5f1a59632da00a27f85299f4b209f99803d650d7022d", + "xtask/src/lawpack_goldens.rs": "9555cdfd2624ca4dc7ddf2143562096fce7f4ef56c617809764b231bf8b5a0f6", + "xtask/src/main.rs": "b634296a41c26dcc5f4c2d5308437a089c7e0bc4ac1c244c2641c5ae70074ecb", + "xtask/src/provider_components.rs": "db291c46e24c38e1955c9f4077b135a74d08ae5ed9aef05e4ef771c1e7aaf500", + "xtask/src/provider_contract_pack.rs": "2d9d14184b63d0253732225442483da51c70ccdb6092efd2e7705b74f4986479", + "xtask/src/provider_dependencies.rs": "aa2236f057acda35445c429d4fd3a37c0606cc477f898354a292952b744f2415", + "xtask/src/release_dates.rs": "733a1d6915e4a897308f458f080f576f023f071183b263ce4dbe2302297471cb", + "xtask/src/release_prep.rs": "a0c335406b15c86314dd0c00e3a0b8ff5e14b47d92b5f5b1dc763ceb48759520", + "xtask/src/tests.rs": "3ea68d101e9cbcce69ce5067ecd034a58a809af703d6ddece9455cfd16abc02d", + "xtask/src/util.rs": "9fd9d75981d0e38dc4cfd87090a96f3665435c5d010607508c848f759b749539" + } +} diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/compiler-source.json b/edict/replace-range-probes/range-assembly/evidence/candidate/compiler-source.json new file mode 100644 index 00000000..3ef03a8f --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/compiler-source.json @@ -0,0 +1,1802 @@ +{ + "commit": "01dc5abb9a8a74f8fd8b0e0a6d1041d0adb86d6e", + "tree": "74e571125a1da6ac5b2eac80944e343811708d51", + "files": [ + { + "path": ".cargo/config.toml", + "gitBlob": "5592118f6c54bf8b53b16848e04ece896dd56384" + }, + { + "path": ".github/workflows/auto-release-tag.yml", + "gitBlob": "87404ceb685191afd496c93494b0bc61e2a59504" + }, + { + "path": ".github/workflows/ci.yml", + "gitBlob": "c6c6a17f59b6b96db88e3d4b2775bc64b7fe01f3" + }, + { + "path": ".github/workflows/release.yml", + "gitBlob": "2c612fc786998bfa5b11e76ae1185114a7cc535f" + }, + { + "path": ".gitignore", + "gitBlob": "30d7faf0fc8b7f010f99280302d4ed269d5da9ba" + }, + { + "path": ".markdownlint.json", + "gitBlob": "f3ec2c8dc2fbacc425154a2baedec50c7474aefa" + }, + { + "path": "AGENTS.md", + "gitBlob": "0c48a5794454cf84e20640994a372316efde7bb5" + }, + { + "path": "ARCHITECTURE.md", + "gitBlob": "5b513dd25028092e7e75c8974f1d5f3cc31889ed" + }, + { + "path": "CHANGELOG.md", + "gitBlob": "cd40892f0f2ed2e5667c65e274f9a1ead1619990" + }, + { + "path": "CODE_OF_CONDUCT.md", + "gitBlob": "784cf2799bcf8d2a69db5f5781359ef7e18a05fc" + }, + { + "path": "CONTRIBUTING.md", + "gitBlob": "9676914060f734dc59eabd9075898dc8170d4d19" + }, + { + "path": "Cargo.lock", + "gitBlob": "bacb208de0583f182379af7b5e078d31b25e2ca5" + }, + { + "path": "Cargo.toml", + "gitBlob": "b2e7106eb78f79230c091492ef21b497bdc9ed19" + }, + { + "path": "EDICT.md", + "gitBlob": "35376134195082d506f0161ba7ecb97efa8b770a" + }, + { + "path": "LICENSE", + "gitBlob": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64" + }, + { + "path": "NOTICE", + "gitBlob": "c300687bdd9d931d1f257d291e1cb6ff9d7d3607" + }, + { + "path": "README.md", + "gitBlob": "0812ef9a0c4611bf655dfc67d2ecc3631af9a536" + }, + { + "path": "ROADMAP.md", + "gitBlob": "d0e0135780537afab1d1a3f53808b363b35a63f4" + }, + { + "path": "SECURITY.md", + "gitBlob": "0bcc4e7375442e1334405a2d046df316cee05cd5" + }, + { + "path": "crates/edict-cli/Cargo.toml", + "gitBlob": "e9d844553c395bd312f84e806eb5bac30c5c3a54" + }, + { + "path": "crates/edict-cli/src/application_build.rs", + "gitBlob": "9c56ae6b4dd4eef0b9fe6db40316e100b2ffa699" + }, + { + "path": "crates/edict-cli/src/lawpack_build.rs", + "gitBlob": "55e9579153f34a3d5b139141c9de6640808cd386" + }, + { + "path": "crates/edict-cli/src/lawpack_build_windows.rs", + "gitBlob": "f71d03b368ae83becc1608bbba11cd5f1afa4f07" + }, + { + "path": "crates/edict-cli/src/lib.rs", + "gitBlob": "60883af60cf4b441680952ecce7ef4fcbfeabb97" + }, + { + "path": "crates/edict-cli/src/main.rs", + "gitBlob": "0dd9776642c4090479322111e4164ee7049fb9d0" + }, + { + "path": "crates/edict-cli/tests/golden_cli.rs", + "gitBlob": "9897caad3bcc6fa8bb0f20a1d0e18032285b1fa7" + }, + { + "path": "crates/edict-cli/tests/jsonl_cli.rs", + "gitBlob": "9ed353ca27d073fc7da49d3800c81ba4c58edd5d" + }, + { + "path": "crates/edict-cli/tests/lawpack_authoring_cli.rs", + "gitBlob": "dd7d7bfebf0e051c77d894a55c0204d373b19c63" + }, + { + "path": "crates/edict-provider-host-wasmtime/Cargo.toml", + "gitBlob": "ebeeb941f09012293d9923fe0e6039b2761b328e" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/conversion.rs", + "gitBlob": "62c3cd4a85eb156b8c9a405ef3ea4d8a09b80cc3" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/invocation.rs", + "gitBlob": "a4d6680d289094afebc0f1063abccf706f8149db" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/lib.rs", + "gitBlob": "353ea7394f265219ebdecad56a3070c9e7d2685c" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/limits.rs", + "gitBlob": "9e4d12c1b606d2b180f732db17bfbc78f8e26e3a" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/replay.rs", + "gitBlob": "b8fa7be7c7ee5039793dad4cd0fa6a4f14ce388e" + }, + { + "path": "crates/edict-provider-host-wasmtime/tests/invocation.rs", + "gitBlob": "7a59a3192852a80bc01221ebf3dd1c437bda9508" + }, + { + "path": "crates/edict-provider-host-wasmtime/tests/preflight.rs", + "gitBlob": "a295e7547b0294f0355a85d5b9b8d045c8fceefd" + }, + { + "path": "crates/edict-provider-schema/Cargo.toml", + "gitBlob": "0e74f58acdc054ecce192cb8341afeaddc40deb5" + }, + { + "path": "crates/edict-provider-schema/src/contract_pack.rs", + "gitBlob": "370480d9c606134dd08ee62ae29ef143941e2f54" + }, + { + "path": "crates/edict-provider-schema/src/lib.rs", + "gitBlob": "51f5bee8892c9fb2122cb20022edc4d414759ff7" + }, + { + "path": "crates/edict-provider-schema/src/recursive_dispatch.rs", + "gitBlob": "6d97565b96f941b359d16f7a1c201189968fbeff" + }, + { + "path": "crates/edict-provider-schema/src/schema_safety.rs", + "gitBlob": "a2f605f62a2bfedcb84b68e37db9ff84b1dc3b05" + }, + { + "path": "crates/edict-provider-schema/tests/authority_facts_abi.rs", + "gitBlob": "7dd4d0302805ceecffc2045cdb91e386f8e08517" + }, + { + "path": "crates/edict-provider-schema/tests/provider_contract_pack.rs", + "gitBlob": "a26be8054b39215048825dd8cae7e9bddcfe27c9" + }, + { + "path": "crates/edict-provider-schema/tests/registry.rs", + "gitBlob": "bdd13ec00e441aef9e67ba49f6592ecbc7dcb303" + }, + { + "path": "crates/edict-syntax/Cargo.toml", + "gitBlob": "f55bb23e528af78b1e97b52f9b72cbd876a44ba7" + }, + { + "path": "crates/edict-syntax/src/admission.rs", + "gitBlob": "471430dd13a617bac886fcd44afbf15263e7db3b" + }, + { + "path": "crates/edict-syntax/src/ast.rs", + "gitBlob": "2a5d208a53a82408f8a18d9a13ccb133ec6a7a2e" + }, + { + "path": "crates/edict-syntax/src/authority_facts.rs", + "gitBlob": "644de86d63983bdbfbf1279fdbf1dbdaecc151d5" + }, + { + "path": "crates/edict-syntax/src/canonical.rs", + "gitBlob": "6fb29d50ea4a55eb888a1b9600cdcb31713a6e20" + }, + { + "path": "crates/edict-syntax/src/compiler.rs", + "gitBlob": "d9661e2605f23f503a8fdf4471462cc0b9bad4c1" + }, + { + "path": "crates/edict-syntax/src/compiler/byte_concat.rs", + "gitBlob": "185d11c0ae20931cd2737774a34cac92b13d6712" + }, + { + "path": "crates/edict-syntax/src/compiler/byte_length.rs", + "gitBlob": "0d8d6291064415baee9253d9fe1e11ad87945773" + }, + { + "path": "crates/edict-syntax/src/compiler/byte_slice.rs", + "gitBlob": "84385fffdf4e38e21285e1fde252e9185a3a76fa" + }, + { + "path": "crates/edict-syntax/src/compiler/unsigned_subtraction.rs", + "gitBlob": "c2ef2deda74afb52e4346076a310df341556e1c8" + }, + { + "path": "crates/edict-syntax/src/contract_bundle.rs", + "gitBlob": "9a31645f0e30879d019787e29c21c82eebf58129" + }, + { + "path": "crates/edict-syntax/src/core_ir.rs", + "gitBlob": "4c6f350b325d13a27947687dd1f4114edf6d548d" + }, + { + "path": "crates/edict-syntax/src/highlight.rs", + "gitBlob": "28b3f7dcdfe8d4982bdcfb05759f769ccdbffc7f" + }, + { + "path": "crates/edict-syntax/src/lawpack.rs", + "gitBlob": "54f85bda48c960ad0b7bc316d332b379ab5b6ae0" + }, + { + "path": "crates/edict-syntax/src/lawpack_adapter.rs", + "gitBlob": "e425960e2437faa2f9eeb5d089ff507417d39586" + }, + { + "path": "crates/edict-syntax/src/lawpack_authoring.rs", + "gitBlob": "11ff578f458b8a4c8e4df75c0c616e37fa468d49" + }, + { + "path": "crates/edict-syntax/src/lib.rs", + "gitBlob": "7323475cc7f846e11c2d73f4c26a5e581b7e6157" + }, + { + "path": "crates/edict-syntax/src/lowerability.rs", + "gitBlob": "c6a1323fd6a79b0460b43aaf338956c3906a633e" + }, + { + "path": "crates/edict-syntax/src/parser.rs", + "gitBlob": "0b3650e3012e49023ccbb9cc9effe9b5b102f19d" + }, + { + "path": "crates/edict-syntax/src/provider.rs", + "gitBlob": "18fa661d880979c53dd335fb7e68d5445b638d4c" + }, + { + "path": "crates/edict-syntax/src/provider_invocation.rs", + "gitBlob": "2526168f0a6f2d1d9b6181b689ff43e203434122" + }, + { + "path": "crates/edict-syntax/src/provider_lowering.rs", + "gitBlob": "50a4e60b561127cb8c78e3f7c04c6bbaca068e52" + }, + { + "path": "crates/edict-syntax/src/result_projection.rs", + "gitBlob": "79ba246d4c58960fe368eaca4c7d135fe187832a" + }, + { + "path": "crates/edict-syntax/src/semantic.rs", + "gitBlob": "76bd133ef5859bf7722d1987613f7fd84836ab62" + }, + { + "path": "crates/edict-syntax/src/target_ir.rs", + "gitBlob": "9dd759a18ea3a171837baa50e88c67987c84da13" + }, + { + "path": "crates/edict-syntax/src/target_ir/byte_concat.rs", + "gitBlob": "bff3a35e1d3183813ffb1e69655934f65f2c9131" + }, + { + "path": "crates/edict-syntax/src/target_ir/byte_length.rs", + "gitBlob": "972e6ffa943bc7a7a943d76f0af42b342e3d2aac" + }, + { + "path": "crates/edict-syntax/src/target_ir/byte_slice.rs", + "gitBlob": "62a1c0b9e84a331bb17ab78090cce6d8eb8da486" + }, + { + "path": "crates/edict-syntax/src/target_ir/execution_order.rs", + "gitBlob": "e69a28805dc5e414a64afdaafee34161c217a044" + }, + { + "path": "crates/edict-syntax/src/target_ir/totality.rs", + "gitBlob": "a4fb9573d59e1a4bb9d7c250402c5b7e1da0a8c3" + }, + { + "path": "crates/edict-syntax/src/target_ir/unsigned_subtraction.rs", + "gitBlob": "b83522bfe9a2b506413b4d306f4bc49f8b053f36" + }, + { + "path": "crates/edict-syntax/src/target_profile.rs", + "gitBlob": "dd514f7380243e795f0655a78aecd06ee3fa2eda" + }, + { + "path": "crates/edict-syntax/src/target_profile_contract_resources.rs", + "gitBlob": "4efd22961c2fd7591440efd6087944ecaf21e991" + }, + { + "path": "crates/edict-syntax/src/token.rs", + "gitBlob": "2768586eea6d42d5df357c4cc62a011ee7f455de" + }, + { + "path": "crates/edict-syntax/tests/admission.rs", + "gitBlob": "57edbc320307c1d6daba85f03d8dc79558d7b849" + }, + { + "path": "crates/edict-syntax/tests/authority_facts.rs", + "gitBlob": "add9d272be6e8eb1cd6fdde2999a5fb452ecd852" + }, + { + "path": "crates/edict-syntax/tests/authority_facts_cbor.rs", + "gitBlob": "7359f047d9f731fee208efb5f69072b612d69547" + }, + { + "path": "crates/edict-syntax/tests/byte_concat.rs", + "gitBlob": "72da10e53a2e84f4a23217122b54dd9eac76338f" + }, + { + "path": "crates/edict-syntax/tests/byte_length.rs", + "gitBlob": "50945944e8c2223abcc6b1081322432bc540c017" + }, + { + "path": "crates/edict-syntax/tests/byte_slice.rs", + "gitBlob": "99aae98ac1637a95532cdd833463210bbaa5a5be" + }, + { + "path": "crates/edict-syntax/tests/canonical_encoding.rs", + "gitBlob": "e4c5d59a88f88193f522eb555359919f7034a264" + }, + { + "path": "crates/edict-syntax/tests/common/mod.rs", + "gitBlob": "89560bfacb3dab031485c2dfa30d7eb325966574" + }, + { + "path": "crates/edict-syntax/tests/compiler_spine.rs", + "gitBlob": "2237318cfc0d4209e8a629e45320e42a4b72dbef" + }, + { + "path": "crates/edict-syntax/tests/contract_bundle.rs", + "gitBlob": "e6a2948335a0efc86d8bbb2e9e2c3d634e53965a" + }, + { + "path": "crates/edict-syntax/tests/core_golden_fixtures.rs", + "gitBlob": "0e0e42d19b52dc0557902dad9e1b85f37edf53f8" + }, + { + "path": "crates/edict-syntax/tests/core_graph_depth.rs", + "gitBlob": "1d95462ad2426d29b5974e6bb56ab8c125a92837" + }, + { + "path": "crates/edict-syntax/tests/external_action_requests.rs", + "gitBlob": "20aac8c03325ea0cdab8f4f54660cb980b4667c4" + }, + { + "path": "crates/edict-syntax/tests/highlighting.rs", + "gitBlob": "17e6b9ba08c96f0efb6efd440590f0fc917316e2" + }, + { + "path": "crates/edict-syntax/tests/lawpack.rs", + "gitBlob": "a675999ed96309358c8552a9d32781b5eede20dc" + }, + { + "path": "crates/edict-syntax/tests/lawpack_authoring.rs", + "gitBlob": "3a905cbd6d7d2625bc1d7826a6f6f1e991efbab0" + }, + { + "path": "crates/edict-syntax/tests/lowerability.rs", + "gitBlob": "5cfa58f5cbc51cccc7f119caddc1c3fcbc2e4806" + }, + { + "path": "crates/edict-syntax/tests/operation_prerequisites.rs", + "gitBlob": "753659e1a6e7751c455b8518226fa0902157a745" + }, + { + "path": "crates/edict-syntax/tests/parse_control_flow.rs", + "gitBlob": "5245561866d8902c1fbd5ab21f2e34807d568e17" + }, + { + "path": "crates/edict-syntax/tests/parse_greeting.rs", + "gitBlob": "f214d0c17745b8203d562780caa8f37b71c1e62c" + }, + { + "path": "crates/edict-syntax/tests/parse_hello.rs", + "gitBlob": "bf7b1b065277188f4be8754eb11ace94298394ba" + }, + { + "path": "crates/edict-syntax/tests/parse_keywords.rs", + "gitBlob": "78d8a64d785136d42a32655afda3df240c54f884" + }, + { + "path": "crates/edict-syntax/tests/parse_loops.rs", + "gitBlob": "d9ece2fce96fd6835d080055f06955d139c7e0ce" + }, + { + "path": "crates/edict-syntax/tests/parse_negative.rs", + "gitBlob": "17fdb983b8250470368a8f19d3a7bd9680052548" + }, + { + "path": "crates/edict-syntax/tests/parse_review_regressions.rs", + "gitBlob": "560215cfe044a528e190aa1ea7670e52b9365bdf" + }, + { + "path": "crates/edict-syntax/tests/parse_variants.rs", + "gitBlob": "8849f68f5ca1e2b06d0f66496e59b20d1c0fd022" + }, + { + "path": "crates/edict-syntax/tests/provider.rs", + "gitBlob": "7e8a596109b1e1fd3f22b3a0ef82f4755f127291" + }, + { + "path": "crates/edict-syntax/tests/provider_invocation.rs", + "gitBlob": "402647dd6701be65a9e693fd3f5688f26d84988e" + }, + { + "path": "crates/edict-syntax/tests/provider_lowering.rs", + "gitBlob": "411c306f3ab641de9dc2f7aed229767eba9dbd72" + }, + { + "path": "crates/edict-syntax/tests/result_projection.rs", + "gitBlob": "a74dd2a419266cb77d846d83da27f726095660f1" + }, + { + "path": "crates/edict-syntax/tests/semantic_validation.rs", + "gitBlob": "a127988d178c00ed12a0a25f70df6b7fd5e6d931" + }, + { + "path": "crates/edict-syntax/tests/target_ir.rs", + "gitBlob": "928e1cf921dead0b559bd115bb6eef3faaddd37e" + }, + { + "path": "crates/edict-syntax/tests/target_ir/ordered.rs", + "gitBlob": "a1b05db81a97a43ec5a2dc2d9bcc9578bc286f30" + }, + { + "path": "crates/edict-syntax/tests/target_profile.rs", + "gitBlob": "42f1c907f6c60dea1e8a9b4558b56ffd0b3a59ab" + }, + { + "path": "crates/edict-syntax/tests/target_profile_contract_resources.rs", + "gitBlob": "270c180a12dc10fb7e208cc4dc1e202da82c85fb" + }, + { + "path": "crates/edict-syntax/tests/target_unsigned_subtraction.rs", + "gitBlob": "e30d91f896afda48eb3cf11617bccf1f9d160e32" + }, + { + "path": "crates/edict-syntax/tests/unsigned_subtraction.rs", + "gitBlob": "fbd24482fdad4c8ceb4df41302b33595ada337ec" + }, + { + "path": "crates/edict/Cargo.toml", + "gitBlob": "525403f4f36db4040531e4dd747ec2398f9052cd" + }, + { + "path": "crates/edict/README.md", + "gitBlob": "a1ecf50bff3443d25a23fabfa6374d3f0a28ca82" + }, + { + "path": "crates/edict/src/lib.rs", + "gitBlob": "169d820759d6333f27a45ebb712bfcc4f0115107" + }, + { + "path": "crates/edict/tests/artifact_models.rs", + "gitBlob": "b923109c7195ce2c0071dc54179f0746b95329f0" + }, + { + "path": "crates/edict/tests/public_surface.rs", + "gitBlob": "a24c4bc9d9484f540da9b280790896701922968a" + }, + { + "path": "deny.toml", + "gitBlob": "e3f0f54060cead9a0d48b96ed86948d0909c4f78" + }, + { + "path": "docs/DESIGN_runtime-neutral-edict-sha-lock-assurance.md", + "gitBlob": "ea3badf78ebd19545147a93671fdb5f9af4a61ea" + }, + { + "path": "docs/GUIDE_edict-assurance-transparency.md", + "gitBlob": "100321157ec43055c45794f1c161b1e5281ba6b4" + }, + { + "path": "docs/README.md", + "gitBlob": "e21739b842be14d91a17f2508b1a1b629754af01" + }, + { + "path": "docs/REQUIREMENTS.md", + "gitBlob": "fd69cf5b3f57af39cda8bcf7f94ff21666a34636" + }, + { + "path": "docs/RETRO_phase1-parser.md", + "gitBlob": "5cfb7b85ca2f140fc58f9186c47e4635e94a1e6f" + }, + { + "path": "docs/SPEC_continuum-admission-v1.md", + "gitBlob": "0a74a0bfc642337d5d7a85133ce50a0a22caffbd" + }, + { + "path": "docs/SPEC_continuum-contract-bundle-v1.md", + "gitBlob": "65b36bb33a34beb1f246d1f97384631c83ca631e" + }, + { + "path": "docs/SPEC_edict-language-v1.md", + "gitBlob": "e137ddc947f8ca3e057ea618c0cdf103096130b3" + }, + { + "path": "docs/SPEC_edict-lawpack-abi-v1.md", + "gitBlob": "ea1d801f07ab3677f7a411a1f58a28feda589ec3" + }, + { + "path": "docs/SPEC_edict-target-profile-abi-v1.md", + "gitBlob": "91687bfe45565a21f5f93f6ce9eed84095268691" + }, + { + "path": "docs/TECHNICAL_EXPLANATION.md", + "gitBlob": "d88561c0552c0e75d1ecc2eef6f9afd003e99674" + }, + { + "path": "docs/abi/edict-authority-facts.cddl", + "gitBlob": "e9a6d8685706ae0d8dabda401655234161e94299" + }, + { + "path": "docs/abi/edict-common.cddl", + "gitBlob": "836c11b92425beb6d42b378c0defe6f02d144dd7" + }, + { + "path": "docs/abi/edict-core.cddl", + "gitBlob": "862f02939fcc3858b4a60cb75f9bf149eae8ffda" + }, + { + "path": "docs/abi/edict-lawpack-adapter.cddl", + "gitBlob": "8e887c2e196ba7502470ddb45dc7cfd10116ad6b" + }, + { + "path": "docs/abi/edict-lawpack.cddl", + "gitBlob": "96efd51d437ec785b108b51835e9e8bf87aeab51" + }, + { + "path": "docs/abi/edict-result-projection.cddl", + "gitBlob": "98b5c2e861e7e9b66b7481502287cb041f6e77e6" + }, + { + "path": "docs/abi/edict-target-ir.cddl", + "gitBlob": "98134f277ded1920a3a36e5e3946c51153f2e84d" + }, + { + "path": "docs/abi/edict-target-profile.cddl", + "gitBlob": "746ae03001310f3a83524e5332819dad1a4eea5a" + }, + { + "path": "docs/abi/edict-target-provider.wit", + "gitBlob": "0efa5903a52d38dc61e429619d86322c6c5f1fa0" + }, + { + "path": "docs/audit/2026-06-28_code-quality.md", + "gitBlob": "143cbf4f4491a76a6649e919c6edaba73f0bcf4b" + }, + { + "path": "docs/audit/2026-06-28_documentation-quality.md", + "gitBlob": "656b4fa8dea43306af1818f8622cafd72e82a370" + }, + { + "path": "docs/audit/2026-06-28_ship-readiness.md", + "gitBlob": "b9d34a8693564d0134f550092e7645e5d5137442" + }, + { + "path": "docs/design/authority-fact-governance.md", + "gitBlob": "8531061cf718c47ec791f5712b2f357d92adc9e4" + }, + { + "path": "docs/design/canonical-target-ir-v0.11.md", + "gitBlob": "a46acb84e3523b51e2348c776cfdb63a8b98107a" + }, + { + "path": "docs/design/contract-bundle-assembly-v0.11.md", + "gitBlob": "a364f8ade5445808f87cf0c63ab3484c03ad616a" + }, + { + "path": "docs/design/crate-scope-v0.11.md", + "gitBlob": "92fe92285d02465d84bbe82e29d051fdc461f3a6" + }, + { + "path": "docs/design/obstruction-strands-v0.md", + "gitBlob": "81f70fd688c12798cd23472a4e810191e61eabe2" + }, + { + "path": "docs/design/provider-artifact-pipeline-alpha.md", + "gitBlob": "60eefa7dc160aba986bcd1188b79610ff5e9f299" + }, + { + "path": "docs/design/schema-as-sot-codegen.md", + "gitBlob": "d818e0e3f1fafd1d3aba26cb37c739f3ebe69763" + }, + { + "path": "docs/design/v2-obligation-closure.md", + "gitBlob": "816d22d843a33c6f7e143da4cb45e80679609dc8" + }, + { + "path": "docs/releases/v0.1.0-alpha.1.md", + "gitBlob": "5dd96057ba7f109cf5e5acde16e29d18627f98d3" + }, + { + "path": "docs/releases/v0.10.0-alpha.1.md", + "gitBlob": "363c4e9ed6f5ea5758198c7124681b520098e583" + }, + { + "path": "docs/releases/v0.11.0-alpha.1.md", + "gitBlob": "4612dbb5a1aaf20710bdb199b658ded7ced4ebab" + }, + { + "path": "docs/releases/v0.2.0-alpha.1.md", + "gitBlob": "7302ef93ed5ff9b562d9cec92d49d85a6b789b27" + }, + { + "path": "docs/releases/v0.3.0-alpha.1.md", + "gitBlob": "bf023ba4ca2c38f0120c461781447d58fe239ae0" + }, + { + "path": "docs/releases/v0.4.0-alpha.1.md", + "gitBlob": "769500b59800c02c536b76b0eb850d06d6cd8f58" + }, + { + "path": "docs/releases/v0.5.0-alpha.1.md", + "gitBlob": "7c7354e89846ea816992aaf55d4ad04367d61a10" + }, + { + "path": "docs/releases/v0.6.0-alpha.1.md", + "gitBlob": "3f2a0edfc4bccd9f3c60a7443ef4f8cbcbac1971" + }, + { + "path": "docs/releases/v0.7.0-alpha.1.md", + "gitBlob": "57671d5ef5a6b9f16d1674e0a35ddeb86ff126a8" + }, + { + "path": "docs/releases/v0.8.0-alpha.1.md", + "gitBlob": "12f77bda185c54fbbd136bf0dc7292716ecdfa39" + }, + { + "path": "docs/releases/v0.9.0-alpha.1.md", + "gitBlob": "fa295fcf0967415bb052f238256919b32b3fe6ba" + }, + { + "path": "docs/schemas/edict.cli-check-result.v1.schema.json", + "gitBlob": "eef8cd11f07e06d68b7051efa60ae05f2cfd8a63" + }, + { + "path": "docs/schemas/edict.cli-diagnostic.v1.schema.json", + "gitBlob": "92a2151a76893c598a4191ed6cecd8a0e671613f" + }, + { + "path": "docs/schemas/edict.cli-event.v1.schema.json", + "gitBlob": "705d82a893c2ea91caa91ad6977a9be8646b47bb" + }, + { + "path": "docs/schemas/edict.cli-info.v1.schema.json", + "gitBlob": "2d9a0777b4190b56ff569625275d352d17363afa" + }, + { + "path": "docs/schemas/edict.compiler-input.v1.schema.json", + "gitBlob": "26da3ba0fe85fab4c826ad79f13968ce09c4f29b" + }, + { + "path": "docs/schemas/edict.compiler-settings.v1.schema.json", + "gitBlob": "a3e8ba469895b84ab81724da1075c73141a8dd0c" + }, + { + "path": "docs/schemas/edict.projection-core.v1.schema.json", + "gitBlob": "8c0afe3834256abd1e18efb5f31eae1c4bdf0374" + }, + { + "path": "docs/schemas/edict.projection-diagnostics.v1.schema.json", + "gitBlob": "28cfb0a67dff7b8f879122c74433158dc0a4e5df" + }, + { + "path": "docs/schemas/edict.projection-syntax.v1.schema.json", + "gitBlob": "a85f2e14f536863f5e7b107b1a9f3f10816e6234" + }, + { + "path": "docs/schemas/edict.projection-target-ir.v1.schema.json", + "gitBlob": "8bbb6495ad8800d775d1c08506e85351038d678a" + }, + { + "path": "docs/topics/README.md", + "gitBlob": "99b06d3124c71cb62dfe6faff7604c13063162a7" + }, + { + "path": "docs/topics/admission/README.md", + "gitBlob": "755dcba96c0a428eec18d58a529f3e26d57d118c" + }, + { + "path": "docs/topics/admission/test-plan.md", + "gitBlob": "68ee0a2d2502103285985bf862de9fadf2bac5a0" + }, + { + "path": "docs/topics/assurance/README.md", + "gitBlob": "cf382008f3d3094a5380a687abbf07538e07404d" + }, + { + "path": "docs/topics/assurance/test-plan.md", + "gitBlob": "0ea6c971924db763088577a0a52bbd30bfec814c" + }, + { + "path": "docs/topics/authority-facts/README.md", + "gitBlob": "c5589d2489d6e4a5729c0df2b2655ff281d8d88d" + }, + { + "path": "docs/topics/authority-facts/test-plan.md", + "gitBlob": "e3769edf8309347b23ffa2e8f0901e06feabd654" + }, + { + "path": "docs/topics/cli/README.md", + "gitBlob": "af38946c9ccae8da343877c3861b0f52b6076e1b" + }, + { + "path": "docs/topics/cli/test-plan.md", + "gitBlob": "d72d69ef1d340ffd7057a63dd7bc07e3dfb2c166" + }, + { + "path": "docs/topics/compiler-spine/README.md", + "gitBlob": "740a1433877b7bdcf233e5f3e178ff263471c0b2" + }, + { + "path": "docs/topics/compiler-spine/test-plan.md", + "gitBlob": "ccf687876fc30b04de11db9dc86ea41afae87641" + }, + { + "path": "docs/topics/contract-bundles/README.md", + "gitBlob": "2347499e8da9dd57bb1588faf67fe386c7a70c03" + }, + { + "path": "docs/topics/contract-bundles/test-plan.md", + "gitBlob": "3ae4c7362f90fa89081ab9ff2bf1c3db1a811874" + }, + { + "path": "docs/topics/core-ir/README.md", + "gitBlob": "d747a18d1f53de2b29473ada7a06b819c77cd162" + }, + { + "path": "docs/topics/core-ir/canonical-encoding.md", + "gitBlob": "34927c69fb1de10b685294a155fc46bb4ac21628" + }, + { + "path": "docs/topics/core-ir/test-plan.md", + "gitBlob": "0f80304a4dd6b160c78674b73605bdbbb7e11066" + }, + { + "path": "docs/topics/developer-tooling/README.md", + "gitBlob": "8648d3c1bdf4f6b774bc5fec71c71aa8c59b0ce8" + }, + { + "path": "docs/topics/developer-tooling/test-plan.md", + "gitBlob": "9240f717434dfbca08a6366e6d3ebafd4ef2c908" + }, + { + "path": "docs/topics/documentation/README.md", + "gitBlob": "34fa7f4db136c274a88b680f99619d657fda15d5" + }, + { + "path": "docs/topics/documentation/test-plan.md", + "gitBlob": "47964954fbf640211bc30b0dd361c44c9955c488" + }, + { + "path": "docs/topics/external-action-requests/README.md", + "gitBlob": "45bc73e469919d3eff6e7eddbe9baa0383c7d91b" + }, + { + "path": "docs/topics/external-action-requests/test-plan.md", + "gitBlob": "38e7e53827d223c031d414f4ecd63720eb78eae0" + }, + { + "path": "docs/topics/fixtures/README.md", + "gitBlob": "c8b3b196109fb6d4e37d8ffa17635166010075fb" + }, + { + "path": "docs/topics/fixtures/test-plan.md", + "gitBlob": "624357dbc544d365835390d3d3c2f11015b7b82f" + }, + { + "path": "docs/topics/lawpack-authoring/README.md", + "gitBlob": "74bb25cc22e1f88cf4ee952b42313d919339113a" + }, + { + "path": "docs/topics/lawpack-authoring/test-plan.md", + "gitBlob": "d7ad2eacde45dbce3eeb2b1a22c6482134b841ba" + }, + { + "path": "docs/topics/lawpacks/README.md", + "gitBlob": "dedaa524dc55663a44bf8101241ab4b6d4755531" + }, + { + "path": "docs/topics/lawpacks/test-plan.md", + "gitBlob": "f8aa2c7ce40dad2665134956dc95d951d311808f" + }, + { + "path": "docs/topics/lowerability/README.md", + "gitBlob": "fb9519af3539d846dc5bf2915bf5ca86816e46f8" + }, + { + "path": "docs/topics/lowerability/test-plan.md", + "gitBlob": "e0fbff0799ba805c9531097d6b8aeea657e2b815" + }, + { + "path": "docs/topics/obstruction-strands/README.md", + "gitBlob": "a2930645065390cecff8008bfd48b7f034bfcd18" + }, + { + "path": "docs/topics/obstruction-strands/test-plan.md", + "gitBlob": "20c54ffcaa19930a5bc772a49a5f01119054be2d" + }, + { + "path": "docs/topics/providers/README.md", + "gitBlob": "8b5a07fb9c708b753861a4e156b866115f4d687b" + }, + { + "path": "docs/topics/providers/architecture.md", + "gitBlob": "664b38347ccaf37f298d6ac9f19d3423c0277f9e" + }, + { + "path": "docs/topics/providers/test-plan.md", + "gitBlob": "95c55f9e132ca6859fd9df70470973e678ed8d92" + }, + { + "path": "docs/topics/public-rust-api/README.md", + "gitBlob": "c64a1081b7f693b02bd2ea63329f2610bae9d84c" + }, + { + "path": "docs/topics/public-rust-api/test-plan.md", + "gitBlob": "4c3b9e9662afd9edb790ba2b5c57ed5e93df595c" + }, + { + "path": "docs/topics/release-process/README.md", + "gitBlob": "a474ab8b6a4a58c5c73334c9e677be7c20d1837c" + }, + { + "path": "docs/topics/release-process/policy.toml", + "gitBlob": "e40b4f4ec721ae61210ec1bb022a847bcb49fb4a" + }, + { + "path": "docs/topics/release-process/runbook.md", + "gitBlob": "0b6bd8ef44cbfe8c7cdc347273fa74b7c96c4823" + }, + { + "path": "docs/topics/release-process/test-plan.md", + "gitBlob": "61ecded1d2318d7dd74070cd1c6155f353c947e9" + }, + { + "path": "docs/topics/result-projections/README.md", + "gitBlob": "d5c2f85a7681a15dcdc3e35f992a389c50d13461" + }, + { + "path": "docs/topics/result-projections/test-plan.md", + "gitBlob": "9e69d58c88d6a9b7389334a78b994a3449721faa" + }, + { + "path": "docs/topics/review-process/README.md", + "gitBlob": "25190d37dc30110f75ba5d3a41494575ffecc1c3" + }, + { + "path": "docs/topics/review-process/policy.toml", + "gitBlob": "a826ba58aad2e509220b65aa8f96c290b600e094" + }, + { + "path": "docs/topics/review-process/test-plan.md", + "gitBlob": "f1a50aeae47913e4513a8149c1679d9a94c5ef21" + }, + { + "path": "docs/topics/rust-standards/README.md", + "gitBlob": "2fe29258705d117f4d10604a83fd832a8476e303" + }, + { + "path": "docs/topics/rust-standards/test-plan.md", + "gitBlob": "0e0d6b306cd2b58db07a7a5da6a752925fe58764" + }, + { + "path": "docs/topics/semantic-validation/README.md", + "gitBlob": "51cd9761755e7b5879069bf3774eeb487982ca97" + }, + { + "path": "docs/topics/semantic-validation/test-plan.md", + "gitBlob": "b43969d8eb0a884c1663ab761662f9622617bb3b" + }, + { + "path": "docs/topics/syntax/README.md", + "gitBlob": "b2a372bf41b1976567c61f400bf000f33abc20cc" + }, + { + "path": "docs/topics/syntax/test-plan.md", + "gitBlob": "a69efaf12dfe12661fca049b8790b37fa3fb3665" + }, + { + "path": "docs/topics/target-ir/README.md", + "gitBlob": "93b73c18871d68b5ee5290ccbf52cf7f720a88c8" + }, + { + "path": "docs/topics/target-ir/test-plan.md", + "gitBlob": "124306f0b893100e389ff55fe3ffb66d30f7332a" + }, + { + "path": "docs/topics/target-profiles/README.md", + "gitBlob": "6a88f4d732f8069855b2ed2cb9a8769a117b2f60" + }, + { + "path": "docs/topics/target-profiles/test-plan.md", + "gitBlob": "90084c3f3a1296745469cd86e9b5f2bc928825be" + }, + { + "path": "docs/topics/tests/README.md", + "gitBlob": "4ad079b6a9718e2a8446a6c67ff45735015bef84" + }, + { + "path": "docs/topics/tests/test-plan.md", + "gitBlob": "46bc0572d02a41e86f71c6d46baf5be611a462a6" + }, + { + "path": "docs/topics/v2-design/README.md", + "gitBlob": "b33a07599e43e660aa4def7f119ddd02df6a16de" + }, + { + "path": "docs/topics/v2-design/test-plan.md", + "gitBlob": "f17f96d381f81b20842393f70ff55b9597858b84" + }, + { + "path": "editors/README.md", + "gitBlob": "7a933576262bc58bac197f9264fdbf649dd5e696" + }, + { + "path": "editors/vscode/.vscodeignore", + "gitBlob": "f15b3142e4b8af11d580789a0c82acee3499f571" + }, + { + "path": "editors/vscode/README.md", + "gitBlob": "8b29840ae9ec8f618b7364022329f694d0ed9746" + }, + { + "path": "editors/vscode/language-configuration.json", + "gitBlob": "b7f583841649c9c437785edbfcb70ee24e495c79" + }, + { + "path": "editors/vscode/package.json", + "gitBlob": "cd9e391e7c9afb6f9393fcead118e0e55aadc839" + }, + { + "path": "editors/vscode/syntaxes/edict.tmLanguage.json", + "gitBlob": "5847d8edfdb32d822f0f3950f41d00c947982185" + }, + { + "path": "fixtures/README.md", + "gitBlob": "470e3e0fc3aa00654930ecdef892ee9df8a42c8d" + }, + { + "path": "fixtures/authority-facts/canonical/README.md", + "gitBlob": "28692ce70add5d4f2d4ff5318309c3353924caf9" + }, + { + "path": "fixtures/authority-facts/canonical/example-effectful.authority-facts.cbor", + "gitBlob": "fe2e59a8e2602e02c52094010a130db2637c5227" + }, + { + "path": "fixtures/authority-facts/canonical/example-effectful.authority-facts.json", + "gitBlob": "009faa5d2dc1dcf55cf284dcfd14c0b6405f3e0d" + }, + { + "path": "fixtures/authority-facts/canonical/example-effectful.authority-facts.sha256", + "gitBlob": "a3d68f0a3b3a586e85b6a84cbd884866e662951f" + }, + { + "path": "fixtures/bundle/assembly/bounded-hello.bundle-digests.txt", + "gitBlob": "da5402db7bd41dd88c6152b7799723561130c91e" + }, + { + "path": "fixtures/cli/01-source-ok/expected.stdout.jsonl", + "gitBlob": "e08ccf8fdedd3a73beef5d06c443a1bc60274ce1" + }, + { + "path": "fixtures/cli/01-source-ok/request.jsonl", + "gitBlob": "002fea597e6b93c8468d6972b73cc1344600fa87" + }, + { + "path": "fixtures/cli/02-source-parse-rejection/exit", + "gitBlob": "d00491fd7e5bb6fa28c517a0bb32b8b506539d4d" + }, + { + "path": "fixtures/cli/02-source-parse-rejection/expected.stderr.jsonl", + "gitBlob": "1077b73c9a7c02eae99f737bea7b6ff8c64d04da" + }, + { + "path": "fixtures/cli/02-source-parse-rejection/request.jsonl", + "gitBlob": "dce01f0466bd9384fc6f5cbe2845b6e0bd9a9cfd" + }, + { + "path": "fixtures/cli/03-source-semantic-rejection/exit", + "gitBlob": "d00491fd7e5bb6fa28c517a0bb32b8b506539d4d" + }, + { + "path": "fixtures/cli/03-source-semantic-rejection/expected.stderr.jsonl", + "gitBlob": "5ec447700da52d0b4ce1f75825eb9bffaed4884b" + }, + { + "path": "fixtures/cli/03-source-semantic-rejection/request.jsonl", + "gitBlob": "ddfd529e5448760387961febbd4ce013e49de435" + }, + { + "path": "fixtures/cli/04-cli-missing-settings/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/04-cli-missing-settings/expected.stderr.jsonl", + "gitBlob": "5060bd2fd773ba9ea3ea6db8c80b86a846bfadbd" + }, + { + "path": "fixtures/cli/04-cli-missing-settings/request.jsonl", + "gitBlob": "8eb12e58d427bd64ccfe339190e05bdccf4c8634" + }, + { + "path": "fixtures/cli/05-path-input-ok/expected.stdout.jsonl", + "gitBlob": "a05fc582efc41b6414e785167b5deeb7532088ef" + }, + { + "path": "fixtures/cli/05-path-input-ok/inputs/hello.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/05-path-input-ok/request.jsonl", + "gitBlob": "18facaab79dc198134c535df389cba79efe7dce7" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/expected.stdout.jsonl", + "gitBlob": "ef59591526e2084ddf5057249bbc96ab660cf256" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/inputs/a.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/inputs/ignore.txt", + "gitBlob": "ed34ae8da336ff94a67b6125fbd6be730c976d91" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/inputs/nested/b.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/request.jsonl", + "gitBlob": "bd9aad14fe79caccacaa6d00ffd32b5e13b3551f" + }, + { + "path": "fixtures/cli/07-path-list-ok/expected.stdout.jsonl", + "gitBlob": "643ecb3e659c10cb98255ec1aced772778e76eb0" + }, + { + "path": "fixtures/cli/07-path-list-ok/inputs/first.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/07-path-list-ok/inputs/second.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/07-path-list-ok/request.jsonl", + "gitBlob": "f11265b02c5b7559ced4d975471a78b5bef3ee27" + }, + { + "path": "fixtures/cli/08-glob-expansion-ok/expected.stdout.jsonl", + "gitBlob": "90164a7fce6c51abdadef8f0586d2c56113d9712" + }, + { + "path": "fixtures/cli/08-glob-expansion-ok/inputs/x.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/08-glob-expansion-ok/inputs/y.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/08-glob-expansion-ok/request.jsonl", + "gitBlob": "9335acf3a008ab8fb9942b3e22d73c456ed3827e" + }, + { + "path": "fixtures/cli/09-shape-source-ok/expected.stdout.jsonl", + "gitBlob": "ac6f9259502ebfe484e1c07a5f53865888dd8207" + }, + { + "path": "fixtures/cli/09-shape-source-ok/request.jsonl", + "gitBlob": "64c75d9a7b40985bacf0e59a943a16e20419c602" + }, + { + "path": "fixtures/cli/10-input-extra-field/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/10-input-extra-field/expected.stderr.jsonl", + "gitBlob": "2f5a8fba093b71d15a5b37504ad0352191c8299c" + }, + { + "path": "fixtures/cli/10-input-extra-field/request.jsonl", + "gitBlob": "6052212c652d41f03144a7d3d4018b1cdd18cd09" + }, + { + "path": "fixtures/cli/11-input-hybrid-kind/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/11-input-hybrid-kind/expected.stderr.jsonl", + "gitBlob": "7b6d2ac0c8afbf5e3991498846c2fc4847ac9453" + }, + { + "path": "fixtures/cli/11-input-hybrid-kind/request.jsonl", + "gitBlob": "b893b640aa6631c77f2a889a807afa31632ac2db" + }, + { + "path": "fixtures/cli/12-input-too-large/env.json", + "gitBlob": "ab0c7f13fc6b22d61fc73da2f1787ff3aa298ecb" + }, + { + "path": "fixtures/cli/12-input-too-large/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/12-input-too-large/expected.stderr.jsonl", + "gitBlob": "ebda022d79c978d4ff511579512be2c642e3e902" + }, + { + "path": "fixtures/cli/12-input-too-large/request.jsonl", + "gitBlob": "1e2fbb102503356bbcc627f49a5b58590859f170" + }, + { + "path": "fixtures/cli/13-input-root-outside/allowed/.gitkeep", + "gitBlob": "8b137891791fe96927ad78e64b0aad7bded08bdc" + }, + { + "path": "fixtures/cli/13-input-root-outside/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/13-input-root-outside/expected.stderr.jsonl", + "gitBlob": "9c5b8567a755c9ea2ee6e0168bf96f429185f675" + }, + { + "path": "fixtures/cli/13-input-root-outside/outside/outside.edict", + "gitBlob": "44abebc15811c38cc266007484dd74ae10a26a4d" + }, + { + "path": "fixtures/cli/13-input-root-outside/request.jsonl", + "gitBlob": "116dbbb4b1a80938bc042e41747872cb6da161cd" + }, + { + "path": "fixtures/cli/README.md", + "gitBlob": "9388df4182fedec41c353e85cf9210e88906fa3d" + }, + { + "path": "fixtures/core/canonical/README.md", + "gitBlob": "d9a0ca79557c3623c0b843d9eff4808f94fd7b18" + }, + { + "path": "fixtures/core/canonical/bounded-hello.core.cbor", + "gitBlob": "a0ec54aa1a5e20624192091526445cfd803e6f0c" + }, + { + "path": "fixtures/core/canonical/bounded-hello.core.sha256", + "gitBlob": "86ba062c26a3ad3fd733ccd8c80d7faa7ed62d94" + }, + { + "path": "fixtures/core/canonical/statement-branch.core.hex", + "gitBlob": "c22760cace0e4d146a2fdc8d7c7b50c38497622a" + }, + { + "path": "fixtures/core/canonical/statement-branch.core.sha256", + "gitBlob": "0b62657b192232390479319f0a1c8f601020a58f" + }, + { + "path": "fixtures/core/canonical/workspace-snapshot.core.cbor", + "gitBlob": "58e4f724610861f5b61537bf386a87062e8a57a7" + }, + { + "path": "fixtures/core/canonical/workspace-snapshot.core.sha256", + "gitBlob": "4bcb3e0813cd3f4a7afc7cf311d846f1dfdd0a9d" + }, + { + "path": "fixtures/core/schema/accepted/core-fn-body-minimal.fields", + "gitBlob": "bef3ca412ab0ea97465b8658499ae5e05e1ec760" + }, + { + "path": "fixtures/core/schema/accepted/core-intent-minimal.fields", + "gitBlob": "268b28ce942fed4f139aafe5c7cd50c15a0ee640" + }, + { + "path": "fixtures/core/schema/accepted/core-module-minimal.fields", + "gitBlob": "249ff76349f936c9a5ff6cb65d81de8e80d53de8" + }, + { + "path": "fixtures/core/schema/rejected/core-fn-body-effect-node-field.fields", + "gitBlob": "9af8fa3540b25ec810936bc4dc82e26f6dd0dd48" + }, + { + "path": "fixtures/core/schema/rejected/core-intent-unknown-verified-mode.fields", + "gitBlob": "667ae032ee117f32c1bcbafd21393e406621f517" + }, + { + "path": "fixtures/core/schema/rejected/core-module-missing-intents.fields", + "gitBlob": "17f37c7ac4c199de4eace7f31e6a59b9a6d3a0f6" + }, + { + "path": "fixtures/core/schema/rejected/local-ref-missing-alpha-name.fields", + "gitBlob": "456a89528ffe74d892be40c9c9be4a078ff5c18a" + }, + { + "path": "fixtures/lang/bounds/bounded-hello.edict", + "gitBlob": "e3443a1d3b1c8f0e137ac698b621dd2f3afb673b" + }, + { + "path": "fixtures/lang/effects/conditional-blob.edict", + "gitBlob": "1e4f2ca6112f26d57ee4d20058666ec7cd693b75" + }, + { + "path": "fixtures/lang/effects/read-greeting.edict", + "gitBlob": "5e3838d1547be171e0a0384a7a200f52a2b9d139" + }, + { + "path": "fixtures/lang/external-actions/workspace-snapshot.edict", + "gitBlob": "e54b0fbccad2fd680505f3ee46ca28d39d7e776e" + }, + { + "path": "fixtures/lang/operations/explicit-basis-u64.edict", + "gitBlob": "444d8ca77b9827746df81885f0620dce2d1a3b73" + }, + { + "path": "fixtures/lang/tooling/highlight-smoke.edict", + "gitBlob": "8c2d91084be22e5e1594a42159992aca95c73612" + }, + { + "path": "fixtures/lang/types/color-match.edict", + "gitBlob": "dd98d6de677904f36d7601165a0094d92928e536" + }, + { + "path": "fixtures/lawpack/causal-cell/README.md", + "gitBlob": "52e8cc1e2af8aea86c1090a1b20b5f5ab3e07c06" + }, + { + "path": "fixtures/lawpack/causal-cell/adapter.cbor", + "gitBlob": "3b0c8b1b3a8591a322b6e785d9f963899319310c" + }, + { + "path": "fixtures/lawpack/causal-cell/adapter.sha256", + "gitBlob": "f8231bc941e1fbe02279865a82e183cbeeb0988a" + }, + { + "path": "fixtures/lawpack/causal-cell/echo-operation-configuration.cbor", + "gitBlob": "24527d30d0146b567fda157561ac6a2587cae919" + }, + { + "path": "fixtures/lawpack/causal-cell/echo-operation-configuration.sha256", + "gitBlob": "d293c8a14b1955a3e171703400c4df620c7871a1" + }, + { + "path": "fixtures/lawpack/causal-cell/exports.cbor", + "gitBlob": "384f4839adfe8e5b0f1aa848bfe2aeb1c3f640b6" + }, + { + "path": "fixtures/lawpack/causal-cell/exports.sha256", + "gitBlob": "4f836f6b03497338a1f8eacc55480cbe1a3b49e9" + }, + { + "path": "fixtures/lawpack/causal-cell/manifest.cbor", + "gitBlob": "b9311a236d7898861a0b90b1f30b852b35cef623" + }, + { + "path": "fixtures/lawpack/causal-cell/manifest.sha256", + "gitBlob": "685fd6a6c72fc3100d595d009b6198a81c731a40" + }, + { + "path": "fixtures/lawpack/hello-echo/README.md", + "gitBlob": "79f6612f1f5608a8f7dc4835e5470878cd27f96e" + }, + { + "path": "fixtures/lawpack/hello-echo/adapter.cbor", + "gitBlob": "24e2f546e2b97747b53462a72faaa1d5d85d62f1" + }, + { + "path": "fixtures/lawpack/hello-echo/adapter.sha256", + "gitBlob": "91df491028061e026ecaaeb4e1598e2ac369af44" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.core.cbor", + "gitBlob": "246b6135855c415def0bd89b275f0457752ee563" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.core.sha256", + "gitBlob": "9adc71605e0a275349161809614bd17de97d129c" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.edict", + "gitBlob": "825d50565230bd71d62bfbeb59d0399a89864b4c" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.result-projection.cbor", + "gitBlob": "981cba6e1c7ab6bdae6829116749c4796167e4e6" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.result-projection.sha256", + "gitBlob": "d55e4083771e1d9791f59cf87fd5cc5f1ea3b9f4" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.target-ir.cbor", + "gitBlob": "c8a934cefec17dbab0a43d9be9cebd2533268798" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.target-ir.sha256", + "gitBlob": "20186cbe9482e8a7df7c44fabec13ffd4efbcf36" + }, + { + "path": "fixtures/lawpack/hello-echo/echo-operation-configuration.cbor", + "gitBlob": "84838ab0d8627237232fa5a9b9fa39087bcc5f8a" + }, + { + "path": "fixtures/lawpack/hello-echo/echo-operation-configuration.sha256", + "gitBlob": "0898688f14067560dd22abd04b97f020071fd3e8" + }, + { + "path": "fixtures/lawpack/hello-echo/exports.cbor", + "gitBlob": "0e1220ceed9442a7b35870eeb02fcb65454d8c5c" + }, + { + "path": "fixtures/lawpack/hello-echo/exports.sha256", + "gitBlob": "e1f3e9223de9ce935bc7f60dda3cfa7d12d54fdc" + }, + { + "path": "fixtures/lawpack/hello-echo/manifest.cbor", + "gitBlob": "d715900f03ec454a0ad96e6710f52a46120d0b9d" + }, + { + "path": "fixtures/lawpack/hello-echo/manifest.sha256", + "gitBlob": "20171199b401cecace2dd74e18f3cc1d5c7ed3de" + }, + { + "path": "fixtures/lawpack/workspace-patch/README.md", + "gitBlob": "67cd35f2e0660aa7455de1c197ad821d5438679b" + }, + { + "path": "fixtures/lawpack/workspace-patch/adapter.cbor", + "gitBlob": "2d6f09a7e2fab381b97a05cfad1e692902e878c3" + }, + { + "path": "fixtures/lawpack/workspace-patch/adapter.sha256", + "gitBlob": "d44eb9675e126716e8a5ef3c53fd39ade49d76fb" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.core.cbor", + "gitBlob": "6a88c127e426288a3e51d4749d5c31d5b0cb60cb" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.core.sha256", + "gitBlob": "0204b6f1d8b346a67800a7738ee39df49e78571f" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.edict", + "gitBlob": "6e11a3d022a53a8fb2c20a77e35e29840f5fe086" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.cbor", + "gitBlob": "a6124a995a3cdbb5d39cd0a6e046b329048703aa" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.sha256", + "gitBlob": "f7ac419ce15b32d491e09bddbe7c75f8227f51d8" + }, + { + "path": "fixtures/lawpack/workspace-patch/exports.cbor", + "gitBlob": "3a6fd19dc8059b9fe1bde74fb1da61398b0e80cc" + }, + { + "path": "fixtures/lawpack/workspace-patch/exports.sha256", + "gitBlob": "b301dd883a31fffe324e9306ec90ae2b1ec44520" + }, + { + "path": "fixtures/lawpack/workspace-patch/input-schema.cbor", + "gitBlob": "3045d9b696864fefe111c3eb641b3b68532752d2" + }, + { + "path": "fixtures/lawpack/workspace-patch/input-schema.sha256", + "gitBlob": "9f1284b4f0a2c7f6dbe1915a6113cd13a9700cb8" + }, + { + "path": "fixtures/lawpack/workspace-patch/manifest.cbor", + "gitBlob": "77e56c7525f0e64ab191f0adfeac12b540c87848" + }, + { + "path": "fixtures/lawpack/workspace-patch/manifest.sha256", + "gitBlob": "8316978e68565f29a30a6978d33d907710185857" + }, + { + "path": "fixtures/lawpack/workspace-patch/reconciliation-law.cbor", + "gitBlob": "0736b75f81913fca7ac95c56ec45f66b95aea4cf" + }, + { + "path": "fixtures/lawpack/workspace-patch/reconciliation-law.sha256", + "gitBlob": "de31fc9fda59fa3c29397e5fc48db224e8e1fee7" + }, + { + "path": "fixtures/lawpack/workspace-patch/request-profile-configuration.cbor", + "gitBlob": "5e2870b2f562bafaa73a91a3fc192f5ed39257c7" + }, + { + "path": "fixtures/lawpack/workspace-patch/request-profile-configuration.sha256", + "gitBlob": "4345ae2e39ce3f4d9cfa6b0dddf4ce56d56c035c" + }, + { + "path": "fixtures/lawpack/workspace-patch/settlement-schema.cbor", + "gitBlob": "0a93ac19c51b341602eeba524769147e962d5d60" + }, + { + "path": "fixtures/lawpack/workspace-patch/settlement-schema.sha256", + "gitBlob": "f1bb3fb0313dd6815b4184345194949ec40fe9e1" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/README.md", + "gitBlob": "996bd1d29b28769fff477084d9118d0833ca2970" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/adapter.cbor", + "gitBlob": "9be4ea568b602b56269af505deb809989a3fa8b5" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/adapter.sha256", + "gitBlob": "1e287be0a322e5444dea15fa14bcfc7cf12975c4" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/exports.cbor", + "gitBlob": "33fe04db74775c191d4b7400e1fb2b6393c5a010" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/exports.sha256", + "gitBlob": "e057cac7fc360e6599b7ddab88508aaf0f2f55f8" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/input-schema.cbor", + "gitBlob": "49c849169946e44c8b5f300279dd085bd6b63aeb" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/input-schema.sha256", + "gitBlob": "9dd7bb6e48192e90d19fc346d1705f736b1d85d7" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/manifest.cbor", + "gitBlob": "d4e58e3d4646ca967170a6882f2a617cb8d81390" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/manifest.sha256", + "gitBlob": "0edb311125a89a5816ee3fa0c9b700c9b3bcff3d" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.core.cbor", + "gitBlob": "a4b249dfb197f1a6b4adc06855f16e4305a1c798" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.core.sha256", + "gitBlob": "ea6b914d14907d9fd915058e579aff33c954da2c" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.edict", + "gitBlob": "c2c10f1ef1009796d67061b9722c4db9bb4e031b" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.cbor", + "gitBlob": "bdab1b0c55a34360c7e9ab304af91fe2b1e4afce" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.sha256", + "gitBlob": "7342aaa96221d6c8efa75ead2af5563791ccfeff" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/reconciliation-law.cbor", + "gitBlob": "df55572b350002a3df98ccb3e72dd60c86b9aead" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/reconciliation-law.sha256", + "gitBlob": "957cd04c78c130b07d2cad2fd7e07ae69978be57" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/request-profile-configuration.cbor", + "gitBlob": "708f18918ee1703491a910df82e129e711a4cc46" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/request-profile-configuration.sha256", + "gitBlob": "d9953d9dcaa41c98387226d1980f40b24d2bc3cb" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/settlement-schema.cbor", + "gitBlob": "f01ad68531267666e6bf93bf30a37d5b311c1676" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/settlement-schema.sha256", + "gitBlob": "06fcc0ee2b976a09b3017bd93132a3c51eb1317e" + }, + { + "path": "fixtures/obstruction-strands/v0/stale-basis/README.md", + "gitBlob": "25efbfa04e2e6104c5434f329128333e895e2b0a" + }, + { + "path": "fixtures/obstruction-strands/v0/stale-basis/source.edict", + "gitBlob": "e487b46e81220c50e6f928922dada29f3a21ca6a" + }, + { + "path": "fixtures/provider-contracts/v1/README.md", + "gitBlob": "447692907f9268ce3b6b78c43b7cbbb0417aeadf" + }, + { + "path": "fixtures/provider-contracts/v1/edict-provider-contracts.cddl", + "gitBlob": "07048aeeadb5062eabb89e995713cbc0893b7d7e" + }, + { + "path": "fixtures/provider-contracts/v1/manifest.json", + "gitBlob": "d2c8de5d61049e9f4182c630bf82b138f0f96792" + }, + { + "path": "fixtures/providers/README.md", + "gitBlob": "c26ee60a4930e3e0784c76cb855e48234a5c6b58" + }, + { + "path": "fixtures/providers/components/guests/Cargo.lock", + "gitBlob": "d7858ce7bc67deabb5ff352a24c85a7caa0ef4b0" + }, + { + "path": "fixtures/providers/components/guests/Cargo.toml", + "gitBlob": "450a24aed25dc73661b0ae8adfe2630dfecc9b07" + }, + { + "path": "fixtures/providers/components/guests/lowerer/Cargo.toml", + "gitBlob": "568aa137fa215b6b973fe31e12322530b393b9dc" + }, + { + "path": "fixtures/providers/components/guests/lowerer/src/lib.rs", + "gitBlob": "b39a8a0b18fe9ed7cb90277f793056434afa1318" + }, + { + "path": "fixtures/providers/components/guests/verifier/Cargo.toml", + "gitBlob": "f814f2c8c248bbf03389f5a0936f80cd4dada5b6" + }, + { + "path": "fixtures/providers/components/guests/verifier/src/lib.rs", + "gitBlob": "3f07ffdfd808ff95b206a2c08c2d481ccaf0e165" + }, + { + "path": "fixtures/providers/components/instantiation-failure-lowerer.component.wasm", + "gitBlob": "bd2d7c0d31798d7676aedab0bd0d289fc2053bef" + }, + { + "path": "fixtures/providers/components/instantiation-failure-lowerer.wat", + "gitBlob": "f6f5a70edb80d3a7fa1dee13b34ab5b8b44274d7" + }, + { + "path": "fixtures/providers/components/instantiation-fuel-lowerer.component.wasm", + "gitBlob": "0804d26d3ddb428682ca87ecad03cf0e05ef64af" + }, + { + "path": "fixtures/providers/components/instantiation-fuel-lowerer.wat", + "gitBlob": "80e972463ef593602d27c7d7cec78d87d22ff727" + }, + { + "path": "fixtures/providers/components/inventory.json", + "gitBlob": "45cf2e8e937a17a8ee05dfa8d68e94dcc155e129" + }, + { + "path": "fixtures/providers/components/lowerer.component.wasm", + "gitBlob": "6c1cf123a44284d15b7b1e90f1905ae94e65c158" + }, + { + "path": "fixtures/providers/components/malformed-lowerer.component.wasm", + "gitBlob": "be873af81100dc76ed1f3f1f818a41da45a38e4c" + }, + { + "path": "fixtures/providers/components/malformed-lowerer.wat", + "gitBlob": "1e7bfffe0a0baf230d9fb5766083f82198f4029c" + }, + { + "path": "fixtures/providers/components/verifier.component.wasm", + "gitBlob": "671adbe7931d0a9a5e0c78d459c244d37a135a69" + }, + { + "path": "fixtures/providers/echo-generated/provider-manifest.json", + "gitBlob": "22c8560e7ddecacd5da388e52d3935d7fc1474b9" + }, + { + "path": "fixtures/providers/echo-target-profile/README.md", + "gitBlob": "350c33dcda2d66d2d50e589c58db7c6d7b14a80b" + }, + { + "path": "fixtures/providers/echo-target-profile/generated/primary/target-profile.echo-dpo.cbor", + "gitBlob": "9fa43529b1021dfd8e3a33256c832d4eee6f4a47" + }, + { + "path": "fixtures/providers/wit/legacy-target-profile.wit", + "gitBlob": "ae7d6af764012b16bf06bfa260ccba98a7f04868" + }, + { + "path": "fixtures/target-ir/canonical/echo-effectful.target-ir.cbor", + "gitBlob": "727a80eb37319dbdbea40d7d9b4e37f0d93d8d84" + }, + { + "path": "fixtures/target-ir/canonical/echo-effectful.target-ir.sha256", + "gitBlob": "6d050bb46ac8981ea8e47c7a52371027b941fd89" + }, + { + "path": "fixtures/target-ir/canonical/gitwarp-append.target-ir.cbor", + "gitBlob": "89b46b138a7b90252a4397c0e8b622bceff10a33" + }, + { + "path": "fixtures/target-ir/canonical/gitwarp-append.target-ir.sha256", + "gitBlob": "a59a4ab9d46095d5be1797ed9e60fe841f821bce" + }, + { + "path": "fixtures/target-ir/canonical/workspace-snapshot.target-ir.cbor", + "gitBlob": "1854eeb549b3719fa2b0114867dbece6db1819d4" + }, + { + "path": "fixtures/target-ir/canonical/workspace-snapshot.target-ir.sha256", + "gitBlob": "4d0e501323d415ef9e64c0a3d25bdd57dabfc998" + }, + { + "path": "fixtures/target-profile/contract-resources/README.md", + "gitBlob": "32dcab1dd9376a4eed2c73bb1b1a29255fe3ea05" + }, + { + "path": "fixtures/target-profile/contract-resources/canonical-cbor.cbor", + "gitBlob": "4a95ba3bd9dff190ca5ec9c83262bfa6254a91d3" + }, + { + "path": "fixtures/target-profile/contract-resources/canonical-cbor.sha256", + "gitBlob": "2168df5d4bf77ed2347139dd7c45fd808df8ec7e" + }, + { + "path": "fixtures/target-profile/contract-resources/determinism.cbor", + "gitBlob": "09cd11c36048939961408550763c04fad8241557" + }, + { + "path": "fixtures/target-profile/contract-resources/determinism.sha256", + "gitBlob": "5376d6bfe23bea659463a7e3c56ad1e8afd4095f" + }, + { + "path": "fixtures/target-profile/contract-resources/diagnostics.cbor", + "gitBlob": "c47fa05f463e0da745fbcdf8daf94d70e134eb8d" + }, + { + "path": "fixtures/target-profile/contract-resources/diagnostics.sha256", + "gitBlob": "69613ec4014f27b23245e23fbf7c9447566516b2" + }, + { + "path": "fixtures/target-profile/contract-resources/fuel.cbor", + "gitBlob": "b5a3484ec5b2bf7343c2fcedc67bcb2b63a37104" + }, + { + "path": "fixtures/target-profile/contract-resources/fuel.sha256", + "gitBlob": "6ec1c830358ee35bb12bd04cc1a6edf47fb20997" + }, + { + "path": "fixtures/target-profile/contract-resources/wasm-component.cbor", + "gitBlob": "6344996c283e0d1c332ea3ce597ad4593882a3c5" + }, + { + "path": "fixtures/target-profile/contract-resources/wasm-component.sha256", + "gitBlob": "24bf3e552e4216d8258d2b85c8878af46a176c52" + }, + { + "path": "grammars/textmate/README.md", + "gitBlob": "fc116a669725d4e965d658234d32d779955d5dc8" + }, + { + "path": "grammars/textmate/edict.tmLanguage.json", + "gitBlob": "5847d8edfdb32d822f0f3950f41d00c947982185" + }, + { + "path": "grammars/tree-sitter-edict/README.md", + "gitBlob": "e2992a839d6719f1461db78c4e3f33d2e5ab0c09" + }, + { + "path": "grammars/tree-sitter-edict/grammar.js", + "gitBlob": "a82f5b9d9b78525f17a59272543fdcddd7a0da40" + }, + { + "path": "grammars/tree-sitter-edict/queries/highlights.scm", + "gitBlob": "0f46530b36996d13449901aed4e376a126577cba" + }, + { + "path": "grammars/tree-sitter-edict/src/grammar.json", + "gitBlob": "55df730a06b83c9f622e3ec17845fc9897c7d8c0" + }, + { + "path": "grammars/tree-sitter-edict/src/node-types.json", + "gitBlob": "520f6c4f7b30cd6892dd60faf6d76f3fbaa6a5c7" + }, + { + "path": "grammars/tree-sitter-edict/src/parser.c", + "gitBlob": "81cc4713cb5e05f9aa8dac16da202a864faefee6" + }, + { + "path": "grammars/tree-sitter-edict/src/tree_sitter/alloc.h", + "gitBlob": "1abdd1201578605b8d05a3001f01ebc0d58826d9" + }, + { + "path": "grammars/tree-sitter-edict/src/tree_sitter/array.h", + "gitBlob": "56fc8cd470996ded64a5452be25e26dbd2aa682a" + }, + { + "path": "grammars/tree-sitter-edict/src/tree_sitter/parser.h", + "gitBlob": "858107deb9e4a1ffcd2ed5e6ffe98a5fcab3e1f6" + }, + { + "path": "grammars/tree-sitter-edict/test/corpus/current-subset.txt", + "gitBlob": "732c5eda8e1bf95eef799476296a6ee061eb58eb" + }, + { + "path": "grammars/tree-sitter-edict/tree-sitter.json", + "gitBlob": "97d3fdd498a3bef509c8615d98b9560b527c03cb" + }, + { + "path": "scripts/consumer-witnesses/README.md", + "gitBlob": "2b7d2b9d81f9598fd8df232b3a76bef106ff7ef2" + }, + { + "path": "scripts/consumer-witnesses/jedit-state-read.Dockerfile", + "gitBlob": "7462059be67686090d0097b24b9d14bfbbd4c6f7" + }, + { + "path": "scripts/consumer-witnesses/jedit-state-read.Dockerfile.dockerignore", + "gitBlob": "ee41b3ca0a68fd5eb20e1b777b4b368fd8b44e63" + }, + { + "path": "scripts/consumer-witnesses/jedit-state-read.py", + "gitBlob": "26db295d4eabfc4e57813fc9bf17314c23350777" + }, + { + "path": "scripts/consumer-witnesses/run-jedit-state-read.sh", + "gitBlob": "18cd72bbbdfb17a5ea30a7821d47035071556d10" + }, + { + "path": "spec.lock.json", + "gitBlob": "ef8b02386e0f269a99c1d2121764f70b76e67620" + }, + { + "path": "xtask/Cargo.toml", + "gitBlob": "795c70a5172363bfcd55174b1bc76c9c131d21a3" + }, + { + "path": "xtask/src/contract_check.rs", + "gitBlob": "9e80393accf79936033972fde0f2aa2cf40f1be3" + }, + { + "path": "xtask/src/goldens.rs", + "gitBlob": "713f1f8266d9f6993684ae86db105fcd7d69ee2a" + }, + { + "path": "xtask/src/lawpack_goldens.rs", + "gitBlob": "c499e8581c73313794b83c261937144b3917850a" + }, + { + "path": "xtask/src/main.rs", + "gitBlob": "6c2c06038bb5ecdde60620071b200d8191dc116c" + }, + { + "path": "xtask/src/provider_components.rs", + "gitBlob": "ee9d6a1028f9fbfad879faab4b15a94b996ef6d4" + }, + { + "path": "xtask/src/provider_contract_pack.rs", + "gitBlob": "cf60d89892b7a57cc33300f273d2522a6e8f43f9" + }, + { + "path": "xtask/src/provider_dependencies.rs", + "gitBlob": "c4b0539ed593d2a2777d294090d2a891b13ae628" + }, + { + "path": "xtask/src/release_dates.rs", + "gitBlob": "1c6d7acb872f6d820eab3a30ca580e9c5cfba2ee" + }, + { + "path": "xtask/src/release_prep.rs", + "gitBlob": "01ed64ccbb28c9d1e908b7b800ff58076e5e1a2b" + }, + { + "path": "xtask/src/tests.rs", + "gitBlob": "9a3f6543c2dbae31d53e93d56f781e5d54f74f41" + }, + { + "path": "xtask/src/util.rs", + "gitBlob": "c1bf39e93460c43ffdcfd9a76e0424750cbb9dfd" + } + ] +} diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/first-control/application/executable-operation-package.cbor b/edict/replace-range-probes/range-assembly/evidence/candidate/first-control/application/executable-operation-package.cbor new file mode 100644 index 00000000..0b860cf3 Binary files /dev/null and b/edict/replace-range-probes/range-assembly/evidence/candidate/first-control/application/executable-operation-package.cbor differ diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/first-control/application/verification-report.cbor b/edict/replace-range-probes/range-assembly/evidence/candidate/first-control/application/verification-report.cbor new file mode 100644 index 00000000..d3afb3f9 Binary files /dev/null and b/edict/replace-range-probes/range-assembly/evidence/candidate/first-control/application/verification-report.cbor differ diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/first-control/stderr.jsonl b/edict/replace-range-probes/range-assembly/evidence/candidate/first-control/stderr.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/first-control/stdout.jsonl b/edict/replace-range-probes/range-assembly/evidence/candidate/first-control/stdout.jsonl new file mode 100644 index 00000000..a668538e --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/first-control/stdout.jsonl @@ -0,0 +1 @@ +{"checked":1,"command":"build","errors":0,"exitCode":0,"schema":"edict.cli.event/v1","status":"ok","type":"status"} diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/git-locks-receipt.jsonl b/edict/replace-range-probes/range-assembly/evidence/candidate/git-locks-receipt.jsonl new file mode 100644 index 00000000..64b0a110 --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/git-locks-receipt.jsonl @@ -0,0 +1,2 @@ +{"event":"claimed","job":"80747C0A-6071-48B4-AD6C-A901D092CD12","holder":"jim-edict-authoring","note":"Jim RangeAssembly exact source candidate compiler public replay","claimed":1791162935,"expires":1791163835,"paths":["host/docker/echo-read-runtime/","host/heavy-work"],"record":"09627a715eea26c0ac88988e4b6d392ac4492232","acquisition":"1791162935-84725-3066529233"} +{"event":"released","job":"80747C0A-6071-48B4-AD6C-A901D092CD12","paths":2} diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/guard.log b/edict/replace-range-probes/range-assembly/evidence/candidate/guard.log new file mode 100644 index 00000000..f1ca3e7e --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/guard.log @@ -0,0 +1,5 @@ +{"artifactSha256": {"executable-operation-package.cbor": "1860ab8a6cb9a4bfd63a1db99d1c2bc00aa53dae52a9d1998295654379a95d85", "verification-report.cbor": "d96e5d21eecbc1e5bbf6ce76ab438d55cc8e74f6843121d4ffb0f4343e648267"}, "artifacts": ["executable-operation-package.cbor", "verification-report.cbor"], "case": "baseline", "diagnostics": [], "exitCode": 0, "sourceSha256": "51797e77062585a9f59083ee8a1da3faaf486ef7691e1b62203369a9d9356ee0", "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61"} +{"artifactSha256": {"executable-operation-package.cbor": "d950cebad1bb978e24dfa736efab302eb0f5c96135cb32f27ad8781d6ace6b51", "verification-report.cbor": "412fb923e3dbd3f070624446ae953920058e08eda5fdc94f201d9b475842c803"}, "artifacts": ["executable-operation-package.cbor", "verification-report.cbor"], "case": "first-control", "diagnostics": [], "exitCode": 0, "sourceSha256": "fa207e40f734fce99c581efbc5159a276c95e7b399d3acce854829ace05c6d2e", "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61"} +{"artifactSha256": {"executable-operation-package.cbor": "e75c18f7265ea8fd7390e2e2d4ff49047323e99a07602d80442659d636fd61f4", "verification-report.cbor": "463a47e58e00390937c565413305b4ec553928b86aae2979fbcbf631b55961d9"}, "artifacts": ["executable-operation-package.cbor", "verification-report.cbor"], "case": "second-control", "diagnostics": [], "exitCode": 0, "sourceSha256": "b7bdfce283a977bf2a04ec95d278138a9fbcaeb3e5eedefb909b6d617b1cf8c0", "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61"} +{"artifactSha256": {"executable-operation-package.cbor": "e889d4680435139fe76f45762f0529c090afcf3d73ef7d17f787d44a49bda534", "verification-report.cbor": "7eec90854e0663aa2346ec5005ff7d05eeb50fc2229b32b407dda3cfa0280077"}, "artifacts": ["executable-operation-package.cbor", "verification-report.cbor"], "case": "assembly", "diagnostics": [], "exitCode": 0, "sourceSha256": "8e8d2703759fb30cb49b73650ba8ddfd637d68b33b86145661bfca3033c968fc", "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61"} +JIM_RANGE_ASSEMBLY_CANDIDATE_OBSERVED package-and-report-produced diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/guard.result.json b/edict/replace-range-probes/range-assembly/evidence/candidate/guard.result.json new file mode 100644 index 00000000..1a395a0b --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/guard.result.json @@ -0,0 +1,10 @@ +{ + "measurements": { + "build": 7053634163, + "data": 2900191859, + "logs": 8645095, + "host_free": 718933827584, + "vm_free": 684305022976 + }, + "exit_code": 0 +} \ No newline at end of file diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/portable-git-locks-receipt.jsonl b/edict/replace-range-probes/range-assembly/evidence/candidate/portable-git-locks-receipt.jsonl new file mode 100644 index 00000000..756508a7 --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/portable-git-locks-receipt.jsonl @@ -0,0 +1,2 @@ +{"event":"claimed","job":"A26105DF-83F3-425C-9B47-9AF022715D45","holder":"jim-edict-authoring","note":"Replay portable RangeAssembly package harness and preserve exact evidence","claimed":1791163732,"expires":1791164632,"paths":["host/docker/echo-read-runtime/","host/heavy-work"],"record":"70633e7bdf3697cf733b40aec3f88e420104b419","acquisition":"1791163732-09781-0278023995"} +{"event":"released","job":"A26105DF-83F3-425C-9B47-9AF022715D45","paths":2} diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/portable-guard.log b/edict/replace-range-probes/range-assembly/evidence/candidate/portable-guard.log new file mode 100644 index 00000000..a0427953 --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/portable-guard.log @@ -0,0 +1,5 @@ +{"artifactSha256": {"executable-operation-package.cbor": "1860ab8a6cb9a4bfd63a1db99d1c2bc00aa53dae52a9d1998295654379a95d85", "verification-report.cbor": "d96e5d21eecbc1e5bbf6ce76ab438d55cc8e74f6843121d4ffb0f4343e648267"}, "artifacts": ["executable-operation-package.cbor", "verification-report.cbor"], "case": "baseline", "diagnostics": [], "exitCode": 0, "sourceSha256": "51797e77062585a9f59083ee8a1da3faaf486ef7691e1b62203369a9d9356ee0", "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61"} +{"artifactSha256": {"executable-operation-package.cbor": "d950cebad1bb978e24dfa736efab302eb0f5c96135cb32f27ad8781d6ace6b51", "verification-report.cbor": "412fb923e3dbd3f070624446ae953920058e08eda5fdc94f201d9b475842c803"}, "artifacts": ["executable-operation-package.cbor", "verification-report.cbor"], "case": "first-control", "diagnostics": [], "exitCode": 0, "sourceSha256": "fa207e40f734fce99c581efbc5159a276c95e7b399d3acce854829ace05c6d2e", "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61"} +{"artifactSha256": {"executable-operation-package.cbor": "e75c18f7265ea8fd7390e2e2d4ff49047323e99a07602d80442659d636fd61f4", "verification-report.cbor": "463a47e58e00390937c565413305b4ec553928b86aae2979fbcbf631b55961d9"}, "artifacts": ["executable-operation-package.cbor", "verification-report.cbor"], "case": "second-control", "diagnostics": [], "exitCode": 0, "sourceSha256": "b7bdfce283a977bf2a04ec95d278138a9fbcaeb3e5eedefb909b6d617b1cf8c0", "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61"} +{"artifactSha256": {"executable-operation-package.cbor": "e889d4680435139fe76f45762f0529c090afcf3d73ef7d17f787d44a49bda534", "verification-report.cbor": "7eec90854e0663aa2346ec5005ff7d05eeb50fc2229b32b407dda3cfa0280077"}, "artifacts": ["executable-operation-package.cbor", "verification-report.cbor"], "case": "assembly", "diagnostics": [], "exitCode": 0, "sourceSha256": "8e8d2703759fb30cb49b73650ba8ddfd637d68b33b86145661bfca3033c968fc", "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61"} +JIM_RANGE_ASSEMBLY_PACKAGE_BOUNDARY_CONFIRMED diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/portable-guard.result.json b/edict/replace-range-probes/range-assembly/evidence/candidate/portable-guard.result.json new file mode 100644 index 00000000..a13a0edc --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/portable-guard.result.json @@ -0,0 +1,10 @@ +{ + "measurements": { + "build": 7060787839, + "data": 2904236671, + "logs": 8950064, + "host_free": 718894419968, + "vm_free": 683224801280 + }, + "exit_code": 0 +} \ No newline at end of file diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/portable-public-build.json b/edict/replace-range-probes/range-assembly/evidence/candidate/portable-public-build.json new file mode 100644 index 00000000..f23fd1cf --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/portable-public-build.json @@ -0,0 +1,72 @@ +{ + "compiler": { + "commit": "01dc5abb9a8a74f8fd8b0e0a6d1041d0adb86d6e", + "tree": "74e571125a1da6ac5b2eac80944e343811708d51", + "fileCount": 449, + "manifestSha256": "bce253363396aad59ed3a7e51634ab1cc357c80972fc8e1ebad3a004fff3de11", + "binarySha256": "e2700698829b03f437c66425ed9878b002ef7a34ac183a39bac4eaf6a758cc6d" + }, + "providerManifestSha256": "c5b9fb2fe3a0dc4dad282621a97413225c555be0071f3502b3272952069d42dc", + "results": { + "baseline": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "51797e77062585a9f59083ee8a1da3faaf486ef7691e1b62203369a9d9356ee0", + "artifactSha256": { + "executable-operation-package.cbor": "1860ab8a6cb9a4bfd63a1db99d1c2bc00aa53dae52a9d1998295654379a95d85", + "verification-report.cbor": "d96e5d21eecbc1e5bbf6ce76ab438d55cc8e74f6843121d4ffb0f4343e648267" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "first-control": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "fa207e40f734fce99c581efbc5159a276c95e7b399d3acce854829ace05c6d2e", + "artifactSha256": { + "executable-operation-package.cbor": "d950cebad1bb978e24dfa736efab302eb0f5c96135cb32f27ad8781d6ace6b51", + "verification-report.cbor": "412fb923e3dbd3f070624446ae953920058e08eda5fdc94f201d9b475842c803" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "second-control": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "b7bdfce283a977bf2a04ec95d278138a9fbcaeb3e5eedefb909b6d617b1cf8c0", + "artifactSha256": { + "executable-operation-package.cbor": "e75c18f7265ea8fd7390e2e2d4ff49047323e99a07602d80442659d636fd61f4", + "verification-report.cbor": "463a47e58e00390937c565413305b4ec553928b86aae2979fbcbf631b55961d9" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "assembly": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "8e8d2703759fb30cb49b73650ba8ddfd637d68b33b86145661bfca3033c968fc", + "artifactSha256": { + "executable-operation-package.cbor": "e889d4680435139fe76f45762f0529c090afcf3d73ef7d17f787d44a49bda534", + "verification-report.cbor": "7eec90854e0663aa2346ec5005ff7d05eeb50fc2229b32b407dda3cfa0280077" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + } +} diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/public-build.json b/edict/replace-range-probes/range-assembly/evidence/candidate/public-build.json new file mode 100644 index 00000000..0f239271 --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/public-build.json @@ -0,0 +1,75 @@ +{ + "compiler": { + "commit": "01dc5abb9a8a74f8fd8b0e0a6d1041d0adb86d6e", + "tree": "74e571125a1da6ac5b2eac80944e343811708d51", + "fileCount": 449, + "manifestSha256": "22e4cc00473d2ccd3db80fe1f1de2ed8377f8a976df1fd05117eac649e77c529", + "binarySha256": "e2700698829b03f437c66425ed9878b002ef7a34ac183a39bac4eaf6a758cc6d" + }, + "jimSourceCommit": "e9ac7433c12d995743c109fd3cf6bcec46f9bca7", + "providerManifestSha256": "c5b9fb2fe3a0dc4dad282621a97413225c555be0071f3502b3272952069d42dc", + "boundary": "Public compiler build and provider package/report only; runtime not exercised.", + "results": { + "baseline": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "51797e77062585a9f59083ee8a1da3faaf486ef7691e1b62203369a9d9356ee0", + "artifactSha256": { + "executable-operation-package.cbor": "1860ab8a6cb9a4bfd63a1db99d1c2bc00aa53dae52a9d1998295654379a95d85", + "verification-report.cbor": "d96e5d21eecbc1e5bbf6ce76ab438d55cc8e74f6843121d4ffb0f4343e648267" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "first-control": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "fa207e40f734fce99c581efbc5159a276c95e7b399d3acce854829ace05c6d2e", + "artifactSha256": { + "executable-operation-package.cbor": "d950cebad1bb978e24dfa736efab302eb0f5c96135cb32f27ad8781d6ace6b51", + "verification-report.cbor": "412fb923e3dbd3f070624446ae953920058e08eda5fdc94f201d9b475842c803" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "second-control": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "b7bdfce283a977bf2a04ec95d278138a9fbcaeb3e5eedefb909b6d617b1cf8c0", + "artifactSha256": { + "executable-operation-package.cbor": "e75c18f7265ea8fd7390e2e2d4ff49047323e99a07602d80442659d636fd61f4", + "verification-report.cbor": "463a47e58e00390937c565413305b4ec553928b86aae2979fbcbf631b55961d9" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "assembly": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "8e8d2703759fb30cb49b73650ba8ddfd637d68b33b86145661bfca3033c968fc", + "artifactSha256": { + "executable-operation-package.cbor": "e889d4680435139fe76f45762f0529c090afcf3d73ef7d17f787d44a49bda534", + "verification-report.cbor": "7eec90854e0663aa2346ec5005ff7d05eeb50fc2229b32b407dda3cfa0280077" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + "assemblyOutcome": "package-and-report-produced" +} diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/second-control/application/executable-operation-package.cbor b/edict/replace-range-probes/range-assembly/evidence/candidate/second-control/application/executable-operation-package.cbor new file mode 100644 index 00000000..e42ff61b Binary files /dev/null and b/edict/replace-range-probes/range-assembly/evidence/candidate/second-control/application/executable-operation-package.cbor differ diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/second-control/application/verification-report.cbor b/edict/replace-range-probes/range-assembly/evidence/candidate/second-control/application/verification-report.cbor new file mode 100644 index 00000000..65cb7a56 --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/second-control/application/verification-report.cbor @@ -0,0 +1 @@ +¨goutcomehacceptedgpackage¢bidx!executable-operation-package.echofdigest‚fsha256X G_€õwc$e<)¦œD€?°f¿™²f)sÚ¹5å�[htargetIr¢bidoecho.span-ir/v1fdigest‚fsha256X ÊÊ eU OôL¦ƒÍ퀕o%wŸRÚ8CŠÌb‘]njapiVersionx)echo.operation-package-verifier-report/v1mdiagnosticAbi¢bidtedict.diagnostics/v1fdigest‚fsha256X (ýr©‚#9‚ÊL)Û±²Ô0b9g«;m¹×þæhæ¹odiagnosticBytes@qexecutableSubject¢ebytesYR¤gpackage¢bidx!executable-operation-package.echofdigest‚fsha256X G_€õwc$e<)¦œD€?°f¿™²f)sÚ¹5å�[htargetIr¢bidoecho.span-ir/v1fdigest‚fsha256X ÊÊ eU OôL¦ƒÍ퀕o%wŸRÚ8CŠÌb‘]njapiVersionxecho.executable-subject/v1xapplicationResultProjection¢bidx(jedit.text.replace_range@1.assembleRangefdigest‚fsha256X ¸{¡��ò„(�²0è_FPº8â2‚šÕŽŠkü¿å••ireference¢bidxecho.executable-subject/v1fdigest‚fsha256X nÕ¯äRÑUn×Û Æz™I»2ÝÚF¾€¸ª€±(¼ÃÈ¡xapplicationResultProjection¢bidx(jedit.text.replace_range@1.assembleRangefdigest‚fsha256X ¸{¡��ò„(�²0è_FPº8â2‚šÕŽŠkü¿å•• \ No newline at end of file diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/second-control/stderr.jsonl b/edict/replace-range-probes/range-assembly/evidence/candidate/second-control/stderr.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/range-assembly/evidence/candidate/second-control/stdout.jsonl b/edict/replace-range-probes/range-assembly/evidence/candidate/second-control/stdout.jsonl new file mode 100644 index 00000000..a668538e --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/candidate/second-control/stdout.jsonl @@ -0,0 +1 @@ +{"checked":1,"command":"build","errors":0,"exitCode":0,"schema":"edict.cli.event/v1","status":"ok","type":"status"} diff --git a/edict/replace-range-probes/range-assembly/evidence/compiler-source.json b/edict/replace-range-probes/range-assembly/evidence/compiler-source.json new file mode 100644 index 00000000..ed4a8f2c --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/compiler-source.json @@ -0,0 +1,1790 @@ +{ + "commit": "ac836e5c42a5c47b0dab30cfb0b09848cca73215", + "tree": "dadd4703a9905a37ff366c7134aea5cfe351e2fd", + "files": [ + { + "path": ".cargo/config.toml", + "gitBlob": "5592118f6c54bf8b53b16848e04ece896dd56384" + }, + { + "path": ".github/workflows/auto-release-tag.yml", + "gitBlob": "87404ceb685191afd496c93494b0bc61e2a59504" + }, + { + "path": ".github/workflows/ci.yml", + "gitBlob": "c6c6a17f59b6b96db88e3d4b2775bc64b7fe01f3" + }, + { + "path": ".github/workflows/release.yml", + "gitBlob": "2c612fc786998bfa5b11e76ae1185114a7cc535f" + }, + { + "path": ".gitignore", + "gitBlob": "30d7faf0fc8b7f010f99280302d4ed269d5da9ba" + }, + { + "path": ".markdownlint.json", + "gitBlob": "f3ec2c8dc2fbacc425154a2baedec50c7474aefa" + }, + { + "path": "AGENTS.md", + "gitBlob": "0c48a5794454cf84e20640994a372316efde7bb5" + }, + { + "path": "ARCHITECTURE.md", + "gitBlob": "5b513dd25028092e7e75c8974f1d5f3cc31889ed" + }, + { + "path": "CHANGELOG.md", + "gitBlob": "10a05a5561d05b79d087c2b660271e08d799771b" + }, + { + "path": "CODE_OF_CONDUCT.md", + "gitBlob": "784cf2799bcf8d2a69db5f5781359ef7e18a05fc" + }, + { + "path": "CONTRIBUTING.md", + "gitBlob": "9676914060f734dc59eabd9075898dc8170d4d19" + }, + { + "path": "Cargo.lock", + "gitBlob": "bacb208de0583f182379af7b5e078d31b25e2ca5" + }, + { + "path": "Cargo.toml", + "gitBlob": "b2e7106eb78f79230c091492ef21b497bdc9ed19" + }, + { + "path": "EDICT.md", + "gitBlob": "35376134195082d506f0161ba7ecb97efa8b770a" + }, + { + "path": "LICENSE", + "gitBlob": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64" + }, + { + "path": "NOTICE", + "gitBlob": "c300687bdd9d931d1f257d291e1cb6ff9d7d3607" + }, + { + "path": "README.md", + "gitBlob": "0812ef9a0c4611bf655dfc67d2ecc3631af9a536" + }, + { + "path": "ROADMAP.md", + "gitBlob": "d0e0135780537afab1d1a3f53808b363b35a63f4" + }, + { + "path": "SECURITY.md", + "gitBlob": "0bcc4e7375442e1334405a2d046df316cee05cd5" + }, + { + "path": "crates/edict-cli/Cargo.toml", + "gitBlob": "e9d844553c395bd312f84e806eb5bac30c5c3a54" + }, + { + "path": "crates/edict-cli/src/application_build.rs", + "gitBlob": "9c56ae6b4dd4eef0b9fe6db40316e100b2ffa699" + }, + { + "path": "crates/edict-cli/src/lawpack_build.rs", + "gitBlob": "55e9579153f34a3d5b139141c9de6640808cd386" + }, + { + "path": "crates/edict-cli/src/lawpack_build_windows.rs", + "gitBlob": "f71d03b368ae83becc1608bbba11cd5f1afa4f07" + }, + { + "path": "crates/edict-cli/src/lib.rs", + "gitBlob": "60883af60cf4b441680952ecce7ef4fcbfeabb97" + }, + { + "path": "crates/edict-cli/src/main.rs", + "gitBlob": "0dd9776642c4090479322111e4164ee7049fb9d0" + }, + { + "path": "crates/edict-cli/tests/golden_cli.rs", + "gitBlob": "9897caad3bcc6fa8bb0f20a1d0e18032285b1fa7" + }, + { + "path": "crates/edict-cli/tests/jsonl_cli.rs", + "gitBlob": "9ed353ca27d073fc7da49d3800c81ba4c58edd5d" + }, + { + "path": "crates/edict-cli/tests/lawpack_authoring_cli.rs", + "gitBlob": "dd7d7bfebf0e051c77d894a55c0204d373b19c63" + }, + { + "path": "crates/edict-provider-host-wasmtime/Cargo.toml", + "gitBlob": "ebeeb941f09012293d9923fe0e6039b2761b328e" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/conversion.rs", + "gitBlob": "62c3cd4a85eb156b8c9a405ef3ea4d8a09b80cc3" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/invocation.rs", + "gitBlob": "a4d6680d289094afebc0f1063abccf706f8149db" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/lib.rs", + "gitBlob": "353ea7394f265219ebdecad56a3070c9e7d2685c" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/limits.rs", + "gitBlob": "9e4d12c1b606d2b180f732db17bfbc78f8e26e3a" + }, + { + "path": "crates/edict-provider-host-wasmtime/src/replay.rs", + "gitBlob": "b8fa7be7c7ee5039793dad4cd0fa6a4f14ce388e" + }, + { + "path": "crates/edict-provider-host-wasmtime/tests/invocation.rs", + "gitBlob": "7a59a3192852a80bc01221ebf3dd1c437bda9508" + }, + { + "path": "crates/edict-provider-host-wasmtime/tests/preflight.rs", + "gitBlob": "a295e7547b0294f0355a85d5b9b8d045c8fceefd" + }, + { + "path": "crates/edict-provider-schema/Cargo.toml", + "gitBlob": "0e74f58acdc054ecce192cb8341afeaddc40deb5" + }, + { + "path": "crates/edict-provider-schema/src/contract_pack.rs", + "gitBlob": "370480d9c606134dd08ee62ae29ef143941e2f54" + }, + { + "path": "crates/edict-provider-schema/src/lib.rs", + "gitBlob": "51f5bee8892c9fb2122cb20022edc4d414759ff7" + }, + { + "path": "crates/edict-provider-schema/src/recursive_dispatch.rs", + "gitBlob": "6d97565b96f941b359d16f7a1c201189968fbeff" + }, + { + "path": "crates/edict-provider-schema/src/schema_safety.rs", + "gitBlob": "a2f605f62a2bfedcb84b68e37db9ff84b1dc3b05" + }, + { + "path": "crates/edict-provider-schema/tests/authority_facts_abi.rs", + "gitBlob": "7dd4d0302805ceecffc2045cdb91e386f8e08517" + }, + { + "path": "crates/edict-provider-schema/tests/provider_contract_pack.rs", + "gitBlob": "a26be8054b39215048825dd8cae7e9bddcfe27c9" + }, + { + "path": "crates/edict-provider-schema/tests/registry.rs", + "gitBlob": "bdd13ec00e441aef9e67ba49f6592ecbc7dcb303" + }, + { + "path": "crates/edict-syntax/Cargo.toml", + "gitBlob": "f55bb23e528af78b1e97b52f9b72cbd876a44ba7" + }, + { + "path": "crates/edict-syntax/src/admission.rs", + "gitBlob": "471430dd13a617bac886fcd44afbf15263e7db3b" + }, + { + "path": "crates/edict-syntax/src/ast.rs", + "gitBlob": "2a5d208a53a82408f8a18d9a13ccb133ec6a7a2e" + }, + { + "path": "crates/edict-syntax/src/authority_facts.rs", + "gitBlob": "644de86d63983bdbfbf1279fdbf1dbdaecc151d5" + }, + { + "path": "crates/edict-syntax/src/canonical.rs", + "gitBlob": "6fb29d50ea4a55eb888a1b9600cdcb31713a6e20" + }, + { + "path": "crates/edict-syntax/src/compiler.rs", + "gitBlob": "ad3efd3e92c23a54a9a279cbfa22b108895af3fb" + }, + { + "path": "crates/edict-syntax/src/compiler/byte_length.rs", + "gitBlob": "0d8d6291064415baee9253d9fe1e11ad87945773" + }, + { + "path": "crates/edict-syntax/src/compiler/byte_slice.rs", + "gitBlob": "84385fffdf4e38e21285e1fde252e9185a3a76fa" + }, + { + "path": "crates/edict-syntax/src/compiler/unsigned_subtraction.rs", + "gitBlob": "c2ef2deda74afb52e4346076a310df341556e1c8" + }, + { + "path": "crates/edict-syntax/src/contract_bundle.rs", + "gitBlob": "9a31645f0e30879d019787e29c21c82eebf58129" + }, + { + "path": "crates/edict-syntax/src/core_ir.rs", + "gitBlob": "4c6f350b325d13a27947687dd1f4114edf6d548d" + }, + { + "path": "crates/edict-syntax/src/highlight.rs", + "gitBlob": "28b3f7dcdfe8d4982bdcfb05759f769ccdbffc7f" + }, + { + "path": "crates/edict-syntax/src/lawpack.rs", + "gitBlob": "54f85bda48c960ad0b7bc316d332b379ab5b6ae0" + }, + { + "path": "crates/edict-syntax/src/lawpack_adapter.rs", + "gitBlob": "e425960e2437faa2f9eeb5d089ff507417d39586" + }, + { + "path": "crates/edict-syntax/src/lawpack_authoring.rs", + "gitBlob": "11ff578f458b8a4c8e4df75c0c616e37fa468d49" + }, + { + "path": "crates/edict-syntax/src/lib.rs", + "gitBlob": "7323475cc7f846e11c2d73f4c26a5e581b7e6157" + }, + { + "path": "crates/edict-syntax/src/lowerability.rs", + "gitBlob": "c6a1323fd6a79b0460b43aaf338956c3906a633e" + }, + { + "path": "crates/edict-syntax/src/parser.rs", + "gitBlob": "0b3650e3012e49023ccbb9cc9effe9b5b102f19d" + }, + { + "path": "crates/edict-syntax/src/provider.rs", + "gitBlob": "18fa661d880979c53dd335fb7e68d5445b638d4c" + }, + { + "path": "crates/edict-syntax/src/provider_invocation.rs", + "gitBlob": "2526168f0a6f2d1d9b6181b689ff43e203434122" + }, + { + "path": "crates/edict-syntax/src/provider_lowering.rs", + "gitBlob": "50a4e60b561127cb8c78e3f7c04c6bbaca068e52" + }, + { + "path": "crates/edict-syntax/src/result_projection.rs", + "gitBlob": "79ba246d4c58960fe368eaca4c7d135fe187832a" + }, + { + "path": "crates/edict-syntax/src/semantic.rs", + "gitBlob": "76bd133ef5859bf7722d1987613f7fd84836ab62" + }, + { + "path": "crates/edict-syntax/src/target_ir.rs", + "gitBlob": "c322a874d8a2341ae46a99b1b62eb952f4a49dfe" + }, + { + "path": "crates/edict-syntax/src/target_ir/byte_length.rs", + "gitBlob": "972e6ffa943bc7a7a943d76f0af42b342e3d2aac" + }, + { + "path": "crates/edict-syntax/src/target_ir/byte_slice.rs", + "gitBlob": "62a1c0b9e84a331bb17ab78090cce6d8eb8da486" + }, + { + "path": "crates/edict-syntax/src/target_ir/execution_order.rs", + "gitBlob": "e69a28805dc5e414a64afdaafee34161c217a044" + }, + { + "path": "crates/edict-syntax/src/target_ir/totality.rs", + "gitBlob": "a4fb9573d59e1a4bb9d7c250402c5b7e1da0a8c3" + }, + { + "path": "crates/edict-syntax/src/target_ir/unsigned_subtraction.rs", + "gitBlob": "b83522bfe9a2b506413b4d306f4bc49f8b053f36" + }, + { + "path": "crates/edict-syntax/src/target_profile.rs", + "gitBlob": "dd514f7380243e795f0655a78aecd06ee3fa2eda" + }, + { + "path": "crates/edict-syntax/src/target_profile_contract_resources.rs", + "gitBlob": "4efd22961c2fd7591440efd6087944ecaf21e991" + }, + { + "path": "crates/edict-syntax/src/token.rs", + "gitBlob": "2768586eea6d42d5df357c4cc62a011ee7f455de" + }, + { + "path": "crates/edict-syntax/tests/admission.rs", + "gitBlob": "57edbc320307c1d6daba85f03d8dc79558d7b849" + }, + { + "path": "crates/edict-syntax/tests/authority_facts.rs", + "gitBlob": "add9d272be6e8eb1cd6fdde2999a5fb452ecd852" + }, + { + "path": "crates/edict-syntax/tests/authority_facts_cbor.rs", + "gitBlob": "7359f047d9f731fee208efb5f69072b612d69547" + }, + { + "path": "crates/edict-syntax/tests/byte_length.rs", + "gitBlob": "50945944e8c2223abcc6b1081322432bc540c017" + }, + { + "path": "crates/edict-syntax/tests/byte_slice.rs", + "gitBlob": "99aae98ac1637a95532cdd833463210bbaa5a5be" + }, + { + "path": "crates/edict-syntax/tests/canonical_encoding.rs", + "gitBlob": "e4c5d59a88f88193f522eb555359919f7034a264" + }, + { + "path": "crates/edict-syntax/tests/common/mod.rs", + "gitBlob": "89560bfacb3dab031485c2dfa30d7eb325966574" + }, + { + "path": "crates/edict-syntax/tests/compiler_spine.rs", + "gitBlob": "2237318cfc0d4209e8a629e45320e42a4b72dbef" + }, + { + "path": "crates/edict-syntax/tests/contract_bundle.rs", + "gitBlob": "e6a2948335a0efc86d8bbb2e9e2c3d634e53965a" + }, + { + "path": "crates/edict-syntax/tests/core_golden_fixtures.rs", + "gitBlob": "0e0e42d19b52dc0557902dad9e1b85f37edf53f8" + }, + { + "path": "crates/edict-syntax/tests/core_graph_depth.rs", + "gitBlob": "1d95462ad2426d29b5974e6bb56ab8c125a92837" + }, + { + "path": "crates/edict-syntax/tests/external_action_requests.rs", + "gitBlob": "20aac8c03325ea0cdab8f4f54660cb980b4667c4" + }, + { + "path": "crates/edict-syntax/tests/highlighting.rs", + "gitBlob": "17e6b9ba08c96f0efb6efd440590f0fc917316e2" + }, + { + "path": "crates/edict-syntax/tests/lawpack.rs", + "gitBlob": "a675999ed96309358c8552a9d32781b5eede20dc" + }, + { + "path": "crates/edict-syntax/tests/lawpack_authoring.rs", + "gitBlob": "3a905cbd6d7d2625bc1d7826a6f6f1e991efbab0" + }, + { + "path": "crates/edict-syntax/tests/lowerability.rs", + "gitBlob": "5cfa58f5cbc51cccc7f119caddc1c3fcbc2e4806" + }, + { + "path": "crates/edict-syntax/tests/operation_prerequisites.rs", + "gitBlob": "753659e1a6e7751c455b8518226fa0902157a745" + }, + { + "path": "crates/edict-syntax/tests/parse_control_flow.rs", + "gitBlob": "5245561866d8902c1fbd5ab21f2e34807d568e17" + }, + { + "path": "crates/edict-syntax/tests/parse_greeting.rs", + "gitBlob": "f214d0c17745b8203d562780caa8f37b71c1e62c" + }, + { + "path": "crates/edict-syntax/tests/parse_hello.rs", + "gitBlob": "bf7b1b065277188f4be8754eb11ace94298394ba" + }, + { + "path": "crates/edict-syntax/tests/parse_keywords.rs", + "gitBlob": "78d8a64d785136d42a32655afda3df240c54f884" + }, + { + "path": "crates/edict-syntax/tests/parse_loops.rs", + "gitBlob": "d9ece2fce96fd6835d080055f06955d139c7e0ce" + }, + { + "path": "crates/edict-syntax/tests/parse_negative.rs", + "gitBlob": "17fdb983b8250470368a8f19d3a7bd9680052548" + }, + { + "path": "crates/edict-syntax/tests/parse_review_regressions.rs", + "gitBlob": "560215cfe044a528e190aa1ea7670e52b9365bdf" + }, + { + "path": "crates/edict-syntax/tests/parse_variants.rs", + "gitBlob": "8849f68f5ca1e2b06d0f66496e59b20d1c0fd022" + }, + { + "path": "crates/edict-syntax/tests/provider.rs", + "gitBlob": "7e8a596109b1e1fd3f22b3a0ef82f4755f127291" + }, + { + "path": "crates/edict-syntax/tests/provider_invocation.rs", + "gitBlob": "402647dd6701be65a9e693fd3f5688f26d84988e" + }, + { + "path": "crates/edict-syntax/tests/provider_lowering.rs", + "gitBlob": "411c306f3ab641de9dc2f7aed229767eba9dbd72" + }, + { + "path": "crates/edict-syntax/tests/result_projection.rs", + "gitBlob": "a74dd2a419266cb77d846d83da27f726095660f1" + }, + { + "path": "crates/edict-syntax/tests/semantic_validation.rs", + "gitBlob": "a127988d178c00ed12a0a25f70df6b7fd5e6d931" + }, + { + "path": "crates/edict-syntax/tests/target_ir.rs", + "gitBlob": "928e1cf921dead0b559bd115bb6eef3faaddd37e" + }, + { + "path": "crates/edict-syntax/tests/target_ir/ordered.rs", + "gitBlob": "a1b05db81a97a43ec5a2dc2d9bcc9578bc286f30" + }, + { + "path": "crates/edict-syntax/tests/target_profile.rs", + "gitBlob": "42f1c907f6c60dea1e8a9b4558b56ffd0b3a59ab" + }, + { + "path": "crates/edict-syntax/tests/target_profile_contract_resources.rs", + "gitBlob": "270c180a12dc10fb7e208cc4dc1e202da82c85fb" + }, + { + "path": "crates/edict-syntax/tests/target_unsigned_subtraction.rs", + "gitBlob": "e30d91f896afda48eb3cf11617bccf1f9d160e32" + }, + { + "path": "crates/edict-syntax/tests/unsigned_subtraction.rs", + "gitBlob": "fbd24482fdad4c8ceb4df41302b33595ada337ec" + }, + { + "path": "crates/edict/Cargo.toml", + "gitBlob": "525403f4f36db4040531e4dd747ec2398f9052cd" + }, + { + "path": "crates/edict/README.md", + "gitBlob": "a1ecf50bff3443d25a23fabfa6374d3f0a28ca82" + }, + { + "path": "crates/edict/src/lib.rs", + "gitBlob": "169d820759d6333f27a45ebb712bfcc4f0115107" + }, + { + "path": "crates/edict/tests/artifact_models.rs", + "gitBlob": "b923109c7195ce2c0071dc54179f0746b95329f0" + }, + { + "path": "crates/edict/tests/public_surface.rs", + "gitBlob": "a24c4bc9d9484f540da9b280790896701922968a" + }, + { + "path": "deny.toml", + "gitBlob": "e3f0f54060cead9a0d48b96ed86948d0909c4f78" + }, + { + "path": "docs/DESIGN_runtime-neutral-edict-sha-lock-assurance.md", + "gitBlob": "ea3badf78ebd19545147a93671fdb5f9af4a61ea" + }, + { + "path": "docs/GUIDE_edict-assurance-transparency.md", + "gitBlob": "100321157ec43055c45794f1c161b1e5281ba6b4" + }, + { + "path": "docs/README.md", + "gitBlob": "e21739b842be14d91a17f2508b1a1b629754af01" + }, + { + "path": "docs/REQUIREMENTS.md", + "gitBlob": "52d98fecd60eb04ce55105ae2eb33997248698cb" + }, + { + "path": "docs/RETRO_phase1-parser.md", + "gitBlob": "5cfb7b85ca2f140fc58f9186c47e4635e94a1e6f" + }, + { + "path": "docs/SPEC_continuum-admission-v1.md", + "gitBlob": "0a74a0bfc642337d5d7a85133ce50a0a22caffbd" + }, + { + "path": "docs/SPEC_continuum-contract-bundle-v1.md", + "gitBlob": "65b36bb33a34beb1f246d1f97384631c83ca631e" + }, + { + "path": "docs/SPEC_edict-language-v1.md", + "gitBlob": "37ac2382f6ed09b314e64cce819a4de8c6fb7321" + }, + { + "path": "docs/SPEC_edict-lawpack-abi-v1.md", + "gitBlob": "ea1d801f07ab3677f7a411a1f58a28feda589ec3" + }, + { + "path": "docs/SPEC_edict-target-profile-abi-v1.md", + "gitBlob": "91687bfe45565a21f5f93f6ce9eed84095268691" + }, + { + "path": "docs/TECHNICAL_EXPLANATION.md", + "gitBlob": "d88561c0552c0e75d1ecc2eef6f9afd003e99674" + }, + { + "path": "docs/abi/edict-authority-facts.cddl", + "gitBlob": "e9a6d8685706ae0d8dabda401655234161e94299" + }, + { + "path": "docs/abi/edict-common.cddl", + "gitBlob": "836c11b92425beb6d42b378c0defe6f02d144dd7" + }, + { + "path": "docs/abi/edict-core.cddl", + "gitBlob": "862f02939fcc3858b4a60cb75f9bf149eae8ffda" + }, + { + "path": "docs/abi/edict-lawpack-adapter.cddl", + "gitBlob": "8e887c2e196ba7502470ddb45dc7cfd10116ad6b" + }, + { + "path": "docs/abi/edict-lawpack.cddl", + "gitBlob": "96efd51d437ec785b108b51835e9e8bf87aeab51" + }, + { + "path": "docs/abi/edict-result-projection.cddl", + "gitBlob": "98b5c2e861e7e9b66b7481502287cb041f6e77e6" + }, + { + "path": "docs/abi/edict-target-ir.cddl", + "gitBlob": "98134f277ded1920a3a36e5e3946c51153f2e84d" + }, + { + "path": "docs/abi/edict-target-profile.cddl", + "gitBlob": "746ae03001310f3a83524e5332819dad1a4eea5a" + }, + { + "path": "docs/abi/edict-target-provider.wit", + "gitBlob": "0efa5903a52d38dc61e429619d86322c6c5f1fa0" + }, + { + "path": "docs/audit/2026-06-28_code-quality.md", + "gitBlob": "143cbf4f4491a76a6649e919c6edaba73f0bcf4b" + }, + { + "path": "docs/audit/2026-06-28_documentation-quality.md", + "gitBlob": "656b4fa8dea43306af1818f8622cafd72e82a370" + }, + { + "path": "docs/audit/2026-06-28_ship-readiness.md", + "gitBlob": "b9d34a8693564d0134f550092e7645e5d5137442" + }, + { + "path": "docs/design/authority-fact-governance.md", + "gitBlob": "8531061cf718c47ec791f5712b2f357d92adc9e4" + }, + { + "path": "docs/design/canonical-target-ir-v0.11.md", + "gitBlob": "a46acb84e3523b51e2348c776cfdb63a8b98107a" + }, + { + "path": "docs/design/contract-bundle-assembly-v0.11.md", + "gitBlob": "a364f8ade5445808f87cf0c63ab3484c03ad616a" + }, + { + "path": "docs/design/crate-scope-v0.11.md", + "gitBlob": "92fe92285d02465d84bbe82e29d051fdc461f3a6" + }, + { + "path": "docs/design/obstruction-strands-v0.md", + "gitBlob": "81f70fd688c12798cd23472a4e810191e61eabe2" + }, + { + "path": "docs/design/provider-artifact-pipeline-alpha.md", + "gitBlob": "60eefa7dc160aba986bcd1188b79610ff5e9f299" + }, + { + "path": "docs/design/schema-as-sot-codegen.md", + "gitBlob": "d818e0e3f1fafd1d3aba26cb37c739f3ebe69763" + }, + { + "path": "docs/design/v2-obligation-closure.md", + "gitBlob": "816d22d843a33c6f7e143da4cb45e80679609dc8" + }, + { + "path": "docs/releases/v0.1.0-alpha.1.md", + "gitBlob": "5dd96057ba7f109cf5e5acde16e29d18627f98d3" + }, + { + "path": "docs/releases/v0.10.0-alpha.1.md", + "gitBlob": "363c4e9ed6f5ea5758198c7124681b520098e583" + }, + { + "path": "docs/releases/v0.11.0-alpha.1.md", + "gitBlob": "4612dbb5a1aaf20710bdb199b658ded7ced4ebab" + }, + { + "path": "docs/releases/v0.2.0-alpha.1.md", + "gitBlob": "7302ef93ed5ff9b562d9cec92d49d85a6b789b27" + }, + { + "path": "docs/releases/v0.3.0-alpha.1.md", + "gitBlob": "bf023ba4ca2c38f0120c461781447d58fe239ae0" + }, + { + "path": "docs/releases/v0.4.0-alpha.1.md", + "gitBlob": "769500b59800c02c536b76b0eb850d06d6cd8f58" + }, + { + "path": "docs/releases/v0.5.0-alpha.1.md", + "gitBlob": "7c7354e89846ea816992aaf55d4ad04367d61a10" + }, + { + "path": "docs/releases/v0.6.0-alpha.1.md", + "gitBlob": "3f2a0edfc4bccd9f3c60a7443ef4f8cbcbac1971" + }, + { + "path": "docs/releases/v0.7.0-alpha.1.md", + "gitBlob": "57671d5ef5a6b9f16d1674e0a35ddeb86ff126a8" + }, + { + "path": "docs/releases/v0.8.0-alpha.1.md", + "gitBlob": "12f77bda185c54fbbd136bf0dc7292716ecdfa39" + }, + { + "path": "docs/releases/v0.9.0-alpha.1.md", + "gitBlob": "fa295fcf0967415bb052f238256919b32b3fe6ba" + }, + { + "path": "docs/schemas/edict.cli-check-result.v1.schema.json", + "gitBlob": "eef8cd11f07e06d68b7051efa60ae05f2cfd8a63" + }, + { + "path": "docs/schemas/edict.cli-diagnostic.v1.schema.json", + "gitBlob": "92a2151a76893c598a4191ed6cecd8a0e671613f" + }, + { + "path": "docs/schemas/edict.cli-event.v1.schema.json", + "gitBlob": "705d82a893c2ea91caa91ad6977a9be8646b47bb" + }, + { + "path": "docs/schemas/edict.cli-info.v1.schema.json", + "gitBlob": "2d9a0777b4190b56ff569625275d352d17363afa" + }, + { + "path": "docs/schemas/edict.compiler-input.v1.schema.json", + "gitBlob": "26da3ba0fe85fab4c826ad79f13968ce09c4f29b" + }, + { + "path": "docs/schemas/edict.compiler-settings.v1.schema.json", + "gitBlob": "a3e8ba469895b84ab81724da1075c73141a8dd0c" + }, + { + "path": "docs/schemas/edict.projection-core.v1.schema.json", + "gitBlob": "8c0afe3834256abd1e18efb5f31eae1c4bdf0374" + }, + { + "path": "docs/schemas/edict.projection-diagnostics.v1.schema.json", + "gitBlob": "28cfb0a67dff7b8f879122c74433158dc0a4e5df" + }, + { + "path": "docs/schemas/edict.projection-syntax.v1.schema.json", + "gitBlob": "a85f2e14f536863f5e7b107b1a9f3f10816e6234" + }, + { + "path": "docs/schemas/edict.projection-target-ir.v1.schema.json", + "gitBlob": "8bbb6495ad8800d775d1c08506e85351038d678a" + }, + { + "path": "docs/topics/README.md", + "gitBlob": "99b06d3124c71cb62dfe6faff7604c13063162a7" + }, + { + "path": "docs/topics/admission/README.md", + "gitBlob": "755dcba96c0a428eec18d58a529f3e26d57d118c" + }, + { + "path": "docs/topics/admission/test-plan.md", + "gitBlob": "68ee0a2d2502103285985bf862de9fadf2bac5a0" + }, + { + "path": "docs/topics/assurance/README.md", + "gitBlob": "cf382008f3d3094a5380a687abbf07538e07404d" + }, + { + "path": "docs/topics/assurance/test-plan.md", + "gitBlob": "0ea6c971924db763088577a0a52bbd30bfec814c" + }, + { + "path": "docs/topics/authority-facts/README.md", + "gitBlob": "c5589d2489d6e4a5729c0df2b2655ff281d8d88d" + }, + { + "path": "docs/topics/authority-facts/test-plan.md", + "gitBlob": "e3769edf8309347b23ffa2e8f0901e06feabd654" + }, + { + "path": "docs/topics/cli/README.md", + "gitBlob": "af38946c9ccae8da343877c3861b0f52b6076e1b" + }, + { + "path": "docs/topics/cli/test-plan.md", + "gitBlob": "d72d69ef1d340ffd7057a63dd7bc07e3dfb2c166" + }, + { + "path": "docs/topics/compiler-spine/README.md", + "gitBlob": "39e64c586dd8b217b72d481e533f28a7049b3b0d" + }, + { + "path": "docs/topics/compiler-spine/test-plan.md", + "gitBlob": "73e31cad62f0915a06bf2c6fb40f216e96ea05a7" + }, + { + "path": "docs/topics/contract-bundles/README.md", + "gitBlob": "2347499e8da9dd57bb1588faf67fe386c7a70c03" + }, + { + "path": "docs/topics/contract-bundles/test-plan.md", + "gitBlob": "3ae4c7362f90fa89081ab9ff2bf1c3db1a811874" + }, + { + "path": "docs/topics/core-ir/README.md", + "gitBlob": "d747a18d1f53de2b29473ada7a06b819c77cd162" + }, + { + "path": "docs/topics/core-ir/canonical-encoding.md", + "gitBlob": "34927c69fb1de10b685294a155fc46bb4ac21628" + }, + { + "path": "docs/topics/core-ir/test-plan.md", + "gitBlob": "0f80304a4dd6b160c78674b73605bdbbb7e11066" + }, + { + "path": "docs/topics/developer-tooling/README.md", + "gitBlob": "8648d3c1bdf4f6b774bc5fec71c71aa8c59b0ce8" + }, + { + "path": "docs/topics/developer-tooling/test-plan.md", + "gitBlob": "9240f717434dfbca08a6366e6d3ebafd4ef2c908" + }, + { + "path": "docs/topics/documentation/README.md", + "gitBlob": "34fa7f4db136c274a88b680f99619d657fda15d5" + }, + { + "path": "docs/topics/documentation/test-plan.md", + "gitBlob": "47964954fbf640211bc30b0dd361c44c9955c488" + }, + { + "path": "docs/topics/external-action-requests/README.md", + "gitBlob": "45bc73e469919d3eff6e7eddbe9baa0383c7d91b" + }, + { + "path": "docs/topics/external-action-requests/test-plan.md", + "gitBlob": "38e7e53827d223c031d414f4ecd63720eb78eae0" + }, + { + "path": "docs/topics/fixtures/README.md", + "gitBlob": "c8b3b196109fb6d4e37d8ffa17635166010075fb" + }, + { + "path": "docs/topics/fixtures/test-plan.md", + "gitBlob": "624357dbc544d365835390d3d3c2f11015b7b82f" + }, + { + "path": "docs/topics/lawpack-authoring/README.md", + "gitBlob": "74bb25cc22e1f88cf4ee952b42313d919339113a" + }, + { + "path": "docs/topics/lawpack-authoring/test-plan.md", + "gitBlob": "d7ad2eacde45dbce3eeb2b1a22c6482134b841ba" + }, + { + "path": "docs/topics/lawpacks/README.md", + "gitBlob": "dedaa524dc55663a44bf8101241ab4b6d4755531" + }, + { + "path": "docs/topics/lawpacks/test-plan.md", + "gitBlob": "f8aa2c7ce40dad2665134956dc95d951d311808f" + }, + { + "path": "docs/topics/lowerability/README.md", + "gitBlob": "fb9519af3539d846dc5bf2915bf5ca86816e46f8" + }, + { + "path": "docs/topics/lowerability/test-plan.md", + "gitBlob": "e0fbff0799ba805c9531097d6b8aeea657e2b815" + }, + { + "path": "docs/topics/obstruction-strands/README.md", + "gitBlob": "a2930645065390cecff8008bfd48b7f034bfcd18" + }, + { + "path": "docs/topics/obstruction-strands/test-plan.md", + "gitBlob": "20c54ffcaa19930a5bc772a49a5f01119054be2d" + }, + { + "path": "docs/topics/providers/README.md", + "gitBlob": "8b5a07fb9c708b753861a4e156b866115f4d687b" + }, + { + "path": "docs/topics/providers/architecture.md", + "gitBlob": "664b38347ccaf37f298d6ac9f19d3423c0277f9e" + }, + { + "path": "docs/topics/providers/test-plan.md", + "gitBlob": "95c55f9e132ca6859fd9df70470973e678ed8d92" + }, + { + "path": "docs/topics/public-rust-api/README.md", + "gitBlob": "c64a1081b7f693b02bd2ea63329f2610bae9d84c" + }, + { + "path": "docs/topics/public-rust-api/test-plan.md", + "gitBlob": "4c3b9e9662afd9edb790ba2b5c57ed5e93df595c" + }, + { + "path": "docs/topics/release-process/README.md", + "gitBlob": "a474ab8b6a4a58c5c73334c9e677be7c20d1837c" + }, + { + "path": "docs/topics/release-process/policy.toml", + "gitBlob": "e40b4f4ec721ae61210ec1bb022a847bcb49fb4a" + }, + { + "path": "docs/topics/release-process/runbook.md", + "gitBlob": "0b6bd8ef44cbfe8c7cdc347273fa74b7c96c4823" + }, + { + "path": "docs/topics/release-process/test-plan.md", + "gitBlob": "61ecded1d2318d7dd74070cd1c6155f353c947e9" + }, + { + "path": "docs/topics/result-projections/README.md", + "gitBlob": "d5c2f85a7681a15dcdc3e35f992a389c50d13461" + }, + { + "path": "docs/topics/result-projections/test-plan.md", + "gitBlob": "9e69d58c88d6a9b7389334a78b994a3449721faa" + }, + { + "path": "docs/topics/review-process/README.md", + "gitBlob": "25190d37dc30110f75ba5d3a41494575ffecc1c3" + }, + { + "path": "docs/topics/review-process/policy.toml", + "gitBlob": "a826ba58aad2e509220b65aa8f96c290b600e094" + }, + { + "path": "docs/topics/review-process/test-plan.md", + "gitBlob": "f1a50aeae47913e4513a8149c1679d9a94c5ef21" + }, + { + "path": "docs/topics/rust-standards/README.md", + "gitBlob": "2fe29258705d117f4d10604a83fd832a8476e303" + }, + { + "path": "docs/topics/rust-standards/test-plan.md", + "gitBlob": "0e0d6b306cd2b58db07a7a5da6a752925fe58764" + }, + { + "path": "docs/topics/semantic-validation/README.md", + "gitBlob": "51cd9761755e7b5879069bf3774eeb487982ca97" + }, + { + "path": "docs/topics/semantic-validation/test-plan.md", + "gitBlob": "b43969d8eb0a884c1663ab761662f9622617bb3b" + }, + { + "path": "docs/topics/syntax/README.md", + "gitBlob": "b2a372bf41b1976567c61f400bf000f33abc20cc" + }, + { + "path": "docs/topics/syntax/test-plan.md", + "gitBlob": "a69efaf12dfe12661fca049b8790b37fa3fb3665" + }, + { + "path": "docs/topics/target-ir/README.md", + "gitBlob": "be30d1e24fda30aaa891ab03d53c2b8e287d9833" + }, + { + "path": "docs/topics/target-ir/test-plan.md", + "gitBlob": "cc94ae24fb452521c21f55db52a5c3e9ba09c424" + }, + { + "path": "docs/topics/target-profiles/README.md", + "gitBlob": "6a88f4d732f8069855b2ed2cb9a8769a117b2f60" + }, + { + "path": "docs/topics/target-profiles/test-plan.md", + "gitBlob": "90084c3f3a1296745469cd86e9b5f2bc928825be" + }, + { + "path": "docs/topics/tests/README.md", + "gitBlob": "4ad079b6a9718e2a8446a6c67ff45735015bef84" + }, + { + "path": "docs/topics/tests/test-plan.md", + "gitBlob": "46bc0572d02a41e86f71c6d46baf5be611a462a6" + }, + { + "path": "docs/topics/v2-design/README.md", + "gitBlob": "b33a07599e43e660aa4def7f119ddd02df6a16de" + }, + { + "path": "docs/topics/v2-design/test-plan.md", + "gitBlob": "f17f96d381f81b20842393f70ff55b9597858b84" + }, + { + "path": "editors/README.md", + "gitBlob": "7a933576262bc58bac197f9264fdbf649dd5e696" + }, + { + "path": "editors/vscode/.vscodeignore", + "gitBlob": "f15b3142e4b8af11d580789a0c82acee3499f571" + }, + { + "path": "editors/vscode/README.md", + "gitBlob": "8b29840ae9ec8f618b7364022329f694d0ed9746" + }, + { + "path": "editors/vscode/language-configuration.json", + "gitBlob": "b7f583841649c9c437785edbfcb70ee24e495c79" + }, + { + "path": "editors/vscode/package.json", + "gitBlob": "cd9e391e7c9afb6f9393fcead118e0e55aadc839" + }, + { + "path": "editors/vscode/syntaxes/edict.tmLanguage.json", + "gitBlob": "5847d8edfdb32d822f0f3950f41d00c947982185" + }, + { + "path": "fixtures/README.md", + "gitBlob": "470e3e0fc3aa00654930ecdef892ee9df8a42c8d" + }, + { + "path": "fixtures/authority-facts/canonical/README.md", + "gitBlob": "28692ce70add5d4f2d4ff5318309c3353924caf9" + }, + { + "path": "fixtures/authority-facts/canonical/example-effectful.authority-facts.cbor", + "gitBlob": "fe2e59a8e2602e02c52094010a130db2637c5227" + }, + { + "path": "fixtures/authority-facts/canonical/example-effectful.authority-facts.json", + "gitBlob": "009faa5d2dc1dcf55cf284dcfd14c0b6405f3e0d" + }, + { + "path": "fixtures/authority-facts/canonical/example-effectful.authority-facts.sha256", + "gitBlob": "a3d68f0a3b3a586e85b6a84cbd884866e662951f" + }, + { + "path": "fixtures/bundle/assembly/bounded-hello.bundle-digests.txt", + "gitBlob": "da5402db7bd41dd88c6152b7799723561130c91e" + }, + { + "path": "fixtures/cli/01-source-ok/expected.stdout.jsonl", + "gitBlob": "e08ccf8fdedd3a73beef5d06c443a1bc60274ce1" + }, + { + "path": "fixtures/cli/01-source-ok/request.jsonl", + "gitBlob": "002fea597e6b93c8468d6972b73cc1344600fa87" + }, + { + "path": "fixtures/cli/02-source-parse-rejection/exit", + "gitBlob": "d00491fd7e5bb6fa28c517a0bb32b8b506539d4d" + }, + { + "path": "fixtures/cli/02-source-parse-rejection/expected.stderr.jsonl", + "gitBlob": "1077b73c9a7c02eae99f737bea7b6ff8c64d04da" + }, + { + "path": "fixtures/cli/02-source-parse-rejection/request.jsonl", + "gitBlob": "dce01f0466bd9384fc6f5cbe2845b6e0bd9a9cfd" + }, + { + "path": "fixtures/cli/03-source-semantic-rejection/exit", + "gitBlob": "d00491fd7e5bb6fa28c517a0bb32b8b506539d4d" + }, + { + "path": "fixtures/cli/03-source-semantic-rejection/expected.stderr.jsonl", + "gitBlob": "5ec447700da52d0b4ce1f75825eb9bffaed4884b" + }, + { + "path": "fixtures/cli/03-source-semantic-rejection/request.jsonl", + "gitBlob": "ddfd529e5448760387961febbd4ce013e49de435" + }, + { + "path": "fixtures/cli/04-cli-missing-settings/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/04-cli-missing-settings/expected.stderr.jsonl", + "gitBlob": "5060bd2fd773ba9ea3ea6db8c80b86a846bfadbd" + }, + { + "path": "fixtures/cli/04-cli-missing-settings/request.jsonl", + "gitBlob": "8eb12e58d427bd64ccfe339190e05bdccf4c8634" + }, + { + "path": "fixtures/cli/05-path-input-ok/expected.stdout.jsonl", + "gitBlob": "a05fc582efc41b6414e785167b5deeb7532088ef" + }, + { + "path": "fixtures/cli/05-path-input-ok/inputs/hello.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/05-path-input-ok/request.jsonl", + "gitBlob": "18facaab79dc198134c535df389cba79efe7dce7" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/expected.stdout.jsonl", + "gitBlob": "ef59591526e2084ddf5057249bbc96ab660cf256" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/inputs/a.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/inputs/ignore.txt", + "gitBlob": "ed34ae8da336ff94a67b6125fbd6be730c976d91" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/inputs/nested/b.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/06-directory-expansion-ok/request.jsonl", + "gitBlob": "bd9aad14fe79caccacaa6d00ffd32b5e13b3551f" + }, + { + "path": "fixtures/cli/07-path-list-ok/expected.stdout.jsonl", + "gitBlob": "643ecb3e659c10cb98255ec1aced772778e76eb0" + }, + { + "path": "fixtures/cli/07-path-list-ok/inputs/first.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/07-path-list-ok/inputs/second.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/07-path-list-ok/request.jsonl", + "gitBlob": "f11265b02c5b7559ced4d975471a78b5bef3ee27" + }, + { + "path": "fixtures/cli/08-glob-expansion-ok/expected.stdout.jsonl", + "gitBlob": "90164a7fce6c51abdadef8f0586d2c56113d9712" + }, + { + "path": "fixtures/cli/08-glob-expansion-ok/inputs/x.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/08-glob-expansion-ok/inputs/y.edict", + "gitBlob": "39c53bb184a7c10de61da0c637b607eb1d7cc454" + }, + { + "path": "fixtures/cli/08-glob-expansion-ok/request.jsonl", + "gitBlob": "9335acf3a008ab8fb9942b3e22d73c456ed3827e" + }, + { + "path": "fixtures/cli/09-shape-source-ok/expected.stdout.jsonl", + "gitBlob": "ac6f9259502ebfe484e1c07a5f53865888dd8207" + }, + { + "path": "fixtures/cli/09-shape-source-ok/request.jsonl", + "gitBlob": "64c75d9a7b40985bacf0e59a943a16e20419c602" + }, + { + "path": "fixtures/cli/10-input-extra-field/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/10-input-extra-field/expected.stderr.jsonl", + "gitBlob": "2f5a8fba093b71d15a5b37504ad0352191c8299c" + }, + { + "path": "fixtures/cli/10-input-extra-field/request.jsonl", + "gitBlob": "6052212c652d41f03144a7d3d4018b1cdd18cd09" + }, + { + "path": "fixtures/cli/11-input-hybrid-kind/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/11-input-hybrid-kind/expected.stderr.jsonl", + "gitBlob": "7b6d2ac0c8afbf5e3991498846c2fc4847ac9453" + }, + { + "path": "fixtures/cli/11-input-hybrid-kind/request.jsonl", + "gitBlob": "b893b640aa6631c77f2a889a807afa31632ac2db" + }, + { + "path": "fixtures/cli/12-input-too-large/env.json", + "gitBlob": "ab0c7f13fc6b22d61fc73da2f1787ff3aa298ecb" + }, + { + "path": "fixtures/cli/12-input-too-large/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/12-input-too-large/expected.stderr.jsonl", + "gitBlob": "ebda022d79c978d4ff511579512be2c642e3e902" + }, + { + "path": "fixtures/cli/12-input-too-large/request.jsonl", + "gitBlob": "1e2fbb102503356bbcc627f49a5b58590859f170" + }, + { + "path": "fixtures/cli/13-input-root-outside/allowed/.gitkeep", + "gitBlob": "8b137891791fe96927ad78e64b0aad7bded08bdc" + }, + { + "path": "fixtures/cli/13-input-root-outside/exit", + "gitBlob": "0cfbf08886fca9a91cb753ec8734c84fcbe52c9f" + }, + { + "path": "fixtures/cli/13-input-root-outside/expected.stderr.jsonl", + "gitBlob": "9c5b8567a755c9ea2ee6e0168bf96f429185f675" + }, + { + "path": "fixtures/cli/13-input-root-outside/outside/outside.edict", + "gitBlob": "44abebc15811c38cc266007484dd74ae10a26a4d" + }, + { + "path": "fixtures/cli/13-input-root-outside/request.jsonl", + "gitBlob": "116dbbb4b1a80938bc042e41747872cb6da161cd" + }, + { + "path": "fixtures/cli/README.md", + "gitBlob": "9388df4182fedec41c353e85cf9210e88906fa3d" + }, + { + "path": "fixtures/core/canonical/README.md", + "gitBlob": "d9a0ca79557c3623c0b843d9eff4808f94fd7b18" + }, + { + "path": "fixtures/core/canonical/bounded-hello.core.cbor", + "gitBlob": "a0ec54aa1a5e20624192091526445cfd803e6f0c" + }, + { + "path": "fixtures/core/canonical/bounded-hello.core.sha256", + "gitBlob": "86ba062c26a3ad3fd733ccd8c80d7faa7ed62d94" + }, + { + "path": "fixtures/core/canonical/statement-branch.core.hex", + "gitBlob": "c22760cace0e4d146a2fdc8d7c7b50c38497622a" + }, + { + "path": "fixtures/core/canonical/statement-branch.core.sha256", + "gitBlob": "0b62657b192232390479319f0a1c8f601020a58f" + }, + { + "path": "fixtures/core/canonical/workspace-snapshot.core.cbor", + "gitBlob": "58e4f724610861f5b61537bf386a87062e8a57a7" + }, + { + "path": "fixtures/core/canonical/workspace-snapshot.core.sha256", + "gitBlob": "4bcb3e0813cd3f4a7afc7cf311d846f1dfdd0a9d" + }, + { + "path": "fixtures/core/schema/accepted/core-fn-body-minimal.fields", + "gitBlob": "bef3ca412ab0ea97465b8658499ae5e05e1ec760" + }, + { + "path": "fixtures/core/schema/accepted/core-intent-minimal.fields", + "gitBlob": "268b28ce942fed4f139aafe5c7cd50c15a0ee640" + }, + { + "path": "fixtures/core/schema/accepted/core-module-minimal.fields", + "gitBlob": "249ff76349f936c9a5ff6cb65d81de8e80d53de8" + }, + { + "path": "fixtures/core/schema/rejected/core-fn-body-effect-node-field.fields", + "gitBlob": "9af8fa3540b25ec810936bc4dc82e26f6dd0dd48" + }, + { + "path": "fixtures/core/schema/rejected/core-intent-unknown-verified-mode.fields", + "gitBlob": "667ae032ee117f32c1bcbafd21393e406621f517" + }, + { + "path": "fixtures/core/schema/rejected/core-module-missing-intents.fields", + "gitBlob": "17f37c7ac4c199de4eace7f31e6a59b9a6d3a0f6" + }, + { + "path": "fixtures/core/schema/rejected/local-ref-missing-alpha-name.fields", + "gitBlob": "456a89528ffe74d892be40c9c9be4a078ff5c18a" + }, + { + "path": "fixtures/lang/bounds/bounded-hello.edict", + "gitBlob": "e3443a1d3b1c8f0e137ac698b621dd2f3afb673b" + }, + { + "path": "fixtures/lang/effects/conditional-blob.edict", + "gitBlob": "1e4f2ca6112f26d57ee4d20058666ec7cd693b75" + }, + { + "path": "fixtures/lang/effects/read-greeting.edict", + "gitBlob": "5e3838d1547be171e0a0384a7a200f52a2b9d139" + }, + { + "path": "fixtures/lang/external-actions/workspace-snapshot.edict", + "gitBlob": "e54b0fbccad2fd680505f3ee46ca28d39d7e776e" + }, + { + "path": "fixtures/lang/operations/explicit-basis-u64.edict", + "gitBlob": "444d8ca77b9827746df81885f0620dce2d1a3b73" + }, + { + "path": "fixtures/lang/tooling/highlight-smoke.edict", + "gitBlob": "8c2d91084be22e5e1594a42159992aca95c73612" + }, + { + "path": "fixtures/lang/types/color-match.edict", + "gitBlob": "dd98d6de677904f36d7601165a0094d92928e536" + }, + { + "path": "fixtures/lawpack/causal-cell/README.md", + "gitBlob": "52e8cc1e2af8aea86c1090a1b20b5f5ab3e07c06" + }, + { + "path": "fixtures/lawpack/causal-cell/adapter.cbor", + "gitBlob": "3b0c8b1b3a8591a322b6e785d9f963899319310c" + }, + { + "path": "fixtures/lawpack/causal-cell/adapter.sha256", + "gitBlob": "f8231bc941e1fbe02279865a82e183cbeeb0988a" + }, + { + "path": "fixtures/lawpack/causal-cell/echo-operation-configuration.cbor", + "gitBlob": "24527d30d0146b567fda157561ac6a2587cae919" + }, + { + "path": "fixtures/lawpack/causal-cell/echo-operation-configuration.sha256", + "gitBlob": "d293c8a14b1955a3e171703400c4df620c7871a1" + }, + { + "path": "fixtures/lawpack/causal-cell/exports.cbor", + "gitBlob": "384f4839adfe8e5b0f1aa848bfe2aeb1c3f640b6" + }, + { + "path": "fixtures/lawpack/causal-cell/exports.sha256", + "gitBlob": "4f836f6b03497338a1f8eacc55480cbe1a3b49e9" + }, + { + "path": "fixtures/lawpack/causal-cell/manifest.cbor", + "gitBlob": "b9311a236d7898861a0b90b1f30b852b35cef623" + }, + { + "path": "fixtures/lawpack/causal-cell/manifest.sha256", + "gitBlob": "685fd6a6c72fc3100d595d009b6198a81c731a40" + }, + { + "path": "fixtures/lawpack/hello-echo/README.md", + "gitBlob": "79f6612f1f5608a8f7dc4835e5470878cd27f96e" + }, + { + "path": "fixtures/lawpack/hello-echo/adapter.cbor", + "gitBlob": "24e2f546e2b97747b53462a72faaa1d5d85d62f1" + }, + { + "path": "fixtures/lawpack/hello-echo/adapter.sha256", + "gitBlob": "91df491028061e026ecaaeb4e1598e2ac369af44" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.core.cbor", + "gitBlob": "246b6135855c415def0bd89b275f0457752ee563" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.core.sha256", + "gitBlob": "9adc71605e0a275349161809614bd17de97d129c" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.edict", + "gitBlob": "825d50565230bd71d62bfbeb59d0399a89864b4c" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.result-projection.cbor", + "gitBlob": "981cba6e1c7ab6bdae6829116749c4796167e4e6" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.result-projection.sha256", + "gitBlob": "d55e4083771e1d9791f59cf87fd5cc5f1ea3b9f4" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.target-ir.cbor", + "gitBlob": "c8a934cefec17dbab0a43d9be9cebd2533268798" + }, + { + "path": "fixtures/lawpack/hello-echo/create-greeting.target-ir.sha256", + "gitBlob": "20186cbe9482e8a7df7c44fabec13ffd4efbcf36" + }, + { + "path": "fixtures/lawpack/hello-echo/echo-operation-configuration.cbor", + "gitBlob": "84838ab0d8627237232fa5a9b9fa39087bcc5f8a" + }, + { + "path": "fixtures/lawpack/hello-echo/echo-operation-configuration.sha256", + "gitBlob": "0898688f14067560dd22abd04b97f020071fd3e8" + }, + { + "path": "fixtures/lawpack/hello-echo/exports.cbor", + "gitBlob": "0e1220ceed9442a7b35870eeb02fcb65454d8c5c" + }, + { + "path": "fixtures/lawpack/hello-echo/exports.sha256", + "gitBlob": "e1f3e9223de9ce935bc7f60dda3cfa7d12d54fdc" + }, + { + "path": "fixtures/lawpack/hello-echo/manifest.cbor", + "gitBlob": "d715900f03ec454a0ad96e6710f52a46120d0b9d" + }, + { + "path": "fixtures/lawpack/hello-echo/manifest.sha256", + "gitBlob": "20171199b401cecace2dd74e18f3cc1d5c7ed3de" + }, + { + "path": "fixtures/lawpack/workspace-patch/README.md", + "gitBlob": "67cd35f2e0660aa7455de1c197ad821d5438679b" + }, + { + "path": "fixtures/lawpack/workspace-patch/adapter.cbor", + "gitBlob": "2d6f09a7e2fab381b97a05cfad1e692902e878c3" + }, + { + "path": "fixtures/lawpack/workspace-patch/adapter.sha256", + "gitBlob": "d44eb9675e126716e8a5ef3c53fd39ade49d76fb" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.core.cbor", + "gitBlob": "6a88c127e426288a3e51d4749d5c31d5b0cb60cb" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.core.sha256", + "gitBlob": "0204b6f1d8b346a67800a7738ee39df49e78571f" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.edict", + "gitBlob": "6e11a3d022a53a8fb2c20a77e35e29840f5fe086" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.cbor", + "gitBlob": "a6124a995a3cdbb5d39cd0a6e046b329048703aa" + }, + { + "path": "fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.sha256", + "gitBlob": "f7ac419ce15b32d491e09bddbe7c75f8227f51d8" + }, + { + "path": "fixtures/lawpack/workspace-patch/exports.cbor", + "gitBlob": "3a6fd19dc8059b9fe1bde74fb1da61398b0e80cc" + }, + { + "path": "fixtures/lawpack/workspace-patch/exports.sha256", + "gitBlob": "b301dd883a31fffe324e9306ec90ae2b1ec44520" + }, + { + "path": "fixtures/lawpack/workspace-patch/input-schema.cbor", + "gitBlob": "3045d9b696864fefe111c3eb641b3b68532752d2" + }, + { + "path": "fixtures/lawpack/workspace-patch/input-schema.sha256", + "gitBlob": "9f1284b4f0a2c7f6dbe1915a6113cd13a9700cb8" + }, + { + "path": "fixtures/lawpack/workspace-patch/manifest.cbor", + "gitBlob": "77e56c7525f0e64ab191f0adfeac12b540c87848" + }, + { + "path": "fixtures/lawpack/workspace-patch/manifest.sha256", + "gitBlob": "8316978e68565f29a30a6978d33d907710185857" + }, + { + "path": "fixtures/lawpack/workspace-patch/reconciliation-law.cbor", + "gitBlob": "0736b75f81913fca7ac95c56ec45f66b95aea4cf" + }, + { + "path": "fixtures/lawpack/workspace-patch/reconciliation-law.sha256", + "gitBlob": "de31fc9fda59fa3c29397e5fc48db224e8e1fee7" + }, + { + "path": "fixtures/lawpack/workspace-patch/request-profile-configuration.cbor", + "gitBlob": "5e2870b2f562bafaa73a91a3fc192f5ed39257c7" + }, + { + "path": "fixtures/lawpack/workspace-patch/request-profile-configuration.sha256", + "gitBlob": "4345ae2e39ce3f4d9cfa6b0dddf4ce56d56c035c" + }, + { + "path": "fixtures/lawpack/workspace-patch/settlement-schema.cbor", + "gitBlob": "0a93ac19c51b341602eeba524769147e962d5d60" + }, + { + "path": "fixtures/lawpack/workspace-patch/settlement-schema.sha256", + "gitBlob": "f1bb3fb0313dd6815b4184345194949ec40fe9e1" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/README.md", + "gitBlob": "996bd1d29b28769fff477084d9118d0833ca2970" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/adapter.cbor", + "gitBlob": "9be4ea568b602b56269af505deb809989a3fa8b5" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/adapter.sha256", + "gitBlob": "1e287be0a322e5444dea15fa14bcfc7cf12975c4" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/exports.cbor", + "gitBlob": "33fe04db74775c191d4b7400e1fb2b6393c5a010" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/exports.sha256", + "gitBlob": "e057cac7fc360e6599b7ddab88508aaf0f2f55f8" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/input-schema.cbor", + "gitBlob": "49c849169946e44c8b5f300279dd085bd6b63aeb" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/input-schema.sha256", + "gitBlob": "9dd7bb6e48192e90d19fc346d1705f736b1d85d7" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/manifest.cbor", + "gitBlob": "d4e58e3d4646ca967170a6882f2a617cb8d81390" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/manifest.sha256", + "gitBlob": "0edb311125a89a5816ee3fa0c9b700c9b3bcff3d" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.core.cbor", + "gitBlob": "a4b249dfb197f1a6b4adc06855f16e4305a1c798" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.core.sha256", + "gitBlob": "ea6b914d14907d9fd915058e579aff33c954da2c" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.edict", + "gitBlob": "c2c10f1ef1009796d67061b9722c4db9bb4e031b" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.cbor", + "gitBlob": "bdab1b0c55a34360c7e9ab304af91fe2b1e4afce" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.sha256", + "gitBlob": "7342aaa96221d6c8efa75ead2af5563791ccfeff" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/reconciliation-law.cbor", + "gitBlob": "df55572b350002a3df98ccb3e72dd60c86b9aead" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/reconciliation-law.sha256", + "gitBlob": "957cd04c78c130b07d2cad2fd7e07ae69978be57" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/request-profile-configuration.cbor", + "gitBlob": "708f18918ee1703491a910df82e129e711a4cc46" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/request-profile-configuration.sha256", + "gitBlob": "d9953d9dcaa41c98387226d1980f40b24d2bc3cb" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/settlement-schema.cbor", + "gitBlob": "f01ad68531267666e6bf93bf30a37d5b311c1676" + }, + { + "path": "fixtures/lawpack/workspace-snapshot/settlement-schema.sha256", + "gitBlob": "06fcc0ee2b976a09b3017bd93132a3c51eb1317e" + }, + { + "path": "fixtures/obstruction-strands/v0/stale-basis/README.md", + "gitBlob": "25efbfa04e2e6104c5434f329128333e895e2b0a" + }, + { + "path": "fixtures/obstruction-strands/v0/stale-basis/source.edict", + "gitBlob": "e487b46e81220c50e6f928922dada29f3a21ca6a" + }, + { + "path": "fixtures/provider-contracts/v1/README.md", + "gitBlob": "447692907f9268ce3b6b78c43b7cbbb0417aeadf" + }, + { + "path": "fixtures/provider-contracts/v1/edict-provider-contracts.cddl", + "gitBlob": "07048aeeadb5062eabb89e995713cbc0893b7d7e" + }, + { + "path": "fixtures/provider-contracts/v1/manifest.json", + "gitBlob": "d2c8de5d61049e9f4182c630bf82b138f0f96792" + }, + { + "path": "fixtures/providers/README.md", + "gitBlob": "c26ee60a4930e3e0784c76cb855e48234a5c6b58" + }, + { + "path": "fixtures/providers/components/guests/Cargo.lock", + "gitBlob": "d7858ce7bc67deabb5ff352a24c85a7caa0ef4b0" + }, + { + "path": "fixtures/providers/components/guests/Cargo.toml", + "gitBlob": "450a24aed25dc73661b0ae8adfe2630dfecc9b07" + }, + { + "path": "fixtures/providers/components/guests/lowerer/Cargo.toml", + "gitBlob": "568aa137fa215b6b973fe31e12322530b393b9dc" + }, + { + "path": "fixtures/providers/components/guests/lowerer/src/lib.rs", + "gitBlob": "b39a8a0b18fe9ed7cb90277f793056434afa1318" + }, + { + "path": "fixtures/providers/components/guests/verifier/Cargo.toml", + "gitBlob": "f814f2c8c248bbf03389f5a0936f80cd4dada5b6" + }, + { + "path": "fixtures/providers/components/guests/verifier/src/lib.rs", + "gitBlob": "3f07ffdfd808ff95b206a2c08c2d481ccaf0e165" + }, + { + "path": "fixtures/providers/components/instantiation-failure-lowerer.component.wasm", + "gitBlob": "bd2d7c0d31798d7676aedab0bd0d289fc2053bef" + }, + { + "path": "fixtures/providers/components/instantiation-failure-lowerer.wat", + "gitBlob": "f6f5a70edb80d3a7fa1dee13b34ab5b8b44274d7" + }, + { + "path": "fixtures/providers/components/instantiation-fuel-lowerer.component.wasm", + "gitBlob": "0804d26d3ddb428682ca87ecad03cf0e05ef64af" + }, + { + "path": "fixtures/providers/components/instantiation-fuel-lowerer.wat", + "gitBlob": "80e972463ef593602d27c7d7cec78d87d22ff727" + }, + { + "path": "fixtures/providers/components/inventory.json", + "gitBlob": "45cf2e8e937a17a8ee05dfa8d68e94dcc155e129" + }, + { + "path": "fixtures/providers/components/lowerer.component.wasm", + "gitBlob": "6c1cf123a44284d15b7b1e90f1905ae94e65c158" + }, + { + "path": "fixtures/providers/components/malformed-lowerer.component.wasm", + "gitBlob": "be873af81100dc76ed1f3f1f818a41da45a38e4c" + }, + { + "path": "fixtures/providers/components/malformed-lowerer.wat", + "gitBlob": "1e7bfffe0a0baf230d9fb5766083f82198f4029c" + }, + { + "path": "fixtures/providers/components/verifier.component.wasm", + "gitBlob": "671adbe7931d0a9a5e0c78d459c244d37a135a69" + }, + { + "path": "fixtures/providers/echo-generated/provider-manifest.json", + "gitBlob": "22c8560e7ddecacd5da388e52d3935d7fc1474b9" + }, + { + "path": "fixtures/providers/echo-target-profile/README.md", + "gitBlob": "350c33dcda2d66d2d50e589c58db7c6d7b14a80b" + }, + { + "path": "fixtures/providers/echo-target-profile/generated/primary/target-profile.echo-dpo.cbor", + "gitBlob": "9fa43529b1021dfd8e3a33256c832d4eee6f4a47" + }, + { + "path": "fixtures/providers/wit/legacy-target-profile.wit", + "gitBlob": "ae7d6af764012b16bf06bfa260ccba98a7f04868" + }, + { + "path": "fixtures/target-ir/canonical/echo-effectful.target-ir.cbor", + "gitBlob": "727a80eb37319dbdbea40d7d9b4e37f0d93d8d84" + }, + { + "path": "fixtures/target-ir/canonical/echo-effectful.target-ir.sha256", + "gitBlob": "6d050bb46ac8981ea8e47c7a52371027b941fd89" + }, + { + "path": "fixtures/target-ir/canonical/gitwarp-append.target-ir.cbor", + "gitBlob": "89b46b138a7b90252a4397c0e8b622bceff10a33" + }, + { + "path": "fixtures/target-ir/canonical/gitwarp-append.target-ir.sha256", + "gitBlob": "a59a4ab9d46095d5be1797ed9e60fe841f821bce" + }, + { + "path": "fixtures/target-ir/canonical/workspace-snapshot.target-ir.cbor", + "gitBlob": "1854eeb549b3719fa2b0114867dbece6db1819d4" + }, + { + "path": "fixtures/target-ir/canonical/workspace-snapshot.target-ir.sha256", + "gitBlob": "4d0e501323d415ef9e64c0a3d25bdd57dabfc998" + }, + { + "path": "fixtures/target-profile/contract-resources/README.md", + "gitBlob": "32dcab1dd9376a4eed2c73bb1b1a29255fe3ea05" + }, + { + "path": "fixtures/target-profile/contract-resources/canonical-cbor.cbor", + "gitBlob": "4a95ba3bd9dff190ca5ec9c83262bfa6254a91d3" + }, + { + "path": "fixtures/target-profile/contract-resources/canonical-cbor.sha256", + "gitBlob": "2168df5d4bf77ed2347139dd7c45fd808df8ec7e" + }, + { + "path": "fixtures/target-profile/contract-resources/determinism.cbor", + "gitBlob": "09cd11c36048939961408550763c04fad8241557" + }, + { + "path": "fixtures/target-profile/contract-resources/determinism.sha256", + "gitBlob": "5376d6bfe23bea659463a7e3c56ad1e8afd4095f" + }, + { + "path": "fixtures/target-profile/contract-resources/diagnostics.cbor", + "gitBlob": "c47fa05f463e0da745fbcdf8daf94d70e134eb8d" + }, + { + "path": "fixtures/target-profile/contract-resources/diagnostics.sha256", + "gitBlob": "69613ec4014f27b23245e23fbf7c9447566516b2" + }, + { + "path": "fixtures/target-profile/contract-resources/fuel.cbor", + "gitBlob": "b5a3484ec5b2bf7343c2fcedc67bcb2b63a37104" + }, + { + "path": "fixtures/target-profile/contract-resources/fuel.sha256", + "gitBlob": "6ec1c830358ee35bb12bd04cc1a6edf47fb20997" + }, + { + "path": "fixtures/target-profile/contract-resources/wasm-component.cbor", + "gitBlob": "6344996c283e0d1c332ea3ce597ad4593882a3c5" + }, + { + "path": "fixtures/target-profile/contract-resources/wasm-component.sha256", + "gitBlob": "24bf3e552e4216d8258d2b85c8878af46a176c52" + }, + { + "path": "grammars/textmate/README.md", + "gitBlob": "fc116a669725d4e965d658234d32d779955d5dc8" + }, + { + "path": "grammars/textmate/edict.tmLanguage.json", + "gitBlob": "5847d8edfdb32d822f0f3950f41d00c947982185" + }, + { + "path": "grammars/tree-sitter-edict/README.md", + "gitBlob": "e2992a839d6719f1461db78c4e3f33d2e5ab0c09" + }, + { + "path": "grammars/tree-sitter-edict/grammar.js", + "gitBlob": "a82f5b9d9b78525f17a59272543fdcddd7a0da40" + }, + { + "path": "grammars/tree-sitter-edict/queries/highlights.scm", + "gitBlob": "0f46530b36996d13449901aed4e376a126577cba" + }, + { + "path": "grammars/tree-sitter-edict/src/grammar.json", + "gitBlob": "55df730a06b83c9f622e3ec17845fc9897c7d8c0" + }, + { + "path": "grammars/tree-sitter-edict/src/node-types.json", + "gitBlob": "520f6c4f7b30cd6892dd60faf6d76f3fbaa6a5c7" + }, + { + "path": "grammars/tree-sitter-edict/src/parser.c", + "gitBlob": "81cc4713cb5e05f9aa8dac16da202a864faefee6" + }, + { + "path": "grammars/tree-sitter-edict/src/tree_sitter/alloc.h", + "gitBlob": "1abdd1201578605b8d05a3001f01ebc0d58826d9" + }, + { + "path": "grammars/tree-sitter-edict/src/tree_sitter/array.h", + "gitBlob": "56fc8cd470996ded64a5452be25e26dbd2aa682a" + }, + { + "path": "grammars/tree-sitter-edict/src/tree_sitter/parser.h", + "gitBlob": "858107deb9e4a1ffcd2ed5e6ffe98a5fcab3e1f6" + }, + { + "path": "grammars/tree-sitter-edict/test/corpus/current-subset.txt", + "gitBlob": "732c5eda8e1bf95eef799476296a6ee061eb58eb" + }, + { + "path": "grammars/tree-sitter-edict/tree-sitter.json", + "gitBlob": "97d3fdd498a3bef509c8615d98b9560b527c03cb" + }, + { + "path": "scripts/consumer-witnesses/README.md", + "gitBlob": "2b7d2b9d81f9598fd8df232b3a76bef106ff7ef2" + }, + { + "path": "scripts/consumer-witnesses/jedit-state-read.Dockerfile", + "gitBlob": "7462059be67686090d0097b24b9d14bfbbd4c6f7" + }, + { + "path": "scripts/consumer-witnesses/jedit-state-read.Dockerfile.dockerignore", + "gitBlob": "ee41b3ca0a68fd5eb20e1b777b4b368fd8b44e63" + }, + { + "path": "scripts/consumer-witnesses/jedit-state-read.py", + "gitBlob": "26db295d4eabfc4e57813fc9bf17314c23350777" + }, + { + "path": "scripts/consumer-witnesses/run-jedit-state-read.sh", + "gitBlob": "18cd72bbbdfb17a5ea30a7821d47035071556d10" + }, + { + "path": "spec.lock.json", + "gitBlob": "ef8b02386e0f269a99c1d2121764f70b76e67620" + }, + { + "path": "xtask/Cargo.toml", + "gitBlob": "795c70a5172363bfcd55174b1bc76c9c131d21a3" + }, + { + "path": "xtask/src/contract_check.rs", + "gitBlob": "9e80393accf79936033972fde0f2aa2cf40f1be3" + }, + { + "path": "xtask/src/goldens.rs", + "gitBlob": "713f1f8266d9f6993684ae86db105fcd7d69ee2a" + }, + { + "path": "xtask/src/lawpack_goldens.rs", + "gitBlob": "c499e8581c73313794b83c261937144b3917850a" + }, + { + "path": "xtask/src/main.rs", + "gitBlob": "6c2c06038bb5ecdde60620071b200d8191dc116c" + }, + { + "path": "xtask/src/provider_components.rs", + "gitBlob": "ee9d6a1028f9fbfad879faab4b15a94b996ef6d4" + }, + { + "path": "xtask/src/provider_contract_pack.rs", + "gitBlob": "cf60d89892b7a57cc33300f273d2522a6e8f43f9" + }, + { + "path": "xtask/src/provider_dependencies.rs", + "gitBlob": "c4b0539ed593d2a2777d294090d2a891b13ae628" + }, + { + "path": "xtask/src/release_dates.rs", + "gitBlob": "1c6d7acb872f6d820eab3a30ca580e9c5cfba2ee" + }, + { + "path": "xtask/src/release_prep.rs", + "gitBlob": "01ed64ccbb28c9d1e908b7b800ff58076e5e1a2b" + }, + { + "path": "xtask/src/tests.rs", + "gitBlob": "9a3f6543c2dbae31d53e93d56f781e5d54f74f41" + }, + { + "path": "xtask/src/util.rs", + "gitBlob": "c1bf39e93460c43ffdcfd9a76e0424750cbb9dfd" + } + ] +} diff --git a/edict/replace-range-probes/range-assembly/evidence/first-control-stderr.jsonl b/edict/replace-range-probes/range-assembly/evidence/first-control-stderr.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/range-assembly/evidence/first-control-stdout.jsonl b/edict/replace-range-probes/range-assembly/evidence/first-control-stdout.jsonl new file mode 100644 index 00000000..a668538e --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/first-control-stdout.jsonl @@ -0,0 +1 @@ +{"checked":1,"command":"build","errors":0,"exitCode":0,"schema":"edict.cli.event/v1","status":"ok","type":"status"} diff --git a/edict/replace-range-probes/range-assembly/evidence/public-build-red.json b/edict/replace-range-probes/range-assembly/evidence/public-build-red.json new file mode 100644 index 00000000..33b9c136 --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/public-build-red.json @@ -0,0 +1,79 @@ +{ + "compiler": { + "commit": "ac836e5c42a5c47b0dab30cfb0b09848cca73215", + "tree": "dadd4703a9905a37ff366c7134aea5cfe351e2fd", + "fileCount": 446, + "manifestSha256": "1cf9cdb1a3bfacab2dfa515f7a07188c984ba0770399ee6ec3ef473b9383781e", + "binarySha256": "a937e6f150f73fa20e9868c84adee0a8270cc62130d4aef18e5b891ec268fee2" + }, + "providerManifestSha256": "c5b9fb2fe3a0dc4dad282621a97413225c555be0071f3502b3272952069d42dc", + "results": { + "baseline": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "51797e77062585a9f59083ee8a1da3faaf486ef7691e1b62203369a9d9356ee0", + "artifactSha256": { + "executable-operation-package.cbor": "1860ab8a6cb9a4bfd63a1db99d1c2bc00aa53dae52a9d1998295654379a95d85", + "verification-report.cbor": "d96e5d21eecbc1e5bbf6ce76ab438d55cc8e74f6843121d4ffb0f4343e648267" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "first-control": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "fa207e40f734fce99c581efbc5159a276c95e7b399d3acce854829ace05c6d2e", + "artifactSha256": { + "executable-operation-package.cbor": "d950cebad1bb978e24dfa736efab302eb0f5c96135cb32f27ad8781d6ace6b51", + "verification-report.cbor": "412fb923e3dbd3f070624446ae953920058e08eda5fdc94f201d9b475842c803" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "second-control": { + "exitCode": 0, + "diagnostics": [], + "artifacts": [ + "executable-operation-package.cbor", + "verification-report.cbor" + ], + "sourceSha256": "b7bdfce283a977bf2a04ec95d278138a9fbcaeb3e5eedefb909b6d617b1cf8c0", + "artifactSha256": { + "executable-operation-package.cbor": "e75c18f7265ea8fd7390e2e2d4ff49047323e99a07602d80442659d636fd61f4", + "verification-report.cbor": "463a47e58e00390937c565413305b4ec553928b86aae2979fbcbf631b55961d9" + }, + "stdoutSha256": "ee9dd333c256f57a14f42869b19857a2e42c71b0483fcec23a7fc385802edd61", + "stderrSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "assembly": { + "exitCode": 2, + "diagnostics": [ + { + "command": "build", + "input": { + "kind": "stdin" + }, + "kind": "ApplicationCompilationFailed", + "message": "Edict application did not compile to Core: [CompilerError { stage: TypeCheck, kind: TypeMismatch, message: \"string concatenation requires string operands\", span: Span { start: 430, end: 472 } }, CompilerError { stage: TypeCheck, kind: UnresolvedType, message: \"record shorthand `bytes` has no typed binding\", span: Span { start: 485, end: 490 } }, CompilerError { stage: TypeCheck, kind: TypeMismatch, message: \"return value does not match declared output type\", span: Span { start: 283, end: 495 } }, CompilerError { stage: TypeCheck, kind: TypeMismatch, message: \"intent body must return a value\", span: Span { start: 283, end: 495 } }]", + "schema": "edict.cli.diagnostic/v1", + "severity": "error", + "stage": "cli", + "type": "diagnostic" + } + ], + "artifacts": [], + "sourceSha256": "8e8d2703759fb30cb49b73650ba8ddfd637d68b33b86145661bfca3033c968fc", + "artifactSha256": {}, + "stdoutSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "stderrSha256": "dfa643796ce3ecbca02f70ede806e6c50566456b3126747e3b496f6f35250d14" + } + } +} diff --git a/edict/replace-range-probes/range-assembly/evidence/second-control-stderr.jsonl b/edict/replace-range-probes/range-assembly/evidence/second-control-stderr.jsonl new file mode 100644 index 00000000..e69de29b diff --git a/edict/replace-range-probes/range-assembly/evidence/second-control-stdout.jsonl b/edict/replace-range-probes/range-assembly/evidence/second-control-stdout.jsonl new file mode 100644 index 00000000..a668538e --- /dev/null +++ b/edict/replace-range-probes/range-assembly/evidence/second-control-stdout.jsonl @@ -0,0 +1 @@ +{"checked":1,"command":"build","errors":0,"exitCode":0,"schema":"edict.cli.event/v1","status":"ok","type":"status"} diff --git a/edict/replace-range-probes/range-assembly/run.py b/edict/replace-range-probes/range-assembly/run.py new file mode 100644 index 00000000..6d25b611 --- /dev/null +++ b/edict/replace-range-probes/range-assembly/run.py @@ -0,0 +1,81 @@ +"""Exercise authored range-fragment assembly at Edict's public build boundary.""" + +import argparse +import json +from pathlib import Path +import runpy + + +COMPILER_COMMIT = "ac836e5c42a5c47b0dab30cfb0b09848cca73215" +CANDIDATE_COMPILER_COMMIT = "01dc5abb9a8a74f8fd8b0e0a6d1041d0adb86d6e" +SOURCE_EXPRESSION = b"input.firstFragment + input.secondFragment" + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + for name in ("compiler", "compiler-source", "compiler-manifest", "application-source", + "provider-package", "work-root"): + parser.add_argument("--" + name, type=Path, required=True) + parser.add_argument("--boundary", choices=("source", "package"), default="source") + args = parser.parse_args() + if not Path("/.dockerenv").is_file(): + raise RuntimeError("Run only under shared git-locks admission and the guarded Docker lease") + if not args.work_root.resolve().is_relative_to(Path("/tmp/echo-726-runtime")): + raise RuntimeError("Work must stay inside the declared runtime-data accounting root") + # Reuse the existing public-build orchestration without changing its specimen or pins. + common = runpy.run_path(str(Path(__file__).parent.parent / "leaf-slice/run.py")) + sha256, snapshot = common["sha256"], common["snapshot"] + verify = common["verify_compiler_source"] + args.work_root.mkdir() + expected_commit = COMPILER_COMMIT if args.boundary == "source" else CANDIDATE_COMPILER_COMMIT + compiler = verify(args.compiler_source, args.compiler_manifest, expected_commit) + compiler["binarySha256"] = sha256(args.compiler) + before = {"application": snapshot(args.application_source), + "provider": snapshot(args.provider_package)} + source = (Path(__file__).parent / "RangeAssembly.edict").read_bytes() + if source.count(SOURCE_EXPRESSION) != 1: + raise RuntimeError("Expected one exact authored fragment addition") + sources = { + "baseline": (args.application_source / "src/ReplaceRange.edict").read_bytes(), + "first-control": source.replace(SOURCE_EXPRESSION, b"input.firstFragment"), + "second-control": source.replace(SOURCE_EXPRESSION, b"input.secondFragment"), + "assembly": source, + } + evidence = {"compiler": compiler, + "providerManifestSha256": sha256(args.provider_package / "provider-manifest.echo.json"), + "results": {}} + for name, authored in sources.items(): + root = args.work_root / name + common["prepare"](root, args.application_source, args.provider_package, authored) + evidence["results"][name] = common["build"](root, args.compiler) + (args.work_root / "evidence.json").write_text(json.dumps(evidence, indent=2) + "\n") + for name, result in evidence["results"].items(): + print(json.dumps({"case": name, **result}, sort_keys=True), flush=True) + if before != {"application": snapshot(args.application_source), + "provider": snapshot(args.provider_package)}: + raise RuntimeError("Witness changed an authoritative input") + if compiler["binarySha256"] != sha256(args.compiler): + raise RuntimeError("Compiler binary changed during witness") + verify(args.compiler_source, args.compiler_manifest, expected_commit) + for name in ("baseline", "first-control", "second-control"): + result = evidence["results"][name] + if result["exitCode"] != 0 or result["diagnostics"] or not result["artifacts"]: + raise RuntimeError(f"{name} positive control did not build") + result = evidence["results"]["assembly"] + if args.boundary == "package": + if (result["exitCode"] != 0 or result["diagnostics"] + or result["artifacts"] != ["executable-operation-package.cbor", "verification-report.cbor"]): + raise RuntimeError("Assembly did not reach the expected package build boundary") + print("JIM_RANGE_ASSEMBLY_PACKAGE_BOUNDARY_CONFIRMED", flush=True) + return + if result["exitCode"] != 2 or result["artifacts"]: + raise RuntimeError("Assembly must refuse without application artifacts") + refusal = result["diagnostics"] + if (len(refusal) != 1 or refusal[0].get("kind") != "ApplicationCompilationFailed" + or "string concatenation requires string operands" not in refusal[0].get("message", "")): + raise RuntimeError("Assembly did not produce the expected source refusal") + print("JIM_RANGE_ASSEMBLY_SOURCE_BOUNDARY_CONFIRMED", flush=True) + + +if __name__ == "__main__": + main() diff --git a/edict/replace-range-probes/state-read/Dockerfile b/edict/replace-range-probes/state-read/Dockerfile new file mode 100644 index 00000000..ea6f274b --- /dev/null +++ b/edict/replace-range-probes/state-read/Dockerfile @@ -0,0 +1,18 @@ +FROM rust:1.95.0-bookworm AS compiler +WORKDIR /edict +RUN git init && git remote add origin https://github.com/flyingrobots/edict.git \ + && git fetch --depth=1 origin 77f4a91080a6c2c875fe349da6fc6a64525947a2 \ + && git checkout --detach FETCH_HEAD \ + && cargo build --locked -p edict-cli + +FROM debian:bookworm-slim +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates git python3 && rm -rf /var/lib/apt/lists/* +WORKDIR /echo +RUN git init && git remote add origin https://github.com/flyingrobots/echo.git \ + && git fetch --depth=1 origin 49e9efb68001dfd78563d18bac9359a87671e431 \ + && git checkout --detach FETCH_HEAD \ + && cp -R schemas/edict-provider/package/v1 /echo-provider +COPY --from=compiler /edict/target/debug/edict /usr/local/bin/edict +COPY edict/replace-range-probes/state-read /probe +CMD ["python3", "/probe/run.py"] diff --git a/edict/replace-range-probes/state-read/Dockerfile.dockerignore b/edict/replace-range-probes/state-read/Dockerfile.dockerignore new file mode 100644 index 00000000..681a3149 --- /dev/null +++ b/edict/replace-range-probes/state-read/Dockerfile.dockerignore @@ -0,0 +1,5 @@ +* +!edict/ +!edict/replace-range-probes/ +!edict/replace-range-probes/state-read/ +!edict/replace-range-probes/state-read/** diff --git a/edict/replace-range-probes/state-read/README.md b/edict/replace-range-probes/state-read/README.md new file mode 100644 index 00000000..da41a87d --- /dev/null +++ b/edict/replace-range-probes/state-read/README.md @@ -0,0 +1,69 @@ +# State-read ordering probe + +This is development evidence for [#296](https://github.com/flyingrobots/jedit/issues/296) +and [PR #302](https://github.com/flyingrobots/jedit/pull/302). It is not the +ReplaceRange implementation, an admitted operation, or a runtime capability. +The frozen application and producer pins under `edict/replace-range/` are +unchanged. + +ReplaceRange must read a buffer's canonical head and compare it with the +requested basis before accepting an edit. A caller-provided head is not proof +of current state. This deliberately small authored source asks for that +read-then-check sequence through a Jim-owned semantic effect. + +The lawpack proposes `readCanonicalHead(BufferId) -> HeadId`, with a typed +missing-fact obstruction. Its `snapshot-read-probe` target intrinsic is an +explicit placeholder: **Echo does not implement it**. The retained pure-provider +configuration is intentionally incompatible with stateful execution. This +fixture establishes a compiler boundary, not an agreed future read ABI, +footprint model, canonical fact decoder, or provider implementation. + +## Reproduce + +From the repository root, build and run without mounting a host repository: + +```sh +docker build -f edict/replace-range-probes/state-read/Dockerfile \ + -t jedit-state-read-boundary . +docker run --rm jedit-state-read-boundary +``` + +The image pins Edict to `77f4a91080a6c2c875fe349da6fc6a64525947a2` +and the existing Echo provider to +`49e9efb68001dfd78563d18bac9359a87671e431`. Both revisions are fetched inside +Docker. The harness copies inputs to disposable container storage and uses the +public lawpack/application JSONL build API; it constructs no Core, Target IR, +executable package, or native edit plan. + +Expected evidence: + +1. The complete lawpack builds, and its generated digest matches the authored + import. +2. The source with the basis guard rejects at `TargetLoweringFailed`, with + `obstruction_requirement_step_output_dependency`. +3. A control removes only that guard. It reaches the provider and rejects at + `ProviderLowererRefused`, with `UnsupportedSemantics`. +4. Neither refusal publishes application output artifacts. + +The harness prints `JEDIT_STATE_READ_BOUNDARY_CONFIRMED` when both boundaries +are observed. A passing harness therefore means the limitation is reproduced; +it does **not** mean state reads or ReplaceRange work. + +## Required follow-through + +[Edict #218](https://github.com/flyingrobots/edict/issues/218) owns the ordered +Target IR prerequisite exposed here. + +Edict currently separates pure bindings, requirements, and target steps. +Requirements are pre-step guards. Supporting this operation requires an +explicit ordering contract; deleting the rejection alone would lose the +read-before-check meaning. The compiler must preserve dependencies and reject +forward or fabricated references. Existing artifact identities and consumers +need a deliberate compatibility path. + +After that compiler contract exists, Echo still needs an independently verified, +generic snapshot-read and private staged-write execution path. Reads must share +the admitted application snapshot; an obstruction must not publish partial +edits. Jim owns canonical fact decoding, rope algorithms, identities, and typed +obstructions. Complete rope transformation, oracle agreement, footprints, +budgets, Tick/WAL/receipt, and recovery remain the acceptance criteria of #296. diff --git a/edict/replace-range-probes/state-read/edict.application.json b/edict/replace-range-probes/state-read/edict.application.json new file mode 100644 index 00000000..b081d60c --- /dev/null +++ b/edict/replace-range-probes/state-read/edict.application.json @@ -0,0 +1,20 @@ +{ + "schema": "edict.application/v1", + "coordinate": "jedit.text.replace_range@1", + "sources": [ + "src/ReplaceRange.edict" + ], + "lawpacks": [ + { + "manifest": "vendor/state-probe/manifest.cbor", + "exports": "vendor/state-probe/exports.cbor", + "adapter": "vendor/state-probe/adapter.cbor", + "targetConfiguration": "vendor/state-probe/echo-operation-configuration.cbor" + } + ], + "target": { + "profile": "echo.dpo@1", + "providerPackage": ".build/echo-provider" + }, + "outputDirectory": ".build/application" +} diff --git a/edict/replace-range-probes/state-read/edict.lawpack.json b/edict/replace-range-probes/state-read/edict.lawpack.json new file mode 100644 index 00000000..963fa1c5 --- /dev/null +++ b/edict/replace-range-probes/state-read/edict.lawpack.json @@ -0,0 +1,247 @@ +{ + "schema": "edict.lawpack-build/v1", + "outputDirectory": "vendor/state-probe", + "lawpack": { + "schema": "edict.lawpack-authoring/v1", + "id": "jedit.text", + "version": "1", + "acceptedCoreAbi": [ + "edict.core/v1" + ], + "dependencies": [], + "exportsCoordinate": "jedit.text.exports/v1", + "exports": { + "types": [ + { + "coordinate": "jedit.text@1.NodeId", + "definition": "Bytes" + }, + { + "coordinate": "jedit.text@1.BufferId", + "definition": "Nominal" + }, + { + "coordinate": "jedit.text@1.HeadId", + "definition": "Nominal" + }, + { + "coordinate": "jedit.text@1.ReplacementBytes", + "definition": "Bytes" + }, + { + "coordinate": "jedit.text@1.ObstructionDetail", + "definition": "String" + } + ], + "constants": [ + { + "coordinate": "jedit.text@1.maxCreatedLeaves", + "type": "U64", + "value": 4096 + }, + { + "coordinate": "jedit.text@1.maxCreatedBranches", + "type": "U64", + "value": 4096 + } + ], + "pureFunctions": [ + { + "source": "edict", + "coordinate": "jedit.text@1.maxCreatedLeafCount", + "typeParameters": [], + "parameterTypes": [], + "returnType": "U64", + "costTemplate": "jedit.text@1.replaceRangeBudget", + "determinismClass": "total", + "body": { + "params": [], + "body": { + "locals": [], + "bindings": [], + "result": { + "kind": "const", + "value": { + "kind": "int", + "width": "U64", + "value": 4096 + } + } + } + } + } + ], + "effects": [ + { + "coordinate": "jedit.text@1.readCanonicalHead", + "typeParameters": [], + "inputType": "jedit.text@1.BufferId", + "outputType": "jedit.text@1.HeadId", + "executionClass": "runtime", + "effectKindHint": "read", + "footprintObligation": "jedit.text@1.replaceRangeFootprint", + "costObligation": "jedit.text@1.replaceRangeBudget", + "effectFailures": { + "missing": { + "authorityClass": "resourceFault", + "payloadType": "jedit.text@1.BufferId" + } + }, + "guardSupport": true + } + ], + "obstructions": [ + { + "coordinate": "jedit.text@1.RangeOrderInvalid", + "authorityClass": "domainMappable", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.RangeOutOfBounds", + "authorityClass": "domainMappable", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.Utf8BoundaryInvalid", + "authorityClass": "domainMappable", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.NoOp", + "authorityClass": "domainMappable", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.BasisNotCanonical", + "authorityClass": "domainMappable", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.ArithmeticOverflow", + "authorityClass": "integrityFault", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.FactMissing", + "authorityClass": "resourceFault", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.FactMalformed", + "authorityClass": "integrityFault", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.ContentIdentityMismatch", + "authorityClass": "integrityFault", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.MalformedRope", + "authorityClass": "integrityFault", + "payloadSchema": "jedit.text@1.ObstructionDetail" + } + ], + "operationProfiles": { + "jedit.text@1.replaceRange": { + "opticTemplate": { + "opticKind": "affectReintegration", + "boundaryKind": "affect", + "supportPolicy": "jedit.text@1.basisBoundSupport", + "lossDisposition": "jedit.text@1.lossless", + "basisTemplate": "jedit.text@1.exactHeadBasis", + "apertureRequirement": { + "kind": "abstractFootprintObligation", + "reference": "jedit.text@1.replaceRangeFootprint" + } + }, + "effectPredicate": "jedit.text@1.replaceRangeEffects" + } + } + }, + "targetAdapters": [ + { + "coordinate": "jedit.text.echo-adapter/v1", + "output": "adapter.cbor", + "acceptedTargetProfile": { + "id": "echo.dpo@1", + "digest": "sha256:2e2494121aecf5e6a2d920f5fb85408825d394765fad41484c416397c920fb04" + }, + "acceptedTargetIr": { + "id": "echo.span-ir/v1", + "digest": "sha256:0057167e68f50c99dcce087b3e1cd677d17c5d1dc238bdb52d89469e1472fc2f" + }, + "operationProfiles": { + "jedit.text@1.replaceRange": { + "core": "continuum.profile.read-write/v1", + "semanticEffects": [ + "jedit.text@1.readCanonicalHead" + ], + "budgetObligation": "jedit.text@1.replaceRangeBudget", + "targetConfiguration": { + "local": "echo-config" + } + } + }, + "effectImplementations": { + "jedit.text@1.readCanonicalHead": { + "targetIntrinsic": "echo.dpo@1.snapshot-read-probe", + "targetConfiguration": { + "local": "echo-config" + }, + "writeClass": "read", + "footprintObligation": "jedit.text@1.replaceRangeFootprint", + "costObligation": "jedit.text@1.replaceRangeBudget", + "failureMappings": { + "missing": "echo.fact-missing/v1" + } + } + }, + "budgets": { + "jedit.text@1.replaceRangeBudget": { + "maxSteps": 1048576, + "maxAllocatedBytes": 16777216, + "maxOutputBytes": 8388608 + } + } + } + ], + "verifier": { + "class": "declarative", + "ruleset": { + "local": "verifier-rules" + } + }, + "compatibility": { + "id": "jedit.text.compatibility/v1", + "digest": "sha256:2adf83f798205f52636ad64ca45178f33a8e1cc663874f8a6113484c945e3052" + }, + "conformanceFixtureCorpus": { + "id": "jedit.text.ReplaceRange.oracle@1", + "digest": "sha256:b9b4707dd5e07897cbe7af36d88928401887e6af5d167d1a88a8d6181b4dbb0e" + }, + "localResources": [ + { + "name": "echo-config", + "coordinate": "echo.operation-lowering-configuration/v1", + "output": "echo-operation-configuration.cbor", + "value": { + "apiVersion": "echo.operation-lowering-configuration/v1", + "programKind": "compiler-produced-bounded-pure/v1" + } + }, + { + "name": "verifier-rules", + "coordinate": "jedit.text.verifier-rules/v1", + "output": "verifier-rules.cbor", + "value": { + "schema": "jedit.text.schema@1", + "schemaDigest": "sha256:f49b0ff6c9c7010d3a72b46734d47832853f496739a083edc41dddec3431bac7", + "oracleIsExecutableInput": false, + "runtimeOntology": "generic-bounded-graph" + } + } + ] + }, + "dependencyBundles": [] +} diff --git a/edict/replace-range-probes/state-read/run.py b/edict/replace-range-probes/state-read/run.py new file mode 100644 index 00000000..94087c6b --- /dev/null +++ b/edict/replace-range-probes/state-read/run.py @@ -0,0 +1,82 @@ +"""Docker-only public compiler witness; this does not execute a rope edit.""" + +import json +import os +from pathlib import Path +import shutil +import subprocess +import tempfile + + +GUARD = " require canonicalHead == input.basisHeadId else text.BasisNotCanonical;\n" + + +def build(binary, workspace, document): + request = { + "schema": "edict.compiler.settings/v1", + "type": "compilerSettings", + "operation": "build", + document: f"edict.{document}.json", + } + result = subprocess.run( + [binary], cwd=workspace, input=json.dumps(request) + "\n", + text=True, capture_output=True, timeout=120, check=False, + ) + events = [ + json.loads(line) + for stream in (result.stdout, result.stderr) + for line in stream.splitlines() + ] + return result, events + + +def expect_refusal(binary, workspace, kind, detail): + result, events = build(binary, workspace, "application") + diagnostics = [event for event in events if event.get("type") == "diagnostic"] + if result.returncode != 2 or len(diagnostics) != 1: + raise RuntimeError(f"Unexpected build result: {result}\n{events}") + diagnostic = diagnostics[0] + if diagnostic["kind"] != kind or detail not in diagnostic["message"]: + raise RuntimeError(f"Wrong failure boundary: {diagnostic}") + output = workspace / ".build/application" + if output.exists() and list(output.rglob("*")): + raise RuntimeError("Refused application published output artifacts") + print(json.dumps(diagnostic, sort_keys=True)) + + +def main(): + if not Path("/.dockerenv").is_file(): + raise RuntimeError("Run this witness in its COPY-based Docker image") + binary = os.environ.get("EDICT_BINARY", "/usr/local/bin/edict") + provider = Path(os.environ.get("ECHO_PROVIDER_DIR", "/echo-provider")) + source = Path(__file__).resolve().parent + with tempfile.TemporaryDirectory(prefix="jedit-state-read-") as scratch: + workspace = Path(scratch) / "application" + workspace.mkdir() + for document in ("edict.application.json", "edict.lawpack.json"): + shutil.copyfile(source / document, workspace / document) + shutil.copytree(source / "src", workspace / "src") + shutil.copytree(provider, workspace / ".build/echo-provider") + result, events = build(binary, workspace, "lawpack") + if result.returncode != 0 or events[-1].get("status") != "ok": + raise RuntimeError(f"Lawpack did not build: {result}\n{events}") + authored = workspace / "src/ReplaceRange.edict" + text = authored.read_text() + manifest_digest = (workspace / "vendor/state-probe/manifest.sha256").read_text().strip() + if f'digest "{manifest_digest}"' not in text or text.count(GUARD) != 1: + raise RuntimeError("Source does not bind the exact generated lawpack and guard") + expect_refusal( + binary, workspace, "TargetLoweringFailed", + "obstruction_requirement_step_output_dependency", + ) + # This control removes only the dependent guard. The proposed read is + # deliberately unsupported by the old provider; it must not execute. + authored.write_text(text.replace(GUARD, "")) + expect_refusal( + binary, workspace, "ProviderLowererRefused", "UnsupportedSemantics", + ) + print("JEDIT_STATE_READ_BOUNDARY_CONFIRMED") + + +if __name__ == "__main__": + main() diff --git a/edict/replace-range-probes/state-read/src/ReplaceRange.edict b/edict/replace-range-probes/state-read/src/ReplaceRange.edict new file mode 100644 index 00000000..c59342c7 --- /dev/null +++ b/edict/replace-range-probes/state-read/src/ReplaceRange.edict @@ -0,0 +1,13 @@ +package jedit.text.replace_range@1; +use lawpack jedit.text@1 digest "sha256:7d66e6d70629ab25602500ab5802c25114b3691d90e0858b98a3332ec088647c" as text; +type Input = {bufferId: text.BufferId, basisHeadId: text.HeadId}; +intent replaceRange(input: Input) returns text.HeadId + profile text.replaceRange + basis input.basisHeadId + budget <= text.replaceRangeBudget +{ + let canonicalHead: text.HeadId = text.readCanonicalHead(input.bufferId) + else { missing(id) => text.FactMissing }; + require canonicalHead == input.basisHeadId else text.BasisNotCanonical; + return canonicalHead; +} diff --git a/edict/replace-range/README.md b/edict/replace-range/README.md new file mode 100644 index 00000000..79eaaca2 --- /dev/null +++ b/edict/replace-range/README.md @@ -0,0 +1,114 @@ +# ReplaceRange Edict application + +This directory is the Jedit-owned application root for issue #296. It keeps +the authored, built, and evidentiary artifact classes separate: + +- `edict.lawpack.json` is the reviewable `jedit.text@1` authoring input; +- `vendor/jedit-text/` is Edict's canonical published lawpack closure; +- `src/ReplaceRange.edict` is the application-owned source; +- `edict.toolchain-lock.json` pins the exact build implementations and + provider; +- `edict.build-lock.json` pins the exact source closure and emitted artifact + chain; +- `edict.executable-subject-lock.json` pins the verified executable meaning; +- `.build/` contains disposable provider and compiler outputs; +- `contracts/jedit/lawpacks/replace-range-v1/` remains the independent schema + and oracle corpus and is not executable input. + +## Current executable boundary + +The authored source computes flat-text replacement as prefix + replacement + +suffix. Its ordered guard checks the range before slicing, validates the full +original text and replacement as UTF-8, validates both offset prefixes as +UTF-8, and rejects byte-identical replacements. The guard reports a generic +input-constraint refusal; it does not yet produce the domain's typed outcomes. + +The imported constant helper has its own small cost declaration. The operation +budget separately includes bounded UTF-8 scan work. Reusing the operation's +entire budget as the constant helper's cost would consume that budget before +accounting for the scans. + +The standalone test host supplies bytes to the freshly compiled package. It +checks nine literal replacements, thirteen range, UTF-8 and no-op refusals, +and five host-resource refusals. It performs no native replacement and links +no native rope planner. The package-chain harness runs both the boundary and +flat-text targets, and the build closure includes both test sources. + +The toolchain pins Edict main `2b4832efe62de75e1f204cec72f9fe7d00ef9551` +and Echo main `b314f7fd071985edad1f9876df383a85fb491205`. The generated +build and executable-subject locks bind the changed source, vendor publication, +provider and test closure. Public macOS and Linux builds emit identical package +and verifier-report bytes. The package identity is +`sha256:4c2b7859f291e97b6b38fb265086e6cb0581ed030d54d38152b0585152120397`. +The Docker package-chain gate checks the exact clean Git toolchains, rebuilds +through the public CLI, verifies the locks, runs both runtime targets and +refuses mutation of authoritative inputs. + +This is pure computation. No graph or rope is mutated, no Tick is settled, +and no WAL or recovery evidence is produced. The test host enables Echo's +trusted-host API only in this standalone unpublished test crate. It is not a +production dependency or an alternate editor route. The authored rope algorithm +and generic stateful execution remain unfinished under #296. + +## Reproduce + +Run the build script inside Docker with copies of the exact Edict and Echo +checkouts. Do not mount host repositories or Git directories into the container: + +```bash +EDICT_REPO=/path/to/edict \ +ECHO_REPO=/path/to/echo \ +CARGO_TARGET_DIR=/path/to/disposable-runtime-build-cache \ + ./edict/replace-range/tests/build.sh +``` + +`edict.toolchain-lock.json` pins the exact Edict commit and CLI release, Rust +toolchain, Echo commit, provider identity, provider manifest bytes, and lowerer +and verifier components. It also pins the Node and npm releases, the resolved +`cbor-x` package and integrity, and the package, lockfile, and CI invocation +bytes that perform validation. The script refuses non-Git roots, wrong commits, +dirty checkouts, or validation-environment drift before invoking either +toolchain. GitHub's package-chain job checks out and verifies the literal pull +request head; ordinary matrix jobs may separately exercise the synthetic merge. + +The harness takes the compiler executable path from Cargo's successful +`compiler-artifact` output. `CARGO_TARGET_DIR` may therefore point outside the +Edict checkout, as it does in CI; no pre-existing `target/debug/edict` is needed. +The runtime witness uses the same configured build cache. A regression runs the +full package chain against an isolated Edict checkout whose default binary path +is absent before and after execution. + +`edict.build-lock.json` binds the exact source and validation closure to the +Core, Target IR, result projection, executable package, verification report, +and executable-subject identities. The raw Echo report remains a separately +identified artifact. A canonical-JSON Jedit evidence envelope binds that artifact +and subject to the exact provider release, verifier component, diagnostic ABI, +report ABI, and outcome; that verifier-specific envelope is the transitional +`VerificationReportId`. `edict.executable-subject-lock.json` separately records +the subject identity and the exact package, Target IR, and result-projection +references it contains. The harness recomputes every digest from emitted bytes +and refuses a valid report paired with a substituted package or verifier. The +locks contain no self-referential Jedit commit; an exact PR head remains an +external review coordinate. + +The script verifies the committed `jedit.text@1` closure through Edict's public +lawpack `checkOnly` boundary. It never republishes or repairs that authoritative +tree. It then copies Echo's checked provider package into `.build/`, invokes +Edict's public application build, and requires the generic pure package and an +accepted independent-verifier report. Snapshots cover the application inputs +outside `.build/`, the pinned project validation files, and every tracked Edict +and Echo file; any content, identity, or timestamp mutation fails the run. Only +`.build/` is disposable output. `CARGO_TARGET_DIR` optionally selects a shared +disposable Cargo cache; otherwise runtime build output stays under `.build/`. +The runtime witness runs with `--locked` and must emit its completion marker +after all assertions pass, so a zero-test Cargo invocation cannot satisfy the +gate. The provider and the runtime are both pinned to the same Echo main +commit. Neither is described as a released or installed product dependency. +Distinct nominal `BufferId` and `HeadId` +contracts retain the same exact 32-byte representation, while a negative +compiler witness proves that neither can cross the imported lawpack boundary as +the other. + +The next gate must exercise an authored rope consequence under generic Echo +stateful execution and compare it with the independent oracle. This pure +boundary witness is not a substitute for that evidence. diff --git a/edict/replace-range/draft/README.md b/edict/replace-range/draft/README.md new file mode 100644 index 00000000..6099ec05 --- /dev/null +++ b/edict/replace-range/draft/README.md @@ -0,0 +1,133 @@ +# ReplaceRange in Edict source: complete drafts + +These files are the whole `ReplaceRange` program written the way it should +read, against the schema 2 representation in +[DL-0159](../../../docs/design/0159-edict-rope-representation.md). They are not +part of the application gate and they do not compile yet. Their job is to let +the program drive the language and runtime work instead of isolated probes. + +| File | Target | Content | +| --- | --- | --- | +| `Text.edict` | shared | schema 2 facts, edge types, identity law, text metrics | +| `Reference.edict` | 1: semantic correctness | flat-text `ReplaceRange`; deliberately inefficient | +| `Rope.edict` | 2: persistent rope | pure AVL split, join, balance, build, collect | +| `ReplaceRange.edict` | 2: persistent rope | closure read, pure replace, `ensure` effects, head retarget | + +The two targets are separate on purpose. Target 1 needs almost no new language +and isolates the Echo effect bridge. Target 2 adds the language features a +persistent structure needs. Target 1 then serves as a differential oracle for +target 2: they must agree on logical text and outcomes, not physical roots. +Target 1 does not complete the rope. + +## Compiler result + +Built against Edict main `e60411fc` with this application's lawpack closure: + +| File | First refusal | +| --- | --- | +| `Text.edict` | parse: bytes literal `b"\n"` (bytes literals are not lexed; see below) | +| `Reference.edict` | parse: `use module` is not an import kind | +| `Rope.edict` | parse: `use module` is not an import kind | +| `ReplaceRange.edict` | parse: `use module` is not an import kind | + +The parser stops at the first error, so the classification below is per +construct. **Confirmed** means a build against Edict main was run for that +construct. **Read** means it was established by reading compiler or runtime +source on main, not by running it. + +## Blockers by class + +### Language expressiveness (Edict source) + +| Construct | Used by | Status on main | +| --- | --- | --- | +| Integer `+` on `U64` | both | refused, **confirmed** (`TypeMismatch`) | +| Variant types and `match` | target 2 | refused, **confirmed** (`only record type declarations`) | +| Recursive types with a depth bound | target 2 | refused, **confirmed** (`UnresolvedType`) | +| Recursive functions with a termination measure | target 2 | refused, **confirmed** (`ReferenceCycle`) | +| Expression `if … else if …` | both | accepted, **confirmed** | +| Bytes slice and concatenation | both | accepted, **confirmed** (leaf-slice, range-assembly probes) | +| Source-module import (`use module`) | both | refused, **confirmed** | +| Bytes literals `b"…"` | both | refused anywhere, **confirmed**: lexed as identifier `b` then a string; [edict#249](https://github.com/flyingrobots/edict/issues/249) | +| `\r` and explicit byte escapes | decoder only | refused, **confirmed**; [edict#249](https://github.com/flyingrobots/edict/issues/249) | +| `Option`, `some`/`none`/`isSome`/`unwrap` | target 2 | refused, read | +| `List` construction, `++`, `len(list)` | target 2 | refused, read | +| `enum` declarations | target 2 | refused, read | +| Record spread `{ ...x, f: v }` | both | refused, read | +| Function preconditions and flow-sensitive proofs for `-` and `slice` | both | refused inside functions, read | +| Typed failure in pure functions (`fails`, `expect`) | target 2 | not in the spec; proposed | +| `U64` division, `min`/`max` | target 2 | refused, read | +| Source `hash` with a domain label | both | in the spec; not implemented, read | + +### Generic data-structure primitives + +| Primitive | Used by | Why | +| --- | --- | --- | +| `core.bytes.at(bytes, i) -> U8` | both | UTF-8 boundary check | +| `core.bytes.count(bytes, byte) -> U64` | both | line-break metric | +| `core.bytes.isUtf8(bytes) -> Bool` | both | replacement validity | +| `core.cbor.encode(value)` | both | identity input in the canonical codec | + +None of these knows about text editing. They are byte and codec utilities. + +### Runtime realization (Echo) + +All are covered by the proposed Echo design +[Authored Operation Effects](https://github.com/flyingrobots/echo/blob/docs/edict-authored-operation-effects/docs/architecture/authored-operation-effects.md): + +| Need | Used by | Status on main | +| --- | --- | --- | +| Evaluated operation → proposed effects → atomic commit | both | absent (read) | +| `ensure` node: create, or require identical | both | absent; create obstructs on existing (read) | +| Edge read by type, edge `ensure`, edge compare-and-retarget | both | absent (read) | +| Atom compare-and-replace from evaluation | both | only with caller-supplied bytes (read) | +| Guided closure read with a pure Edict selector | target 2 | absent (read) | +| `for` with effects lowered to Target IR | target 2 | Target refuses `For` (read) | + +### Performance and resources + +- Closure size: two boundary paths plus their inner spines, `O(h²)` nodes, + with `h ≤ 1.44 log2(leaves)`. Bounded by `text.maxClosureNodes`. +- Patch size: about `(h + 1)` new branches, up to 2 new leaves plus + `replacement / 4096` leaves, two edges per branch, one head with its `root` + and `anchor` edges, and one retargeted `canonicalHead` edge. Echo caps a Tick at 128 operations, which a 1 MiB replacement exceeds; + the cap or the replacement bound must move, and that is a measured decision. +- Echo's state root walks all reachable history on every commit (DL-0159 risk). +- Echo charges a full copy for every local read; `Tree` values are large. + +### Ordinary defects + +- [jedit#350](https://github.com/flyingrobots/jedit/issues/350): reopen reuses + a stale rope. Prerequisite for durable file integration. +- [edict#249](https://github.com/flyingrobots/edict/issues/249): lexer escapes. + +## Evidence plan + +The 40-case oracle (6 committing, 34 obstructed) is a baseline generated from +the native planner. The rope is not complete until these also hold: + +| Property | Evidence | +| --- | --- | +| Edit correctness | Generated edit sequences give the same logical text through target 1 and target 2, and through the native planner where its schema 1 cases apply. | +| Persistence | After N edits, every earlier head is still readable and unchanged. | +| Structural sharing | Nodes outside the boundary closure keep their ids across an edit. | +| Canonicalization | Logically equal facts encode to identical bytes; non-canonical encodings are refused. | +| Replay | The same admitted history reproduces identical roots and receipts on a fresh host. | +| Atomicity | A failure injected at any effect of a multi-node edit leaves no partial effect. | +| Conflict | A stale basis, or an `ensure` that meets different existing content, obstructs safely. | +| Unicode | UTF-8 boundaries, multi-byte scalars, combining marks, and surrogate-pair characters (four-byte UTF-8) at every split position. | +| Resource bounds | Exhausting steps, bytes, closure nodes, or the Tick operation cap gives a typed result with no commit. | +| Reopen and save | An external file change can never silently reuse stale rope state (#350). | +| Commutation | Two edits against one fixed basis: state exactly when their order can commute, and test that condition rather than assume it. | +| Closure sufficiency | Over generated trees and ranges, `replace` never fails with `ClosureTooSmall` under the selector. | + +## Open design points in the drafts + +- The closure selector's expansion rule (boundary paths, inner spines, and the + no-op range) is argued, not proven. A `ClosureTooSmall` failure maps to + `MalformedRope`; it should instead be impossible, and a property test must + show it. +- Duplicate fresh leaves with equal content produce the same id twice; the + effect bridge must make a repeated `ensure` in one proposal canonical. +- `Reference.edict`'s single text node is bounded at 1 MiB; target 1 says + nothing about larger buffers. diff --git a/edict/replace-range/draft/Reference.edict b/edict/replace-range/draft/Reference.edict new file mode 100644 index 00000000..37538f03 --- /dev/null +++ b/edict/replace-range/draft/Reference.edict @@ -0,0 +1,95 @@ +// Draft: semantic reference ReplaceRange (acceptance target 1). +// +// Deliberately inefficient. A head owns one flat Text node holding the whole +// buffer, so every edit rewrites the whole text. It exists to prove the +// language and the Echo effect bridge on a small surface, and to serve as a +// differential oracle for the persistent rope in Rope.edict and +// ReplaceRange.edict. The two agree on logical text and outcomes, not on +// physical roots. It does not complete the rope. +package jedit.text.reference@1; + +use lawpack jedit.text@2 as text; +use target echo.dpo@1 as echo; +use module jedit.text.v2@1 as v2; // PROPOSED: source-module import + +type TextFact = { + bytes: Bytes, + lineBreaks: U64, +}; + +type Input = { + bufferId: text.BufferId, + basisHeadId: text.HeadId, + startByte: U64, + endByte: U64, + replacement: Bytes, +}; + +type Result = { + headId: text.HeadId, + byteLength: U64, + lineCount: U64, + sequence: U64, +}; + +intent replaceRange(input: Input) returns Result + profile text.replaceRange + basis input.basisHeadId + footprint <= text.referenceReplaceRangeFootprint + budget <= text.referenceReplaceRangeBudget + where input.startByte <= input.endByte +{ + let bufferRef = echo.ref(input.bufferId); + let buffer = bufferRef.read() else text.FactMissing; + let canonical = echo.edge(bufferRef) + .target() else text.FactMissing; // PROPOSED: read an edge by type + require canonical == input.basisHeadId else text.BasisNotCanonical; + + let headRef = echo.ref(input.basisHeadId); + let head = headRef.read() else text.FactMissing; + let textId = echo.edge(headRef) + .target() else text.FactMissing; + let importId = echo.edge(headRef) + .target() else text.FactMissing; + let old = echo.ref(textId).read() else text.FactMissing; + require len(old.bytes) == head.byteLength else text.MalformedRope; + + require input.endByte <= len(old.bytes) else text.RangeOutOfBounds; + require v2.isCharBoundary(old.bytes, input.startByte) else text.Utf8BoundaryInvalid; + require v2.isCharBoundary(old.bytes, input.endByte) else text.Utf8BoundaryInvalid; + require core.bytes.isUtf8(input.replacement) else text.Utf8BoundaryInvalid; // PROPOSED + require slice(old.bytes, input.startByte, input.endByte) != input.replacement + else text.NoOp; + + let bytes = slice(old.bytes, 0u64, input.startByte) + + input.replacement + + slice(old.bytes, input.endByte, len(old.bytes)); + require len(bytes) <= 1048576u64 else text.RangeOutOfBounds; // needs a bound proof + let fact = { bytes, lineBreaks: v2.lineBreaks(bytes) }; + let newTextId = v2.nodeId("text", core.cbor.encode(fact), []); // PROPOSED encode + echo.ref(newTextId).ensure(fact) else text.ContentIdentityMismatch; + + let newHead = { + byteLength: len(bytes), + lineCount: fact.lineBreaks + 1u64, // needs checked + + sequence: head.sequence + 1u64, + }; + let newHeadId = v2.nodeId("head", core.cbor.encode(newHead), [newTextId, importId]); + let newHeadRef = echo.ref(newHeadId); + newHeadRef.ensure(newHead) else text.ContentIdentityMismatch; + echo.edge(newHeadRef) + .ensure(newTextId) else text.ContentIdentityMismatch; // PROPOSED: edge ensure + echo.edge(newHeadRef) + .ensure(importId) else text.ContentIdentityMismatch; + + echo.edge(bufferRef) + .replace(input.basisHeadId, newHeadId) else text.BasisNotCanonical; // PROPOSED: compare-and-retarget + bufferRef.replace({ ...buffer, version: buffer.version + 1u64 }) else text.BasisNotCanonical; + + return { + headId: newHeadId, + byteLength: newHead.byteLength, + lineCount: newHead.lineCount, + sequence: newHead.sequence, + }; +} diff --git a/edict/replace-range/draft/ReplaceRange.edict b/edict/replace-range/draft/ReplaceRange.edict new file mode 100644 index 00000000..8df2154c --- /dev/null +++ b/edict/replace-range/draft/ReplaceRange.edict @@ -0,0 +1,167 @@ +// Draft: persistent-rope ReplaceRange intent (acceptance target 2). +// +// Reads the boundary closure of the edit in one bounded read, computes the +// path-copied tree with the pure law in Rope.edict, and proposes `ensure` +// effects for every fresh node and edge plus one compare-and-retarget of the +// canonical head. Echo validates and commits the proposal atomically or +// obstructs with no patch (Echo: Authored Operation Effects, proposed). +// +// Not compiled by the application gate. See README.md for the status of each +// construct. Lines marked PROPOSED use syntax the Edict spec does not define. +package jedit.text.replace_range@2; + +use lawpack jedit.text@2 as text; +use target echo.dpo@1 as echo; +use module jedit.text.v2@1 as v2; // PROPOSED: source-module import +use module jedit.text.rope@1 as rope; + +type Input = { + bufferId: text.BufferId, + basisHeadId: text.HeadId, + startByte: U64, + endByte: U64, + replacement: Bytes, +}; + +type Result = { + headId: text.HeadId, + rootNodeId: Option, + byteLength: U64, + lineCount: U64, + sequence: U64, + createdLeaves: U64, + createdBranches: U64, +}; + +// ---- Boundary closure selector ---- +// +// The closure read starts at the head's root and asks this pure function, at +// each expanded branch, which children to expand. It expands: +// - every node whose byte interval contains `start` or `end` (the boundary +// paths split descends); +// - the right spine of each left sibling and the left spine of each right +// sibling hanging off a boundary path, because join and rebalance descend +// exactly those spines; +// - every node inside [start, end) when the range length equals the +// replacement length, so the no-op check can materialize the old bytes. +// Every other child stays a stub and is reused by identity. + +type Spine = enum { Boundary, RightSpine, LeftSpine, Range }; +type Visit = { lo: U64, hi: U64, spine: Spine }; +type Want = { start: U64, end: U64, needRange: Bool }; +type Expansion = { left: Option, right: Option }; + +fn contains(lo: U64, hi: U64, at: U64) -> Bool { return lo <= at && at <= hi; } + +fn expand(want: Want, visit: Visit, leftLength: U64) -> Expansion { + let mid = visit.lo + leftLength; // needs checked + + let left = { lo: visit.lo, hi: mid, spine: Spine::Boundary }; + let right = { lo: mid, hi: visit.hi, spine: Spine::Boundary }; + return match visit.spine { + RightSpine => { left: none(), right: some({ ...right, spine: Spine::RightSpine }) }, + LeftSpine => { left: some({ ...left, spine: Spine::LeftSpine }), right: none() }, + Range => { left: some({ ...left, spine: Spine::Range }), right: some({ ...right, spine: Spine::Range }) }, + Boundary => { + left: some(if touches(want, left) then left else { ...left, spine: sideSpine(want, left, Spine::RightSpine) }), + right: some(if touches(want, right) then right else { ...right, spine: sideSpine(want, right, Spine::LeftSpine) }), + }, + }; +} + +fn touches(want: Want, v: Visit) -> Bool { + return contains(v.lo, v.hi, want.start) || contains(v.lo, v.hi, want.end); +} + +fn sideSpine(want: Want, v: Visit, outside: Spine) -> Spine { + return if want.needRange && want.start <= v.lo && v.hi <= want.end then Spine::Range else outside; +} + +// ---- Operation ---- + +intent replaceRange(input: Input) returns Result + profile text.replaceRange + basis input.basisHeadId + footprint <= text.replaceRangeFootprint + budget <= text.replaceRangeBudget + where input.startByte <= input.endByte +{ + let bufferRef = echo.ref(input.bufferId); + let buffer = bufferRef.read() else text.FactMissing; + let canonical = echo.edge(bufferRef) + .target() else text.FactMissing; // PROPOSED: read an edge by type + require canonical == input.basisHeadId else text.BasisNotCanonical; + + let headRef = echo.ref(input.basisHeadId); + let head = headRef.read() else text.FactMissing; + let importId = echo.edge(headRef) + .target() else text.FactMissing; + require input.endByte <= head.byteLength else text.RangeOutOfBounds; + require core.bytes.isUtf8(input.replacement) else text.Utf8BoundaryInvalid; // PROPOSED + + let want = { + start: input.startByte, + end: input.endByte, + needRange: input.endByte - input.startByte == len(input.replacement), + }; + let root = echo.closure( // PROPOSED generic guided closure read + echo.edge(headRef), + { lo: 0u64, hi: head.byteLength, spine: Spine::Boundary }, + expand(want, _, _), // PROPOSED partial application + maxNodes: text.maxClosureNodes, + maxDepth: text.maxTreeHeight, + ).read() else text.MalformedRope; + require rope.byteLength(root) == head.byteLength else text.MalformedRope; + + require rope.isCharBoundaryIn(root, input.startByte) else text.Utf8BoundaryInvalid; + require rope.isCharBoundaryIn(root, input.endByte) else text.Utf8BoundaryInvalid; + require !want.needRange + || rope.rangeBytes(root, input.startByte, input.endByte) != input.replacement + else text.NoOp; + + let next = rope.replace(root, input.startByte, input.endByte, input.replacement) + else { ClosureTooSmall => text.MalformedRope }; // PROPOSED: map a pure failure + let fresh = rope.created(next); + + for leaf in fresh.leaves bounded text.maxCreatedLeaves { + echo.ref(leaf.id).ensure(leaf.fact) else text.ContentIdentityMismatch; + } + for node in fresh.branches bounded text.maxCreatedBranches { + let nodeRef = echo.ref(node.id); + nodeRef.ensure(node.fact) else text.ContentIdentityMismatch; + echo.edge(nodeRef) + .ensure(rope.idOf(node.left)) else text.ContentIdentityMismatch; // PROPOSED: edge ensure + echo.edge(nodeRef) + .ensure(rope.idOf(node.right)) else text.ContentIdentityMismatch; + } + + let m = rope.metrics(next); + let newHead = { + byteLength: m.byteLength, + lineCount: m.lineBreaks + 1u64, // needs checked + + sequence: head.sequence + 1u64, + }; + let rootId = if m.byteLength == 0u64 then none() else some(rope.idOf(next)); + let newHeadId = v2.nodeId("head", core.cbor.encode({ newHead, rootId }), [importId]); + let newHeadRef = echo.ref(newHeadId); + newHeadRef.ensure(newHead) else text.ContentIdentityMismatch; + if isSome(rootId) { + echo.edge(newHeadRef) + .ensure(unwrap(rootId)) else text.ContentIdentityMismatch; + } + echo.edge(newHeadRef) + .ensure(importId) else text.ContentIdentityMismatch; + + echo.edge(bufferRef) + .replace(input.basisHeadId, newHeadId) else text.BasisNotCanonical; // PROPOSED: compare-and-retarget + bufferRef.replace({ ...buffer, version: buffer.version + 1u64 }) else text.BasisNotCanonical; + + return { + headId: newHeadId, + rootNodeId: rootId, + byteLength: m.byteLength, + lineCount: newHead.lineCount, + sequence: newHead.sequence, + createdLeaves: len(fresh.leaves), + createdBranches: len(fresh.branches), + }; +} diff --git a/edict/replace-range/draft/Rope.edict b/edict/replace-range/draft/Rope.edict new file mode 100644 index 00000000..1d8193da --- /dev/null +++ b/edict/replace-range/draft/Rope.edict @@ -0,0 +1,278 @@ +// Draft: persistent AVL rope law, pure (acceptance target 2). +// +// Every function here is pure. The intent in ReplaceRange.edict reads the +// region an edit touches, calls `replace`, and turns the fresh nodes it +// returns into `ensure` effects. Unchanged subtrees appear as `Stub`s and are +// reused by identity, never re-created: that is the path copy. +// +// Not compiled by the application gate. See README.md for the status of each +// construct. Lines marked PROPOSED use syntax the Edict spec does not define. +package jedit.text.rope@1; + +use lawpack jedit.text@2 as text; +use module jedit.text.v2@1 as v2; // PROPOSED: source-module import + +// ---- Local view of a rope region ---- + +// A tree read by the boundary closure (ReplaceRange.edict) or built by this +// edit. `fresh` marks nodes this edit creates. +type Tree = variant { + Empty, + Leaf(LeafView), + Branch(BranchView), + Stub(StubView), +} depth <= text.maxTreeHeight; // PROPOSED: depth-bounded recursion + +type LeafView = { id: NodeId, fact: v2.LeafFact, fresh: Bool }; +type BranchView = { id: NodeId, fact: v2.BranchFact, left: Tree, right: Tree, fresh: Bool }; +type StubView = { id: NodeId, byteLength: U64, lineBreaks: U64, height: U8 }; + +type Metrics = { byteLength: U64, lineBreaks: U64, height: U8 }; +type Pair = { left: Tree, right: Tree }; +type Created = { + leaves: List, + branches: List, +}; + +// A pure function may fail only with a declared, typed failure. The caller +// maps it to an obstruction. // PROPOSED: `fails` / `expect` +failure ClosureTooSmall; + +// ---- Metrics and constructors ---- + +fn metrics(t: Tree) -> Metrics { + return match t { + Empty => { byteLength: 0u64, lineBreaks: 0u64, height: 0u8 }, + Leaf(l) => { byteLength: len(l.fact.bytes), lineBreaks: l.fact.lineBreaks, height: 1u8 }, + Branch(b) => { byteLength: b.fact.byteLength, lineBreaks: b.fact.lineBreaks, height: b.fact.height }, + Stub(s) => { byteLength: s.byteLength, lineBreaks: s.lineBreaks, height: s.height }, + }; +} + +fn height(t: Tree) -> U8 { return metrics(t).height; } +fn byteLength(t: Tree) -> U64 { return metrics(t).byteLength; } + +fn idOf(t: Tree) -> NodeId fails ClosureTooSmall { + return match t { + Empty => fail ClosureTooSmall, // callers never pass Empty + Leaf(l) => l.id, + Branch(b) => b.id, + Stub(s) => s.id, + }; +} + +fn leaf(bytes: Bytes) -> Tree { + let fact = { bytes, lineBreaks: v2.lineBreaks(bytes) }; + return Tree::Leaf({ id: v2.nodeId("leaf", core.cbor.encode(fact), []), fact, fresh: true }); +} + +// Both sides must be non-empty. Heights must differ by at most one. +fn branch(l: Tree, r: Tree) -> Tree fails ClosureTooSmall { + let ml = metrics(l); + let mr = metrics(r); + let fact = { + byteLength: ml.byteLength + mr.byteLength, // needs checked + + lineBreaks: ml.lineBreaks + mr.lineBreaks, + height: max(ml.height, mr.height) + 1u8, // PROPOSED max + }; + let id = v2.nodeId("branch", core.cbor.encode(fact), [expect idOf(l), expect idOf(r)]); + return Tree::Branch({ id, fact, left: l, right: r, fresh: true }); +} + +fn expanded(t: Tree) -> BranchView fails ClosureTooSmall { + return match t { + Branch(b) => b, + _ => fail ClosureTooSmall, // the closure read must expand this node + }; +} + +// ---- AVL balance ---- + +// `l` and `r` are AVL trees whose heights differ by at most two. +fn balance(l: Tree, r: Tree) -> Tree fails ClosureTooSmall { + return if height(l) > height(r) + 1u8 then expect rotateRight(expect expanded(l), r) + else if height(r) > height(l) + 1u8 then expect rotateLeft(l, expect expanded(r)) + else expect branch(l, r); +} + +fn rotateRight(lb: BranchView, r: Tree) -> Tree fails ClosureTooSmall { + return if height(lb.left) >= height(lb.right) + then expect branch(lb.left, expect branch(lb.right, r)) + else expect doubleRight(lb, expect expanded(lb.right), r); +} + +fn doubleRight(lb: BranchView, lrb: BranchView, r: Tree) -> Tree fails ClosureTooSmall { + return expect branch(expect branch(lb.left, lrb.left), expect branch(lrb.right, r)); +} + +fn rotateLeft(l: Tree, rb: BranchView) -> Tree fails ClosureTooSmall { + return if height(rb.right) >= height(rb.left) + then expect branch(expect branch(l, rb.left), rb.right) + else expect doubleLeft(l, rb, expect expanded(rb.left)); +} + +fn doubleLeft(l: Tree, rb: BranchView, rlb: BranchView) -> Tree fails ClosureTooSmall { + return expect branch(expect branch(l, rlb.left), expect branch(rlb.right, rb.right)); +} + +// ---- Join: concatenate two AVL trees ---- + +fn join(l: Tree, r: Tree) -> Tree fails ClosureTooSmall + decreases height(l) + height(r) // PROPOSED termination measure +{ + return match (l, r) { // PROPOSED tuple match + (Empty, _) => r, + (_, Empty) => l, + _ => if height(l) > height(r) + 1u8 then expect joinIntoLeft(expect expanded(l), r) + else if height(r) > height(l) + 1u8 then expect joinIntoRight(l, expect expanded(r)) + else expect branch(l, r), + }; +} + +fn joinIntoLeft(lb: BranchView, r: Tree) -> Tree fails ClosureTooSmall { + return expect balance(lb.left, expect join(lb.right, r)); +} + +fn joinIntoRight(l: Tree, rb: BranchView) -> Tree fails ClosureTooSmall { + return expect balance(expect join(l, rb.left), rb.right); +} + +// ---- Split at a byte offset (a checked character boundary) ---- + +fn split(t: Tree, at: U64) -> Pair fails ClosureTooSmall + where at <= byteLength(t) // PROPOSED: function preconditions + decreases height(t) +{ + return match t { + Empty => { left: Tree::Empty, right: Tree::Empty }, + Leaf(l) => splitLeaf(l, at), + Branch(b) => expect splitBranch(b, at), + Stub(s) => if at == 0u64 then { left: Tree::Empty, right: t } + else if at == s.byteLength then { left: t, right: Tree::Empty } + else fail ClosureTooSmall, + }; +} + +fn splitLeaf(l: LeafView, at: U64) -> Pair + where at <= len(l.fact.bytes) +{ + return if at == 0u64 then { left: Tree::Empty, right: Tree::Leaf(l) } + else if at == len(l.fact.bytes) then { left: Tree::Leaf(l), right: Tree::Empty } + else { + left: leaf(slice(l.fact.bytes, 0u64, at)), + right: leaf(slice(l.fact.bytes, at, len(l.fact.bytes))), + }; +} + +fn splitBranch(b: BranchView, at: U64) -> Pair fails ClosureTooSmall + where at <= b.fact.byteLength +{ + let leftLength = byteLength(b.left); + return if at < leftLength then expect splitLeftChild(b, at) + else if at > leftLength then expect splitRightChild(b, at - leftLength) // needs flow-sensitive proof + else { left: b.left, right: b.right }; +} + +fn splitLeftChild(b: BranchView, at: U64) -> Pair fails ClosureTooSmall { + let p = expect split(b.left, at); + return { left: p.left, right: expect join(p.right, b.right) }; +} + +fn splitRightChild(b: BranchView, at: U64) -> Pair fails ClosureTooSmall { + let p = expect split(b.right, at); + return { left: expect join(b.left, p.left), right: p.right }; +} + +// ---- Build a balanced tree from replacement bytes ---- + +fn fromBytes(bytes: Bytes) -> Tree fails ClosureTooSmall + decreases len(bytes) +{ + return if len(bytes) == 0u64 then Tree::Empty + else if len(bytes) <= 4096u64 then leaf(bytes) + else expect halves(bytes, boundaryAtOrBefore(bytes, len(bytes) / 2u64)); // PROPOSED U64 / +} + +fn halves(bytes: Bytes, mid: U64) -> Tree fails ClosureTooSmall { + return expect branch( + expect fromBytes(slice(bytes, 0u64, mid)), + expect fromBytes(slice(bytes, mid, len(bytes))), + ); +} + +// A UTF-8 scalar is at most four bytes, so a boundary lies within three bytes +// before any position in valid UTF-8. +fn boundaryAtOrBefore(bytes: Bytes, at: U64) -> U64 { + return if v2.isCharBoundary(bytes, at) then at + else if v2.isCharBoundary(bytes, at - 1u64) then at - 1u64 + else if v2.isCharBoundary(bytes, at - 2u64) then at - 2u64 + else at - 3u64; +} + +// ---- Character boundaries in a tree ---- + +// Leaves end on character boundaries, so a leaf edge is always a boundary and +// only offsets inside a leaf need its bytes. The closure expands every leaf +// that contains `start` or `end`. +fn isCharBoundaryIn(t: Tree, at: U64) -> Bool fails ClosureTooSmall + decreases height(t) +{ + return match t { + Empty => at == 0u64, + Leaf(l) => v2.isCharBoundary(l.fact.bytes, at), + Branch(b) => if at == byteLength(b.left) then true + else if at < byteLength(b.left) then expect isCharBoundaryIn(b.left, at) + else expect isCharBoundaryIn(b.right, at - byteLength(b.left)), + Stub(s) => if at == 0u64 || at == s.byteLength then true else fail ClosureTooSmall, + }; +} + +// ---- Replace and collect ---- + +fn replace(root: Tree, start: U64, end: U64, replacement: Bytes) -> Tree + fails ClosureTooSmall + where start <= end, end <= byteLength(root) +{ + let head = expect split(root, start); + let tail = expect split(head.right, end - start); + return expect join(expect join(head.left, expect fromBytes(replacement)), tail.right); +} + +// Fresh nodes only. A node that is not fresh heads an unchanged subtree, so +// nothing below it is fresh either. +fn created(t: Tree) -> Created + decreases height(t) +{ + return match t { + Leaf(l) => if l.fresh then { leaves: [l], branches: [] } else { leaves: [], branches: [] }, + Branch(b) => if b.fresh + then { + leaves: created(b.left).leaves ++ created(b.right).leaves, // PROPOSED list concat + branches: [b] ++ created(b.left).branches ++ created(b.right).branches, + } + else { leaves: [], branches: [] }, + _ => { leaves: [], branches: [] }, + }; +} + +// The bytes in [start, end), for the no-op check. Leaves in the range must be +// expanded; the closure read expands them only when the range length equals +// the replacement length, because otherwise the edit cannot be a no-op. +fn rangeBytes(t: Tree, start: U64, end: U64) -> Bytes fails ClosureTooSmall + decreases height(t) +{ + return match t { + Empty => b"", + Leaf(l) => slice(l.fact.bytes, start, end), + Branch(b) => expect rangeBytesBranch(b, start, end), + Stub(s) => if start == end then b"" else fail ClosureTooSmall, + }; +} + +fn rangeBytesBranch(b: BranchView, start: U64, end: U64) -> Bytes + fails ClosureTooSmall +{ + let mid = byteLength(b.left); + return (if start < mid then expect rangeBytes(b.left, start, min(end, mid)) else b"") + + (if end > mid then expect rangeBytes(b.right, max(start, mid) - mid, end - mid) else b""); +} diff --git a/edict/replace-range/draft/Text.edict b/edict/replace-range/draft/Text.edict new file mode 100644 index 00000000..806444c9 --- /dev/null +++ b/edict/replace-range/draft/Text.edict @@ -0,0 +1,84 @@ +// Draft: jedit.text.schema@2 shared definitions (DL-0159). +// Not compiled by the application gate. See README.md for the status of each +// construct. Lines marked PROPOSED use syntax the Edict spec does not define. +package jedit.text.v2@1; + +use lawpack jedit.text@2 as text; +use target echo.dpo@1 as echo; + +// ---- Stored facts (alpha atoms, canonical CBOR v1) ---- + +type BufferFact = { + bufferKey: String, + version: U64, +}; + +type HeadFact = { + byteLength: U64, + lineCount: U64, + sequence: U64, +}; + +type BranchFact = { + byteLength: U64, + lineBreaks: U64, + height: U8, +}; + +type LeafFact = { + bytes: Bytes, + lineBreaks: U64, +}; + +// Provenance only: the bytes a head's lineage was imported from. Copying the +// anchor forward never claims the rope still matches the file. +type ImportFact = { + fileCoordinate: String, + hostDigest: Bytes, +}; + +// Synchronization: one witnessed write of a buffer's bytes to its file. +// Evidence of the crossing, not file authority. `exportEvent` names the causal +// event that witnessed the write; the exported head is not reachable from it. +type ExportFact = { + fileCoordinate: String, + logicalDigest: Bytes, + hostDigest: Bytes, + exportEvent: Bytes, +}; + +// ---- Edge types (no payload; one edge per source node and type) ---- + +type CanonicalHead = Unit; // Buffer -> Head +type Root = Unit; // Head -> Branch | Leaf +type Anchor = Unit; // Head -> Import, copied to every new head +type LastExport = Unit; // Buffer -> Export, retargeted by each save +// No head-to-predecessor edge: Echo's ticks and receipts own history (DL-0159). +type Left = Unit; // Branch -> Branch | Leaf +type Right = Unit; // Branch -> Branch | Leaf + +// ---- Identity law ---- + +fn nodeId(kind: String, atom: Bytes, children: List) -> NodeId { + return hash("jedit.text.node.v2", { kind, atom, children }); +} + +fn edgeId(from: NodeId, edgeType: String) -> EdgeId { + return hash("jedit.text.edge.v2", { from, edgeType }); +} + +// ---- Text metrics ---- + +fn lineBreaks(bytes: Bytes) -> U64 { + return core.bytes.count(bytes, b"\n"); // PROPOSED generic primitive +} + +// A position is a character boundary when it is an end of the text or the +// byte there is not a UTF-8 continuation byte (10xxxxxx). +fn isCharBoundary(bytes: Bytes, at: U64) -> Bool + where at <= len(bytes) +{ + return at == 0u64 || at == len(bytes) + || core.bytes.at(bytes, at) < 0x80u8 // PROPOSED generic primitive + || core.bytes.at(bytes, at) >= 0xC0u8; +} diff --git a/edict/replace-range/edict.application.json b/edict/replace-range/edict.application.json new file mode 100644 index 00000000..f3e59f82 --- /dev/null +++ b/edict/replace-range/edict.application.json @@ -0,0 +1,20 @@ +{ + "schema": "edict.application/v1", + "coordinate": "jedit.text.replace_range@1", + "sources": [ + "src/ReplaceRange.edict" + ], + "lawpacks": [ + { + "manifest": "vendor/jedit-text/manifest.cbor", + "exports": "vendor/jedit-text/exports.cbor", + "adapter": "vendor/jedit-text/adapter.cbor", + "targetConfiguration": "vendor/jedit-text/echo-operation-configuration.cbor" + } + ], + "target": { + "profile": "echo.dpo@1", + "providerPackage": ".build/echo-provider" + }, + "outputDirectory": ".build/application" +} diff --git a/edict/replace-range/edict.build-lock.json b/edict/replace-range/edict.build-lock.json new file mode 100644 index 00000000..edff7325 --- /dev/null +++ b/edict/replace-range/edict.build-lock.json @@ -0,0 +1,144 @@ +{ + "schema": "jedit.edict-build-lock/v1", + "applicationCoordinate": "jedit.text.replace_range@1", + "operationCoordinate": "jedit.text.replace_range@1.replaceRange", + "toolchainLockSha256": "55020f1231cfdac71b05c9618ac922a587cfaf546e84c0db7a97784712518408", + "sourceClosure": { + "schema": "jedit.edict-source-closure/v1", + "digest": "sha256:e0df3b5d5acefab1ff931da52f5cd98c97ea2fd3258c80e608b0b7f41a4e34be", + "files": [ + { + "path": "application/edict.application.json", + "sha256": "3182577627cd1f88bf590f3a8481ef53476c83d783aa142182e7c65eb1f72f8b" + }, + { + "path": "application/edict.lawpack.json", + "sha256": "ce13d5993e9b80517538e85bad39ed825ecaf466692063ffd99d17248a68cc66" + }, + { + "path": "application/edict.toolchain-lock.json", + "sha256": "55020f1231cfdac71b05c9618ac922a587cfaf546e84c0db7a97784712518408" + }, + { + "path": "application/src/ReplaceRange.edict", + "sha256": "61978fd2b7463da772c52a121891523b1669816440a25111af5834d121b86b60" + }, + { + "path": "application/tests/assert-build-output.mjs", + "sha256": "a0c7f290269edca53e639ac26b1f0cfc749d85285a2c025ce32d361ffed45009" + }, + { + "path": "application/tests/build.sh", + "sha256": "b5827a1e2a4b64b214406ee3d0cdc9499059922f9878649946c0358fbbd6ea6d" + }, + { + "path": "application/tests/package-chain.mjs", + "sha256": "7df3a8f2fd74e9e4719a8c0afce40ce8aa29bec66230607538c0ad1f82dbe0bc" + }, + { + "path": "application/tests/proof-harness.spec.mjs", + "sha256": "1a7c6f3433437d25196d89dc41a35c844ec52e423cf396aed93c80b422f28717" + }, + { + "path": "application/tests/runtime/Cargo.toml", + "sha256": "17b7943ca35ed8485ce8b6d3660b79486a655604b5098a7c5ee8a98f230f8790" + }, + { + "path": "application/tests/runtime/Cargo.lock", + "sha256": "597f102c65285960e80d22277adfa903f67e84fb54ae33ccb2578981e4f7cfb2" + }, + { + "path": "application/tests/runtime/compiled_boundary.rs", + "sha256": "eb8c482f5d0205843248580f4d21bf8bbcf14a185fa3b35f0a95af3879f34b91" + }, + { + "path": "application/tests/runtime/flat_text.rs", + "sha256": "24b63c5dbbc8b5863a30aa88cfc38a0dfb0fb0a0e41b97c3cf584ecc3dcb65e6" + }, + { + "path": "application/tests/verification-evidence.mjs", + "sha256": "3022f86f5c96d61f32ced3bec211d08ef7bbcdbc6e772cc61e2019eba0e42218" + }, + { + "path": "application/vendor/jedit-text/edict.lawpack-output.json", + "sha256": "81a65d2569a3d8513fcefb2de87c816c7364c280205aec42c83f64377f9755f4" + }, + { + "path": "application/vendor/jedit-text/exports.cbor", + "sha256": "3a4438fc0a6faed371c5aebfe512299b464fc08f70b4640454538772750644e1" + }, + { + "path": "application/vendor/jedit-text/exports.sha256", + "sha256": "42f20048fdedb25fdb8700790bae1dd009de8a0f677da300d93016abee8ab7ac" + }, + { + "path": "application/vendor/jedit-text/manifest.cbor", + "sha256": "4f05a239948e6e7a7efd08f6b20a9249319769eaeac1e67bd8902206299d71bc" + }, + { + "path": "application/vendor/jedit-text/manifest.sha256", + "sha256": "e0cacb05c16d70f33f2381c5785e906f1763aa555b667b6e52b84f43b709a842" + }, + { + "path": "project/.github/workflows/ci.yml", + "sha256": "bc19286ef44ce7d8ba0fd8a3e39a8ec0313d07ed3084fbe15e25ef42d82bc8f1" + }, + { + "path": "project/package.json", + "sha256": "87cdea23b9312e769f0eed0e2235bc9172b15007dd5de601b4db7c9f73ad6e76" + }, + { + "path": "project/package-lock.json", + "sha256": "4e8b2b702328a0f18453b8681a5c1290d05ee445af5c78c4526516d0e396c4e8" + } + ] + }, + "lawpackRelease": { + "coordinate": "jedit.text@1", + "digest": "sha256:f385072314ea57af5b66cad9eb4119b51e456df2050ea0c9a6302c7693212dc1" + }, + "provider": { + "coordinate": "echo.edict-provider@1", + "digest": "sha256:cba96816605f54dc5e675ab6f473adf858bdaebdceae985f955e930711c8a4f9" + }, + "artifacts": { + "core": { + "coordinate": "jedit.text.replace_range@1", + "domain": "edict.core.module/v1", + "digest": "sha256:f878c563d3e22720366faba02c1c964ecf2fb8250acf346e6454d7cd340068ef" + }, + "targetIr": { + "coordinate": "echo.span-ir/v1", + "domain": "edict.target-ir.artifact/v1", + "digest": "sha256:4b4049ae9730091d9450a489a22c88519fd8f84c5b74895f07cf86a250afcf86" + }, + "resultProjection": { + "coordinate": "jedit.text.replace_range@1.replaceRange", + "domain": "edict.result-projection.artifact/v1", + "digest": "sha256:80d1580fac6effe2d4001364ba2d554db5317e2c324ec30965fe866f79ab6348" + }, + "executablePackage": { + "coordinate": "executable-operation-package.echo", + "domain": "echo.operation-package/v1", + "digest": "sha256:4c2b7859f291e97b6b38fb265086e6cb0581ed030d54d38152b0585152120397", + "rawSha256": "31ed2bf3121d8ada879e2f1dee15e793a0106cd8c034beaad4dd3c4995e9629a" + }, + "verificationReportArtifact": { + "coordinate": "verifier-report.echo-operation", + "domain": "echo.operation-package-verifier-report/v1", + "digest": "sha256:fc4452e6aa91f541641cf4c070317ec7f24b05b48aeb1c6d8911a7f20a547c04", + "rawSha256": "3dab6a7de887acb0422a881c58130932819d16ecf8577a503d33031036732c86" + }, + "verificationReport": { + "coordinate": "jedit.edict-verification-evidence/v1", + "domain": "jedit.edict-verification-evidence/v1", + "digest": "sha256:4005c65e03fdc960883fff68b2eea292cb1a50bd78d95eb4ced41b0d03bf471d", + "rawSha256": "70e100bfd97fc2c09ac45582b01297dddace8cf07b67c79ae5a205d7b3f0b906" + }, + "executableSubject": { + "coordinate": "echo.executable-subject/v1", + "domain": "echo.executable-subject/v1", + "digest": "sha256:ea65a7bfa2055644c99783ef5097bdaa84c03245866f20126816b4c33f75d8cf" + } + } +} diff --git a/edict/replace-range/edict.executable-subject-lock.json b/edict/replace-range/edict.executable-subject-lock.json new file mode 100644 index 00000000..0c84e5bb --- /dev/null +++ b/edict/replace-range/edict.executable-subject-lock.json @@ -0,0 +1,20 @@ +{ + "schema": "jedit.edict-executable-subject-lock/v1", + "reference": { + "coordinate": "echo.executable-subject/v1", + "digest": "sha256:ea65a7bfa2055644c99783ef5097bdaa84c03245866f20126816b4c33f75d8cf" + }, + "rawSha256": "7d08ef912c7f294c949abddf255423b3f7145d2accf64794dec5acf225e85cf7", + "package": { + "coordinate": "executable-operation-package.echo", + "digest": "sha256:4c2b7859f291e97b6b38fb265086e6cb0581ed030d54d38152b0585152120397" + }, + "targetIr": { + "coordinate": "echo.span-ir/v1", + "digest": "sha256:4b4049ae9730091d9450a489a22c88519fd8f84c5b74895f07cf86a250afcf86" + }, + "resultProjection": { + "coordinate": "jedit.text.replace_range@1.replaceRange", + "digest": "sha256:80d1580fac6effe2d4001364ba2d554db5317e2c324ec30965fe866f79ab6348" + } +} diff --git a/edict/replace-range/edict.lawpack.json b/edict/replace-range/edict.lawpack.json new file mode 100644 index 00000000..8db4e6ea --- /dev/null +++ b/edict/replace-range/edict.lawpack.json @@ -0,0 +1,219 @@ +{ + "schema": "edict.lawpack-build/v1", + "outputDirectory": "vendor/jedit-text", + "lawpack": { + "schema": "edict.lawpack-authoring/v1", + "id": "jedit.text", + "version": "1", + "acceptedCoreAbi": [ + "edict.core/v1" + ], + "dependencies": [], + "exportsCoordinate": "jedit.text.exports/v1", + "exports": { + "types": [ + { + "coordinate": "jedit.text@1.NodeId", + "definition": "Bytes" + }, + { + "coordinate": "jedit.text@1.BufferId", + "definition": "Nominal" + }, + { + "coordinate": "jedit.text@1.HeadId", + "definition": "Nominal" + }, + { + "coordinate": "jedit.text@1.ReplacementBytes", + "definition": "Bytes" + }, + { + "coordinate": "jedit.text@1.ObstructionDetail", + "definition": "String" + } + ], + "constants": [ + { + "coordinate": "jedit.text@1.maxCreatedLeaves", + "type": "U64", + "value": 4096 + }, + { + "coordinate": "jedit.text@1.maxCreatedBranches", + "type": "U64", + "value": 4096 + } + ], + "pureFunctions": [ + { + "source": "edict", + "coordinate": "jedit.text@1.maxCreatedLeafCount", + "typeParameters": [], + "parameterTypes": [], + "returnType": "U64", + "costTemplate": "jedit.text@1.maxCreatedLeafCountCost", + "determinismClass": "total", + "body": { + "params": [], + "body": { + "locals": [], + "bindings": [], + "result": { + "kind": "const", + "value": { + "kind": "int", + "width": "U64", + "value": 4096 + } + } + } + } + } + ], + "effects": [], + "obstructions": [ + { + "coordinate": "jedit.text@1.RangeOrderInvalid", + "authorityClass": "domainMappable", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.RangeOutOfBounds", + "authorityClass": "domainMappable", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.Utf8BoundaryInvalid", + "authorityClass": "domainMappable", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.NoOp", + "authorityClass": "domainMappable", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.BasisNotCanonical", + "authorityClass": "domainMappable", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.ArithmeticOverflow", + "authorityClass": "integrityFault", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.FactMissing", + "authorityClass": "resourceFault", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.FactMalformed", + "authorityClass": "integrityFault", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.ContentIdentityMismatch", + "authorityClass": "integrityFault", + "payloadSchema": "jedit.text@1.ObstructionDetail" + }, + { + "coordinate": "jedit.text@1.MalformedRope", + "authorityClass": "integrityFault", + "payloadSchema": "jedit.text@1.ObstructionDetail" + } + ], + "operationProfiles": { + "jedit.text@1.replaceRange": { + "opticTemplate": { + "opticKind": "affectReintegration", + "boundaryKind": "affect", + "supportPolicy": "jedit.text@1.basisBoundSupport", + "lossDisposition": "jedit.text@1.lossless", + "basisTemplate": "jedit.text@1.exactHeadBasis", + "apertureRequirement": { + "kind": "abstractFootprintObligation", + "reference": "jedit.text@1.replaceRangeFootprint" + } + }, + "effectPredicate": "jedit.text@1.replaceRangeEffects" + } + } + }, + "targetAdapters": [ + { + "coordinate": "jedit.text.echo-adapter/v1", + "output": "adapter.cbor", + "acceptedTargetProfile": { + "id": "echo.dpo@1", + "digest": "sha256:2e2494121aecf5e6a2d920f5fb85408825d394765fad41484c416397c920fb04" + }, + "acceptedTargetIr": { + "id": "echo.span-ir/v1", + "digest": "sha256:0057167e68f50c99dcce087b3e1cd677d17c5d1dc238bdb52d89469e1472fc2f" + }, + "operationProfiles": { + "jedit.text@1.replaceRange": { + "core": "continuum.profile.read-write/v1", + "semanticEffects": [], + "budgetObligation": "jedit.text@1.replaceRangeBudget", + "targetConfiguration": { + "local": "echo-config" + } + } + }, + "effectImplementations": {}, + "budgets": { + "jedit.text@1.replaceRangeBudget": { + "maxSteps": 8388608, + "maxAllocatedBytes": 16777216, + "maxOutputBytes": 8388608 + }, + "jedit.text@1.maxCreatedLeafCountCost": { + "maxSteps": 64, + "maxAllocatedBytes": 1024, + "maxOutputBytes": 64 + } + } + } + ], + "verifier": { + "class": "declarative", + "ruleset": { + "local": "verifier-rules" + } + }, + "compatibility": { + "id": "jedit.text.compatibility/v1", + "digest": "sha256:2adf83f798205f52636ad64ca45178f33a8e1cc663874f8a6113484c945e3052" + }, + "conformanceFixtureCorpus": { + "id": "jedit.text.ReplaceRange.oracle@1", + "digest": "sha256:b9b4707dd5e07897cbe7af36d88928401887e6af5d167d1a88a8d6181b4dbb0e" + }, + "localResources": [ + { + "name": "echo-config", + "coordinate": "echo.operation-lowering-configuration/v1", + "output": "echo-operation-configuration.cbor", + "value": { + "apiVersion": "echo.operation-lowering-configuration/v1", + "programKind": "compiler-produced-bounded-pure/v1" + } + }, + { + "name": "verifier-rules", + "coordinate": "jedit.text.verifier-rules/v1", + "output": "verifier-rules.cbor", + "value": { + "schema": "jedit.text.schema@1", + "schemaDigest": "sha256:f49b0ff6c9c7010d3a72b46734d47832853f496739a083edc41dddec3431bac7", + "oracleIsExecutableInput": false, + "runtimeOntology": "generic-bounded-graph" + } + } + ] + }, + "dependencyBundles": [] +} diff --git a/edict/replace-range/edict.toolchain-lock.json b/edict/replace-range/edict.toolchain-lock.json new file mode 100644 index 00000000..3a961e59 --- /dev/null +++ b/edict/replace-range/edict.toolchain-lock.json @@ -0,0 +1,59 @@ +{ + "schema": "jedit.edict-toolchain-lock/v1", + "rust": { + "toolchain": "1.96.0", + "rustcVersion": "rustc 1.96.0 (ac68faa20 2026-05-25)", + "cargoVersion": "cargo 1.96.0 (30a34c682 2026-05-25)" + }, + "validation": { + "nodeVersion": "22.23.1", + "processVersion": "v22.23.1", + "npmVersion": "10.9.8", + "cborX": { + "version": "1.6.4", + "integrity": "sha512-UGKHjp6RHC6QuZ2yy5LCKm7MojM4716DwoSaqwQpaH4DvZvbBTGcoDNTiG9Y2lByXZYFEs9WRkS5tLl96IrF1Q==" + }, + "files": [ + { + "path": "package.json", + "sha256": "87cdea23b9312e769f0eed0e2235bc9172b15007dd5de601b4db7c9f73ad6e76" + }, + { + "path": "package-lock.json", + "sha256": "4e8b2b702328a0f18453b8681a5c1290d05ee445af5c78c4526516d0e396c4e8" + }, + { + "path": ".github/workflows/ci.yml", + "sha256": "bc19286ef44ce7d8ba0fd8a3e39a8ec0313d07ed3084fbe15e25ef42d82bc8f1" + } + ] + }, + "edict": { + "commit": "2b4832efe62de75e1f204cec72f9fe7d00ef9551", + "cliVersion": "0.11.0-alpha.1" + }, + "echo": { + "commit": "b314f7fd071985edad1f9876df383a85fb491205", + "provider": { + "coordinate": "echo.edict-provider@1", + "digest": "sha256:cba96816605f54dc5e675ab6f473adf858bdaebdceae985f955e930711c8a4f9", + "manifestSha256": "d9ec3c528d0b27434606ecef27a552eb466034866cbb3cb04d169241f772a6df", + "targetProfile": { + "coordinate": "echo.dpo@1", + "digest": "sha256:2e2494121aecf5e6a2d920f5fb85408825d394765fad41484c416397c920fb04" + }, + "lowerer": { + "coordinate": "echo.dpo.lowerer/component@1", + "sha256": "79066cfc740da4463fd20baec36fe18c6cfb346917fed475b4ef7119fda9408a" + }, + "verifier": { + "coordinate": "echo.dpo.verifier/component@1", + "sha256": "577c69937594c0aff2461dd60d43507e1f6ce0903ca2b17ff02919d73efd9b28", + "contract": { + "coordinate": "echo.dpo.verifier/v1", + "digest": "sha256:ca96b190728de3d668072ec1bd37d24e5197e7bd9bd54f70966d8c566b9b67f2" + } + } + } + } +} diff --git a/edict/replace-range/src/ReplaceRange.edict b/edict/replace-range/src/ReplaceRange.edict new file mode 100644 index 00000000..565bd877 --- /dev/null +++ b/edict/replace-range/src/ReplaceRange.edict @@ -0,0 +1,47 @@ +package jedit.text.replace_range@1; + +use lawpack jedit.text@1 digest "sha256:f385072314ea57af5b66cad9eb4119b51e456df2050ea0c9a6302c7693212dc1" as text; + +type ReplaceRangeInput = { + bufferId: text.BufferId, + basisHeadId: text.HeadId, + text: Bytes, + startByte: U64, + endByte: U64, + replacement: text.ReplacementBytes, +}; + +type ReplaceRangeBoundary = { + updatedText: Bytes, + bufferId: text.BufferId, + basisHeadId: text.HeadId, + startByte: U64, + endByte: U64, + replacement: text.ReplacementBytes, + rangeIsEmpty: U32, + createdLeafCeiling: U64, +}; + +intent replaceRange(input: ReplaceRangeInput) returns ReplaceRangeBoundary + profile text.replaceRange + basis input.basisHeadId + budget <= text.replaceRangeBudget + where input.startByte <= input.endByte && input.endByte <= len(input.text) && input.startByte <= len(input.text) && isUtf8(input.text) && isUtf8(input.replacement) && isUtf8(slice(input.text, 0u64, input.startByte)) && isUtf8(slice(input.text, 0u64, input.endByte)) && !(slice(input.text, input.startByte, input.endByte) == input.replacement) +{ + let prefix = slice(input.text, 0u64, input.startByte); + let suffix = slice(input.text, input.endByte, len(input.text)); + let updatedText = prefix + input.replacement + suffix; + let createdLeafCeiling: U64 = text.maxCreatedLeafCount(); + let rangeIsEmpty = if input.startByte == input.endByte then 1u32 else 0u32; + + return { + updatedText, + bufferId: input.bufferId, + basisHeadId: input.basisHeadId, + startByte: input.startByte, + endByte: input.endByte, + replacement: input.replacement, + rangeIsEmpty, + createdLeafCeiling, + }; +} diff --git a/edict/replace-range/tests/assert-build-output.mjs b/edict/replace-range/tests/assert-build-output.mjs new file mode 100644 index 00000000..6c7b6b6c --- /dev/null +++ b/edict/replace-range/tests/assert-build-output.mjs @@ -0,0 +1,320 @@ +// SPDX-License-Identifier: Apache-2.0 OR LicenseRef-MIND-UCAL-1.0 +// © James Ross Ω FLYING•ROBOTS + +import assert from "node:assert/strict"; +import { createHash } from "node:crypto"; +import { readFile, writeFile } from "node:fs/promises"; +import path from "node:path"; + +import { decode } from "cbor-x"; + +import { + canonicalArtifactDigest, + digestText, + verificationEvidence, +} from "./verification-evidence.mjs"; + +function assertResourceReference(reference, coordinate, digest) { + assert.equal(reference.id, coordinate); + assert.deepEqual(reference.digest, ["sha256", digest]); +} + +const SOURCE_CLOSURE_INPUTS = [ + ["application/edict.application.json", "edict.application.json"], + ["application/edict.lawpack.json", "edict.lawpack.json"], + ["application/edict.toolchain-lock.json", "edict.toolchain-lock.json"], + ["application/src/ReplaceRange.edict", "src/ReplaceRange.edict"], + ["application/tests/assert-build-output.mjs", "tests/assert-build-output.mjs"], + ["application/tests/build.sh", "tests/build.sh"], + ["application/tests/package-chain.mjs", "tests/package-chain.mjs"], + ["application/tests/proof-harness.spec.mjs", "tests/proof-harness.spec.mjs"], + ["application/tests/runtime/Cargo.toml", "tests/runtime/Cargo.toml"], + ["application/tests/runtime/Cargo.lock", "tests/runtime/Cargo.lock"], + ["application/tests/runtime/compiled_boundary.rs", "tests/runtime/compiled_boundary.rs"], + ["application/tests/runtime/flat_text.rs", "tests/runtime/flat_text.rs"], + [ + "application/tests/verification-evidence.mjs", + "tests/verification-evidence.mjs", + ], + [ + "application/vendor/jedit-text/edict.lawpack-output.json", + "vendor/jedit-text/edict.lawpack-output.json", + ], + ["application/vendor/jedit-text/exports.cbor", "vendor/jedit-text/exports.cbor"], + [ + "application/vendor/jedit-text/exports.sha256", + "vendor/jedit-text/exports.sha256", + ], + ["application/vendor/jedit-text/manifest.cbor", "vendor/jedit-text/manifest.cbor"], + [ + "application/vendor/jedit-text/manifest.sha256", + "vendor/jedit-text/manifest.sha256", + ], + ["project/.github/workflows/ci.yml", "../../.github/workflows/ci.yml"], + ["project/package.json", "../../package.json"], + ["project/package-lock.json", "../../package-lock.json"], +]; + +function sha256(bytes) { + return createHash("sha256").update(bytes).digest(); +} + +function lengthPrefix(length) { + const prefix = Buffer.alloc(8); + prefix.writeBigUInt64LE(BigInt(length)); + return prefix; +} + +async function sourceClosure(applicationRoot) { + const hasher = createHash("sha256"); + hasher.update("jedit.edict-source-closure/v1\0"); + const files = []; + for (const [identityPath, relative] of SOURCE_CLOSURE_INPUTS) { + const bytes = await readFile(path.join(applicationRoot, relative)); + const relativeBytes = Buffer.from(identityPath, "utf8"); + hasher.update(lengthPrefix(relativeBytes.length)); + hasher.update(relativeBytes); + hasher.update(lengthPrefix(bytes.length)); + hasher.update(bytes); + files.push({ path: identityPath, sha256: sha256(bytes).toString("hex") }); + } + return { + schema: "jedit.edict-source-closure/v1", + digest: `sha256:${hasher.digest("hex")}`, + files, + }; +} + +const [outputDirectory, mode] = process.argv.slice(2); +assert.ok(outputDirectory, "pass the Edict application output directory"); +assert.ok( + mode === undefined || mode === "--write-locks", + "the only supported mode is --write-locks", +); +const applicationRoot = path.resolve(outputDirectory, "../.."); + +const packageBytes = await readFile( + path.join(outputDirectory, "executable-operation-package.cbor"), +); +const reportBytes = await readFile( + path.join(outputDirectory, "verification-report.cbor"), +); +const executablePackage = decode(packageBytes); +const report = decode(reportBytes); +const program = decode(executablePackage.program); + +const packageDigest = canonicalArtifactDigest( + "echo.operation-package/v1", + packageBytes, +); +assertResourceReference( + report.package, + "executable-operation-package.echo", + packageDigest, +); + +assert.equal(executablePackage.schema, "echo.operation-package/v1"); +assert.equal( + executablePackage.package_kind, + "compiler-produced-bounded-pure/v1", +); +assert.equal( + executablePackage.operation_coordinate, + "jedit.text.replace_range@1.replaceRange", +); +assert.equal(program.schema, "echo.compiler-produced-pure-program/v1"); +assert.equal(program.kind, "compiler-produced-bounded-pure/v1"); +assert.equal(program.intent, "replaceRange"); +for (const artifact of [ + "core_artifact", + "lawpack_exports_artifact", + "result_projection_artifact", + "target_ir_artifact", +]) { + assert.ok(Buffer.isBuffer(program[artifact]), `${artifact} must be retained`); + assert.ok(program[artifact].length > 0, `${artifact} must not be empty`); +} + +const coreDigest = canonicalArtifactDigest( + "edict.core.module/v1", + program.core_artifact, +); +const coreArtifact = decode(program.core_artifact); +assert.deepEqual(executablePackage.semantic_closure.core_identity, coreDigest); +assert.deepEqual( + executablePackage.semantic_closure.canonical_meaning_identity, + coreDigest, +); + +const targetIrDigest = canonicalArtifactDigest( + "edict.target-ir.artifact/v1", + program.target_ir_artifact, +); +assert.deepEqual( + executablePackage.semantic_closure.target_ir_identity, + targetIrDigest, +); +assertResourceReference(report.targetIr, "echo.span-ir/v1", targetIrDigest); + +const resultProjectionDigest = canonicalArtifactDigest( + "edict.result-projection.artifact/v1", + program.result_projection_artifact, +); + +assert.equal( + report.apiVersion, + "echo.operation-package-verifier-report/v1", +); +assert.equal(report.outcome, "accepted"); +assert.equal(report.diagnosticBytes.length, 0); +assert.equal( + report.applicationResultProjection.id, + "jedit.text.replace_range@1.replaceRange", +); +assertResourceReference( + report.applicationResultProjection, + "jedit.text.replace_range@1.replaceRange", + resultProjectionDigest, +); + +assert.equal( + report.executableSubject.reference.id, + "echo.executable-subject/v1", +); +assert.ok( + Buffer.isBuffer(report.executableSubject.bytes), + "the verifier report must retain the executable subject bytes", +); +const executableSubjectDigest = canonicalArtifactDigest( + "echo.executable-subject/v1", + report.executableSubject.bytes, +); +assertResourceReference( + report.executableSubject.reference, + "echo.executable-subject/v1", + executableSubjectDigest, +); +const executableSubject = decode(report.executableSubject.bytes); +assert.equal(executableSubject.apiVersion, "echo.executable-subject/v1"); +assert.deepEqual(executableSubject.package, report.package); +assert.deepEqual(executableSubject.targetIr, report.targetIr); +assert.deepEqual( + executableSubject.applicationResultProjection, + report.applicationResultProjection, +); + +const toolchainLockBytes = await readFile( + path.join(applicationRoot, "edict.toolchain-lock.json"), +); +const toolchainLock = JSON.parse(toolchainLockBytes); +const lawpackReleaseDigest = ( + await readFile( + path.join(applicationRoot, "vendor", "jedit-text", "manifest.sha256"), + "utf8", + ) +).trim(); +const reportDigest = canonicalArtifactDigest( + "echo.operation-package-verifier-report/v1", + reportBytes, +); +const reportArtifactId = { + coordinate: "verifier-report.echo-operation", + domain: "echo.operation-package-verifier-report/v1", + digest: digestText(reportDigest), + rawSha256: sha256(reportBytes).toString("hex"), +}; +const evidence = verificationEvidence({ + executableSubjectId: { + coordinate: report.executableSubject.reference.id, + digest: digestText(executableSubjectDigest), + }, + provider: toolchainLock.echo.provider, + reportArtifactId, + report, +}); +const computedBuildLock = { + schema: "jedit.edict-build-lock/v1", + applicationCoordinate: coreArtifact.coordinate, + operationCoordinate: executablePackage.operation_coordinate, + toolchainLockSha256: sha256(toolchainLockBytes).toString("hex"), + sourceClosure: await sourceClosure(applicationRoot), + lawpackRelease: { + coordinate: executablePackage.semantic_closure.lawpack_coordinate, + digest: lawpackReleaseDigest, + }, + provider: { + coordinate: toolchainLock.echo.provider.coordinate, + digest: toolchainLock.echo.provider.digest, + }, + artifacts: { + core: { + coordinate: coreArtifact.coordinate, + domain: "edict.core.module/v1", + digest: digestText(coreDigest), + }, + targetIr: { + coordinate: report.targetIr.id, + domain: "edict.target-ir.artifact/v1", + digest: digestText(targetIrDigest), + }, + resultProjection: { + coordinate: report.applicationResultProjection.id, + domain: "edict.result-projection.artifact/v1", + digest: digestText(resultProjectionDigest), + }, + executablePackage: { + coordinate: report.package.id, + domain: "echo.operation-package/v1", + digest: digestText(packageDigest), + rawSha256: sha256(packageBytes).toString("hex"), + }, + verificationReportArtifact: reportArtifactId, + verificationReport: evidence.identity, + executableSubject: { + coordinate: report.executableSubject.reference.id, + domain: "echo.executable-subject/v1", + digest: digestText(executableSubjectDigest), + }, + }, +}; +const computedSubjectLock = { + schema: "jedit.edict-executable-subject-lock/v1", + reference: { + coordinate: report.executableSubject.reference.id, + digest: digestText(executableSubjectDigest), + }, + rawSha256: sha256(report.executableSubject.bytes).toString("hex"), + package: { + coordinate: report.package.id, + digest: digestText(packageDigest), + }, + targetIr: { + coordinate: report.targetIr.id, + digest: digestText(targetIrDigest), + }, + resultProjection: { + coordinate: report.applicationResultProjection.id, + digest: digestText(resultProjectionDigest), + }, +}; + +const buildLockPath = path.join(applicationRoot, "edict.build-lock.json"); +const subjectLockPath = path.join( + applicationRoot, + "edict.executable-subject-lock.json", +); +if (mode === "--write-locks") { + await writeFile(buildLockPath, `${JSON.stringify(computedBuildLock, null, 2)}\n`); + await writeFile(subjectLockPath, `${JSON.stringify(computedSubjectLock, null, 2)}\n`); +} else { + assert.deepEqual( + JSON.parse(await readFile(buildLockPath, "utf8")), + computedBuildLock, + "the exact build closure differs from edict.build-lock.json", + ); + assert.deepEqual( + JSON.parse(await readFile(subjectLockPath, "utf8")), + computedSubjectLock, + "the executable subject differs from edict.executable-subject-lock.json", + ); +} diff --git a/edict/replace-range/tests/build.sh b/edict/replace-range/tests/build.sh new file mode 100755 index 00000000..00009a3b --- /dev/null +++ b/edict/replace-range/tests/build.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -euo pipefail + +project_root=$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd) +application_root="$project_root/edict/replace-range" + +exec node "$application_root/tests/package-chain.mjs" diff --git a/edict/replace-range/tests/package-chain.mjs b/edict/replace-range/tests/package-chain.mjs new file mode 100644 index 00000000..8dbfbd63 --- /dev/null +++ b/edict/replace-range/tests/package-chain.mjs @@ -0,0 +1,361 @@ +// SPDX-License-Identifier: Apache-2.0 OR LicenseRef-MIND-UCAL-1.0 +// © James Ross Ω FLYING•ROBOTS + +import assert from "node:assert/strict"; +import { spawnSync } from "node:child_process"; +import { createHash } from "node:crypto"; +import { + cp, + lstat, + mkdir, + readFile, + readlink, + realpath, + readdir, + rm, +} from "node:fs/promises"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +import { decode } from "cbor-x"; + +const testsDirectory = path.dirname(fileURLToPath(import.meta.url)); +const applicationRoot = path.resolve(testsDirectory, ".."); +const projectRoot = path.resolve(applicationRoot, "../.."); +const lockPath = path.join(applicationRoot, "edict.toolchain-lock.json"); +const edictRepository = process.env.EDICT_REPO; +const echoRepository = process.env.ECHO_REPO; + +function run(command, arguments_, options = {}) { + const result = spawnSync(command, arguments_, { + cwd: options.cwd, + encoding: "utf8", + env: { ...process.env, ...options.env }, + input: options.input, + timeout: options.timeout ?? 120_000, + }); + if (options.emit !== false && result.stdout) { + process.stdout.write(result.stdout); + } + if (options.emit !== false && result.stderr) { + process.stderr.write(result.stderr); + } + if (result.error) { + throw result.error; + } + if (result.status !== 0) { + throw new Error(`${command} exited with status ${result.status}`); + } + return result.stdout.trim(); +} + +function git(repository, ...arguments_) { + return run("git", ["-C", repository, ...arguments_], { emit: false }); +} + +async function sha256(filePath) { + return createHash("sha256").update(await readFile(filePath)).digest("hex"); +} + +async function verifyGitCheckout(repository, expectedCommit, label) { + assert.ok(repository, `${label} repository path is required`); + const [requestedRoot, discoveredRoot] = await Promise.all([ + realpath(repository), + realpath(git(repository, "rev-parse", "--show-toplevel")), + ]); + assert.equal(discoveredRoot, requestedRoot, `${label} path must be the checkout root`); + assert.equal(git(repository, "rev-parse", "HEAD"), expectedCommit, `${label} commit mismatch`); + assert.equal( + git(repository, "status", "--porcelain=v1", "--untracked-files=all"), + "", + `${label} checkout must be clean`, + ); +} + +function providerArtifact(manifest, role) { + const matches = manifest.artifacts.filter((artifact) => artifact.role === role); + assert.equal(matches.length, 1, `provider must contain one ${role} artifact`); + return matches[0]; +} + +async function verifyProvider(lock) { + const providerRoot = path.join( + echoRepository, + "schemas", + "edict-provider", + "package", + "v1", + ); + await rejectSymlinks(providerRoot); + const manifestPath = path.join(providerRoot, "provider-manifest.echo.json"); + const manifest = JSON.parse(await readFile(manifestPath, "utf8")); + assert.equal(manifest.provider.coordinate, lock.coordinate); + assert.equal(manifest.provider.digest, lock.digest); + assert.equal(await sha256(manifestPath), lock.manifestSha256); + + for (const [role, fileName, expected] of [ + ["lowerer.echo-dpo", "lowerer.echo-dpo.component.wasm", lock.lowerer], + ["verifier.echo-dpo", "verifier.echo-dpo.component.wasm", lock.verifier], + ]) { + const artifact = providerArtifact(manifest, role); + assert.equal(artifact.resource.coordinate, expected.coordinate); + assert.equal(artifact.resource.digest, `sha256:${expected.sha256}`); + assert.equal( + await sha256(path.join(providerRoot, "components", fileName)), + expected.sha256, + ); + } + const targetProfileArtifact = providerArtifact( + manifest, + "target-profile.echo-dpo", + ); + assert.equal( + targetProfileArtifact.resource.coordinate, + lock.targetProfile.coordinate, + ); + assert.equal(targetProfileArtifact.resource.digest, lock.targetProfile.digest); + const targetProfile = decode( + await readFile( + path.join( + providerRoot, + "generated", + "primary", + "target-profile.echo-dpo.cbor", + ), + ), + ); + assert.equal(targetProfile.verifier.id, lock.verifier.contract.coordinate); + assert.equal( + `sha256:${Buffer.from(targetProfile.verifier.digest[1]).toString("hex")}`, + lock.verifier.contract.digest, + ); + return providerRoot; +} + +async function rejectSymlinks(root) { + for (const entry of await readdir(root, { withFileTypes: true })) { + const entryPath = path.join(root, entry.name); + assert.equal(entry.isSymbolicLink(), false, `symbolic link is forbidden: ${entryPath}`); + if (entry.isDirectory()) { + await rejectSymlinks(entryPath); + } + } +} + +async function collectDirectoryFiles(root, relative = "") { + const files = []; + const directory = path.join(root, relative); + for (const entry of await readdir(directory, { withFileTypes: true })) { + if (relative === "" && entry.name === ".build") { + continue; + } + const entryRelative = path.join(relative, entry.name); + if (entry.isDirectory()) { + files.push(...(await collectDirectoryFiles(root, entryRelative))); + } else { + files.push(entryRelative); + } + } + return files; +} + +function trackedFiles(repository) { + return git(repository, "ls-files", "-z") + .split("\0") + .filter(Boolean) + .sort(); +} + +async function snapshotFile(namespace, root, relative) { + const filePath = path.join(root, relative); + const metadata = await lstat(filePath, { bigint: true }); + const common = { + path: `${namespace}/${relative.split(path.sep).join("/")}`, + mode: metadata.mode.toString(), + size: metadata.size.toString(), + modifiedNanoseconds: metadata.mtimeNs.toString(), + inode: metadata.ino.toString(), + }; + if (metadata.isSymbolicLink()) { + return { ...common, kind: "symlink", target: await readlink(filePath) }; + } + if (metadata.isFile()) { + return { ...common, kind: "file", sha256: await sha256(filePath) }; + } + return { ...common, kind: "other" }; +} + +async function snapshotAuthoritativeInputs(lock) { + const roots = [ + ["jedit", applicationRoot, (await collectDirectoryFiles(applicationRoot)).sort()], + [ + "jedit-project", + projectRoot, + lock.validation.files.map((file) => file.path).sort(), + ], + ["edict", edictRepository, trackedFiles(edictRepository)], + ["echo", echoRepository, trackedFiles(echoRepository)], + ]; + const snapshot = []; + for (const [namespace, root, files] of roots) { + for (const relative of files) { + snapshot.push(await snapshotFile(namespace, root, relative)); + } + } + return snapshot; +} + +async function verifyVersions(lock) { + assert.equal(process.version, lock.validation.processVersion); + assert.equal(run("npm", ["--version"]), lock.validation.npmVersion); + const packageLock = JSON.parse( + await readFile(path.join(projectRoot, "package-lock.json")), + ); + assert.equal( + packageLock.packages["node_modules/cbor-x"].version, + lock.validation.cborX.version, + ); + assert.equal( + packageLock.packages["node_modules/cbor-x"].integrity, + lock.validation.cborX.integrity, + ); + for (const file of lock.validation.files) { + assert.equal( + await sha256(path.join(projectRoot, file.path)), + file.sha256, + `${file.path} differs from the validation-environment lock`, + ); + } + assert.equal( + run("rustc", [`+${lock.rust.toolchain}`, "--version"]), + lock.rust.rustcVersion, + ); + assert.equal( + run("cargo", [`+${lock.rust.toolchain}`, "--version"]), + lock.rust.cargoVersion, + ); + const cargoOutput = run( + "cargo", + [ + `+${lock.rust.toolchain}`, "build", "--locked", "-p", "edict-cli", + "--message-format=json-render-diagnostics", + ], + { cwd: edictRepository }, + ); + const compilerArtifacts = cargoOutput.split("\n") + .map((line) => JSON.parse(line)) + .filter((artifact) => artifact.reason === "compiler-artifact" + && artifact.target.name === "edict" + && artifact.target.kind.includes("bin") + && typeof artifact.executable === "string"); + assert.equal(compilerArtifacts.length, 1, "Cargo must emit one Edict executable"); + const edictBinary = compilerArtifacts[0].executable; + const version = JSON.parse(run(edictBinary, ["--version"])); + assert.equal(version.version, lock.edict.cliVersion); + return edictBinary; +} + +async function build() { + const lock = JSON.parse(await readFile(lockPath, "utf8")); + assert.equal(lock.schema, "jedit.edict-toolchain-lock/v1"); + await verifyGitCheckout(edictRepository, lock.edict.commit, "Edict"); + await verifyGitCheckout(echoRepository, lock.echo.commit, "Echo"); + const providerSource = await verifyProvider(lock.echo.provider); + const before = await snapshotAuthoritativeInputs(lock); + let failure; + try { + const edictBinary = await verifyVersions(lock); + run(edictBinary, [], { + cwd: applicationRoot, + input: `${JSON.stringify({ + schema: "edict.compiler.settings/v1", + type: "compilerSettings", + operation: "build", + lawpack: "edict.lawpack.json", + checkOnly: true, + })}\n`, + }); + + const buildRoot = path.join(applicationRoot, ".build"); + const providerDestination = path.join(buildRoot, "echo-provider"); + const applicationOutput = path.join(buildRoot, "application"); + await rm(providerDestination, { recursive: true, force: true }); + await rm(applicationOutput, { recursive: true, force: true }); + await mkdir(providerDestination, { recursive: true }); + await cp(providerSource, providerDestination, { recursive: true }); + await rejectSymlinks(providerDestination); + + run(edictBinary, [], { + cwd: applicationRoot, + input: `${JSON.stringify({ + schema: "edict.compiler.settings/v1", + type: "compilerSettings", + operation: "build", + application: "edict.application.json", + })}\n`, + }); + run( + process.execPath, + [path.join(testsDirectory, "assert-build-output.mjs"), applicationOutput], + { cwd: applicationRoot }, + ); + const buildLock = JSON.parse( + await readFile(path.join(applicationRoot, "edict.build-lock.json"), "utf8"), + ); + for (const [target, marker] of [ + ["compiled_boundary", "JEDIT_EDICT_PURE_RUNTIME_OK"], + ["flat_text", "JEDIT_EDICT_FLAT_TEXT_RUNTIME_OK"], + ]) { + const runtimeOutput = run( + "cargo", + [ + `+${lock.rust.toolchain}`, "test", "--locked", "--manifest-path", + path.join(testsDirectory, "runtime", "Cargo.toml"), + "--test", target, + "--", "--nocapture", + ], + { + cwd: applicationRoot, + timeout: 600_000, + env: { + CARGO_TARGET_DIR: process.env.CARGO_TARGET_DIR + ?? path.join(buildRoot, "runtime-target"), + JEDIT_VERIFIED_PACKAGE: path.join( + applicationOutput, "executable-operation-package.cbor", + ), + JEDIT_VERIFIED_PACKAGE_PIN: + buildLock.artifacts.executablePackage.digest.slice("sha256:".length), + }, + }, + ); + assert.ok( + runtimeOutput.includes(marker), + "runtime conformance witness did not execute", + ); + } + } catch (error) { + failure = error; + } + + const after = await snapshotAuthoritativeInputs(lock); + let mutationFailure; + try { + assert.deepEqual(after, before, "authoritative inputs changed during package-chain build"); + } catch (error) { + mutationFailure = error; + } + if (failure && mutationFailure) { + throw new AggregateError( + [failure, mutationFailure], + "build failed and authoritative inputs changed", + ); + } + if (mutationFailure) { + throw mutationFailure; + } + if (failure) { + throw failure; + } +} + +await build(); diff --git a/edict/replace-range/tests/proof-harness.spec.mjs b/edict/replace-range/tests/proof-harness.spec.mjs new file mode 100644 index 00000000..e65a682b --- /dev/null +++ b/edict/replace-range/tests/proof-harness.spec.mjs @@ -0,0 +1,463 @@ +// SPDX-License-Identifier: Apache-2.0 OR LicenseRef-MIND-UCAL-1.0 +// © James Ross Ω FLYING•ROBOTS + +import assert from "node:assert/strict"; +import { spawnSync } from "node:child_process"; +import { access, cp, mkdtemp, mkdir, readFile, rm, symlink, writeFile } from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import test from "node:test"; +import { fileURLToPath } from "node:url"; + +import { decode, encode } from "cbor-x"; + +import { verificationEvidence } from "./verification-evidence.mjs"; + +const testDirectory = path.dirname(fileURLToPath(import.meta.url)); +const applicationRoot = path.resolve(testDirectory, ".."); +const projectRoot = path.resolve(applicationRoot, "../.."); +const edictRepository = process.env.EDICT_REPO; +const echoRepository = process.env.ECHO_REPO; + +function requireToolchainEnvironment() { + assert.ok(edictRepository, "EDICT_REPO must name the exact Edict checkout"); + assert.ok(echoRepository, "ECHO_REPO must name the exact Echo checkout"); +} + +async function fixture() { + const root = await mkdtemp(path.join(os.tmpdir(), "jedit-replace-range-proof-")); + const fixtureProject = path.join(root, "jedit"); + const fixtureApplication = path.join(fixtureProject, "edict", "replace-range"); + await mkdir(path.dirname(fixtureApplication), { recursive: true }); + await cp(applicationRoot, fixtureApplication, { + recursive: true, + filter: (source) => source !== path.join(applicationRoot, ".build"), + }); + await mkdir(path.join(fixtureProject, ".github", "workflows"), { + recursive: true, + }); + for (const relative of [ + ".github/workflows/ci.yml", + "package.json", + "package-lock.json", + ]) { + await cp(path.join(projectRoot, relative), path.join(fixtureProject, relative)); + } + await symlink( + path.join(projectRoot, "node_modules"), + path.join(fixtureProject, "node_modules"), + "dir", + ); + return { + root, + project: fixtureProject, + application: fixtureApplication, + async dispose() { + await rm(root, { recursive: true, force: true }); + }, + }; +} + +function runBuild(fixtureProject, overrides = {}) { + return spawnSync("bash", ["edict/replace-range/tests/build.sh"], { + cwd: fixtureProject, + encoding: "utf8", + env: { + ...process.env, + EDICT_REPO: edictRepository, + ECHO_REPO: echoRepository, + ...overrides, + }, + timeout: 600_000, + }); +} + +function assertCommandCompleted(result) { + assert.equal(result.error, undefined, result.error?.message); + assert.notEqual(result.status, null, `command terminated by ${result.signal}`); +} + +test("rejects_non_git_toolchain_inputs", { timeout: 120_000 }, async () => { + requireToolchainEnvironment(); + const subject = await fixture(); + try { + const fakeEdict = path.join(subject.root, "fake-edict"); + const fakeEcho = path.join(subject.root, "fake-echo"); + const fakeEdictBinary = path.join(fakeEdict, "target", "debug", "edict"); + const providerSource = path.join( + echoRepository, + "schemas", + "edict-provider", + "package", + "v1", + ); + const fakeProvider = path.join( + fakeEcho, + "schemas", + "edict-provider", + "package", + "v1", + ); + await mkdir(path.dirname(fakeEdictBinary), { recursive: true }); + await mkdir(path.dirname(fakeProvider), { recursive: true }); + await symlink(path.join(edictRepository, "target", "debug", "edict"), fakeEdictBinary); + await cp(providerSource, fakeProvider, { recursive: true }); + + const result = runBuild(subject.project, { + EDICT_REPO: fakeEdict, + ECHO_REPO: fakeEcho, + }); + assertCommandCompleted(result); + assert.notEqual( + result.status, + 0, + "non-Git toolchain directories must be rejected before publication or application build", + ); + } finally { + await subject.dispose(); + } +}); + +test("rejects_wrong_commit_toolchain_inputs", { timeout: 120_000 }, async () => { + requireToolchainEnvironment(); + const subject = await fixture(); + try { + const lockPath = path.join(subject.application, "edict.toolchain-lock.json"); + const lock = JSON.parse(await readFile(lockPath, "utf8")); + lock.edict.commit = "0".repeat(40); + await writeFile(lockPath, `${JSON.stringify(lock, null, 2)}\n`); + + const result = runBuild(subject.project); + assertCommandCompleted(result); + assert.notEqual(result.status, 0, "a wrong Edict commit must be rejected"); + } finally { + await subject.dispose(); + } +}); + +test("lawpack_check_only_rejects_drift_without_repairing_it", { timeout: 120_000 }, async () => { + requireToolchainEnvironment(); + const subject = await fixture(); + try { + const digestPath = path.join( + subject.application, + "vendor", + "jedit-text", + "manifest.sha256", + ); + const corruptDigest = `sha256:${"0".repeat(64)}\n`; + await writeFile(digestPath, corruptDigest); + + const result = runBuild(subject.project); + assertCommandCompleted(result); + assert.notEqual(result.status, 0, "drift must fail instead of being repaired"); + assert.equal( + await readFile(digestPath, "utf8"), + corruptDigest, + "check-only validation must leave the drifted artifact untouched", + ); + } finally { + await subject.dispose(); + } +}); + +test( + "rejects_package_whose_recomputed_identity_differs_from_report_subject", + { timeout: 120_000 }, + async () => { + requireToolchainEnvironment(); + const subject = await fixture(); + try { + const build = runBuild(subject.project); + assertCommandCompleted(build); + assert.equal(build.status, 0, build.stderr); + + const outputDirectory = path.join(subject.application, ".build", "application"); + const packagePath = path.join(outputDirectory, "executable-operation-package.cbor"); + const executablePackage = decode(await readFile(packagePath)); + const program = decode(executablePackage.program); + const alteredCore = Buffer.from(program.core_artifact); + alteredCore[0] ^= 1; + program.core_artifact = alteredCore; + executablePackage.program = encode(program); + await writeFile(packagePath, encode(executablePackage)); + + const assertion = spawnSync( + process.execPath, + [path.join(subject.application, "tests", "assert-build-output.mjs"), outputDirectory], + { cwd: subject.project, encoding: "utf8", timeout: 30_000 }, + ); + assertCommandCompleted(assertion); + assert.notEqual( + assertion.status, + 0, + "a report for the original package must not authorize altered embedded Core bytes", + ); + } finally { + await subject.dispose(); + } + }, +); + +test( + "preserves_nominal_exact_length_buffer_and_head_identities", + { timeout: 120_000 }, + async () => { + requireToolchainEnvironment(); + const subject = await fixture(); + try { + const build = runBuild(subject.project); + assertCommandCompleted(build); + assert.equal(build.status, 0, build.stderr); + + const packageBytes = await readFile( + path.join( + subject.application, + ".build", + "application", + "executable-operation-package.cbor", + ), + ); + const executablePackage = decode(packageBytes); + const program = decode(executablePackage.program); + const core = decode(program.core_artifact); + for (const recordName of ["ReplaceRangeInput", "ReplaceRangeBoundary"]) { + const record = core.types[recordName]; + assert.equal(record.kind, "Record"); + for (const [field, contract] of [ + ["bufferId", "jedit.text@1.BufferId"], + ["basisHeadId", "jedit.text@1.HeadId"], + ]) { + assert.equal(record.fields[field], contract); + const nominal = core.types[record.fields[field]]; + assert.equal(nominal.kind, "Nominal"); + assert.equal(nominal.contract, contract); + assert.deepEqual( + core.types[nominal.representation], + { kind: "Bytes", min: 32, max: 32 }, + `${recordName}.${field} must resolve to its nominal exact 32-byte contract`, + ); + } + } + } finally { + await subject.dispose(); + } + }, +); + +test("freshly_compiled_package_must_execute_in_echo", { timeout: 120_000 }, async () => { + requireToolchainEnvironment(); + const subject = await fixture(); + try { + const isolatedEdict = path.join(subject.root, "edict"); + const clone = spawnSync("git", [ + "clone", "--quiet", "--no-hardlinks", edictRepository, isolatedEdict, + ], { encoding: "utf8" }); + assertCommandCompleted(clone); + assert.equal(clone.status, 0, clone.stderr); + const defaultBinary = path.join(isolatedEdict, "target", "debug", "edict"); + await assert.rejects(access(defaultBinary), { code: "ENOENT" }); + const result = runBuild(subject.project, { + EDICT_REPO: isolatedEdict, + CARGO_TARGET_DIR: path.resolve( + process.env.CARGO_TARGET_DIR ?? path.join(edictRepository, "target"), + ), + }); + assertCommandCompleted(result); + assert.equal(result.status, 0, result.stderr); + await assert.rejects(access(defaultBinary), { code: "ENOENT" }); + assert.ok( + result.stdout.includes("JEDIT_EDICT_PURE_RUNTIME_OK"), + "a verified package alone is insufficient: the runtime conformance test must execute", + ); + } finally { + await subject.dispose(); + } +}); + +test("repeated_public_builds_preserve_core_and_package_bytes", { timeout: 120_000 }, async () => { + requireToolchainEnvironment(); + const subject = await fixture(); + try { + const outputDirectory = path.join(subject.application, ".build", "application"); + const readArtifacts = async () => { + const packageBytes = await readFile( + path.join(outputDirectory, "executable-operation-package.cbor"), + ); + const program = decode(decode(packageBytes).program); + return { + core: program.core_artifact, + targetIr: program.target_ir_artifact, + projection: program.result_projection_artifact, + package: packageBytes, + report: await readFile(path.join(outputDirectory, "verification-report.cbor")), + }; + }; + const first = runBuild(subject.project); + assertCommandCompleted(first); + assert.equal(first.status, 0, first.stderr); + const firstBytes = await readArtifacts(); + const second = runBuild(subject.project); + assertCommandCompleted(second); + assert.equal(second.status, 0, second.stderr); + assert.deepEqual( + await readArtifacts(), + firstBytes, + "every artifact must be byte-identical for the same source and closure", + ); + } finally { + await subject.dispose(); + } +}); + +test("rejects_buffer_id_head_id_substitution", { timeout: 120_000 }, async () => { + requireToolchainEnvironment(); + const subject = await fixture(); + try { + const sourcePath = path.join( + subject.application, + "src", + "ReplaceRange.edict", + ); + const source = await readFile(sourcePath, "utf8"); + const crossed = source + .replace("bufferId: input.bufferId,", "bufferId: input.basisHeadId,") + .replace("basisHeadId: input.basisHeadId,", "basisHeadId: input.bufferId,"); + assert.notEqual( + crossed, + source, + "the negative witness must cross the two identities", + ); + await writeFile(sourcePath, crossed); + + const result = runBuild(subject.project); + assertCommandCompleted(result); + assert.notEqual(result.status, 0, "BufferId and HeadId must not be substitutable"); + assert.match( + `${result.stdout}\n${result.stderr}`, + /TypeMismatch/, + "the imported nominal boundary must reject the crossed assignment", + ); + } finally { + await subject.dispose(); + } +}); + +test("verification_report_identity_is_verifier_specific", () => { + const common = { + executableSubjectId: { + coordinate: "echo.executable-subject/v1", + digest: `sha256:${"1".repeat(64)}`, + }, + reportArtifactId: { + coordinate: "verifier-report.echo-operation", + domain: "echo.operation-package-verifier-report/v1", + digest: `sha256:${"2".repeat(64)}`, + rawSha256: "3".repeat(64), + }, + report: { + apiVersion: "echo.operation-package-verifier-report/v1", + diagnosticAbi: { + id: "edict.diagnostics/v1", + digest: ["sha256", Buffer.alloc(32, 4)], + }, + outcome: "accepted", + }, + }; + const provider = { + coordinate: "echo.edict-provider@1", + digest: `sha256:${"5".repeat(64)}`, + verifier: { + coordinate: "echo.dpo.verifier/component@1", + sha256: "6".repeat(64), + contract: { + coordinate: "echo.dpo.verifier/v1", + digest: `sha256:${"8".repeat(64)}`, + }, + }, + targetProfile: { + coordinate: "echo.dpo@1", + digest: `sha256:${"9".repeat(64)}`, + }, + }; + const original = verificationEvidence({ ...common, provider }); + const changed = verificationEvidence({ + ...common, + provider: { + ...provider, + verifier: { ...provider.verifier, sha256: "7".repeat(64) }, + }, + }); + assert.notEqual( + original.identity.digest, + changed.identity.digest, + "different verifier identities must produce different VerificationReportIds", + ); +}); + +test("rejects_drifted_build_and_executable_subject_locks", { timeout: 120_000 }, async () => { + requireToolchainEnvironment(); + const subject = await fixture(); + try { + const lockPath = path.join(subject.application, "edict.build-lock.json"); + const lock = JSON.parse(await readFile(lockPath, "utf8")); + lock.artifacts.core.digest = `sha256:${"0".repeat(64)}`; + await writeFile(lockPath, `${JSON.stringify(lock, null, 2)}\n`); + + const build = runBuild(subject.project); + assertCommandCompleted(build); + assert.notEqual( + build.status, + 0, + "a changed exact-artifact expectation must fail the package-chain gate", + ); + } finally { + await subject.dispose(); + } +}); + +test("rejects_drifted_executable_subject_lock", { timeout: 120_000 }, async () => { + requireToolchainEnvironment(); + const subject = await fixture(); + try { + const lockPath = path.join( + subject.application, + "edict.executable-subject-lock.json", + ); + const lock = JSON.parse(await readFile(lockPath, "utf8")); + lock.reference.digest = `sha256:${"0".repeat(64)}`; + await writeFile(lockPath, `${JSON.stringify(lock, null, 2)}\n`); + + const build = runBuild(subject.project); + assertCommandCompleted(build); + assert.notEqual( + build.status, + 0, + "a changed executable-subject expectation must fail the package-chain gate", + ); + } finally { + await subject.dispose(); + } +}); + +test("required_ci_executes_the_exact_package_chain", async () => { + const workflow = await readFile( + path.join(projectRoot, ".github", "workflows", "ci.yml"), + "utf8", + ); + assert.match(workflow, /^ edict-replace-range:\n/m); + assert.match(workflow, /name: edict \/ replace-range package and pure runtime chain/); + assert.match( + workflow, + /node --test edict\/replace-range\/tests\/proof-harness\.spec\.mjs/, + ); + assert.match( + workflow, + /ref: \$\{\{ github\.event\.pull_request\.head\.sha \|\| github\.sha \}\}/, + ); + assert.match(workflow, /git rev-parse HEAD/); + assert.match( + workflow, + /needs: \[ plan, build, test-shards, quality, release-gate, edict-replace-range \]/, + ); +}); diff --git a/edict/replace-range/tests/runtime/Cargo.lock b/edict/replace-range/tests/runtime/Cargo.lock new file mode 100644 index 00000000..8025a9d4 --- /dev/null +++ b/edict/replace-range/tests/runtime/Cargo.lock @@ -0,0 +1,793 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "ambient-authority" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b" + +[[package]] +name = "arrayvec" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "blake3" +version = "1.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d9e454fc11f76977dc803893aff6304ed33d6a26efae8696573bea74baa27ae" +dependencies = [ + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "cpufeatures 0.3.1", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bunny-num" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d5c3288a3b7dcf4517c717a864c648777af349a15c86e25db48f86ec099f864" + +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a1f896587b6f2c069c73d2f0913e2d590c3990285cd2f0b6aa02b786b4c679c" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" + +[[package]] +name = "cap-fs-ext" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78e5a3368ae89b7cb68186411452b4b9fac8b41be9c19bf3f47c2d2c8e36e6b" +dependencies = [ + "cap-primitives", + "cap-std", + "io-lifetimes 3.0.1", + "windows-sys 0.61.2", +] + +[[package]] +name = "cap-primitives" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b5f74729fd2f44701d1a8eb47e906cdb3ccd9ec0f02baad85a744b791940b18" +dependencies = [ + "ambient-authority", + "fs-set-times", + "io-extras", + "io-lifetimes 3.0.1", + "ipnet", + "maybe-owned", + "rustix", + "rustix-linux-procfs", + "windows-sys 0.61.2", + "winx", +] + +[[package]] +name = "cap-std" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7281235d6e96d3544ca18bba9049be92f4190f8d923e3caef1b5f66cfa752608" +dependencies = [ + "cap-primitives", + "io-extras", + "io-lifetimes 3.0.1", + "rustix", +] + +[[package]] +name = "cc" +version = "1.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "constant_time_eq" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" +dependencies = [ + "libc", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "echo-edict-canonical" +version = "0.1.0" +source = "git+https://github.com/flyingrobots/echo?rev=b314f7fd071985edad1f9876df383a85fb491205#b314f7fd071985edad1f9876df383a85fb491205" +dependencies = [ + "hex", + "sha2", +] + +[[package]] +name = "echo-registry-api" +version = "0.1.0" +source = "git+https://github.com/flyingrobots/echo?rev=b314f7fd071985edad1f9876df383a85fb491205#b314f7fd071985edad1f9876df383a85fb491205" + +[[package]] +name = "echo-runtime-schema" +version = "0.1.0" +source = "git+https://github.com/flyingrobots/echo?rev=b314f7fd071985edad1f9876df383a85fb491205#b314f7fd071985edad1f9876df383a85fb491205" + +[[package]] +name = "echo-wasm-abi" +version = "0.1.0" +source = "git+https://github.com/flyingrobots/echo?rev=b314f7fd071985edad1f9876df383a85fb491205#b314f7fd071985edad1f9876df383a85fb491205" +dependencies = [ + "blake3", + "ciborium", + "echo-registry-api", + "half", + "serde", + "serde-value", + "thiserror 2.0.20", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" + +[[package]] +name = "fs-set-times" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94e7099f6313ecacbe1256e8ff9d617b75d1bcb16a6fddef94866d225a01a14a" +dependencies = [ + "io-lifetimes 2.0.4", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "zerocopy", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "io-extras" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20fd6de4ccfcc187e38bc21cfa543cb5a302cb86a8b114eb7f0bf0dc9f8ac00f" +dependencies = [ + "io-lifetimes 3.0.1", + "windows-sys 0.60.2", +] + +[[package]] +name = "io-lifetimes" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06432fb54d3be7964ecd3649233cddf80db2832f47fec34c01f65b3d9d774983" + +[[package]] +name = "io-lifetimes" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0fb0570afe1fed943c5c3d4102d5358592d8625fda6a0007fdbe65a92fba96" + +[[package]] +name = "ipnet" +version = "2.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0" + +[[package]] +name = "jedit-edict-runtime-conformance" +version = "0.0.0" +dependencies = [ + "echo-edict-canonical", + "warp-core", +] + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "maybe-owned" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rustc-hash" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" + +[[package]] +name = "rustix" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustix-linux-procfs" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fc84bf7e9aa16c4f2c758f27412dc9841341e16aa682d9c7ac308fe3ee12056" +dependencies = [ + "once_cell", + "rustix", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float", + "serde", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "digest", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +dependencies = [ + "thiserror-impl 2.0.20", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.6", +] + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unicode-ident" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "warp-core" +version = "0.1.1" +source = "git+https://github.com/flyingrobots/echo?rev=b314f7fd071985edad1f9876df383a85fb491205#b314f7fd071985edad1f9876df383a85fb491205" +dependencies = [ + "blake3", + "bytemuck", + "bytes", + "cap-fs-ext", + "cap-std", + "echo-edict-canonical", + "echo-registry-api", + "echo-runtime-schema", + "echo-wasm-abi", + "hex", + "rustc-hash", + "sha2", + "thiserror 1.0.69", + "warp-math", +] + +[[package]] +name = "warp-math" +version = "0.1.0" +source = "git+https://github.com/flyingrobots/echo?rev=b314f7fd071985edad1f9876df383a85fb491205#b314f7fd071985edad1f9876df383a85fb491205" +dependencies = [ + "bunny-num", + "libm", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winx" +version = "0.36.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f3fd376f71958b862e7afb20cfe5a22830e1963462f3a17f49d82a6c1d1f42d" +dependencies = [ + "bitflags", + "windows-sys 0.59.0", +] + +[[package]] +name = "zerocopy" +version = "0.8.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] diff --git a/edict/replace-range/tests/runtime/Cargo.toml b/edict/replace-range/tests/runtime/Cargo.toml new file mode 100644 index 00000000..4ae0432f --- /dev/null +++ b/edict/replace-range/tests/runtime/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "jedit-edict-runtime-conformance" +version = "0.0.0" +edition = "2021" +publish = false + +# This standalone, test-only trusted host is never a product dependency. +[workspace] + +[dev-dependencies] +echo-edict-canonical = { git = "https://github.com/flyingrobots/echo", rev = "b314f7fd071985edad1f9876df383a85fb491205" } +warp-core = { git = "https://github.com/flyingrobots/echo", rev = "b314f7fd071985edad1f9876df383a85fb491205", features = ["trusted_runtime"] } + +[[test]] +name = "compiled_boundary" +path = "compiled_boundary.rs" + +[[test]] +name = "flat_text" +path = "flat_text.rs" diff --git a/edict/replace-range/tests/runtime/compiled_boundary.rs b/edict/replace-range/tests/runtime/compiled_boundary.rs new file mode 100644 index 00000000..7433d790 --- /dev/null +++ b/edict/replace-range/tests/runtime/compiled_boundary.rs @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: Apache-2.0 OR LicenseRef-MIND-UCAL-1.0 +// © James Ross Ω FLYING•ROBOTS +//! Test-only trusted host. No native Jedit planner or product host is linked. + +use std::{env, fs}; + +use echo_edict_canonical::{encode_canonical_cbor_v1 as encode, CanonicalValueV1 as Value}; +use warp_core::edict_pure::{evaluate, EvaluationError, EvaluationLimits}; + +const ID_BYTES: usize = 32; +const MAX_PACKAGE_BYTES: usize = 32_768; +const MAX_INPUT_BYTES: usize = 4_194_304; +const MAX_STEPS: u64 = 10_000; +const MAX_ALLOCATED_BYTES: u64 = 16_777_216; +const MAX_OUTPUT_BYTES: u64 = 4_194_304; + +fn record(fields: impl IntoIterator) -> Value { + Value::Map( + fields + .into_iter() + .map(|(name, value)| (Value::Text(name.into()), value)) + .collect(), + ) +} + +fn input(start: u64, end: u64, buffer_id_size: usize) -> Vec { + encode(&record([ + ("bufferId", Value::Bytes(vec![1; buffer_id_size])), + ("basisHeadId", Value::Bytes(vec![2; ID_BYTES])), + ("text", Value::Bytes(b"0123456789abcdef".to_vec())), + ("startByte", Value::Integer(start.into())), + ("endByte", Value::Integer(end.into())), + ("replacement", Value::Bytes("λ\r\n".as_bytes().to_vec())), + ])) + .expect("canonical input") +} + +fn limits() -> EvaluationLimits { + EvaluationLimits { + max_package_bytes: MAX_PACKAGE_BYTES, + max_input_bytes: MAX_INPUT_BYTES, + max_steps: MAX_STEPS, + max_allocated_bytes: MAX_ALLOCATED_BYTES, + max_output_bytes: MAX_OUTPUT_BYTES, + } +} + +#[test] +fn freshly_compiled_boundary_executes() { + // The driver validates the separate verifier report and build locks before + // supplying this pin. This fixture alone does not establish authorization. + let package = fs::read(env::var("JEDIT_VERIFIED_PACKAGE").expect("package path")) + .expect("fresh compiler package"); + let pin_text = env::var("JEDIT_VERIFIED_PACKAGE_PIN").expect("verified package pin"); + assert_eq!(pin_text.len(), ID_BYTES * 2); + let mut pin = [0; ID_BYTES]; + for (index, byte) in pin.iter_mut().enumerate() { + *byte = u8::from_str_radix(&pin_text[index * 2..index * 2 + 2], 16) + .expect("hexadecimal package pin"); + } + + // Literal expectations catch a skipped helper, constant result, wrong + // branch, or changed field projection without reproducing the evaluator. + for (start, end, range_is_empty, updated) in [ + (7, 7, 1, "0123456λ\r\n789abcdef"), + (7, 11, 0, "0123456λ\r\nbcdef"), + ] { + let supplied = input(start, end, ID_BYTES); + let result = evaluate(&package, pin, &supplied, limits()).expect("pure result"); + let expected = record([ + ("updatedText", Value::Bytes(updated.as_bytes().to_vec())), + ("bufferId", Value::Bytes(vec![1; ID_BYTES])), + ("basisHeadId", Value::Bytes(vec![2; ID_BYTES])), + ("startByte", Value::Integer(start.into())), + ("endByte", Value::Integer(end.into())), + ("replacement", Value::Bytes("λ\r\n".as_bytes().to_vec())), + ("rangeIsEmpty", Value::Integer(range_is_empty)), + ("createdLeafCeiling", Value::Integer(4096)), + ]); + assert_eq!(result.output, encode(&expected).expect("expected result")); + assert_eq!( + result, + evaluate(&package, pin, &supplied, limits()).unwrap() + ); + assert!(result.steps > 0); + assert!(result.allocated_bytes > 0); + } + assert_eq!( + evaluate(&package, pin, &input(11, 7, ID_BYTES), limits()), + Err(EvaluationError::InputConstraintFailed("where.0".into())) + ); + assert_eq!( + evaluate(&package, pin, &input(7, 11, ID_BYTES - 1), limits()), + Err(EvaluationError::InvalidInput) + ); + pin[0] ^= 1; + assert_eq!( + evaluate(&package, pin, &input(7, 11, ID_BYTES), limits()), + Err(EvaluationError::PackageIdentityMismatch) + ); + // The driver requires this marker, so zero discovered tests cannot pass. + println!("JEDIT_EDICT_PURE_RUNTIME_OK"); +} diff --git a/edict/replace-range/tests/runtime/flat_text.rs b/edict/replace-range/tests/runtime/flat_text.rs new file mode 100644 index 00000000..b96f3a6f --- /dev/null +++ b/edict/replace-range/tests/runtime/flat_text.rs @@ -0,0 +1,178 @@ +// SPDX-License-Identifier: Apache-2.0 OR LicenseRef-MIND-UCAL-1.0 +// © James Ross Ω FLYING•ROBOTS +//! Logical-text reference. This host supplies bytes and checks literal results; +//! it does not perform replacement or link the native rope planner. +use echo_edict_canonical::{ + decode_canonical_cbor_v1 as decode, encode_canonical_cbor_v1 as encode, + CanonicalValueV1 as Value, +}; +use std::{env, fs}; +use warp_core::edict_pure::{evaluate, EvaluationError, EvaluationLimits}; +const ID_BYTES: usize = 32; + +fn package() -> (Vec, [u8; ID_BYTES]) { + let bytes = + fs::read(env::var("JEDIT_VERIFIED_PACKAGE").expect("package path")).expect("fresh package"); + let text = env::var("JEDIT_VERIFIED_PACKAGE_PIN").expect("independently verified pin"); + assert_eq!(text.len(), ID_BYTES * 2); + let mut pin = [0; ID_BYTES]; + for (index, byte) in pin.iter_mut().enumerate() { + *byte = u8::from_str_radix(&text[index * 2..index * 2 + 2], 16).expect("pin hex"); + } + (bytes, pin) +} +fn limits() -> EvaluationLimits { + EvaluationLimits { + max_package_bytes: 32_768, + max_input_bytes: 4_194_304, + max_steps: 8_388_608, + max_allocated_bytes: 16_777_216, + max_output_bytes: 4_194_304, + } +} +fn input(original: &[u8], start: u64, end: u64, replacement: &[u8]) -> Vec { + encode(&Value::Map(vec![ + ( + Value::Text("bufferId".into()), + Value::Bytes(vec![1; ID_BYTES]), + ), + ( + Value::Text("basisHeadId".into()), + Value::Bytes(vec![2; ID_BYTES]), + ), + (Value::Text("text".into()), Value::Bytes(original.to_vec())), + ( + Value::Text("startByte".into()), + Value::Integer(start.into()), + ), + (Value::Text("endByte".into()), Value::Integer(end.into())), + ( + Value::Text("replacement".into()), + Value::Bytes(replacement.to_vec()), + ), + ])) + .expect("canonical input") +} +fn updated_text(output: &[u8]) -> Vec { + let Value::Map(fields) = decode(output).expect("canonical result") else { + panic!("record result") + }; + let value = fields + .into_iter() + .find(|(key, _)| *key == Value::Text("updatedText".into())) + .expect("authored replacement result") + .1; + let Value::Bytes(bytes) = value else { + panic!("bounded byte result") + }; + bytes +} +#[test] +fn compiled_flat_text_replacement_matches_literal_utf8_cases() { + let (package, pin) = package(); + for (name, before, start, end, replacement, expected) in [ + ("empty", "", 0, 0, "λ\r\n", "λ\r\n"), + ("prefix", "world", 0, 0, "hello ", "hello world"), + ("suffix", "hello", 5, 5, " ðŸŒ�", "hello ðŸŒ�"), + ("replace", "hello world", 6, 11, "λ", "hello λ"), + ("delete", "AλB", 1, 3, "", "AB"), + ("crlf", "one\r\ntwo\r\n", 5, 8, "three", "one\r\nthree\r\n"), + ("whole", "αβ", 0, 4, "🙂", "🙂"), + ("multibyte", "a🙂z", 1, 5, "é", "aéz"), + ("nul", "A\0B", 1, 2, "λ", "AλB"), + ] { + let supplied = input(before.as_bytes(), start, end, replacement.as_bytes()); + let result = evaluate(&package, pin, &supplied, limits()) + .unwrap_or_else(|error| panic!("{name}: {error:?}")); + assert_eq!(updated_text(&result.output), expected.as_bytes(), "{name}"); + assert_eq!( + result, + evaluate(&package, pin, &supplied, limits()).expect("repeat"), + "{name}" + ); + assert!(result.steps > 0 && result.allocated_bytes > 0); + } + println!("JEDIT_EDICT_FLAT_TEXT_RUNTIME_OK"); +} + +#[test] +fn compiled_flat_text_replacement_refuses_invalid_utf8_boundaries_and_noops() { + let (package, pin) = package(); + for (name, before, start, end, replacement) in [ + ("invalid-original", &b"A\xffB"[..], 0, 0, &b"X"[..]), + ("invalid-replacement", &b"ABC"[..], 1, 2, &b"\xff"[..]), + ("overlong", &[0xc0, 0x80][..], 0, 0, &b"X"[..]), + ("surrogate", &[0xed, 0xa0, 0x80][..], 0, 0, &b"X"[..]), + ( + "past-unicode", + &[0xf4, 0x90, 0x80, 0x80][..], + 0, + 0, + &b"X"[..], + ), + ("truncated", &[0xe2, 0x82][..], 0, 0, &b"X"[..]), + ("start-inside-lambda", "aλz".as_bytes(), 2, 3, &b"X"[..]), + ("end-inside-lambda", "aλz".as_bytes(), 1, 2, &b"X"[..]), + ("inside-emoji", "a🙂z".as_bytes(), 2, 4, &b"X"[..]), + ("unchanged-lambda", "AλB".as_bytes(), 1, 3, "λ".as_bytes()), + ("empty-noop", &b""[..], 0, 0, &b""[..]), + ("reversed", &b"ABC"[..], 2, 1, &b"X"[..]), + ("past-end", &b"ABC"[..], 1, 4, &b"X"[..]), + ] { + assert_eq!( + evaluate( + &package, + pin, + &input(before, start, end, replacement), + limits() + ), + Err(warp_core::edict_pure::EvaluationError::InputConstraintFailed("where.0".into())), + "{name}" + ); + } +} + +#[test] +fn public_utf8_replacement_refuses_each_host_resource_aperture() { + let (package, pin) = package(); + let input = input(b"abc", 1, 2, b"X"); + for (limits, error) in [ + ( + EvaluationLimits { + max_steps: 1, + ..limits() + }, + EvaluationError::StepBudgetExceeded, + ), + ( + EvaluationLimits { + max_allocated_bytes: 1, + ..limits() + }, + EvaluationError::AllocationBudgetExceeded, + ), + ( + EvaluationLimits { + max_output_bytes: 1, + ..limits() + }, + EvaluationError::OutputBudgetExceeded, + ), + ( + EvaluationLimits { + max_input_bytes: input.len() - 1, + ..limits() + }, + EvaluationError::InputTooLarge, + ), + ( + EvaluationLimits { + max_package_bytes: package.len() - 1, + ..limits() + }, + EvaluationError::PackageTooLarge, + ), + ] { + assert_eq!(evaluate(&package, pin, &input, limits), Err(error)); + } +} diff --git a/edict/replace-range/tests/verification-evidence.mjs b/edict/replace-range/tests/verification-evidence.mjs new file mode 100644 index 00000000..2286e294 --- /dev/null +++ b/edict/replace-range/tests/verification-evidence.mjs @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: Apache-2.0 OR LicenseRef-MIND-UCAL-1.0 +// © James Ross Ω FLYING•ROBOTS + +import { createHash } from "node:crypto"; + +import { encode } from "cbor-x"; + +export function canonicalArtifactDigest(domain, canonicalArtifactBytes) { + const preimage = Buffer.concat([ + Buffer.from([0x83]), + Buffer.from(encode("edict.digest/v1")), + Buffer.from(encode(domain)), + Buffer.from(canonicalArtifactBytes), + ]); + return createHash("sha256").update(preimage).digest(); +} + +export function digestText(bytes) { + return `sha256:${Buffer.from(bytes).toString("hex")}`; +} + +function canonicalJson(value) { + if (Array.isArray(value)) { + return value.map(canonicalJson); + } + if (value !== null && typeof value === "object") { + return Object.fromEntries( + Object.keys(value) + .sort() + .map((key) => [key, canonicalJson(value[key])]), + ); + } + return value; +} + +function resourceReference(reference) { + return { + coordinate: reference.id, + digest: digestText(reference.digest[1]), + }; +} + +export function verificationEvidence({ + executableSubjectId, + provider, + reportArtifactId, + report, +}) { + const envelope = { + apiVersion: "jedit.edict-verification-evidence/v1", + reportArtifact: reportArtifactId, + executableSubject: executableSubjectId, + providerRelease: { + coordinate: provider.coordinate, + digest: provider.digest, + }, + verifierComponent: { + coordinate: provider.verifier.coordinate, + digest: `sha256:${provider.verifier.sha256}`, + }, + verificationPolicy: { + apiVersion: "jedit.edict-verification-policy/v1", + verifierContract: provider.verifier.contract, + targetProfile: provider.targetProfile, + reportAbi: report.apiVersion, + diagnosticAbi: resourceReference(report.diagnosticAbi), + }, + outcome: report.outcome, + }; + const bytes = Buffer.from(JSON.stringify(canonicalJson(envelope)), "utf8"); + return { + envelope, + bytes, + identity: { + coordinate: "jedit.edict-verification-evidence/v1", + domain: "jedit.edict-verification-evidence/v1", + digest: digestText( + canonicalArtifactDigest("jedit.edict-verification-evidence/v1", bytes), + ), + rawSha256: createHash("sha256").update(bytes).digest("hex"), + }, + }; +} diff --git a/edict/replace-range/vendor/jedit-text/adapter.cbor b/edict/replace-range/vendor/jedit-text/adapter.cbor new file mode 100644 index 00000000..2e225d2c Binary files /dev/null and b/edict/replace-range/vendor/jedit-text/adapter.cbor differ diff --git a/edict/replace-range/vendor/jedit-text/adapter.sha256 b/edict/replace-range/vendor/jedit-text/adapter.sha256 new file mode 100644 index 00000000..c3c01fab --- /dev/null +++ b/edict/replace-range/vendor/jedit-text/adapter.sha256 @@ -0,0 +1 @@ +sha256:d8af5523ee2ddfca241b75cf077f282249727a31cae1984e22cc76b12a72f59c diff --git a/edict/replace-range/vendor/jedit-text/echo-operation-configuration.cbor b/edict/replace-range/vendor/jedit-text/echo-operation-configuration.cbor new file mode 100644 index 00000000..ee60987a --- /dev/null +++ b/edict/replace-range/vendor/jedit-text/echo-operation-configuration.cbor @@ -0,0 +1 @@ +¢japiVersionx(echo.operation-lowering-configuration/v1kprogramKindx!compiler-produced-bounded-pure/v1 \ No newline at end of file diff --git a/edict/replace-range/vendor/jedit-text/echo-operation-configuration.sha256 b/edict/replace-range/vendor/jedit-text/echo-operation-configuration.sha256 new file mode 100644 index 00000000..a708943c --- /dev/null +++ b/edict/replace-range/vendor/jedit-text/echo-operation-configuration.sha256 @@ -0,0 +1 @@ +sha256:bcb811b2d00d9824a256a26e48c14401c87fff509f2f75deb2ba703003a3f6d4 diff --git a/edict/replace-range/vendor/jedit-text/edict.lawpack-output.json b/edict/replace-range/vendor/jedit-text/edict.lawpack-output.json new file mode 100644 index 00000000..97825429 --- /dev/null +++ b/edict/replace-range/vendor/jedit-text/edict.lawpack-output.json @@ -0,0 +1,67 @@ +{ + "schema": "edict.lawpack-output/v1", + "lawpackId": "jedit.text", + "lawpackVersion": "1", + "artifacts": [ + { + "path": "manifest.cbor", + "kind": "manifest", + "coordinate": "edict.lawpack/v1", + "digest": "sha256:f385072314ea57af5b66cad9eb4119b51e456df2050ea0c9a6302c7693212dc1" + }, + { + "path": "manifest.sha256", + "kind": "manifestDigest", + "coordinate": "edict.lawpack/v1", + "digest": "sha256:f385072314ea57af5b66cad9eb4119b51e456df2050ea0c9a6302c7693212dc1" + }, + { + "path": "exports.cbor", + "kind": "exports", + "coordinate": "jedit.text.exports/v1", + "digest": "sha256:fb43312b13f840174fc89a0a3a6f3b3a4df53a96c4fca7d6c672214d9d703e85" + }, + { + "path": "exports.sha256", + "kind": "exportsDigest", + "coordinate": "jedit.text.exports/v1", + "digest": "sha256:fb43312b13f840174fc89a0a3a6f3b3a4df53a96c4fca7d6c672214d9d703e85" + }, + { + "path": "echo-operation-configuration.cbor", + "kind": "localResource", + "coordinate": "echo.operation-lowering-configuration/v1", + "digest": "sha256:bcb811b2d00d9824a256a26e48c14401c87fff509f2f75deb2ba703003a3f6d4" + }, + { + "path": "echo-operation-configuration.sha256", + "kind": "localResourceDigest", + "coordinate": "echo.operation-lowering-configuration/v1", + "digest": "sha256:bcb811b2d00d9824a256a26e48c14401c87fff509f2f75deb2ba703003a3f6d4" + }, + { + "path": "verifier-rules.cbor", + "kind": "localResource", + "coordinate": "jedit.text.verifier-rules/v1", + "digest": "sha256:364fb4ff98ae64fcd8d793aae3d7cb133ff8a1ce661330cea47688b13a0a823f" + }, + { + "path": "verifier-rules.sha256", + "kind": "localResourceDigest", + "coordinate": "jedit.text.verifier-rules/v1", + "digest": "sha256:364fb4ff98ae64fcd8d793aae3d7cb133ff8a1ce661330cea47688b13a0a823f" + }, + { + "path": "adapter.cbor", + "kind": "adapter", + "coordinate": "jedit.text.echo-adapter/v1", + "digest": "sha256:d8af5523ee2ddfca241b75cf077f282249727a31cae1984e22cc76b12a72f59c" + }, + { + "path": "adapter.sha256", + "kind": "adapterDigest", + "coordinate": "jedit.text.echo-adapter/v1", + "digest": "sha256:d8af5523ee2ddfca241b75cf077f282249727a31cae1984e22cc76b12a72f59c" + } + ] +} diff --git a/edict/replace-range/vendor/jedit-text/exports.cbor b/edict/replace-range/vendor/jedit-text/exports.cbor new file mode 100644 index 00000000..552386de Binary files /dev/null and b/edict/replace-range/vendor/jedit-text/exports.cbor differ diff --git a/edict/replace-range/vendor/jedit-text/exports.sha256 b/edict/replace-range/vendor/jedit-text/exports.sha256 new file mode 100644 index 00000000..e90199e6 --- /dev/null +++ b/edict/replace-range/vendor/jedit-text/exports.sha256 @@ -0,0 +1 @@ +sha256:fb43312b13f840174fc89a0a3a6f3b3a4df53a96c4fca7d6c672214d9d703e85 diff --git a/edict/replace-range/vendor/jedit-text/manifest.cbor b/edict/replace-range/vendor/jedit-text/manifest.cbor new file mode 100644 index 00000000..0e9e2ef1 Binary files /dev/null and b/edict/replace-range/vendor/jedit-text/manifest.cbor differ diff --git a/edict/replace-range/vendor/jedit-text/manifest.sha256 b/edict/replace-range/vendor/jedit-text/manifest.sha256 new file mode 100644 index 00000000..3b2b10e7 --- /dev/null +++ b/edict/replace-range/vendor/jedit-text/manifest.sha256 @@ -0,0 +1 @@ +sha256:f385072314ea57af5b66cad9eb4119b51e456df2050ea0c9a6302c7693212dc1 diff --git a/edict/replace-range/vendor/jedit-text/verifier-rules.cbor b/edict/replace-range/vendor/jedit-text/verifier-rules.cbor new file mode 100644 index 00000000..ef8836e5 --- /dev/null +++ b/edict/replace-range/vendor/jedit-text/verifier-rules.cbor @@ -0,0 +1 @@ +¤fschemasjedit.text.schema@1lschemaDigestxGsha256:f49b0ff6c9c7010d3a72b46734d47832853f496739a083edc41dddec3431bac7oruntimeOntologyugeneric-bounded-graphworacleIsExecutableInputô \ No newline at end of file diff --git a/edict/replace-range/vendor/jedit-text/verifier-rules.sha256 b/edict/replace-range/vendor/jedit-text/verifier-rules.sha256 new file mode 100644 index 00000000..f8f7a387 --- /dev/null +++ b/edict/replace-range/vendor/jedit-text/verifier-rules.sha256 @@ -0,0 +1 @@ +sha256:364fb4ff98ae64fcd8d793aae3d7cb133ff8a1ce661330cea47688b13a0a823f diff --git a/package-lock.json b/package-lock.json index 2e8bd4e7..b336f426 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "@flyingrobots/bijou-i18n-tools-node": "7.2.0", "@flyingrobots/bijou-i18n-tools-xlsx": "7.2.0", "@types/node": "^22.0.0", + "cbor-x": "^1.6.4", "semver": "^7.8.5", "tsx": "^4.22.4", "typescript": "^5.9.3" diff --git a/package.json b/package.json index ee435370..4165064c 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "@flyingrobots/bijou-i18n-tools-node": "7.2.0", "@flyingrobots/bijou-i18n-tools-xlsx": "7.2.0", "@types/node": "^22.0.0", + "cbor-x": "^1.6.4", "semver": "^7.8.5", "tsx": "^4.22.4", "typescript": "^5.9.3"