A throwaway sandbox repo for Station — the autonomous engineering platform
being developed at /shared/station — to
exercise itself against during development.
Station runs Prose programs (fix, feature, test, dod, …) that create
Kanban items, write code, open PRs, and push commits. Until now it has been
doing all of that against its own repo (/shared/station), which clutters
Station's real Kanban board with throwaway test items.
This repo is the dedicated target instead. Station has full freedom here:
- create as many Kanban items as it wants
- create, edit, and delete files
- branch, commit, push, and open PRs
- run any of its programs end-to-end
Nothing here is precious. If it breaks, it gets fixed or wiped. The point is to have a realistic project to test against without polluting Station's own board or history.
This is an autonomous sandbox: the work here is driven end-to-end by Station's AI, with no human in the loop.
- Purpose — give Station a safe place to run a full task lifecycle — plan, implement, commit, open a PR, and ship — exactly as it would on a real project, but where mistakes are cheap and nothing is precious.
- Ownership — Station AI owns this project. It picks up Kanban items, decides how to implement them, and lands the work itself. There is no human reviewer gating each change; the operator sets direction, the AI executes.
- Auto-merge policy — because the AI owns the repo, work is shipped
autonomously: once a PR's checks pass it is auto-merged onto
alpha(rebase-and-merge only — seeCLAUDE.mdfor the linear-history rule), with no manual approval step. Auto-merge is enabled on the PR as soon as it is opened so a green build flows straight toalpha.
The deployed app under web/ is one product: Release Readiness — a release
checklist with owners, due dates, overdue warnings, and progress kept in the
browser. It is live at
https://testing-alpha.up.railway.app
and it is the only public page besides the /health endpoint.
The shadcn-svelte primitives and the adapters over the src/ libraries stay in
the tree as internal implementation. They have no showcase route and no
navigation entry: the product is the surface, the library layer is not.
Railway builds the app from the repository root so those adapters can import
the src/ libraries; railway.json keeps install, build, and start scoped to
web. See DEV.md.
The repo is a monorepo of small zero-dependency modules under src/ (each with
its own tests) plus a SvelteKit web/ app. A single command runs the whole
src/ suite:
npm testThat invokes scripts/test-all.mjs — a zero-dependency
Node runner that discovers every src/<module>/ with a test script and runs
each module with its own declared runner (both node --test and vitest
modules are honoured; a module whose deps fail to install is reported as a
failure, never silently skipped).
CI runs the same command on every pull request and on pushes to alpha via
.github/workflows/ci.yml. This is the gate the
auto-merge policy above depends on: a PR only reaches alpha once the suite is
green. See docs/ci-notes.md for details.
To run every CI gate locally in one command — plus an environment preflight, the
src/ layout invariants, and the Markdown link graph — use the repository health
check:
npm run doctor # full: adds the test suite and the web app checks
npm run doctor -- --quick # fast: static checks only, no installTo see the state of your checkout before you start work or push a change, run:
npm run pulsescripts/pulse.mjs prints one report: the current
branch and its position against the tracked base, a clean or changed worktree,
the latest commit, the project manifests on disk, and the verification commands
of this repository with the steps continuous integration gates on. It reads
local data only, it changes nothing, and it always exits 0. Add --json for
the same facts in machine form.
npm run pulse reports. npm run doctor judges. Use the pulse to orient
yourself; use the doctor to know if the change is ready.
New here? docs/QUICKSTART.md is the 10-minute
path: prerequisites, the first commands, the repository map, the command-to-gate
table, how to add a library, and how a change lands on alpha.
Every src/ library is indexed in docs/CATALOG.md —
a generated table of each module's description, entry point, and test command.
It is produced from the modules on disk by
scripts/gen-catalog.mjs and drift-guarded in CI
(node scripts/gen-catalog.mjs --check), so it can never silently fall out of
date as libraries are added or renamed.
For composed workflows, see the Library Cookbook. Its runnable examples cover CSV validation, explicit results, strict durations, function pipelines, retry control, and LRU caching.
The repo itself stays — only its contents are disposable. Treat
README.md and .gitignore as the stable baseline; everything else is fair
game for Station to generate, mutate, or remove.
CLAUDE.md and AGENTS.md are bidi-synced with Station's Convex agentDocs
table by the station-agent-docs-syncer daemon. Do not hand-edit them — edit
through the Station UI. The *.STATION_AUTO_MANAGED_DO_NOT_EDIT.md marker
files document this.
- 2026-05-30: Tab-2 concurrent plan-creation smoke test — a new plan was created from Tab 2 (run
k57c8afm8g98rnhzbpv93x7g4187qcgs) while Tab 1 watched the Planning board; Tab 1 reflected the new plan live, without a manual refresh.