Skip to content

docs: product e2e on arca — the design, and the engine defect that blocks it - #92

Closed
richardkiene wants to merge 2 commits into
mainfrom
docs/product-e2e-on-arca-design
Closed

docs: product e2e on arca — the design, and the engine defect that blocks it#92
richardkiene wants to merge 2 commits into
mainfrom
docs/product-e2e-on-arca-design

Conversation

@richardkiene

Copy link
Copy Markdown
Contributor

Two documentation commits. No code changes in either repository; the arca working tree was not touched.

What this is

A design for P5's second exit clause — the product-level gascan-e2e suite running on arca — plus the engine defect found while validating it, and a handoff.

The design (578cd14)

docs/superpowers/specs/2026-08-21-product-e2e-on-arca-design.md. Measured rather than recalled:

  • Apple carries 11 ignore attributes, arca 2 — not 3. grep -c matches a doc comment at arca_startup.rs:10. START-HERE.md still records 3.
  • Only 8 of 11 apple live tests can run on this machine: run-apple-e2e.sh:59 exports the predecessor image only under a release-candidate receipt.
  • Of the 27 fixture methods those 8 call, exactly 5 touch the Apple runtime. That is the whole per-backend surface, so the shape is cheap: one shared fixture, a 5-method RuntimeInspector trait, two implementations. Test bodies are re-pointed, not retyped, so a port cannot silently assert less than the original.

Apple's runtime is being retired, so the trait exists to quarantine Apple code for deletion, not to build a permanently pluggable abstraction.

The defect (af3358a)

Validating the design falsified its central assumption. Same test, same binaries, one variable changed:

Base layout Result
/tmp/alpine-oci, 1 layer 2 passed; 0 failed ... finished in 6.44s
workspace image, 35 layers create failed: no free indices are available for allocation

The engine attaches one block device per OCI layer (layer_devices_start=/dev/vdc layers=36 total_mounts=38), and tags come from a 26-letter alphabet — 24 usable after initfs and the writable overlay. Any image over ~24 layers fails, for any user. A product defect, not a fixture problem.

Not a regression: git grep against upstream/main finds no OverlayFSUnpacker, ArcaBlockDeviceRole or ArcaLayerAttachment. Upstream stays under the same allocator because LinuxContainer takes a single rootfs: Mount. The fork caches per layer, which pays when derived images share base layers — a registry workload Gas Can does not have, pinning one workspace image.

Decision: revert arca to upstream's approach rather than raise the ceiling or shrink the image, so upstream's improvements arrive by merge instead of being reimplemented. Roughly 2,200 lines across two repos, mostly deletion; ~722 appear already dead (OverlayFSClient has no external references). The fork is 70 commits ahead of upstream and 0 behind, so nothing needs reconciling first.

Also worth knowing

Two things measured that the design had assumed pessimistically: the image pull is 38 s once, and each arca-engine image load is ~1.2 s and 0 bytes of real disk (APFS clone-on-write), so per-test state roots are fine.

Status

Blocked on the arca-side revert, which is a prerequisite and belongs to its own session. Handoff: docs/status/2026-08-21-arca-layer-ceiling-handoff.md. Everything outside the design's §4 is unaffected.

P5's second exit clause. Records what was measured rather than what was
recorded: arca carries 2 ignore attributes and not 3 (the third grep match
is a doc comment at arca_startup.rs:10), only 8 of the 11 apple live tests
can run on this machine because run-apple-e2e.sh:59 exports the predecessor
image only under a release-candidate receipt, and of the 27 fixture methods
those 8 call, exactly 5 touch the Apple runtime.

That last number is what makes the shape cheap: one shared fixture, a
five-method RuntimeInspector trait, two implementations. The test bodies are
re-pointed rather than retyped, so a port cannot silently assert less than
the original.

Two things stated rather than left implicit. The harness loads the workspace
image itself via skopeo and arca-engine image load, which contradicts
roadmap:505 marking U5 as blocking P5 exit -- the reasoning is in section 4,
and a green suite is not evidence that U5 is closed. And the backend guard
is mutation-tested, because backend.rs:168 returns Apple when nothing is
requested, so an untested guard and no guard are worth the same.
…he fork's

Validating the design found its own central assumption false. Same test, same
binaries, one variable changed: 1-layer alpine passes 2/2 in 6.44s, the 35-layer
approved workspace image fails at create with "no free indices are available for
allocation". The engine attaches one block device per OCI layer and tags come from
a 26-letter alphabet, so 24 remain after initfs and the writable overlay.

Not a regression. git grep against upstream/main finds no OverlayFSUnpacker,
ArcaBlockDeviceRole or ArcaLayerAttachment; upstream stays under the same allocator
because LinuxContainer takes one rootfs Mount. The fork caches per layer, which pays
when derived images share base layers -- a registry workload Gas Can does not have,
since it pins one workspace image.

The decision is to revert to upstream rather than raise the ceiling or shrink the
image, so upstream's work arrives by merge instead of being reimplemented. Scope is
measured in section 4.1: roughly 2200 lines across two repositories, mostly deletion,
and about 722 of them appear already dead since OverlayFSClient has no external
references. The fork is 70 commits ahead of upstream and 0 behind, so nothing has to
be reconciled first.

Everything outside section 4 survives: the measurements, the structure, the backend
proof and the failure discipline are unaffected.
@richardkiene

Copy link
Copy Markdown
Contributor Author

Superseded by #93, which contains this branch in full: git merge-base --is-ancestor origin/docs/product-e2e-on-arca-design origin/docs/arca-revert-handoff passes, git log 93..92 is empty, and both files (docs/status/2026-08-21-arca-layer-ceiling-handoff.md, docs/superpowers/specs/2026-08-21-product-e2e-on-arca-design.md) resolve to identical blobs on the two branches. Merging #93 lands this content unchanged.

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