# 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 # drizzle-kit's generated migrations. Nothing applies them — there is no __drizzle_migrations table and # `drizzle-kit migrate` has never been run here; `bun db:push` diffs the schema code against the live # database and alters it directly. The schema code is the source of truth (src/databases/CLAUDE.md). # # Ignored rather than merely unused, because `bun db:gen` reads src/schema.ts — whose last line imports # plugin-schemas.gen.ts, itself generated from the plugin DIRECTORIES on this machine. So a generated # migration describes whichever plugins happen to be checked out here, and committing one would launder # per-machine state into the repository: run it with music installed and history gains music_*; run it on # a fresh clone and the next commit deletes them again. # # The old 0000_new_princess_powerful.sql is deleted from the WORKING TREE but left in history. It had 36 # tables and described a schema from before capabilities, api_keys, the app store and the plugin system # existed, including three (task_logs, terminal_containers, queue_jobs) that no longer exist at all. # # Purging it from history was tried on 2026-08-15 and deliberately undone. This codebase cites 76 commit # SHAs in comments and docs as evidence — `totality.ts` points at 2873948 for the websocket incident, # `registry.ts` at 044aacf4, CLAUDE.md at f35c145 — and a filter-repo run rewrites every one of them. # Three stale files nobody reads in old commits are not worth 76 dangling citations in a codebase whose # documentation works by pointing at the commit that proves the claim. # # Generate one locally whenever a diff is useful to read. It stays local. src/databases/officer_db/migrations/ # ── Marketplace-installed plugins ── # # A plugin fetched from the marketplace is a CLONE with its own .git and its own repository. Left # tracked, `git add -A` after an install commits it as a gitlink — a pointer to a commit this repo does # not contain, which then breaks anyone who clones the platform and does not have access to that plugin. # Happened on 2026-08-15, one commit after the marketplace landed. # # The plugins that genuinely ship with the platform are re-included by name below. Adding one is a # deliberate act, so keeping this list by hand is the right amount of friction — an unlisted plugin # directory is an install, not a source file. /plugins/*/ # `example` is the only exception left, and only until it has a repository of its own. It is the # reference implementation EXTRACTING-A-PLUGIN.md sends people to read, and it has no remote — the # platform repo is its single copy, so untracking it would delete it from everywhere but this disk. !/plugins/example/