Publish canonical external request application artifacts - #177
Conversation
|
@coderabbitai review |
|
@codex please review |
✅ Action performedReview finished.
|
Summary by CodeRabbit
WalkthroughAdds an explicit ChangesExternal-action application build
Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant Client
participant build_application
participant LawpackAdapter
participant TargetIrArtifact
participant OutputPublisher
Client->>build_application: submit application manifest
build_application->>LawpackAdapter: validate lawpack closure and profile bindings
build_application->>TargetIrArtifact: compile and lower source
TargetIrArtifact-->>build_application: canonical Core and Target IR
build_application->>OutputPublisher: publish core.cbor and target-ir.cbor
Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
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. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4bb1cbc5d0
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Actionable comments posted: 9
🤖 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 455-483: Clarify or enforce the operation-coordinate invariant
used by validate_external_action_artifacts: the current rsplit_once('@') and
id-prefix checks incorrectly reject valid lawpack operations and classify
malformed coordinates as closure substitution. Either document and validate this
coordinate schema at the lawpack ABI boundary, or change the substituted
detection to use digest-only binding and report malformed coordinates through a
separate validation error.
- Around line 1479-1549: Update the rollback publication flow around the
output-building function to derive published recovery entries from the `outputs`
slice rather than assuming exactly two items. Change the `outputs` and
`obsolete` parameters from fixed-size arrays to slices, size `destinations` from
the slice lengths, and replace the hard-coded reverse indices with a reverse
iteration over `outputs` zipped to the corresponding published recovery entries
and staged paths. Preserve publishing in reverse order and keep obsolete
recoveries excluded from publication.
In `@crates/edict-syntax/src/lawpack_adapter.rs`:
- Around line 65-70: Add concise doc comments to the budget_obligation and
target_configuration fields of LawpackAdapterOperationProfile, documenting that
both are mandatory when semantic_effects is empty (request-only profiles) and
optional otherwise. Keep the validation behavior in validate_adapter_closure
unchanged.
In `@crates/edict-syntax/tests/lawpack.rs`:
- Around line 275-410: Extract the duplicated request-only adapter construction
from the three tests into a shared request_only_adapter helper, parameterized by
optional budgetObligation and whether to include targetConfiguration. Update
request_only_profile_supplies_budget_without_callable_effect_authority,
request_only_profile_requires_an_exact_budget_obligation, and
request_only_profile_requires_an_exact_target_configuration to use the helper
while preserving each test’s existing setup and assertions.
In `@docs/REQUIREMENTS.md`:
- Line 71: Update the ID Scheme section of REQUIREMENTS.md to declare the
EDICT-CLI domain alongside the existing legal prefixes before retaining the new
EDICT-CLI-EXTERNAL-REQUEST-BUILD-001 requirement row. Keep the row’s identifier
unchanged and ensure the domain declaration explicitly covers CLI requirements.
In `@docs/topics/cli/README.md`:
- Around line 79-90: The request-only route documentation must explain why the
example still requires providerPackage: it is used only to load and verify the
provider manifest and target-profile artifact, not to invoke a provider
component. Add this clarification near the example and state that omitting
providerPackage causes InvalidApplicationConfig, while preserving the existing
no-component-host behavior.
In `@docs/topics/cli/test-plan.md`:
- Line 45: Reconcile the CLI-REQ-015 status with its available evidence: because
CLI-TP-028 remains planned and no automated executable-provider fixture exists,
do not mark the executable build route implemented based only on CLI-TP-027.
Either reference a test that witnesses the full lowerer/verifier/provider-host
and output crossing, or restore the prior status and leave the externalAction
scope unchanged.
In `@docs/topics/external-action-requests/test-plan.md`:
- Line 71: Add a Fixtures-table row documenting the publication-determinism
corpus seed used by
external_action_pair_publication_is_deterministic_for_a_fixed_seed_corpus,
including the STRESS_SEED value from application_build.rs. Ensure EXTREQ-TP-018
and the Determinism Obligations section reference this recorded seed explicitly.
In `@fixtures/providers/echo-target-profile/README.md`:
- Around line 6-17: Convert the Provenance evidence block in the README from
bullet points to a two-column table with consistent labels and values for
repository, source commit, source path, generator identity, Edict domain-framed
identity, and raw file SHA-256; preserve all existing values unchanged.
🪄 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: 48353942-39bf-45eb-ab3a-480aa897f674
⛔ Files ignored due to path filters (1)
fixtures/providers/echo-target-profile/generated/primary/target-profile.echo-dpo.cboris excluded by!**/generated/**
📒 Files selected for processing (32)
CHANGELOG.mdREADME.mdcrates/edict-cli/src/application_build.rscrates/edict-syntax/src/lawpack_adapter.rscrates/edict-syntax/tests/lawpack.rsdocs/REQUIREMENTS.mddocs/abi/edict-lawpack-adapter.cddldocs/topics/README.mddocs/topics/cli/README.mddocs/topics/cli/test-plan.mddocs/topics/external-action-requests/README.mddocs/topics/external-action-requests/test-plan.mddocs/topics/lawpacks/README.mddocs/topics/lawpacks/test-plan.mdfixtures/lawpack/workspace-snapshot/README.mdfixtures/lawpack/workspace-snapshot/adapter.cborfixtures/lawpack/workspace-snapshot/adapter.sha256fixtures/lawpack/workspace-snapshot/exports.cborfixtures/lawpack/workspace-snapshot/exports.sha256fixtures/lawpack/workspace-snapshot/manifest.cborfixtures/lawpack/workspace-snapshot/manifest.sha256fixtures/lawpack/workspace-snapshot/observe-workspace.core.cborfixtures/lawpack/workspace-snapshot/observe-workspace.core.sha256fixtures/lawpack/workspace-snapshot/observe-workspace.edictfixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.cborfixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.sha256fixtures/lawpack/workspace-snapshot/request-profile-configuration.cborfixtures/lawpack/workspace-snapshot/request-profile-configuration.sha256fixtures/provider-contracts/v1/edict-provider-contracts.cddlfixtures/provider-contracts/v1/manifest.jsonfixtures/providers/echo-target-profile/README.mdxtask/src/lawpack_goldens.rs
📜 Review details
⏰ Context from checks skipped due to timeout. (3)
- GitHub Check: rust msrv 1.94.0 (fmt · clippy · test)
- GitHub Check: rust stable (fmt · clippy · test)
- GitHub Check: supply-chain (cargo-deny)
🧰 Additional context used
📓 Path-based instructions (6)
**/*
📄 CodeRabbit inference engine (AGENTS.md)
**/*: Never amend Git commits, usegit rebasewithout 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 acodexprefix in branch names, pull request titles, or commit messages.
Pull requests for issue work must include GitHub auto-close text such asCloses#123`` for every issue they intend to close.
Usecodex-think --remember --jsonwhen 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-snapshot/manifest.sha256fixtures/lawpack/workspace-snapshot/adapter.sha256fixtures/lawpack/workspace-snapshot/exports.sha256fixtures/lawpack/workspace-snapshot/observe-workspace.core.sha256docs/topics/README.mdREADME.mdfixtures/lawpack/workspace-snapshot/request-profile-configuration.cborfixtures/lawpack/workspace-snapshot/request-profile-configuration.sha256fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.sha256fixtures/lawpack/workspace-snapshot/exports.cborfixtures/providers/echo-target-profile/README.mdfixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.cbordocs/REQUIREMENTS.mddocs/abi/edict-lawpack-adapter.cddlfixtures/lawpack/workspace-snapshot/manifest.cborfixtures/lawpack/workspace-snapshot/README.mdfixtures/provider-contracts/v1/edict-provider-contracts.cddlfixtures/provider-contracts/v1/manifest.jsonCHANGELOG.mddocs/topics/external-action-requests/test-plan.mdfixtures/lawpack/workspace-snapshot/observe-workspace.edictfixtures/lawpack/workspace-snapshot/adapter.cborfixtures/lawpack/workspace-snapshot/observe-workspace.core.cbordocs/topics/external-action-requests/README.mddocs/topics/lawpacks/test-plan.mddocs/topics/cli/README.mddocs/topics/lawpacks/README.mdcrates/edict-syntax/tests/lawpack.rsxtask/src/lawpack_goldens.rsdocs/topics/cli/test-plan.mdcrates/edict-syntax/src/lawpack_adapter.rscrates/edict-cli/src/application_build.rs
docs/topics/**
📄 CodeRabbit inference engine (AGENTS.md)
docs/topics/**: Topic shelves document landed behavior:README.mddescribes current HEAD truth,test-plan.mdrecords 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, updatetest-plan.md, add executable evidence, updateREADME.mdonly after behavior exists, and runcargo 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/README.mddocs/topics/external-action-requests/test-plan.mddocs/topics/external-action-requests/README.mddocs/topics/lawpacks/test-plan.mddocs/topics/cli/README.mddocs/topics/lawpacks/README.mddocs/topics/cli/test-plan.md
**/*.{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 merelyis_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 owningtest-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:
docs/topics/README.mdREADME.mdfixtures/providers/echo-target-profile/README.mddocs/REQUIREMENTS.mdfixtures/lawpack/workspace-snapshot/README.mdCHANGELOG.mddocs/topics/external-action-requests/test-plan.mddocs/topics/external-action-requests/README.mddocs/topics/lawpacks/test-plan.mddocs/topics/cli/README.mddocs/topics/lawpacks/README.mdcrates/edict-syntax/tests/lawpack.rsxtask/src/lawpack_goldens.rsdocs/topics/cli/test-plan.mdcrates/edict-syntax/src/lawpack_adapter.rscrates/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 statedocs-impact: nonewith a concise rationale.
Files:
docs/topics/README.mdREADME.mdfixtures/providers/echo-target-profile/README.mddocs/REQUIREMENTS.mdfixtures/lawpack/workspace-snapshot/README.mdCHANGELOG.mddocs/topics/external-action-requests/test-plan.mddocs/topics/external-action-requests/README.mddocs/topics/lawpacks/test-plan.mddocs/topics/cli/README.mddocs/topics/lawpacks/README.mddocs/topics/cli/test-plan.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:
docs/topics/README.mdREADME.mdfixtures/providers/echo-target-profile/README.mddocs/REQUIREMENTS.mdfixtures/lawpack/workspace-snapshot/README.mdCHANGELOG.mddocs/topics/external-action-requests/test-plan.mddocs/topics/external-action-requests/README.mddocs/topics/lawpacks/test-plan.mddocs/topics/cli/README.mddocs/topics/lawpacks/README.mddocs/topics/cli/test-plan.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:
crates/edict-syntax/tests/lawpack.rsxtask/src/lawpack_goldens.rscrates/edict-syntax/src/lawpack_adapter.rscrates/edict-cli/src/application_build.rs
🧠 Learnings (3)
📚 Learning: 2026-07-29T12:58:15.297Z
Learnt from: flyingrobots
Repo: flyingrobots/edict PR: 174
File: fixtures/provider-contracts/v1/edict-provider-contracts.cddl:798-829
Timestamp: 2026-07-29T12:58:15.297Z
Learning: When reviewing CDDL schema files and generated provider-contract fixtures for Rust result projections, ensure the schema-expressible bounds match what the authoritative decoder enforces: `maxOutputBytes` must be positive; root-record fields must be ≤ 255; source-path segments must be ≤ 32. Also verify the decoder’s non-CDDL-global runtime limits are respected/consistent—specifically the 256 recursive expression-node limit and the 64 KiB canonical artifact-byte limit—so the CDDL constraints don’t drift from `crates/edict-syntax/src/result_projection.rs`.
Applied to files:
docs/abi/edict-lawpack-adapter.cddlfixtures/provider-contracts/v1/edict-provider-contracts.cddl
📚 Learning: 2026-07-29T12:58:25.905Z
Learnt from: flyingrobots
Repo: flyingrobots/edict PR: 174
File: fixtures/provider-contracts/v1/edict-provider-contracts.cddl:798-829
Timestamp: 2026-07-29T12:58:25.905Z
Learning: When reviewing Edict result projection CDDL fixtures (e.g., provider-contracts/*/edict-provider-contracts.cddl generated from docs/abi/edict-result-projection.cddl), ensure the CDDL enforces only the CDDL-expressible *local* bounds: `maxOutputBytes` must be positive, records must have at most 255 fields, source-paths must have at most 32 segments, and text length limits must be present. Do not rely on (or duplicate) global limits for recursive expression nodes and total canonical-artifact bytes in CDDL; those *global* limits are intentionally enforced during authoritative decode/verification by `crates/edict-syntax/src/result_projection.rs`, which is invoked by `crates/edict-cli/src/application_build.rs` before provider binding.
Applied to files:
fixtures/provider-contracts/v1/edict-provider-contracts.cddl
📚 Learning: 2026-07-29T12:58:32.500Z
Learnt from: flyingrobots
Repo: flyingrobots/edict PR: 174
File: fixtures/provider-contracts/v1/edict-provider-contracts.cddl:798-829
Timestamp: 2026-07-29T12:58:32.500Z
Learning: When reviewing CDDL artifacts for `edict.result-projection/v1` (both `docs/abi/edict-result-projection.cddl` and the generated `fixtures/provider-contracts/v1/edict-provider-contracts.cddl`), ensure the CDDL-expressible bounds remain correct: `maxOutputBytes` must be positive, each record must have at most 255 fields, and each record must have at most 32 source-path segments. Also confirm reviewers understand and preserve that the whole-value constraints—(1) the 256 aggregate-expression-node limit and (2) the 64 KiB encoded-artifact limit—are enforced authoritatively in `decode_result_projection`/`verify_result_projection` (`crates/edict-syntax/src/result_projection.rs`), and that `crates/edict-cli/src/application_build.rs` independently verifies the compiler-owned projection before using it as provider semantic input. Do not assume the CDDL constraints cover those whole-value limits; keep CDDL and Rust validation logic consistent when changes are proposed.
Applied to files:
fixtures/provider-contracts/v1/edict-provider-contracts.cddl
🔇 Additional comments (38)
crates/edict-cli/src/application_build.rs (5)
51-64: LGTM!
290-313: LGTM!
769-775: LGTM!
1354-1420: LGTM!Also applies to: 1641-1668
1919-2104: LGTM!Also applies to: 2306-2497, 2525-2703
docs/topics/cli/README.md (1)
29-34: LGTM!Also applies to: 64-78, 91-99
docs/topics/external-action-requests/README.md (1)
67-83: LGTM!docs/topics/cli/test-plan.md (1)
46-46: LGTM!Also applies to: 55-56, 106-107, 126-129
docs/topics/external-action-requests/test-plan.md (1)
39-39: LGTM!Also applies to: 48-48, 68-70
README.md (1)
581-583: LGTM!CHANGELOG.md (1)
28-37: LGTM!docs/topics/README.md (1)
61-61: LGTM!docs/topics/lawpacks/README.md (1)
44-52: LGTM!Also applies to: 81-95, 118-119
docs/topics/lawpacks/test-plan.md (2)
50-53: LGTM!Also applies to: 63-63
79-79: 🩺 Stability & AvailabilityNo change needed for
LAWPACKS-TP-011.
The cited witnesses exist and assert structured failure behavior for the negative cases.crates/edict-syntax/src/lawpack_adapter.rs (4)
304-346: Parsing correctly decoupled from validation.
parse_operation_profilescorrectly treatsbudgetObligation/targetConfigurationas unconditionally optional at parse time and relaxessemanticEffectsto permit[], deferring the "required when request-only" enforcement tovalidate_adapter_closure. Consistent with the CDDL union indocs/abi/edict-lawpack-adapter.cddl(lines 23-35).
472-488: 🎯 Functional CorrectnessRequest-only budget/target-configuration gate is logically sound.
Traced all four combinations of
budget_obligation/semantic_effects:Some(budget)always inserts intorequired_budgetsregardless of effects (line 474);None+ empty effects correctly failsMissingBudget(line 476-480); the second check independently failsInvalidTargetConfigurationonly when effects are empty andtarget_configurationis absent (line 482-488). This matches the two-branch CDDL union indocs/abi/edict-lawpack-adapter.cddlexactly — non-request-only profiles keep both fields optional, request-only profiles require both.One residual question:
target_configurationis validated here only for presence, never resolved/read again in this file (prepare_lawpack_compilation, shown in the provided context snippet, never touchesprofile.target_configuration). Confirm that's intentional (i.e. its digest-locked payload is interpreted downstream by the target profile/provider rather than by the compiler), and not a forgotten wiring step for actually threading the request-profile configuration intoTargetIrLoweringFacts.
507-513:exact_keysbudgets check correctly widened.Moving this to after the profile loop means
required_budgetsnow includes both effect-derivedcost_obligations and profile-levelbudget_obligations before the exhaustiveness check againstadapter.budgets. Correct.
65-70: 🎯 Functional CorrectnessNo action needed. The only
LawpackAdapterOperationProfilestruct literal already sets all added fields, includingbudget_obligationandtarget_configuration.docs/abi/edict-lawpack-adapter.cddl (1)
23-35: Union alternation correctly models the request-only vs. effect-bearing split.
semanticEffects: [+ tstr](non-empty) vs.semanticEffects: [](empty, withbudgetObligation/targetConfigurationpromoted to mandatory) are structurally disjoint on the array-length constraint, so there's no ambiguity between the two branches. Matches the Rust enforcement invalidate_adapter_closure.fixtures/provider-contracts/v1/edict-provider-contracts.cddl (1)
587-599: 🗄️ Data Integrity & IntegrationByte-for-byte match with the source ABI fragment — but this file says "DO NOT EDIT."
The union here is identical to
docs/abi/edict-lawpack-adapter.cddl(lines 23-35), which is correct in substance. Since the file header statesGenerated from Edict-owned ABI fragments. DO NOT EDIT., confirm this was produced by re-running the actual generator (presumably part ofcargo xtask verify) rather than hand-copied, so future regenerations don't silently diverge from a manually-synced copy.As per coding guidelines: "Run
cargo xtask verifybefore claiming a branch is ready."Source: Coding guidelines
xtask/src/lawpack_goldens.rs (6)
64-90: LGTM!
98-120: LGTM!
122-226: Golden generation correctly enforces the "exactly one request, zero callable steps" invariant.Digest dependency ordering (exports → configuration → adapter → manifest) is correct, and the post-lowering assertion (
request_count != 1 || any(!steps.is_empty())) matches issue#176's requirement to reject mixed callable/request execution for this fixture. Good defensive check for a fixture generator that could otherwise silently emit a golden that doesn't exercise the intended scenario.
228-330: Fixture construction matches the new request-only adapter schema.
workspace_snapshot_adaptercorrectly uses the empty-semanticEffectsbranch with bothbudgetObligationandtargetConfigurationpopulated — this is the one place in the diff that actually exercises the new CDDL/Rust validation branch end-to-end.
332-368: LGTM!
370-409: 🗄️ Data Integrity & IntegrationSame manifest digest locks both the
lawpackandcapabilityimports — confirm this is intended, not copy-paste. The root cause isworkspace_snapshot_application_source's digest wiring; the fixture file is a faithful, mechanical reproduction of that choice, not an independent defect.
xtask/src/lawpack_goldens.rs#L370-L409: verifyImportKind::Capabilitydigest resolution semantics against the actual compiler import-resolution code before trusting that reusingbundle.manifest_digest_review_string()for thecapabilityimport is correct (there's no prior fixture usinguse capabilityto cross-check against).fixtures/lawpack/workspace-snapshot/observe-workspace.edict#L3-L4: no fixture-side change needed unless the generator's digest wiring turns out to be wrong, in which case this file must be regenerated viacargo xtask lawpack-goldens --write.fixtures/lawpack/workspace-snapshot/observe-workspace.core.sha256 (1)
1-1: LGTM!fixtures/lawpack/workspace-snapshot/observe-workspace.edict (1)
1-35: Intent body matches theexternal-action-request-node/external-action-budgetCDDL shape.
authority,basis(both intent-level and request-level), andbudget { maxSettlementBytes, maxAttempts }line up field-for-field withexternal-action-request-node/external-action-budgetinedict-provider-contracts.cddl. Nothing to flag beyond the digest-reuse question noted above.fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.cbor (1)
1-1: LGTM!fixtures/lawpack/workspace-snapshot/observe-workspace.target-ir.sha256 (1)
1-1: LGTM!fixtures/lawpack/workspace-snapshot/request-profile-configuration.cbor (1)
1-1: LGTM!fixtures/lawpack/workspace-snapshot/request-profile-configuration.sha256 (1)
1-1: LGTM!fixtures/providers/echo-target-profile/README.md (1)
19-21: LGTM!crates/edict-syntax/tests/lawpack.rs (1)
1092-1131: LGTM!fixtures/lawpack/workspace-snapshot/README.md (1)
1-43: LGTM!fixtures/provider-contracts/v1/manifest.json (1)
6-7: 🗄️ Data Integrity & IntegrationNo change needed.
rawSha256matches the decodedbytesHexpayload.fixtures/lawpack/workspace-snapshot/manifest.cbor (1)
1-2: 🗄️ Data Integrity & IntegrationNo digest issue here. The sidecar hashes match their corresponding
.cborcanonical digests; the earlier mismatch came from using a non-canonical digest format, not a fixture desync.
|
Codex Review: Didn't find any major issues. 🚀 Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Summary
Closes #176.
Plain-English Walkthrough
[CLAIM: explicit route]
buildKind: externalActionselects a separate public build route while the omitted field preserves the existing executable-operation default. Source[CLAIM: compiler ownership] The route writes the canonical Core and Target IR bytes returned by Edict encoders, before any provider-component selection or invocation. Source
[CLAIM: authority closure] Publication requires at least one typed request, refuses callable target steps, binds operation authority by an exact root-reachable manifest digest, and rejects disconnected lawpacks. Request gate Root closure
[CLAIM: no callable grant] A request-only lawpack profile must supply a budget and target configuration while carrying no semantic effects; compiler facts retain the profile-to-budget association. Source
[CLAIM: reproducible closure] The owning generator builds and checks the manifest, exports, adapter, configuration, source, Core, and Target IR as one exact corpus. Source
flowchart LR S[Exact Edict source] --> C[Canonical Core] L[Root-reachable lawpack closure] --> C C --> T[Canonical Target IR] T --> G{Request-only gate} G -->|accepted| O[core.cbor and target-ir.cbor] G -->|callable or unbound| R[typed refusal] P[Provider components] -. not invoked .-> GValidation
cargo xtask verify