Repository navigation
Protect file dependencies and make reviewed changes recoverable - #6
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.
Scans can suggest risky changes when image similarity is mistaken for a disposable copy, a filename is borrowed from unrelated content, or a linked resource is moved on its own. Review and execution also need to survive interrupted analysis and keep concurrent CLI/server writes from racing approval. This change makes proposals evidence-aware and session-scoped, requires explicit review for non-exact duplicate candidates, previews the ordered file changes before commit, protects known resource bundles, and journals selected operations for undo. Server-owned run plans persist progress and support explicit resume or retry.
The review API and web UI now show source/keeper evidence, analysis limits, protection reasons and projected final paths. Stored MD5 grouping is identified separately from unavailable SHA-256 evidence; execution rechecks live SHA-256 before exact-copy trash. The naming and organizer gates preserve project identifiers and numbered sequences and suppress unsafe grouping suggestions. CLI and web writers share a cross-process operation lock.
Validation through 2026-09-28: root independently ran 263 tests with zero skips; JavaScript syntax, Git whitespace and
ddh --helpchecks also passed. The suite includes exact-copy trash/undo, legacy database migration and two-session CLI scope. Two local web servers rejected review/commit while a separate CLI writer held the lease; after it exited, commit and CLI undo restored the synthetic asset. A two-interpreter six-file restart retained two completed analyses and processed only the four remaining files after explicit resume; the AI provider responses in that proof were stubbed. Across six fresh disposable corpora, 1,337 files (4,431,413,374 extracted bytes) yielded 1,321 indexed AI attempts: 780 analyses, 541 explicit skips, zero provider failures or unprocessed indexed files. Small, Photo and Links selected 13 total actions; all passed dry-run, commit and undo. Medium, Hebrew and Large had no safe file operation and passed zero-operation checks. Root's final audit matched all 1,337 original file hashes/paths, 1,321 indexed database paths/names, six source ZIP hashes, directories and foreign keys. Medium's 503 numbered frames kept their folder and names. See the validation report for per-corpus evidence and limits.Cross-platform CI passed all nine Windows, Ubuntu and macOS jobs on Python 3.10, 3.11 and 3.12 for commit ae65f17. CI run. A separate clean Windows installation using only .[dev,web] also passed 263 tests and the CLI entry point.
Known limits: Medium still yields 476 non-exact duplicate candidates requiring individual review, so candidate precision is not established. Browser visual and accessibility checks were unavailable after the earlier local-browser permission denial. The Medium run was not crash-tested against live Ollama; the separate restart proof used stubbed model responses. Conservative resource protection does not prove every external application reference resolves.