fix: preserve the readiness window and failed candidate diagnostics - #27
Merged
Merged
Conversation
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.
A running image candidate could become
unhealthyduring startup and be rolled back before Spawnfile’s existing 120-second readiness budget expired. It now continues polling within that budget and succeeds only after becoming healthy; stopped containers and unknown health states still fail immediately.Failed candidates now save bounded, sanitized application logs and health details in private local deployment evidence before rollback removes the container. Errors point to that evidence. Collection or storage failures do not prevent rollback. Shared Docker log redaction normalizes text and secret values together and replaces longer secrets first.
Validation: 67 targeted tests; 3,532 full Vitest tests, 12 node tests and 28 script tests; typecheck/package build; 27-page website build; isolated real Docker stdout/stderr capture and redaction smoke. Coverage:95.02% lines,90.07% branches. Readiness, quoted-authorization and normalization regressions were verified red before fixes; removing diagnostic capture breaks the rollback-path regression. GitHub CI passes on cf559b8. Independent Claude review accepted readiness, rollback and private storage. Its concrete sanitizer findings were fixed and regression-tested; the final independent Antigravity review accepted the shared normalization, empty-value filtering, longest-first matching and caller immutability.