Skip to content

Bind external requests to canonical schema resources - #181

Merged
flyingrobots merged 6 commits into
mainfrom
task/180-bind-workspace-patch-schema-artifacts
Jul 30, 2026
Merged

Bind external requests to canonical schema resources#181
flyingrobots merged 6 commits into
mainfrom
task/180-bind-workspace-patch-schema-artifacts

Conversation

@flyingrobots

Copy link
Copy Markdown
Owner

Plain-English Walkthrough

TL;DR

External-action source no longer pins placeholder schema or reconciliation digests. [claim:real-request-resources, confidence:1.00] The owning generator now emits canonical input-schema, settlement-schema, and reconciliation-law artifacts for both workspace observation and validated patch requests; the public application build independently validates their shape, recomputes their domain-framed identities, and requires the configured set to equal the compiler-emitted Target request closure.

Invalid resource closures fail before Core or Target IR publication. [claim:fail-closed-resource-closure, confidence:1.00] Missing, duplicate, disconnected, substituted, opaque, non-canonical, sentinel, fixed-seed mutated, and over-budget resource sets have executable rejection witnesses.

Walkthrough

Previously, Core and Target IR faithfully preserved schema and reconciliation coordinates, but the workspace fixtures bound those coordinates to repeated-byte placeholder digests. A caller could therefore present compiler-consistent request artifacts without presenting the real resources those identities claimed to name.

edict.application/v1 now accepts externalActionResources, a bounded list of canonical resource artifact paths. Each artifact declares its coordinate, resource kind, and closed definition under edict.external-action-resource/v1. The build decodes canonical CBOR, validates the schema or reconciliation meta-contract, recomputes the exact domain-framed SHA-256 identity, and compares it to the request slot that cited it. [claim:independent-resource-admission, confidence:1.00]

The authority and data flow is:

flowchart LR
    S[Edict source request] --> C[Compiler Core and Target IR]
    G[Generator-owned resource artifacts] --> A[Public build admission]
    C --> A
    A -->|exact complete closure| P[Publish Core and Target IR]
    A -->|missing or mismatched| R[Typed refusal]
Loading
Caption: External request resource admission
  1. Source pins each schema and reconciliation resource identity.
  2. The owning generator emits the canonical resource bytes and regenerates Core and Target IR.
  3. The public build independently derives each resource identity and compares the supplied set with the Target request closure.
  4. Publication is reachable only from an exact complete closure; invalid closure states terminate in a refusal.

This keeps request description separate from performance authority. The new artifacts contain declarative schemas and reconciliation bindings only. No provider component is invoked, no filesystem capability enters Edict semantics, and no adapter operation is performed. [claim:no-performance-authority, confidence:1.00]

Both workspace fixture families are regenerated through cargo xtask lawpack-goldens --write, so the checked source, resource sidecars, Core, and Target IR remain one generator-owned closure. [claim:generator-owned-closure, confidence:1.00] No dependency was added.

Compatibility impact is explicit: external-action application manifests must list every request resource in externalActionResources, and consumers must repin the regenerated Core/Target artifacts. Executable-operation manifests reject a non-empty external resource list. The field is capped at 192 artifacts, matching three distinct resources for a 64-request closure.

RED / GREEN

RED:

cargo test -p edict-cli --bin edict public_external_action_build_rejects_sentinel_resource_identities -- --nocapture

The test failed because build_application returned success for repeated-byte request resource identities.

GREEN:

cargo xtask verify

The full repository gate passed at 663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13: formatting, strict all-feature clippy, workspace and doc tests, every owned golden check, provider fixtures and contract packs, provider dependency boundary, topic contracts, and diff checks.

Appendix: Citations
Claim Evidence Confidence Notes
claim:real-request-resources xtask/src/lawpack_goldens.rs#1416@663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13; xtask/src/lawpack_goldens.rs#1490@663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13; xtask/src/lawpack_goldens.rs#1551@663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13 1.00 Generator constructs canonical typed resources for both request families.
claim:fail-closed-resource-closure crates/edict-cli/src/application_build.rs#849@663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13; public_external_action_build_rejects_sentinel_resource_identities at crates/edict-cli/src/application_build.rs#2600@663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13; fixed_seed_request_resource_mutations_fail_closed at crates/edict-cli/src/application_build.rs#2800@663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13 1.00 Exact, sentinel, property, and closure refusal paths are executable.
claim:independent-resource-admission crates/edict-cli/src/application_build.rs#482@663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13; crates/edict-cli/src/application_build.rs#535@663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13; crates/edict-cli/src/application_build.rs#799@663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13 1.00 Loading, meta-validation, and request-closure derivation are separate checks.
claim:no-performance-authority docs/topics/external-action-requests/README.md#69@663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13; docs/topics/external-action-requests/README.md#102@663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13 1.00 Durable topic contract states the request-only authority boundary.
claim:generator-owned-closure xtask/src/lawpack_goldens.rs#177@663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13; xtask/src/lawpack_goldens.rs#472@663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13; lawpack_goldens_match_executable_codec plus cargo xtask verify at 663148a1ba1afbdbdf2ea9a7ba6da40d2e9a5d13 1.00 Owning generator and check mode reproduce all checked bytes.

Closes #180.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@flyingrobots

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@flyingrobots

Copy link
Copy Markdown
Owner Author

@codex please review

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@flyingrobots, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 34 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: f67b318a-ce98-4b35-87ba-fc35c33db836

📥 Commits

Reviewing files that changed from the base of the PR and between 663148a and 3148f0a.

📒 Files selected for processing (9)
  • CHANGELOG.md
  • crates/edict-cli/src/application_build.rs
  • crates/edict-syntax/src/canonical.rs
  • crates/edict-syntax/src/lib.rs
  • docs/topics/cli/README.md
  • docs/topics/cli/test-plan.md
  • docs/topics/external-action-requests/test-plan.md
  • fixtures/lawpack/workspace-patch/README.md
  • xtask/src/lawpack_goldens.rs

Summary by CodeRabbit

  • New Features

    • External-action builds now validate canonical, digest-locked resource artifacts before publication.
    • Added support for input schemas, settlement schemas, and reconciliation laws through explicit resource listings.
    • Added a maximum limit of 192 external-action resources.
  • Bug Fixes

    • Builds now reject missing, duplicate, disconnected, substituted, opaque, malformed, placeholder, or mutated resources.
  • Documentation

    • Updated CLI, external-action, fixture, and test-plan documentation with the strengthened validation contract.

Walkthrough

External-action builds now require generator-owned canonical CBOR resource artifacts. The CLI loads and independently validates bounded externalActionResources closures, matches them to digest-locked requests, and updates Lawpack fixtures, golden outputs, documentation, and refusal tests.

Changes

External-action resource validation

Layer / File(s) Summary
Canonical resource generation
xtask/src/lawpack_goldens.rs
Generates input schemas, settlement schemas, reconciliation laws, domain-separated digests, and updated Core/Target IR goldens for workspace snapshot and patch applications.
Build loading and closure validation
crates/edict-cli/src/application_build.rs
Loads canonical resource artifacts from the manifest, validates their structures and digests, enforces the 192-resource limit, and requires an exact request-referenced closure.
Validation fixtures and tests
crates/edict-cli/src/application_build.rs, fixtures/lawpack/...
Adds resource fixtures and tests for valid builds, placeholder or mutated identities, opaque and non-canonical definitions, missing or disconnected resources, duplicates, and boundary overflow.
CLI and external-action contracts
CHANGELOG.md, docs/topics/cli/*, docs/topics/external-action-requests/*, fixtures/lawpack/*/README.md
Documents canonical resource resolution, rejection conditions, provider non-invocation, atomic publication, and updated digest-locked request examples.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related issues

  • flyingrobots/edict#180 — Covers generator-owned workspace-patch schema artifacts, sentinel replacement, and build-time resource substitution rejection.

Possibly related PRs

  • flyingrobots/edict#179 — Directly overlaps the Lawpack resource generation and external-action schema/digest validation flow.
  • flyingrobots/edict#177 — Extends the same request-only external-action build and canonical publication pipeline.
  • flyingrobots/edict#170 — Provides the related verified build_application provider lowerer/verifier flow.

Poem

Three schemas march in canonical light,
Their digests guard the build outright.
No ghosts, no gaps, no borrowed claim—
The closure locks each artifact’s name.
Core and Target rise only when true.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately summarizes the main change: binding external requests to canonical schema resources.
Description check ✅ Passed The description is directly related to the changeset and explains the new canonical external-action resource flow.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/edict-cli/src/application_build.rs`:
- Around line 2799-2848: Replace
fixed_seed_request_resource_mutations_fail_closed with a single representative
mutation, removing RESOURCE_MUTATION_SEED and the ordinal loop, since every
iteration currently changes only definition.root and asserts the same outcome.
Keep the existing temp-tree setup, artifact mutation, build_application call,
and ExternalActionResourceClosureMismatch assertion for that one case.
- Around line 43-44: Centralize EXTERNAL_ACTION_RESOURCE_API_VERSION and
EXTERNAL_ACTION_RESOURCE_DIGEST_DOMAIN as pub const values in
edict-syntax/src/canonical.rs beside the existing digest-domain constants, and
re-export them from the edict_syntax crate root. In
crates/edict-cli/src/application_build.rs lines 43-44 and
xtask/src/lawpack_goldens.rs lines 15-17, remove the local duplicate constants
and import both shared symbols from edict_syntax; leave DIGEST_FRAME unchanged
in xtask.
- Around line 519-521: Replace the unreachable! branch in the build path around
the definition field lookup with the existing ApplicationBuildFailure
constructor, returning a structured failure with the appropriate stable error
kind when "definition" is absent. Preserve the successful field extraction and
avoid relying on the fields.get call being guaranteed by the string-literal
field set.
- Around line 2785-2792: Update the refusal-case table and its assertion in the
relevant test so each case carries its expected failure kind: missing,
duplicate, and disconnected must require ExternalActionResourceClosureMismatch,
while noncanonical must require InvalidExternalActionResource. Replace the broad
matches! acceptance with an equality check against the case-specific
expectation, preserving the existing failure reporting.

In `@docs/topics/external-action-requests/test-plan.md`:
- Around line 82-86: Standardize this rejection class on “sentinel” terminology,
preserving EXTREQ-TP-026 in
docs/topics/external-action-requests/test-plan.md:82-86 as the canonical
wording. Update the corresponding “placeholder identities” wording in
docs/topics/cli/test-plan.md:106-107, docs/topics/cli/README.md:97-107, and
CHANGELOG.md:13-18 to use “sentinel” consistently, including the related
resource descriptions.

In `@fixtures/lawpack/workspace-patch/README.md`:
- Around line 14-20: Add [claim:<id>, confidence:<value>] tags to the first
occurrences of the technical claims in the README section, and append the
required collapsed citations appendix. Cite xtask/src/lawpack_goldens.rs:478-583
and the repository-relative loader implementation that validates the complete
closure, including line ranges and Git SHAs.

In `@xtask/src/lawpack_goldens.rs`:
- Around line 433-438: Update xtask/src/lawpack_goldens.rs:433-438
workspace_snapshot_application_source and xtask/src/lawpack_goldens.rs:731-736
workspace_patch_application_source to accept GeneratedExternalActionResource
references instead of loose digest strings; add coordinate: String to
GeneratedExternalActionResource at xtask/src/lawpack_goldens.rs:185-199 and
populate it from external_action_resource; update callers at
xtask/src/lawpack_goldens.rs:226-233 to pass resource values, and make both
templates use each resource’s coordinate and digest rather than duplicated
hardcoded coordinates (snapshot sites 461, 463, 470; patch sites 759, 761, 768).
- Around line 1452-1458: Update the non-Lowered branch after lower_to_target_ir
in the lawpack golden generation flow to include the returned failures
diagnostics in the error message, following the existing build_application
pattern. Preserve the status reporting while formatting the failures payload so
callers receive the underlying causes instead of only TargetLoweringStatus.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8157d51d-ebf1-4e15-9322-913261e048b0

📥 Commits

Reviewing files that changed from the base of the PR and between cf8c17f and 663148a.

📒 Files selected for processing (31)
  • CHANGELOG.md
  • crates/edict-cli/src/application_build.rs
  • docs/topics/cli/README.md
  • docs/topics/cli/test-plan.md
  • docs/topics/external-action-requests/README.md
  • docs/topics/external-action-requests/test-plan.md
  • fixtures/lawpack/workspace-patch/README.md
  • fixtures/lawpack/workspace-patch/apply-validated-patch.core.cbor
  • fixtures/lawpack/workspace-patch/apply-validated-patch.core.sha256
  • fixtures/lawpack/workspace-patch/apply-validated-patch.edict
  • fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.cbor
  • fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.sha256
  • fixtures/lawpack/workspace-patch/input-schema.cbor
  • fixtures/lawpack/workspace-patch/input-schema.sha256
  • fixtures/lawpack/workspace-patch/reconciliation-law.cbor
  • fixtures/lawpack/workspace-patch/reconciliation-law.sha256
  • fixtures/lawpack/workspace-patch/settlement-schema.cbor
  • fixtures/lawpack/workspace-patch/settlement-schema.sha256
  • fixtures/lawpack/workspace-snapshot/README.md
  • fixtures/lawpack/workspace-snapshot/input-schema.cbor
  • fixtures/lawpack/workspace-snapshot/input-schema.sha256
  • fixtures/lawpack/workspace-snapshot/observe-workspace.core.cbor
  • fixtures/lawpack/workspace-snapshot/observe-workspace.core.sha256
  • fixtures/lawpack/workspace-snapshot/observe-workspace.edict
  • fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.cbor
  • fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.sha256
  • fixtures/lawpack/workspace-snapshot/reconciliation-law.cbor
  • fixtures/lawpack/workspace-snapshot/reconciliation-law.sha256
  • fixtures/lawpack/workspace-snapshot/settlement-schema.cbor
  • fixtures/lawpack/workspace-snapshot/settlement-schema.sha256
  • xtask/src/lawpack_goldens.rs
📜 Review details
⏰ Context from checks skipped due to timeout. (3)
  • GitHub Check: supply-chain (cargo-deny)
  • GitHub Check: rust stable (fmt · clippy · test)
  • GitHub Check: rust msrv 1.94.0 (fmt · clippy · test)
🧰 Additional context used
📓 Path-based instructions (6)
**/*

📄 CodeRabbit inference engine (AGENTS.md)

**/*: Never amend Git commits, use git rebase without explicit user approval, or force any Git operation; use new commits and regular merge commits instead.
Do not create draft pull requests, and never use a codex prefix in branch names, pull request titles, or commit messages.
Pull requests for issue work must include GitHub auto-close text such as Closes #123`` for every issue they intend to close.
Use codex-think --remember --json when starting a session, entering the repository, or regaining context, and record significant durable events with `codex-think "..." --json`. Treat Think as memory rather than repository truth.
Every pull request body must contain `## Plain-English Walkthrough` with `### TL;DR` and `### Walkthrough`, explaining the prior behavior, new model and dataflow, invariants, failures, compatibility, and verification as applicable.
Use Mermaid diagrams for nontrivial flow, lifecycle, ownership, or component interaction when clearer than prose; every diagram requires an introductory paragraph, the diagram, the exact collapsed caption structure, and a concluding interpretation.
Tag each material technical claim at first occurrence as `[claim:, confidence:]`, cite evidence using repository-relative paths, line numbers, and Git SHAs, and end the explanatory body with a collapsed citations appendix.
If CodeRabbit is actively reviewing, obtain its approval before merge; if unavailable due to limits or credits, request `@codex review please` and wait for the alternate response. Do not treat unavailability as approval unless a maintainer explicitly overrides the gate.
For release preparation, write the release thesis first, reconcile changes from the previous tag, update release policy and tests, verify the milestone has no open issues and no unauthorized crates.io publication occurred, and record a durable release report.
Run `cargo xtask verify` before claiming a branch is ready.

Files:

  • fixtures/lawpack/workspace-patch/input-schema.sha256
  • fixtures/lawpack/workspace-patch/reconciliation-law.sha256
  • fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.sha256
  • fixtures/lawpack/workspace-snapshot/settlement-schema.sha256
  • fixtures/lawpack/workspace-patch/apply-validated-patch.edict
  • fixtures/lawpack/workspace-snapshot/reconciliation-law.cbor
  • fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.sha256
  • fixtures/lawpack/workspace-snapshot/input-schema.sha256
  • fixtures/lawpack/workspace-snapshot/input-schema.cbor
  • fixtures/lawpack/workspace-snapshot/reconciliation-law.sha256
  • fixtures/lawpack/workspace-snapshot/observe-workspace.core.sha256
  • fixtures/lawpack/workspace-snapshot/observe-workspace.edict
  • fixtures/lawpack/workspace-patch/settlement-schema.cbor
  • fixtures/lawpack/workspace-snapshot/settlement-schema.cbor
  • fixtures/lawpack/workspace-patch/reconciliation-law.cbor
  • fixtures/lawpack/workspace-patch/README.md
  • fixtures/lawpack/workspace-patch/input-schema.cbor
  • fixtures/lawpack/workspace-patch/settlement-schema.sha256
  • fixtures/lawpack/workspace-patch/apply-validated-patch.core.sha256
  • fixtures/lawpack/workspace-snapshot/observe-workspace.core.cbor
  • CHANGELOG.md
  • docs/topics/cli/README.md
  • docs/topics/external-action-requests/test-plan.md
  • fixtures/lawpack/workspace-patch/apply-validated-patch.core.cbor
  • fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.cbor
  • fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.cbor
  • docs/topics/cli/test-plan.md
  • docs/topics/external-action-requests/README.md
  • fixtures/lawpack/workspace-snapshot/README.md
  • xtask/src/lawpack_goldens.rs
  • crates/edict-cli/src/application_build.rs
**/*.{rs,md}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{rs,md}: Tests must assert software behavior and stable error kinds or structured artifacts, not implementation details, prose, paths, or merely is_err(); documentation-tool tests may test validator behavior.
For nontrivial behavior, contract, workflow, release, schema, validation, or public-surface changes, follow RED/GREEN TDD: update the owning test-plan.md, write the deterministic test first, observe the RED failure, implement the smallest coherent fix, then mark the case implemented only after executable evidence exists.

Files:

  • fixtures/lawpack/workspace-patch/README.md
  • CHANGELOG.md
  • docs/topics/cli/README.md
  • docs/topics/external-action-requests/test-plan.md
  • docs/topics/cli/test-plan.md
  • docs/topics/external-action-requests/README.md
  • fixtures/lawpack/workspace-snapshot/README.md
  • xtask/src/lawpack_goldens.rs
  • crates/edict-cli/src/application_build.rs
**/*.{md,mdx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{md,mdx}: Documentation pages must have one primary reader job, separate user task help from contributor architecture and evidence maps, use concrete valid examples with expected results when relevant, and keep exact public facts in validated or generated reference material.
Update affected documentation in the same change as behavior, schema, release, workflow, or public-surface changes, or state docs-impact: none with a concise rationale.

Files:

  • fixtures/lawpack/workspace-patch/README.md
  • CHANGELOG.md
  • docs/topics/cli/README.md
  • docs/topics/external-action-requests/test-plan.md
  • docs/topics/cli/test-plan.md
  • docs/topics/external-action-requests/README.md
  • fixtures/lawpack/workspace-snapshot/README.md
**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Use tables for consistent-shape comparisons and evidence, bullets for unordered sets, numbered lists for ordered procedures or states, and focused branch-accurate snippets for exact syntax.

Files:

  • fixtures/lawpack/workspace-patch/README.md
  • CHANGELOG.md
  • docs/topics/cli/README.md
  • docs/topics/external-action-requests/test-plan.md
  • docs/topics/cli/test-plan.md
  • docs/topics/external-action-requests/README.md
  • fixtures/lawpack/workspace-snapshot/README.md
docs/topics/**

📄 CodeRabbit inference engine (AGENTS.md)

docs/topics/**: Topic shelves document landed behavior: README.md describes current HEAD truth, test-plan.md records verification and known gaps, and optional architecture or rationale pages contain durable supporting information.
For every nontrivial behavior, contract, workflow, release, schema, validation, or public-surface change, identify or create the owning topic shelf, update test-plan.md, add executable evidence, update README.md only after behavior exists, and run cargo xtask verify.
Do not update topic shelves for purely mechanical edits that do not change a contract; explain the omission in the pull request or final report.

Files:

  • docs/topics/cli/README.md
  • docs/topics/external-action-requests/test-plan.md
  • docs/topics/cli/test-plan.md
  • docs/topics/external-action-requests/README.md
**/*.rs

📄 CodeRabbit inference engine (AGENTS.md)

**/*.rs: For Rust changes, preserve claim integrity by providing executable evidence, keep compiler and validation paths deterministic and free of hidden I/O, and prefer structured public failures with stable error kinds over prose-only diagnostics.
Do not add Rust dependencies without pull-request rationale and contract-impact notes; treat planned lint, dependency, and fuzzing ratchets as planned until executable checks land.

Files:

  • xtask/src/lawpack_goldens.rs
  • crates/edict-cli/src/application_build.rs
🔇 Additional comments (47)
docs/topics/cli/README.md (1)

80-84: LGTM!

docs/topics/cli/test-plan.md (1)

46-46: LGTM!

docs/topics/external-action-requests/README.md (5)

18-18: LGTM!


27-32: LGTM!


70-75: LGTM!


85-103: Steps verified against load_external_action_resource/external_action_resource.

Decode → meta-contract validation → digest recompute → exact-closure requirement sequence matches the implementation.


104-111: LGTM!

docs/topics/external-action-requests/test-plan.md (2)

41-41: LGTM!


53-53: LGTM!

xtask/src/lawpack_goldens.rs (5)

80-91: LGTM!

Also applies to: 116-127


147-157: LGTM!


256-288: LGTM!

Also applies to: 550-582


1416-1433: LGTM!


1459-1488: LGTM!

Also applies to: 1490-1696

crates/edict-cli/src/application_build.rs (13)

45-46: LGTM!


71-81: LGTM!


107-137: LGTM!


171-172: LGTM!

Also applies to: 341-345


460-480: LGTM!


482-518: LGTM!

Also applies to: 522-533


535-635: LGTM!


637-727: LGTM!


729-738: LGTM!

Also applies to: 764-770


799-847: LGTM!


1005-1020: LGTM!

Also applies to: 1036-1041


2395-2412: LGTM!

Also applies to: 2459-2536, 2599-2711, 2850-2911, 3275-3311, 3359-3377, 3447-3451, 3784-3784


849-894: 🔒 Security & Privacy

No change needed.

The external-action resource closure is bidirectional and bounded: every required resource is looked up and compared by coordinate, kind, and canonical digest; any configured resource not in the closure is rejected as disconnected. Coordinate uniqueness is enforced before loading, and digest literals are case-normalized before this comparison.

fixtures/lawpack/workspace-snapshot/observe-workspace.edict (1)

23-32: LGTM!

fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.cbor (1)

1-2: LGTM!

fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.sha256 (1)

1-1: LGTM!

fixtures/lawpack/workspace-snapshot/reconciliation-law.cbor (1)

1-1: LGTM!

fixtures/lawpack/workspace-snapshot/reconciliation-law.sha256 (1)

1-1: LGTM!

fixtures/lawpack/workspace-snapshot/settlement-schema.cbor (1)

1-1: LGTM!

fixtures/lawpack/workspace-snapshot/settlement-schema.sha256 (1)

1-1: LGTM!

fixtures/lawpack/workspace-patch/apply-validated-patch.core.cbor (1)

4-4: LGTM!

fixtures/lawpack/workspace-patch/apply-validated-patch.core.sha256 (1)

1-1: 🗄️ Data Integrity & Integration

Verify every changed checksum sidecar.

Recompute each hash from its paired final binary before merge.

  • fixtures/lawpack/workspace-patch/apply-validated-patch.core.sha256#L1-L1: compare against apply-validated-patch.core.cbor.
  • fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.sha256#L1-L1: compare against apply-validated-patch.target-ir.cbor.
  • fixtures/lawpack/workspace-snapshot/observe-workspace.core.sha256#L1-L1: compare against observe-workspace.core.cbor.
fixtures/lawpack/workspace-patch/apply-validated-patch.edict (1)

23-32: 🗄️ Data Integrity & Integration

Verify the complete digest-locked resource closure.

The manifest pins digests that must be computed from the exact canonical resource bytes; validate the entire closure with the generator and external-action build tests.

  • fixtures/lawpack/workspace-patch/apply-validated-patch.edict#L23-L32: verify the input, settlement, and reconciliation digests against their generated sidecars.
  • fixtures/lawpack/workspace-patch/input-schema.cbor#L1-L1: verify canonical CBOR, resource-definition validity, and equality with the pinned input-schema digest.
fixtures/lawpack/workspace-patch/apply-validated-patch.target-ir.cbor (1)

2-3: LGTM!

fixtures/lawpack/workspace-snapshot/observe-workspace.core.cbor (1)

1-2: LGTM!

fixtures/lawpack/workspace-patch/input-schema.sha256 (1)

1-1: LGTM!

fixtures/lawpack/workspace-patch/reconciliation-law.cbor (1)

1-1: LGTM!

fixtures/lawpack/workspace-patch/reconciliation-law.sha256 (1)

1-1: LGTM!

fixtures/lawpack/workspace-patch/settlement-schema.cbor (1)

1-1: LGTM!

fixtures/lawpack/workspace-patch/settlement-schema.sha256 (1)

1-1: LGTM!

fixtures/lawpack/workspace-snapshot/README.md (1)

21-27: LGTM!

fixtures/lawpack/workspace-snapshot/input-schema.cbor (1)

1-1: LGTM!

fixtures/lawpack/workspace-snapshot/input-schema.sha256 (1)

1-1: LGTM!

Comment thread crates/edict-cli/src/application_build.rs Outdated
Comment thread crates/edict-cli/src/application_build.rs Outdated
Comment thread crates/edict-cli/src/application_build.rs Outdated
Comment thread crates/edict-cli/src/application_build.rs
Comment thread docs/topics/external-action-requests/test-plan.md
Comment thread fixtures/lawpack/workspace-patch/README.md Outdated
Comment thread xtask/src/lawpack_goldens.rs
Comment thread xtask/src/lawpack_goldens.rs
@flyingrobots

Copy link
Copy Markdown
Owner Author

Merge gate opened at 3148f0a: stable, MSRV, and cargo-deny checks pass; CodeRabbit approved the current head; zero unresolved review threads remain; local cargo xtask verify passes. main is unprotected and the repository has one direct collaborator, the author. Criteria 1–4 therefore substitute for a separate human approval under the recorded solo-maintainer rule.

@flyingrobots
flyingrobots merged commit df80f92 into main Jul 30, 2026
4 checks passed
@flyingrobots
flyingrobots deleted the task/180-bind-workspace-patch-schema-artifacts branch July 30, 2026 12:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bind workspace patch requests to real schema artifacts

1 participant