Fix: preserve typed refusals across storage boundaries - #133
flyingrobots wants to merge 1 commit into
Conversation
Retain concrete causes and expected/observed evidence in storage, recovery, retention, migration, GC, and transfer errors. Add downcast regressions and a production source contract; document the diagnostic API decision and pending integration. Validation: pinned Rust fmt and Clippy; debug/release workspace tests; Linux ext4 storage laws and 266-case crash matrices in both profiles; source/documentation integrity; dependency audit and policy checks. Refs #110
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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 |
Code Lawyer — integration findingsReviewing #133 at
The merge must preserve main's incomplete-stage disposition-required refusal, original-handle stage identity, effect/durability reporting, bounded reads, namespace guards, and private reader fence. Main's existing @codex Please review these concrete integration dispositions; provider unavailability will not be counted as approval. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Code Lawyer — verified integration regression (P2)
A deterministic filesystem regression has now executed RED on the unresolved integration candidate: Acceptance: preserve The retention run also exposed six older-wrapper expectations. Three predecessor tests must now assert the decoder-bearing |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Activity Summary — local #133/#107 integrationThe preserved normal merge is
The existing worker and target were reused; no new image/container/volume/target was created. Compiler target is about 905 MiB; host/Docker backing free space remains approximately 712/677 GiB. Historical source/compiler/evidence archives are preserved and explicitly accounted for; they were not pruned speculatively. The focused monitor now stops the owned worker on monitoring failure as well as limit/deadline failure. Aggregate operational guards are not per-test sandbox or suite-SLO compliance. |
Independent scoped review: #133 integrated into #107Reviewed head: Baseline: Live Git advertisement confirms main FindingsNo verified P0–P5 defect remains in this declared slice at the reviewed head. Previously posted source-spelling, checkbox and classification findings are closed by the current implementation. Separate inherited obligations and evidence limitations are recorded below, not relabeled as new implementation findings. Verification ChecklistEvery runtime path and parallel implementationAll changed production files were inspected in the baseline-to-candidate diff, with incoming changes separately inspected from their actual merge base. Current owners and surrounding callers were checked wherever integration reroutes behavior. These coordinates refer to the reviewed tree.
Merges and prior findings
Tests, exact sources and oracle changes
Constants, numeric claims and documentsNo protocol timing/rate/buffer/size limit changes in this slice. New numeric diagnostic fields report the limits and observations already used by guards.
Changed prose inspected: ADR-0010 matches current custom I/O payload access, typed operational/decoder sources, selected-root replacement, private authority, source-detector retirement, additive diagnostic API and classifier correction. Changelog claims are supported by current paths/laws without format, performance or power-loss claims. F-01 remains checked while audit/delivery remains partial. The dated audit's older matrix and PR-body figures, including 305 Linux storage tests and 266 killed-writer cases, are historical author evidence claims, not independently reproduced measurements of this candidate. They are explicitly excluded from this approval's runtime basis; the integrated documentation caveats them. No unsupported historical figure is used to discharge current acceptance. Standards, discussion and limitations
Executed versus inspected checksExecuted independently:
Inspected only: initial/final all-target build, first six retention wrapper failures, exact-merge classifier RED, source-erasure control, author all-feature 494-law debug/release library runs, author final focused debug, initial/final Clippy, fmt, structure, changed Markdown, earlier scope evidence and incoming historical claims. Compilation/setup/zero-test results are excluded from runtime RED. Not performed: a new full workspace campaign, optimized reviewer repetition, crash/process-death/fuzz/dependency campaign, hosted/pushed-head CI, cross-platform execution, physical power-loss testing, arbitrary concurrent raw namespace isolation, performance measurement or testing-policy approval. Inspected success is not execution by this reviewer and does not imply these missing checks. Full stable-candidate validation remains required separately. Only the sole shared worker/target was used. No image/container/volume/builder/cache/target was created; no source/configuration changed or unknown archive deleted. After the focused run: target 905 MiB; 20 GiB ext4 source/cache filesystem 921 MiB used; host 711 GiB free; Docker backing 677 GiB free; retained historical build/source/evidence archives 7.9 GiB and 3.5 GiB. The conservative wrapper counted retained artifacts and current runtime/log usage; no guard fired. Worker was idle and explicitly released to the parent; no reviewer workload remains. Aggregate controls do not prove per-test sandbox/SLO compliance or every archive's provenance. Scoped verdictApprove the complete incoming #133 typed-error integration and classifier repair at exact APPROVE |
Errors from durable storage adapters lost concrete causes when wrappers converted them to strings or replaced them with generic refusals. This change preserves typed payloads, original operational failures, and expected/observed coordinates across storage, recovery, retention, migration, GC, and transfer boundaries.
This PR is stacked on the roadmap branch in #107. Its prerequisite is that branch's storage and transfer APIs, including the earlier exact-record source-preservation fix. Review and merge this coherent outcome into that branch; mainline delivery remains pending #107's integration.
Invariant and approach
Keep returns exactly the named bytes or refuses with precise evidence. Shared exact-record conversion preserves OS failures unchanged and wraps semantic refusals as typed payloads. Boundary-owned error enums replace textual failures; predecessor decoding retains its concrete source. ADR-0010 documents the diagnostic API decision.
String parsing and a generic message wrapper were rejected because they erase classifications and causes. Replacing every I/O port signature was unnecessary.
Failure modes and validation
Downcast regressions cover corrupt chunks, byte-equal inode substitutions, malformed GC residue, nonempty reader fences, selected-root bounds and selection mismatches, and corrupt predecessor roots. Assertions failed before fixes; a selected-root stringification mutation also failed and was restored. A targeted source contract guards explicit textual I/O constructors without claiming a general proof of error flows.
Passed with pinned Rust 1.96.0:
Compatibility, recovery, performance, and security
Public refusal types and variants are additive; diagnostic wording and classifications become more precise. No identity, format, publication order, synchronization, or recovery protocol changes. No optimization, new dependency, or benchmark claim. Diagnostics retain bounded coordinates rather than content or secrets.
The roadmap and audit ledger record implementation evidence while leaving delivery open until mainline integration. Broader audit findings remain separately tracked.
Refs #110.