You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Move the working dictionary installation to the owner's external 2 TB drive by building and using the repeatable installation, transfer and verification process itself. Deliver both a usable external installation and a documented procedure for a future machine/server. This is one combined implementation, not a manual move followed by a separate bootstrap project.
Combines the practical execution of #209 (storage/worktree/database migration) and #130 (fresh-clone bundle, bootstrap and readiness checks). Those issues remain requirement sources; this issue owns the shared implementation and evidence. Do not close either automatically.
The current installation is the baseline. Preserve it and a verified recovery copy until the destination is accepted. Compare old and new at the same code revision, schema and captured data state. A page that merely loads, matching row counts, or a successful command exit is insufficient.
The owner's explicit dictionary relocation instruction supersedes the older internal-source/PostgreSQL preference. Protect unrelated projects and shared services.
This issue specifies implementation, not evidence that any move has already occurred. No personalities, new curation behavior, routing publication, corpus rebuilding or semantic cleanup belongs in the move.
1. Inventory and record an executable plan
Inventory source/Git history, worktree registrations, unpushed/detached commits, dirty/untracked and necessary ignored files, source archives, media, models, builds/caches, databases, audit evidence, project-specific agent state and saved paths. Record size, owner, destination, preservation method and verification.
Account for runtime benchmark databases and routing recovery artifacts; no database is disposable solely because of its name. Models/runtime assets are already external: reuse verified artifacts rather than download duplicates. Reconcile the runtime's database/cluster authority binding deliberately after restore.
Verify external volume identity, filesystem suitability, permissions, available space and measured I/O. A directory at the expected mount path is not proof of the intended mounted drive. Measure current internal headroom and all temporary-space requirements; write bulk transfer artifacts directly externally where safe.
Detect shared PostgreSQL resources. Prefer a dedicated external dictionary cluster when moving a shared cluster would affect other projects. Record required PostgreSQL major/tool versions, extensions, encoding, locale/collation, ownership and grants; pin the application toolchain.
Produce a path/configuration map covering source, database, models, archives, worktrees, caches, logs and temporary files. Paths must be configurable rather than embedded throughout scripts.
Coordinate active agents/processes before changing their paths. Use supported Git and agent-app mechanisms; do not edit live shared agent databases. Record explicit measured exceptions for shared metadata that cannot be relocated independently.
2. Implement the reusable transfer/setup interface
Implement or adapt the bundle, bootstrap and doctor capabilities proposed in #130. Names may follow existing conventions; document the actual supported commands rather than presenting proposed commands as available.
Bundle/export: versioned manifest with code revision, schema/migration state, tool compatibility, file sizes and cryptographic digests; consistent database dump(s); required source/replay/media inputs; and inventory of optional pinned model artifacts. Carry exact pinned inputs that cannot be re-downloaded from rolling URLs. A manifest must bind verification metadata to the actual dump and captured data state.
Bootstrap/restore: explicit destination and mode; verify prerequisites, mount and bundle before mutation; restore into a verified separate empty database; install/build application dependencies on the destination; configure paths and run readiness checks. Reject source aliases and unknown/mismatched/ambiguous target identities. Never silently overwrite an existing installation. Resume interrupted transfers and safely repeat setup without duplicate writes or destructive re-restoration. Existing matching state is verified; conflicting state is reported clearly.
Doctor: read-only machine-readable and human-readable checks for tool versions, destination identity, database/extension/schema compatibility, required files/checksums, configuration, build, endpoints, background-job mode and optional model readiness. Distinguish usable core operation from missing optional provider credentials/model service. No model generation or background imports as a side effect.
Separate credentials from transferable artifacts. Treat a full working database backup as private, regardless of whether .env is excluded. A future public starter bundle needs an explicit data/rights/privacy scope; do not publish the working backup. Operator credentials and grants must be transferred/recreated deliberately through private configuration.
Keep three explicit modes: restore this exact installation; initialize a new development installation from an approved bundle; rebuild from pinned source inputs. Only the first is the migration path. A source rebuild cannot replace restoration of durable identities/editorial state.
3. Establish the comparison baseline
Record the consolidated code revision, actual source schema/migration state and relevant feature flags/configuration. Do not apply new migrations to the source merely to simplify relocation.
Define the exact comparison contract before moving: table contents keyed by durable identity, references, sequence state, routing decisions/history/paths, curation records/approvals, source manifests and required file hashes. Compare intended role/grant mappings and extensions as well. Exclusions must be narrow, documented and justified; do not hide semantic differences as bookkeeping.
Capture representative application behavior on the source: ordinary word page, sourced quotation/artwork page, entity page, search, enabled curated opening, routing lookup where applicable, and relevant authenticated behavior with a controlled test account. Record expected identities, links, attribution, feature availability and errors; screenshots alone are not acceptance.
Quiesce writers through their owning services and capture a consistent, immutable baseline. Keep restored jobs, cron, discovery and inference disabled during comparisons. Read-only access to the old installation is allowed only with writers reliably disabled.
If an early rehearsal occurs while source writes continue, record its snapshot boundary; before cutover, quiesce and capture/restore a final consistent snapshot. Do not compare a stale snapshot against a changing source and call it exact.
4. Create and verify the external installation
Use the documented reusable commands to create the destination; every manual workaround discovered must become an explicit step, configuration input or automated check.
Preserve source/worktree history and local work through supported relocation; prove a fresh checkout can also use the setup process without undocumented dependencies on the old checkout. Build artifacts must be produced for the destination platform, not assumed portable to a future Linux server.
Use supported PostgreSQL logical backup/restore and isolated endpoints. Never copy individual files out of a running database cluster. Handle cluster-level roles separately without moving unrelated databases.
First prove exact restoration at the captured schema. Any migrations needed by the consolidated code are a separate, recorded step after preservation passes; test them on the destination with their expected effects specified.
Run exact baseline comparisons, doctor, representative UI/API reads and file/source access. Exercise writes and jobs on an isolated validation database or controlled destination state; never contaminate the baseline comparison or trigger duplicate external work.
Run focused integration tests and mix precommit from the external checkout using an external isolated test database. Report capacity-blocked/unrun checks honestly.
5. Prove repeatability and failure behavior
Repeat setup from the same code and bundle into a second clean external target, or a documented disposable target, using only the quickstart. No hidden access to the old installation. Verify equivalent preserved state and functionality.
Re-run setup on an initialized target: no duplicate data, lost state or silent restore. Demonstrate an interrupted transfer/setup can resume safely.
Reject corrupted/missing bundle parts, incompatible tools, incorrect mount, insufficient capacity, source/destination aliasing and an already-populated conflicting target before destructive work.
Verify service restart and missing/wrong/unwritable-drive behavior without unplugging a running database. No fallback directories, database, models or bulk caches may be silently created internally.
Verify a resumed agent session and a newly created task/worktree use intended paths. Keep unrelated projects operational.
Measure representative query/build/test performance and storage growth; document any material regression and acceptance decision. Choose numeric thresholds from the measured baseline before judging results.
6. Cut over, retain rollback, then reclaim space
Permit only one intended writable dictionary installation. Update all clients, worktrees, scripts, launchers and jobs; verify their actual endpoints before enabling writes.
Preserve the old installation unchanged through destination acceptance. Record a rollback procedure and acceptance window. Once destination writes occur, switching to the old snapshot alone loses those writes: preserve/reconcile them before rollback.
After successful verification/cutover, reclaim old internal bulk copies through owning tools and recorded dispositions. Never delete in-use worktrees or database files manually. Retain verified baseline/recovery artifacts externally for later comparisons, with an independent backup destination for drive-failure recovery; keeping all old internal files forever would not meet the disk-relief goal.
Report measured reclaimed space, remaining internal exceptions and an operating-headroom target. Verify new routine work continues to write externally.
Deliverables and acceptance
One committed quickstart and operations runbook describing prerequisites, exact setup/restore/verify commands, credentials handling, paths, failure recovery, backup/retention and rollback.
Versioned bundle/manifest, safe reusable bootstrap/restore and read-only doctor capabilities implemented and used for the actual move.
Private evidence maps source revision/schema/snapshot to destination; exact state comparisons pass, with every intended difference explained.
The external application is usable: representative reads/writes, jobs, restart and source access pass; code checks and mix precommit results are recorded.
A second clean-target setup and repeat/interruption tests demonstrate the documented procedure is reproducible.
No hidden dependency on the old installation; future dictionary tasks/worktrees/tests use external storage; unrelated projects survive.
Cutover and rollback are verified, old state retained through acceptance, and internal space actually reclaimed afterward.
Independent review accepts the final code and operational evidence. Neither a successful copy nor an implementer's self-assigned grade is completion.
Future server deployment reuses the data manifest, restore, configuration and verification contracts. Server-specific release builds, supervision, TLS/networking and inference hosting remain explicit future work; the external-drive rehearsal is not proof that a Linux production deployment has been tested.
Outcome
Move the working dictionary installation to the owner's external 2 TB drive by building and using the repeatable installation, transfer and verification process itself. Deliver both a usable external installation and a documented procedure for a future machine/server. This is one combined implementation, not a manual move followed by a separate bootstrap project.
Combines the practical execution of #209 (storage/worktree/database migration) and #130 (fresh-clone bundle, bootstrap and readiness checks). Those issues remain requirement sources; this issue owns the shared implementation and evidence. Do not close either automatically.
The current installation is the baseline. Preserve it and a verified recovery copy until the destination is accepted. Compare old and new at the same code revision, schema and captured data state. A page that merely loads, matching row counts, or a successful command exit is insufficient.
Entry checkpoint and boundaries
1. Inventory and record an executable plan
2. Implement the reusable transfer/setup interface
Implement or adapt the bundle, bootstrap and doctor capabilities proposed in #130. Names may follow existing conventions; document the actual supported commands rather than presenting proposed commands as available.
Bundle/export: versioned manifest with code revision, schema/migration state, tool compatibility, file sizes and cryptographic digests; consistent database dump(s); required source/replay/media inputs; and inventory of optional pinned model artifacts. Carry exact pinned inputs that cannot be re-downloaded from rolling URLs. A manifest must bind verification metadata to the actual dump and captured data state.
Bootstrap/restore: explicit destination and mode; verify prerequisites, mount and bundle before mutation; restore into a verified separate empty database; install/build application dependencies on the destination; configure paths and run readiness checks. Reject source aliases and unknown/mismatched/ambiguous target identities. Never silently overwrite an existing installation. Resume interrupted transfers and safely repeat setup without duplicate writes or destructive re-restoration. Existing matching state is verified; conflicting state is reported clearly.
Doctor: read-only machine-readable and human-readable checks for tool versions, destination identity, database/extension/schema compatibility, required files/checksums, configuration, build, endpoints, background-job mode and optional model readiness. Distinguish usable core operation from missing optional provider credentials/model service. No model generation or background imports as a side effect.
Separate credentials from transferable artifacts. Treat a full working database backup as private, regardless of whether
.envis excluded. A future public starter bundle needs an explicit data/rights/privacy scope; do not publish the working backup. Operator credentials and grants must be transferred/recreated deliberately through private configuration.Keep three explicit modes: restore this exact installation; initialize a new development installation from an approved bundle; rebuild from pinned source inputs. Only the first is the migration path. A source rebuild cannot replace restoration of durable identities/editorial state.
3. Establish the comparison baseline
4. Create and verify the external installation
mix precommitfrom the external checkout using an external isolated test database. Report capacity-blocked/unrun checks honestly.5. Prove repeatability and failure behavior
6. Cut over, retain rollback, then reclaim space
Deliverables and acceptance
mix precommitresults are recorded.Future server deployment reuses the data manifest, restore, configuration and verification contracts. Server-specific release builds, supervision, TLS/networking and inference hosting remain explicit future work; the external-drive rehearsal is not proof that a Linux production deployment has been tested.