marketplace.officer.dev is live, and the plugin repos have READMEs
The site is up on HTTPS with a Let's Encrypt certificate, proxied to :9100, and serving the three plugins out of `officer_marketplace`. An Officer install with no configuration now reads its catalogue from it. ── What is running ── PM2 entry added to THIS machine's ecosystem only. Deliberately not in officer-setup's CORE_PROCESSES: the marketplace is one website officer.dev hosts, not something every install should run — a copy on every machine would serve a stale catalogue on a port nobody asked to open. nginx (NPM host id 7) → 172.20.0.1:9100, with a ufw rule for the docker bridge. That rule is not optional and its absence does not look like a firewall problem: without it nginx HANGS until proxy_connect_timeout rather than being refused, which is how the apptest hosts wasted an hour a few days ago. ── READMEs ── `music`, `offscale` and `example` now have proper READMEs, written against their own code and pushed to their own repos. They render on the plugin's page in the store and are what a self-hoster reads before installing. The example's is a tutorial as much as a shop window — it is the document a plugin author reads first, and every convention in it was verified in `discover.ts` rather than restated from memory. `music`'s remote was HTTPS with no credentials on this box, so it could not be pushed; switched to SSH like the other two. The catalogue still advertises HTTPS — `marketplace-sync` converts — which is the property that matters, since an `ssh://` clone URL only works on the machine that published it. ── Writing them was the cheapest audit available ── Reading each plugin against its own documentation turned up ~20 real defects, all recorded in TODO.md and none fixed here. The pattern worth naming: offscale is still branded "headscale" in user-visible panel names and in a persisted terminal session id, and its PLUGIN.md states outright that the ACL assistant is deliberately unwired — while `sidecar/assist.ts`, `claude-proxy.ts` and `PolicyAssistant.tsx` all ship. Documentation that confidently describes the opposite of the code is worse than none. Also fixed the docs on the frozen lockfile: both CLAUDE.md and bunfig.toml named `bun install --no-frozen-lockfile` as the escape hatch, and bun 1.3.14 has no such flag — it is ignored and the install fails anyway. tsgo clean, 873 pass / 7 fail unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -117,7 +117,8 @@ imported by their package name (`officerdev`, `hooks`, `state`, `types`, `helper
|
||||
- **Language**: TypeScript, strict. `bunx tsgo` is clean — keep it that way.
|
||||
- **Frontend**: React 19, React Router 7, React Query, Tailwind 4, shadcn/ui + custom components
|
||||
- **Backend**: Hono
|
||||
- **Database**: one Postgres database via Drizzle
|
||||
- **Database**: Postgres via Drizzle — `officer` for the platform, plus `officer_marketplace` on the
|
||||
host that serves marketplace.officer.dev (see `docs/marketplace.md`)
|
||||
- **Agents**: Claude Code and opencode, driven through sidecars; tools exposed over MCP
|
||||
|
||||
## Data
|
||||
@@ -125,7 +126,11 @@ imported by their package name (`officerdev`, `hooks`, `state`, `types`, `helper
|
||||
Two stores, and the split matters:
|
||||
|
||||
**Postgres** (`src/databases/officer_db`) holds the account, passkeys, settings, dashboards,
|
||||
email accounts, queue and pipeline jobs. One directory per feature holding `schema.ts` and
|
||||
email accounts, queue and pipeline jobs. Since 2026-08-16 there is a SECOND database,
|
||||
`officer_marketplace` (`src/databases/marketplace_db`), and the split is deliberate: it is a public
|
||||
catalogue served by a process with no login, no session and no user, so sharing a connection would put
|
||||
an unauthenticated surface one query away from every private table. It runs only on the host serving
|
||||
marketplace.officer.dev — `docs/marketplace.md`. One directory per feature holding `schema.ts` and
|
||||
`queries.ts` beside each other; `src/schema.ts` is what `db:push` reads, and it lists the core tables
|
||||
with the plugin ones commented out. Types inferred from the schema in `src/types.ts`.
|
||||
|
||||
@@ -249,8 +254,10 @@ credentials, SSH and PEM keys, `.env` files and `.claude/settings.json`, then re
|
||||
through any npm token it found. It reached 434 further packages across 1,381 versions. This machine was
|
||||
unaffected only because nothing had installed since 2026-08-02.
|
||||
|
||||
**To change a dependency:** edit `package.json`, run `bun install --no-frozen-lockfile` deliberately,
|
||||
**read the lockfile diff**, and commit it. The friction is the point — an unexplained lockfile change
|
||||
**To change a dependency:** edit `package.json`, allow the lockfile to change deliberately, **read the
|
||||
diff**, and commit it. Note that `--no-frozen-lockfile` — which this file and `bunfig.toml` both used to
|
||||
name — is NOT a flag bun 1.3.14 has; it is silently ignored and the install still fails frozen. Comment
|
||||
out `frozenLockfile` in `bunfig.toml` for the one command, then put it back. The friction is the point — an unexplained lockfile change
|
||||
in a diff is the signal this exists to produce.
|
||||
|
||||
**Do not** add `--no-frozen-lockfile` to a script, a Dockerfile or CI to make an error go away. The
|
||||
|
||||
Reference in New Issue
Block a user