a005acb93d
CI / full-gate (push) Successful in 2m38s
README loses the competitor comparison, the personas and the repeated philosophy; the
five near-identical E2E command blocks become a table plus one command, and the file
map a clause per entry. AGENTS.md keeps every decision but drops the narrative around
them. todo.md's completed items collapse to their task line — git holds the rest.
Comments lose restatement, README duplication and history ("used to", "originally",
dated notes). AGENTS.md gains a Prose discipline section making this a standing pass on
every change rather than a one-off cleanup.
src/compose.test.ts now expects 6 documented E2E run commands, not 10, since the README
states the command once instead of per suite.
examples/
Copy-in reference material. Each subfolder mirrors a drop-in mount dir at the repo root — copy it across (or bind-mount your own) and restart.
| Path | Copy into | Example of |
|---|---|---|
plugins/scheduling/ |
plugins/scheduling/ |
The reference plugin: a list page over an upstream REST service, a CSRF-guarded form that forwards a write, and permission-gated nav — built from the core building blocks, holding no state. Imports the host surface as #plugin-api. See its README and the plugin contract. |
plugins/admin/ |
plugins/admin/ |
The system-admin plugin: the Users / Groups / Permissions / OAuth2-clients screens for running Plainpages itself. A system plugin — it administers the Ory identity stack via the privileged ctx.system surface instead of its own upstream. Copy it in to get a GUI for user & group admin. See its README. |
config/menu.ts |
config/menu.ts |
The central menu override + branding template (rename/group/order/hide nav, set app name/logo/theme). Imports its typed builder as #menu-config; config/ ships empty, so defaults apply until you copy this in. See The menu system. |
shifts-upstream/ |
— (dev service) | A throwaway mock backend the reference plugin reads/writes — stdlib-only, in-memory, no auth. Stands in for your real service so docker compose up shows the plugin working out of the box; in production you point SCHEDULING_UPSTREAM at the real thing instead. |