release 2026.08.23.03
Roles become a table and localization phase 0 lands. Both groundwork; nothing in the UI changes and nothing reads the new table yet. Schema change, additive only — the roles table is new and no constraint is added to an existing column, so it cannot fail on existing data. postdb:push seeds it. No dependency change; the two lockfile lines are the local i18n workspace being declared as a dependency of officerdev. The plan names the check that matters: four rows in roles, per host, by query — db:push can fail and exit 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# 2026.08.23.03
|
||||
|
||||
Roles become a table, and the localization infrastructure lands. Both are groundwork — nothing in the UI
|
||||
changes and nothing reads the new table yet.
|
||||
|
||||
**SCHEMA CHANGE.** `bun db:push` is a step, and `postdb:push` now seeds the new table automatically. The
|
||||
`roles` table is new. Additive only: no constraint is added to an existing column, so this cannot fail on
|
||||
existing data.
|
||||
|
||||
**No dependency change.** `bun.lock` gained two lines and they are the local `i18n` workspace package being
|
||||
declared as a dependency of `officerdev` — a workspace path, not a registry fetch. **Do not run
|
||||
`bun install`.**
|
||||
|
||||
## What is in it
|
||||
|
||||
- **`roles` is a table**, seeded with the four the platform already had, each marked `isSystem` because the
|
||||
code names it: `rolePermitsDevTools()` tests for `Developer`, bootstrap writes `Super Admin`, `users.role`
|
||||
defaults to `Member`. Nothing reads the table yet — `USER_ROLES` is still the type and `authorize.ts` is
|
||||
untouched. **There is deliberately no foreign key on `users.role`**; that change cannot go through
|
||||
`db:push` and is a later release.
|
||||
- **The seed runs from `postdb:push`**, so a host gets the four rows on its next schema push with no extra
|
||||
step here. It never overwrites an existing row.
|
||||
- **Localization phase 0** — plural selection through `Intl.PluralRules`, a `useFormat()` hook for dates and
|
||||
numbers, three namespaced catalogs deep-merged at the bridge, `dir` on `<html>`, and key-parity tests that
|
||||
fail the build on a missing key. The language picker now offers only the two catalogs that exist rather
|
||||
than twenty codes, eighteen of which silently rendered English. Stored bare codes widen on read
|
||||
(`en` → `en-GB`), with no database migration.
|
||||
- **SendOff's folder name is served rather than derived** — `/sendoff/targets` carries `displayName` and
|
||||
`myFolder` from the same helper the writer uses, so a picker cannot name a folder the writer will not
|
||||
create.
|
||||
|
||||
## Every host
|
||||
|
||||
1. `git fetch origin --tags` then `git merge --ff-only deploy/2026.08.23.03`
|
||||
2. **`bun db:push`** — and per the procedure, **verify by query, not by exit code.** Check that `roles`
|
||||
exists and holds four rows on that host. `db:push` can fail and still exit 0.
|
||||
3. `bun run plugins:update`
|
||||
4. `pm2 restart officer`
|
||||
|
||||
`officer` only. Step 3 restarts each plugin's own sidecar; that is the script's behaviour and belongs in
|
||||
the report.
|
||||
|
||||
**`macbookpro`:** append `/opt/homebrew/bin` to PATH for the `bun` commands, run `pm2` separately.
|
||||
|
||||
## The check that matters this release
|
||||
|
||||
```sql
|
||||
select count(*) from roles; -- expect 4
|
||||
```
|
||||
|
||||
Four rows named `Super Admin`, `Admin`, `Developer`, `Member`. If a host shows the table but zero rows, the
|
||||
`postdb:push` hook did not run — report it as a failure for that host rather than as a success, and say so
|
||||
per host in the report.
|
||||
|
||||
No direct SQL is needed and none is authorised for this release.
|
||||
|
||||
## Hosts to expect trouble from
|
||||
|
||||
- **`edge-pertento-bridge`** — skipped, per `docs/servers.md`. Name it and spend nothing on it.
|
||||
- **`production-pertento-bridge`** — came back last release after two behind. Nothing special expected.
|
||||
|
||||
## `officer-dev` — skip it
|
||||
|
||||
The rollout runs from here. It already holds the release and the four rows, verified locally.
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "officer",
|
||||
"version": "2026.08.23.02",
|
||||
"version": "2026.08.23.03",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"workspaces": [
|
||||
|
||||
Reference in New Issue
Block a user