feat(skills): show which sandbox images the host actually has - #14
Merged
Conversation
The backend now reports `present` for each registered image. Without this the data existed and the screen did not change: the dropdown still offered `ragent-skill-fund:latest`, and picking it still failed only at run time. A registered image is not an image that exists — the allow-list records what is permitted, not what is on the host. The list marks absent ones, and selecting one explains what will happen: exit 125, docker phrasing it as `pull access denied`, and that this is not a permissions problem but an image that was built locally and pushed nowhere. **Marked, not disabled.** Configuring an image before building it is a legitimate order of work, and disabling would block it. The goal is to make "this will not run" visible before the choice rather than to make the choice. **Three states kept apart.** `null` means docker is unreachable, so nothing can be judged; marking every image absent in that case would send someone off rebuilding all of them when the fix is to mount the socket. Parsing therefore accepts only real booleans — `"false"`, `0` and `""` would each invert the backend's meaning under a truthiness check, and an older backend omits the field entirely, which as `false` would light up a warning on every image at once. 251 passed, tsc unchanged at the 134 baseline. Mutation-verified: truthiness coercion and treating a missing field as false each turn 3 red. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pairs with ragent-service#74, which adds
presenttoGET /sandbox-images.This half matters: without it the data exists and the screen does not change.
The dropdown still offers
ragent-skill-fund:latest, and picking it still failsonly at run time —
exit_code=125, with docker phrasing it aspull access denied.A registered image is not an image that exists. The allow-list records what is
permitted, not what is on the host. Absent entries are now marked in the list,
and selecting one explains what will happen and why that permission-sounding
error is not about permissions — the image was built locally and pushed nowhere,
so it has to be rebuilt.
Marked, not disabled
Configuring an image before building it is a legitimate order of work, and
disabling would block it. The goal is to make "this will not run" visible before
the choice, not to make the choice.
Three states kept apart
nullmeans docker is unreachable, so nothing can be judged. Marking every imageabsent in that case would send someone off rebuilding all of them when the fix is
to mount the socket.
Parsing accepts only real booleans.
"false",0and""each invert thebackend's meaning under a truthiness check, and an older backend omits the field
entirely — which, read as
false, would light a warning on every image at once.Tests
251 passed,
tscunchanged at the 134 baseline. Mutation-verified: truthinesscoercion and treating a missing field as
falseeach turn 3 red.🤖 Generated with Claude Code