Repository navigation
fix(automation): refuse incomplete stored job documents - #4468
Merged
Merged
Conversation
|
ScriptedAlchemy
enabled auto-merge (squash)
October 22, 2026 23:08
ScriptedAlchemy
disabled auto-merge
October 23, 2026 03:29
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.
Why
Ordinary job edits could discard undecodable siblings because the loader returned a filtered list. Refuse incomplete stored documents before a caller can rewrite them. Fixes #4422.
What changed
Scope
Job loading, CRUD, and scheduler admission use the existing persistence owner.
Blast Radius
Malformed configurations now need explicit operator repair. Healthy jobs keep their current behavior.
Verification
Before the fix, mixed valid/invalid documents loaded a filtered list and the dashboard create handler succeeded. The regressions now require a typed refusal and byte-exact preservation, including create, update, delete, and scheduler admission. Five persistence tests and three dashboard tests passed.
Three root integration tests also passed, covering normal persistence, retained extension fields, and refusal without rewriting. Independent source review found no correctness issues.
Linux CI exposed one scheduler test that still expected the old parser-error wording. The test now checks the typed configuration refusal, the safe file-specific diagnostic, and unchanged corrupt bytes. All 13 focused scheduler/persistence tests and the crate formatting check passed in the shared development checkout; the run includes the separately owned cron regression. This follow-up changes only the scheduler refusal test and its import. Required hosted checks must validate the updated PR head.
Master integration at
5980d8cb07be748756ff3d9a2b04d9b6420633aaincludes the landed scheduler coalescing repair from #4388 and Hermes CI repair from #4453. The original issue patch is unchanged. Independent integration review passed. Local macOS Bazel verification passed 18 actual tests: five persistence, eight scheduler configuration, one dashboard CRUD refusal, three automation-runner persistence, and one scheduler coalescing test. Test result caching was disabled. These results cover the merged tree; required hosted checks for this new head remain authoritative.Validation on the Cursor machine
Check out
codex/lossless-automation-jobsand open that checkout in Cursor. Run the focused Bazel commands above from the repository root and confirm each test filter executes tests. Add the command output and operating system to this PR. Cursor is unavailable on the development machine; these local results do not claim Cursor host validation.