Skip to content

fix(push): admit delegated capsule recipes - #570

Closed
forhappy wants to merge 1 commit into
codex/clean-handoff-recoveryfrom
codex/capsule-delegated-recipes
Closed

forhappy wants to merge 1 commit into
codex/clean-handoff-recoveryfrom
codex/capsule-delegated-recipes

Conversation

@forhappy

@forhappy forhappy commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Capsule publication rejected the first Git-clean edit in the real 10 GiB qualification because chunk enumeration selected published heads. After #569 repaired enumeration, capsule preparation still selected prepared plans and remote-chunk authority through published-only queries. A minimized regression also showed that capsule assembly accepted an active native batch before handoff.

Share the existing published/delegated selection rule between push admission and capsule assembly. Require a verified selected recipe with the pointer’s exact size, read its ordered pages, and batch its prepared xorb authority. Reuse its ingestion proof while retaining physical xorb digest, logical identity and placement verification. A valid delegated file retains its prepared encoding; unrelated active native leases remain ineligible.

Stacked on #569. No schema, dependency, lockfile or configuration changes.

Validation:

  • Negative real-staging regression reproduced unauthorized native-batch admission before the fix.
  • Nine publication tests pass, including native rejection, delegated size mismatch and exact prepared encoding; existing protected writes, catalog corruption, deduplication and upload concurrency remain covered.
  • Capsule callers: 14 passed. Staging-reader admission: four passed. Delegated pipeline admission: one passed.
  • Rust formatting and diff checks passed.
  • Release CLI build passed with no default features and simd-accel,gix-pathmatch (45m17s). The frozen binary SHA256 is 15d3d31f585e468f28e2439a646101936fab5b348197622eaecfa608484acf69. Preserved 10-GiB replay passes: 52 commands and 41 checks; v1 Git-clean, v2 native and v3 Git-clean pushes upload 2,216,109, 2,133,870 and 2,214,948 incremental xorb bytes. All eight historical file SHA256 checks pass after source/cache removal, with independent clone, local Git fsck and remote integrity (errors=0, repair_failures=0), plus an unchanged-binary check. Initial v0 was published by the preserved refactor(staging): unify native and Git-clean ingestion #566 fixture; this release completes subsequent edits and verifies all cold history. Report SHA256: e244d527e28b724df204e70abd4207141cba0ae52cbe271e7e7b891f611f4077. No S3 latency result is claimed.

Remaining gates:

  • Complete final-source repeated/zero and reverse-ingestion 10-GiB qualification alongside the lifecycle follow-up; this entropy replay does not close those gates.
  • Capsule push currently has no staging snapshot capture/retirement in its module or CLI/helper success callers. The legacy pipeline cleanup tests do not qualify that production lifecycle. Follow-up fix(push): retain and retire capsule staging #572 implements exact-owner retention/retirement; its full canary still fails at force push and remains a draft.
  • Historical catalog scanning remains stage 6 work. Strict annotation cleanup is in fix(lint): remove unfulfilled async trait expectations #573; inherited architecture-guardrail reconciliation remains pending.

Evidence map: CLI and remote helper → capsule_push::run → verified pack pointer discovery → xet_publication::prepare_delta → shared push_staging selection → verified staging recipe/pages/prepared authority. Sibling: PushPipeline::lookup_staging uses the same selection rule. Published-only public staging plan APIs retain their existing contract.

Is this the best fix? Review whether the shared product-level selection boundary correctly separates Git pointer evidence from staging ownership, while preserving the physical verification boundary. Restoring a second published-only fallback would leave the two production paths inconsistent.

The two requested large-file-push-audit benchmark reports are excluded.

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