Skip to content

chore(release): v0.4.4 — apply kiln.resource_limits manifest on-target (AD-WCMC-001 capstone) - #465

Merged
avrabe merged 1 commit into
mainfrom
chore/release-v0.4.4
Jul 22, 2026
Merged

chore(release): v0.4.4 — apply kiln.resource_limits manifest on-target (AD-WCMC-001 capstone)#465
avrabe merged 1 commit into
mainfrom
chore/release-v0.4.4

Conversation

@avrabe

@avrabe avrabe commented Jul 22, 2026

Copy link
Copy Markdown
Collaborator

1 verified artifact. Completes the AD-WCMC-001 embedded trust chain.

rivet fix
SR-45 (#415/#421) A module carrying a signed kiln.resource_limits section is now bounded on-target at load, with no --memory CLI flag — the enforcement point the whole v0.4.2/v0.4.3 memory-bounding arc was building toward.

Closes the last "control that exists but never runs": extract_resource_limits_from_binary was a stub that ignored the binary, the decoder skipped custom sections, and load_module discarded the config behind .unwrap_or(None) + a // TODO: Apply resource limits. Now the decoder really reads the section (absent → None, malformed → Err, fail loud), and load_module feeds the manifest bound through the same pre-instantiate gate + runtime caps the CLI path uses. CLI and manifest combine most-restrictive (min) — an operator can't loosen a module's signed bound, a module can't loosen the operator's cap.

Workspace 0.4.3 → 0.4.4 (+16 pins + Cargo.lock; cargo build --workspace --locked green).

Re-verified on the binary at this commit (35a573b)

manifest-bounded module, NO --memory   -> ✗ [Resource][E0BB9] rejected before allocation
plain module, no manifest, no --memory -> runs (no over-rejection)
12 gate tests + 4 decoder extraction tests pass

Falsification — this release is wrong if any of these is observed

  • a module whose kiln.resource_limits bound is smaller than its declared memory min is allocated (peak RSS scaling with the declared min) instead of rejected at load, with no --memory flag;
  • a --memory flag loosens a tighter signed manifest bound (or vice-versa) — precedence must be most-restrictive;
  • a present-but-malformed kiln.resource_limits section is silently treated as absent instead of failing the load;
  • cargo build --workspace --locked fails on a clean checkout.

Scope

Only max_memory_usage (the WCMC memory attack surface) is enforced; max_call_depth/fuel aren't yet expressible by EngineResourceLimits (follow-up). Statuses prose-verified (rivet#721).

🤖 Generated with Claude Code

…t (AD-WCMC-001 capstone)

1 verified artifact.

  SR-45 (#415/#421)  A module carrying a signed `kiln.resource_limits` custom
                     section is now bounded ON-TARGET at load, with NO `--memory`
                     CLI flag — completing the AD-WCMC-001 embedded trust chain
                     that v0.4.2/v0.4.3 built the enforcement primitives for.

This closes the last "control that exists but never runs" in the resource-limits
story: `extract_resource_limits_from_binary` was a stub that ignored the binary,
the decoder skipped custom sections, and `load_module` discarded the extracted
config behind `.unwrap_or(None)` + a `// TODO: Apply resource limits`. Now the
decoder really reads the section (absent -> None, malformed -> Err, fail loud),
and load_module feeds the manifest bound through the SAME pre-instantiate gate +
runtime caps the CLI path uses. CLI and manifest combine most-restrictive (min):
an operator cannot loosen a module's signed bound, a module cannot loosen the
operator's cap.

Workspace 0.4.3 -> 0.4.4 (+16 path-dep pins + Cargo.lock; `cargo build
--workspace --locked` verified green).

Re-verified on the binary at this commit (35a573b):
  manifest-bounded module, NO --memory   -> ✗ [Resource][E0BB9] rejected before allocation
  plain module, no manifest, no --memory -> runs (no over-rejection)
  12 gate tests + 4 decoder extraction tests pass

rivet release status v0.4.4: cuttable (1/1 verified).

Scope: only `max_memory_usage` (the WCMC memory attack surface) is enforced;
`max_call_depth`/fuel are not yet expressible by EngineResourceLimits (follow-up).

Statuses are prose-verified (typed `verifies` links remain structurally
impossible for `type: requirement` — pulseengine/rivet#721).

Trace: skip
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FcTUZgts331Z1TK3q8YBQj
@codecov

codecov Bot commented Jul 22, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-actions

Copy link
Copy Markdown

🔍 Build Diagnostics Report

Summary

Metric Base Branch This PR Change
Errors 0 0 0
Warnings 5 5 0

🎯 Impact Analysis

Issues in Files You Modified

  • 0 new errors introduced by your changes
  • 0 new warnings introduced by your changes
  • 0 total errors in modified files
  • 0 total warnings in modified files
  • 0 files you modified

Cascading Issues (Your Changes Breaking Other Files)

  • 0 new errors in unchanged files
  • 0 new warnings in unchanged files
  • 0 unchanged files now affected

Note: "Cascading issues" are errors in files you didn't modify, caused by your changes (e.g., breaking API changes, dependency issues).

✅ No Issues Detected

Perfect! Your changes don't introduce any new errors or warnings, and don't break any existing code.


📊 Full diagnostic data available in workflow artifacts

🔧 To reproduce locally:

# Install cargo-kiln
cargo install --path cargo-kiln

# Analyze your changes
cargo-kiln build --output json --filter-severity error
cargo-kiln check --output json --filter-severity warning

@avrabe
avrabe merged commit 9f4608c into main Jul 22, 2026
22 checks passed
@avrabe
avrabe deleted the chore/release-v0.4.4 branch July 22, 2026 21:22
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.

1 participant