Repository navigation
feat: back up and reset incompatible local state on consent - #102
Merged
Merged
Conversation
Local diffx prompts on a terminal for older-schema state; --reset-state consents up front (also on dev). Old state moves to a timestamped backup beside the database; only the newest backup is kept. Newer or unrecognized files are refused. diffx-server never resets. Co-Authored-By: Claude Opus 5.5 <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.
reviewstore.Resetmoves current or older diffx state (sidecars first) to<db>.schema<N>-<UTC>.bakbeside it, under the ownership lock, and prunes earlier backups. Newer, unversioned and non-SQLite files are refused unchanged. Open errors are now a typedStateError(message text unchanged).localserver.StateReset{Force, Confirm, Saved}is threaded throughRun/RunForeground.cmd/diffxcomposes the policy:--reset-stateconsents up front, an interactive terminal is asked[y/N]for older state, anything else is refused with a--reset-statehint.dev --fixturetakes the flag but never prompts.--reset-statewith--state memoryand onsyncis rejected.Openstill never resets. Only local composition can callReset;diffx-server(serve and user admin) has no flag and keeps refusing. Collectors are unaffected (no DB; versioned producer dirs already skip old payloads).mise run checkand pre-push suite pass. New tests:reviewstore(backup, sidecars, pruning, refused files byte-identical, lock contention),localserver(confirm/decline/force/newer),cmd/diffx(non-TTY hint, flag reset, dev, memory, sync),cmd/diffx-server(flag rejected, no reset). Scripted pty run against real binaries: 16/16 checks. Risks: reset drops comments, marks and piped captures unless the backup is restored manually; only the newest backup is kept; alocal.statepointing at a server DB would be reset too (backup mitigates); pipedgit diff | diffxneeds the flag.docs/architecture.md,system.md,development.md,release.mdand docs-siteapi.mdupdated.