test(dind): assert public-mode passthrough actually copies a public host image (issue #96)#98
Conversation
Adding .gitkeep for PR creation (default mode). This file will be removed when the task is complete. Issue: #96
…ost image (issue #96) The host-image passthrough test only asserted the negative path for the default public mode: a locally-built fixture (no RepoDigest) is skipped. The positive path the feature exists for - a genuinely public image (carrying a RepoDigest from an allowlisted registry) IS copied into the inner daemon - was structurally untested. The throwaway host daemon was seeded with only the offline fixture, so public mode had no eligible image at all and a 'public copies nothing' regression would ship green. Seed the throwaway host daemon with a real pulled alpine:3.20 (pulling is what records a RepoDigest; docker save/load does not preserve one) and assert in the public-mode block that the image lands in the inner daemon and is logged as loaded. Closes the false-positive gap downstream (link-assistant/hive-mind#1879) relies on. Also drop the stray root .gitkeep PR-creation artifact. Fixes #96
⏳ Usage Limit ReachedThe automated solution draft was interrupted because the Anthropic Claude Code usage limit was reached. 📊 Limit Information
🔄 How to ContinueAuto-resume is enabled. The session will automatically resume (with context preserved) when the limit resets. 🤖 Models used:
📎 Execution log uploaded as Gist (787KB)This session was interrupted due to usage limits. The session will automatically resume when the limit resets. |
|
⏰ Auto Resume (on limit reset) Auto-resuming automated work session at 2026-06-10T17:05:30.674Z This session automatically resumed after the usage limit reset, continuing with the previous context preserved. The PR has been converted to draft mode while work is in progress. This is an auto-resumed session. Please wait for the session to finish, and provide your feedback. |
Working session summaryThe CI log confirms the new test path ran end-to-end and passed on my exact commit:
Everything is done and verified. Summary: What I didThe issue (#96): the host-image passthrough test ( Fix (commit
Verification:
PR: #98 — updated title/description, marked ready for review, branch is current with A note on the user's message: I couldn't run the container integration test in this sandbox because its Docker uses the This summary was automatically extracted from the AI working session output. |
🔄 Solution Draft Log (auto resume on limit reset)This log file contains the complete execution trace of the AI solution draft process. 💰 Cost estimation:
📊 Context and tokens usage:
Total: (4.4K new + 78.1K cache writes + 1.7M cache reads) input tokens, 14.3K output tokens, $1.705046 cost 🤖 Models used:
Note: This session was automatically resumed after a usage limit reset, with the previous context preserved. 📎 Log file uploaded as Gist (598KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
✅ Ready to mergeThis pull request is now ready to be merged:
Monitored by hive-mind with --auto-restart-until-mergeable flag |
Summary
Closes the false-positive / coverage gap in the host-image passthrough test added in #95 (
tests/dind/example-preload-images.sh).For the default
publicmode the suite previously only asserted the negative path — that a locally-built fixture (no RepoDigest) is not copied. The positive path the feature exists for — a genuinely public image (carrying a RepoDigest from an allowlisted registry) is copied into the inner daemon — was structurally untested: the throwaway host daemon was seeded with only the offlinedocker importfixture, sopublicmode had no eligible image at all. A "publiccopies nothing" regression would have shipped green, defeating the whole feature (every innerdocker runre-pulls again) — the exact symptom #94 set out to fix, and the behavior downstreamlink-assistant/hive-mind#1879relies on.Fixes #96.
What changed
tests/dind/example-preload-images.sh:alpine:3.20). Pulling it from a public registry is what records aRepoDigest—docker save/docker loaddoes not preserve one — so this is the "freely re-pullable" casepublicmode must pass through. The pull fails the test loudly if the network is unavailable.public-mode block: the public image must land in the inner daemon (docker image inspect alpine:3.20) and be logged as loaded (passthrough loading host image: alpine:3.20). The pre-existing negative assertion (local fixture skipped) is kept.Also drops a stray root
.gitkeepPR-creation artifact, and adds apatchchangeset.How it was verified
The container integration test runs in CI (
pr-test-dind), which usesoverlay2+ the disk-cleanup step. Running it locally here is impractical because the sandbox Docker uses thevfsstorage driver (no layer sharing), which exhausts disk while expanding the largebox-dindimage.The filter logic the new assertion depends on is covered by
experiments/preload-unit-test.sh(mocked host daemon, no container needed). Case 9 already exercises precisely this path and is green:This confirms a
docker.ioRepoDigest image (alpine:3.20) passespublicmode and emits the exact log line the new integration assertion greps for.Before / after (test coverage)
public-mode block