The themes work moves every colour out of the components and into a token layer, and the entire value of that is being INVISIBLE. Nothing here could have told us whether that held: the tests do not render, and comparing two screens from memory an hour apart misses exactly the things this can break — a border colour, a radius, one mode of two. Eight routes, both colour modes, against the running app. Byte comparison rather than a pixel-tolerance diff: a false alarm costs opening two images, a false all-clear costs the refactor. The first version was worthless and looked fine. It reused one browser context and added an init script per mode — Playwright ACCUMULATES those, so the dark pass ran the light script too, and the class toggle after `goto` was undone by the provider's own effect. Six of eight routes came out byte-identical in light and dark, which reads as a clean run. A context per mode fixes it, the class is asserted after settling rather than before, and identical light/dark pairs now print a warning instead of passing quietly. Verified rather than assumed: 15 distinct images of 16, every route differs between modes, and one was opened to confirm it is the authenticated app and not eight variations of an error boundary. Baselines are gitignored — 7MB of machine-specific PNGs. Regenerate with the script. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
110 lines
3.8 KiB
Plaintext
110 lines
3.8 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
|
|
|
|
# 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/
|
|
|
|
# ── plugins/ holds documentation, not plugins ──
|
|
#
|
|
# Every plugin is its own repository (gitea.officer.dev/plugins/*) and arrives here by `git clone` when
|
|
# somebody installs it. A cloned plugin carries its own .git, so leaving it tracked means `git add -A`
|
|
# commits a gitlink — a pointer to a commit this repo does not contain. That happened on 2026-08-15.
|
|
#
|
|
# The trailing slash matters: this ignores DIRECTORIES only, so files at the top of plugins/ —
|
|
# EXTRACTING-A-PLUGIN.md and anything beside it — stay tracked. The documentation about plugins belongs
|
|
# to the platform; the plugins do not.
|
|
/plugins/*/
|
|
|
|
# Visual baselines for the theme extraction — large, machine-specific, regenerate with scripts/theme-snapshot.ts
|
|
.snapshots/
|