the last unwired step. install now generates a drizzle barrel of plugin schemas and runs db:push, so a plugin with db/schema.ts brings its tables with it. the barrel follows the plugin DIRECTORIES on disk, not the install table, and that difference is the entire safety property. push drops what it cannot see, so a barrel tracking installs would delete a plugin's tables the moment it was uninstalled — turning "stop running this" into "delete my data", which is the one thing the install model refuses to do. following the directory means: directory present, not installed in the barrel, tables exist unused installed in the barrel, tables in use uninstalled STILL in the barrel, every row survives directory deleted out of the barrel, a push may drop them so reinstall is a restore, and losing data requires deliberately deleting a plugin's source. proved end to end rather than argued. with offscale uninstalled and its entry removed from the barrel, db:push DROPPED headscale_servers. installing it recreated the table in 1882ms — columns, both unique indexes including the partial one that enforces a single active server, and the fk. a canary row then survived an uninstall AND a subsequent manual db:push, which reported "No changes detected". it shells out to the same `bun db:push` a human runs rather than driving drizzle-kit in-process: one definition of applying the schema instead of two that can disagree, and an owner can reproduce exactly what an install did. --force because the barrel only ever gains entries unless source is deleted, and a prompt with no terminal would hang an install rather than fail it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
73 lines
1.4 KiB
Plaintext
73 lines
1.4 KiB
Plaintext
# dependencies (bun install)
|
|
node_modules
|
|
|
|
# output
|
|
out
|
|
src/videos/**/out
|
|
dist
|
|
dist_*
|
|
.dist
|
|
runtime-scripts
|
|
*.tgz
|
|
|
|
# code coverage
|
|
coverage
|
|
*.lcov
|
|
|
|
# logs
|
|
logs
|
|
_.log
|
|
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
|
|
|
|
# dotenv environment variable files
|
|
.env
|
|
.env.development.local
|
|
.env.test.local
|
|
.env.production.local
|
|
.env.local
|
|
|
|
# caches
|
|
.eslintcache
|
|
.cache
|
|
*.tsbuildinfo
|
|
|
|
# IntelliJ based IDEs
|
|
.idea
|
|
|
|
# Finder (MacOS) folder config
|
|
.DS_Store
|
|
|
|
src/config.ts
|
|
|
|
# Playwright
|
|
playwright/
|
|
.wwebjs_cache/
|
|
|
|
# generated from index.html by scripts/gen-index.ts
|
|
src/apps/officer-web/index.gen.html
|
|
|
|
# scratch scripts — never commit these
|
|
*.tmp.ts
|
|
|
|
# Sidecar assets published at install time — copies of files that live in each sidecar's own tree.
|
|
public/plugins/
|
|
|
|
# Written by machine-setup.sh to record completed steps; per-machine, never shared.
|
|
.setup-progress
|
|
.setup-answers
|
|
|
|
# Written by officer-setup.sh; per-machine.
|
|
scripts/setup/officer-setup/.setup-progress
|
|
|
|
# Generated by officer-setup, describing THIS install's processes. Never committed:
|
|
# the repository has no ecosystem file at all any more, and the next machine
|
|
# generates its own. See scripts/setup/officer-setup/lib/services.sh.
|
|
ecosystem.config.cjs
|
|
|
|
# The built SPA and the generated plugin module — both describe THIS install's plugin set and are
|
|
# rewritten on every install. See servers/plugins/generate.ts.
|
|
build/
|
|
build.next/
|
|
src/apps/officer-web/Plugins.gen.tsx
|
|
src/databases/officer_db/src/plugin-schemas.gen.ts
|