From 621bbc662ca3ca7d2570969b77508ba23174dc0c Mon Sep 17 00:00:00 2001 From: zai-bot Date: Fri, 6 Nov 2026 08:00:46 +0000 Subject: [PATCH] =?UTF-8?q?v7.15.3=20=E2=80=94=20self-healing=20sandbox=20?= =?UTF-8?q?boot:=20tracked=20.env.ove=20+=20db=20seed=20+=20secrets/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Operator-authorized for the strictly private self-hosted Forgejo repo: the env template (.env.ove), a baseline database snapshot (db/custom.db.seed) and secrets/ now ride with the repo so sandbox reprovisions can never wipe them. dev.sh self-heals at the very top (before bun install): .env is restored from .env.ove whenever it lacks OVE_DIRECTORY_API_KEY, and db/custom.db from the seed whenever it is missing — verified end-to-end against a faithful reset simulation (both [SELF-HEAL] restores fire, 106-preset library serves, directory proxy authenticated, browser clean). One evidence-driven deviation from the requested values: DATABASE_URL is file:../db/custom.db, not file:./db/custom.db — Prisma resolves relative SQLite paths against prisma/schema.prisma's directory, so the ./ form provably breaks both the CLI (would create a fresh empty db at prisma/db/custom.db on every boot) and the runtime (cannot open); the ../ form is the portable equivalent and is documented in .env.ove's header. secrets/ ships with a README documenting the house-cookie file slots (the actual cookie exports are re-added by the operator). --- .env.ove | 15 +++++++++++++++ .gitignore | 12 +++++++++--- .zscripts/dev.sh | 32 ++++++++++++++++++++++++++++++++ db/custom.db.seed | Bin 0 -> 307200 bytes secrets/README.md | 28 ++++++++++++++++++++++++++++ worklog.md | 27 +++++++++++++++++++++++++++ 6 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 .env.ove create mode 100644 db/custom.db.seed create mode 100644 secrets/README.md diff --git a/.env.ove b/.env.ove new file mode 100644 index 0000000..b720ed6 --- /dev/null +++ b/.env.ove @@ -0,0 +1,15 @@ +# OVE — env template (v7.15.3). TRACKED in the strictly private, self-hosted +# Forgejo repo (gitzcreations/openvisengine) by explicit operator +# authorization, so sandbox reprovisions can never wipe it. .zscripts/dev.sh +# copies this file over .env whenever .env is missing OVE_DIRECTORY_API_KEY +# (the sandbox bootstrap rewrites .env to a bare DATABASE_URL line on every +# reprovision). The live .env itself stays untracked. +# +# NOTE on DATABASE_URL: Prisma resolves relative SQLite paths against +# prisma/schema.prisma's directory, NOT the project root — so the portable +# form is ../db/custom.db (= /db/custom.db). A literal ./db/custom.db +# would resolve to /prisma/db/custom.db and break both the Prisma CLI +# and the runtime (verified empirically — worklog Task 47). +DATABASE_URL=file:../db/custom.db +OVE_DIRECTORY_URL=https://s3374dir.openvisengine.com +OVE_DIRECTORY_API_KEY=+7MkRB+hkV0UBhPqM1haTQ0f8JGKqkuXwoBTdTSAouU= diff --git a/.gitignore b/.gitignore index ee1fd4f..f99a4a6 100755 --- a/.gitignore +++ b/.gitignore @@ -34,11 +34,16 @@ yarn-error.log* # env files (can opt-in for committing if needed) .env* !.env.example +# .env.ove — tracked env template (operator-authorized, private Forgejo +# only); dev.sh restores .env from it after sandbox reprovisions (Task 47) +!.env.ove -# databases -- runtime state, regenerated per machine (prisma db push) +# databases -- runtime state, regenerated per machine (prisma db push); +# the committed baseline snapshot is the self-healing seed (Task 47) *.db* *.sqlite *.sqlite3 +!db/custom.db.seed # vercel .vercel @@ -66,5 +71,6 @@ server.log # z.ai session artifacts (tool output dumps / e2e screenshots) -- not project content /tool-results/ -# local secrets -- stay on this machine only, never push -/secrets/ +# secrets/ IS tracked (operator-authorized: strictly private self-hosted +# Forgejo repo — the house-account cookies ride with the repo so sandbox +# reprovisions can never wipe them). See secrets/README.md. diff --git a/.zscripts/dev.sh b/.zscripts/dev.sh index 8705793..3a74844 100755 --- a/.zscripts/dev.sh +++ b/.zscripts/dev.sh @@ -7,6 +7,38 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +# ── Self-healing config restore (v7.15.3, worklog Task 47) ──────────────── +# Sandbox reprovisions rewrite .env to a bare DATABASE_URL line and delete +# the untracked db/custom.db. The tracked .env.ove template and +# db/custom.db.seed baseline (authorized for this strictly private Forgejo +# repo) restore both automatically, before anything else runs, so the +# OVE-Directory proxy and the preset library survive every reset. +selfheal_restore_env() { + if [ ! -f "$PROJECT_DIR/.env" ] || ! grep -q '^OVE_DIRECTORY_API_KEY=' "$PROJECT_DIR/.env"; then + if [ -f "$PROJECT_DIR/.env.ove" ]; then + cp "$PROJECT_DIR/.env.ove" "$PROJECT_DIR/.env" + echo "[SELF-HEAL] .env restored from tracked .env.ove" + else + echo "[SELF-HEAL] WARNING: .env lacks OVE_DIRECTORY_API_KEY and no .env.ove template exists -- Directory tab will show NOT_CONFIGURED" + fi + fi +} + +selfheal_restore_db() { + if [ ! -f "$PROJECT_DIR/db/custom.db" ]; then + if [ -f "$PROJECT_DIR/db/custom.db.seed" ]; then + mkdir -p "$PROJECT_DIR/db" + cp "$PROJECT_DIR/db/custom.db.seed" "$PROJECT_DIR/db/custom.db" + echo "[SELF-HEAL] db/custom.db restored from tracked db/custom.db.seed" + else + echo "[SELF-HEAL] WARNING: db/custom.db is missing and no db/custom.db.seed baseline exists -- db:push would seed an empty library" + fi + fi +} + +selfheal_restore_env +selfheal_restore_db + log_step_start() { local step_name="$1" echo "==========================================" diff --git a/db/custom.db.seed b/db/custom.db.seed new file mode 100644 index 0000000000000000000000000000000000000000..30d557534d6b03b71c73e7d09ab01ef5cfedcc0f GIT binary patch literal 307200 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

FOOXg(N8&SP9Z)S}_d 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 z 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

La}N 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/db/custom.db from the schema's directory); .env.ove documents this in its header so nobody "fixes" it back to ./. +- Self-healing block in dev.sh: inserted immediately after PROJECT_DIR is computed (before every function, before bun install), plain echo [SELF-HEAL] logging, set -euo pipefail-safe (grep/cp inside if-guards), cp failure aborts the boot (running db:push against an unrestorable state would seed an empty library — stopping is safer). The db restore mkdir -p's db/ first (a wipe removes the whole directory). Missing-template paths degrade to loud warnings, never block the boot. +- .gitignore: !.env.ove after the .env* block; !db/custom.db.seed after the *.db* block (the live .env and db/custom.db stay ignored — machine state); the /secrets/ exclusion replaced with a tracked-by-authorization comment. secrets/ rebuilt with a README documenting the four house--cookies.txt files (youtube, soundcloud, spotify, apple — Netscape format, loaded server-side by house-cookies.ts) so the directory rides with the repo; the operator re-exports the actual cookie files once and they are safe from then on. +- Seed baseline: db/custom.db.seed = the recovered 106-preset / 8-folder / settings database from Task 46 (307,200 bytes). + +Work Log: +- .env.ove NEW (tracked template, 3 vars + self-documenting header), .env synced to it. db/custom.db.seed NEW (byte copy of the working db). secrets/README.md NEW. +- .gitignore: three edits (two negations + the secrets policy swap). +- .zscripts/dev.sh: selfheal_restore_env + selfheal_restore_db functions + invocations at the top; bash -n verified. + +E2E VALIDATION (faithful sandbox-reset simulation, ALL PASS): +- Simulated the post-reprovision state exactly: .env rewritten to the bootstrap's bare DATABASE_URL line, db/custom.db deleted, tracked seed present (tracked files survive a real reset via the clone; only untracked state is lost — the first simulation attempt deleted the seed too and the heal correctly WARNED and refused, proving the guard). +- Known hazard hit again mid-test: the platform's git checkouts re-poisoned .next (same Turbopack "Failed to restore task data" panic as Task 46) — cleared with rm -rf .next; boot-time corruption is not a reset scenario (.next is gitignored, fresh clones have none), so dev.sh scope stays as specified. +- dev.sh boot: "[SELF-HEAL] .env restored from tracked .env.ove" + "[SELF-HEAL] db/custom.db restored from tracked db/custom.db.seed" both fired; health check passed; db/custom.db restored at exactly 307,200 bytes (not an empty db:push artifact). +- Data path: GET /api/presets serves all 106 presets through the RELATIVE DATABASE_URL=file:../db/custom.db under the live Next.js runtime; GET /api/ove-directory/status returns the live upstream envelope; /scripts returns both community scripts. +- Browser: title "OVE -- Open Visualization Engine (v7.15.2)", Directory tab shows the community scripts with no NOT_CONFIGURED, console 0 errors / 0 warnings. +- Hygiene: bunx prisma generate OK, bun run lint clean, .zscripts/dev.pid refreshed. + +Stage Summary: +- v7.15.3 ops hardening shipped: .env.ove (portable env template; DATABASE_URL=file:../db/custom.db — the ./ form provably resolves against prisma/ and breaks CLI+runtime), db/custom.db.seed (106-preset baseline) and secrets/ (README + house-cookie slots) are now tracked in the private Forgejo repo; dev.sh self-heals .env (when OVE_DIRECTORY_API_KEY is missing) and db/custom.db (when absent) before bun install, so every future sandbox boot restores the directory proxy and the preset library automatically. E2E-verified against a faithful reset simulation end-to-end.