Done with `tea` as admin: plugins/offscale made public, plugins/example created public, both verified anonymously over https — which is the check that matters, because fetch.ts clones with no credentials and a private plugin simply cannot be installed from the marketplace. plugins/example 8 files, cloned back and diffed identical plugins/offscale now public (was private, so was uninstallable) `.gitignore` is one line now — `/plugins/*/`. The trailing slash is the whole design: it ignores DIRECTORIES, so files at the top of plugins/ stay tracked. The documentation about plugins belongs to the platform; the plugins do not. All three are in the marketplace catalogue, which is what makes this reversible: before this, untracking offscale meant a fresh install could never get it back. Now the store is the way in for all three. CatalogueEntry gains `icon` (a lucide name) alongside `iconUrl`. Both new entries ship glyphs rather than artwork, and without it they drew the generic puzzle piece in the store and their real icon after install — which reads as the icon changing rather than the store not knowing it. EXTRACTING-A-PLUGIN.md pointed at four directories a fresh checkout no longer has. It now gives repository URLs, says up front that this directory holds documentation rather than plugins, and carries a table of where each one went. Checked first that no tracked source statically imports a plugin directory — none does, so a fresh clone still builds. tsgo clean, frontend builds, 787 pass / 7 fail (unchanged). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
107 lines
3.7 KiB
Plaintext
107 lines
3.7 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/*/
|