fix: remaining codebase-audit fixes (registry row-drop, overlap guard, adopt name, vm display) - #269
Merged
Merged
Conversation
…, adopt name, vm display) Fifth sweep batch — the remaining safe findings from the parallel codebase audit. - registry._read() no longer silently drops a row that fails row-level validation: a known-kind-but-invalid backend is preserved opaquely (index stays reserved, round-trips), an unsalvageable row is surfaced loudly (.bak + hint) instead of dropped with its index silently reused (#252) - create()/register() refuse a directory that nests inside or contains another registered instance (the overlap guard that previously only covered restore), before any mkdir/registry write, preventing silent data loss on a later destroy of the outer instance (#255) - adopt auto-derives a valid name for an IP:port serial (the help's own example) by collapsing every non-alphanumeric run to a hyphen (#257) - binder:vm warns once at apply time that a customized display is inert, via a new config.inert_fields() branch guarded on a non-default display (#264) All covered by new tests; full gate green (ruff, mypy --strict src+tests, pytest 100% line+branch (1979 passed), codespell, deptry, uv lock, changelog lint). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P1YsNMpGizhSDDPCBu5cut
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.
Summary
Fifth sweep batch — the remaining safe findings from the 18-agent codebase audit (filed as #252, #255, #257, #264). Four file-disjoint agents, each gate-verified.
registry._read()no longer silently drops a row that passes the v3 envelope but fails row-level validation. A known-kind-but-invalid backend is preserved opaquely (its port index stays reserved, and it round-trips); an unsalvageable row (badcreated_at, missing/non-int index) is surfaced loudly (.bak+ hint) instead of dropped with its index silently reused.create()/register()refuse a directory that nests inside or contains another registered instance — the overlap guard that previously only coveredrestore. It runs before anymkdir/registry write, preventing silent data loss when the outer instance is laterdestroyed.beetroot adopt 192.168.1.10:5555(the help's own example) errors instead of auto-naming #257 —beetroot adopt <IP:port>(the help's own example) auto-derives a valid instance name by collapsing every non-alphanumeric run (including the IP's dots) to a hyphen, instead of failing the name-grammar guard.binder: vmwarns once atapplytime that a customizeddisplay(width/height/fps) is inert on the vm guest, via a newconfig.inert_fields()branch guarded on a non-defaultdisplay(an all-defaults config stays quiet).Testing
Full local gate green:
ruff,ruff format --check,mypy --strict(src+tests),pytest -p no:randomlyat 100% line+branch coverage (1979 passed, 6 docker-daemon skips),codespell,deptry,uv lock --check, changelog lint.🤖 Generated with Claude Code
https://claude.ai/code/session_01P1YsNMpGizhSDDPCBu5cut
Generated by Claude Code