feat(projects): add fail-safe storage shadow migration - #223
Draft
matt2e wants to merge 1 commit into
Draft
Conversation
Signed-off-by: Matt Toohey <contact@matttoohey.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.
Summary
Safety boundary
Goose remains the authority for every product project read/write and for conversation/session lifecycle. This PR exposes no native-activation command and does not remove Goose's project prompt behavior. It builds and validates the storage/migration foundation only.
The importer scans the fixed Goose projects root, rejects symlinks and oversized input, fingerprints and backs up exact bytes, and commits project rows, workspaces, receipts, migration state, and phase together. Persisted generations reject stale completions and stale failures across app processes; missing or changed roots cannot erase a prior mirror. Existing corrupt Berd databases are preserved with a durable recovery marker and block startup instead of being silently replaced.
Validation
At commit
d520c3b07a4b74326f09d499eaba49775f0c0697:just checkjust clippy(all four lanes, warnings denied)Full-suite baseline evidence:
origin/mainorigin/mainNative activation blockers
Native activation remains intentionally unavailable. Before Berd can become authoritative, the following must be resolved in a pinned Berd/Goose release:
063694cf769269c1f151416605687991fdcbc496, currently pinned by Berd but unreachable from the configured upstream, so both project-prompt injection paths can be removed or capability-gated.The complete migration contract and twelve activation gates are documented in
docs/project-storage-migration.md.