Turn design 1b (Dockside) into `/`: a terminal hero, the claim README.md already makes, six doors, and a strip at the foot. The layout is task 31's; what this commit is really about is that nothing factual on the page is typed by hand. - **Two facts are read, not written.** `site/build.py` reads the install one-liner out of README.md's "Install into a repo" block and the version out of `manager/core/VERSION`, and offers them to the template as `$install_block` and `$version`. A renamed section, a missing VERSION or an install section that lost its command block stops the build, exactly as a renamed heading already did. `pages.json` loses its `version` key, and a build refuses one if it comes back. - **A dead internal link stops the build.** Every href a rendered page emits — a door as much as a link inside a slice — must resolve to a route in the manifest or a file in `static/`/`root/`. The check runs after rendering and before writing, so a bad link leaves the last good build standing rather than shipping a 404 with a nice typeface. - **Six real doors.** `pages.json` grows the routes they open: install and first run, the five stages, agents on the board, PRs and review, team mode, the three-layer law. They are heading slices, i.e. the stub routes task 33 expected and task 34 will re-cut. - **The terminal is a transcript.** README.md's own command, then lines install.py and board.py really print, with the abridgement declared in the terminal's title bar. `tests/test_site_landing.py` holds every one of those lines against the source that prints it, so a reworded prompt fails the suite instead of quietly making the page fiction. - **No fake telemetry.** Turn 1's "most opened this week" strip becomes the version, read from VERSION, and a link to the releases. The landing page no longer carries a generated body, so the tests that read one from it now read `/concepts/stages/`, and the two scratch repos in the suite copy VERSION alongside the markdown. python3 -m unittest: 407 tests, OK. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
104 lines
3.7 KiB
JSON
104 lines
3.7 KiB
JSON
{
|
|
"site": {
|
|
"title": "bench",
|
|
"tagline": "docs",
|
|
"description": "A live kanban for coding-agent work: task files in stage directories are the only source of truth.",
|
|
"base_url": "https://bench.12vectors.com",
|
|
"repo_url": "https://github.com/12vectors/bench",
|
|
"issues_url": "https://github.com/12vectors/bench/issues",
|
|
"releases_url": "https://github.com/12vectors/bench/releases",
|
|
"blob_base": "https://github.com/12vectors/bench/blob/main/"
|
|
},
|
|
|
|
"link_routes": {},
|
|
|
|
"pages": [
|
|
{
|
|
"path": "/",
|
|
"title": "bench — a live kanban for coding-agent work",
|
|
"layout": "home",
|
|
"section": null,
|
|
"description": "Task files in stage directories are the only source of truth. A stdlib-only board narrates what happens to them — agents working in git worktrees, PRs opening on review, CI on the cards — and never merges anything itself.",
|
|
"source": null
|
|
},
|
|
{
|
|
"path": "/guides/install/",
|
|
"title": "Install and first run",
|
|
"layout": "article",
|
|
"section": "Guides",
|
|
"description": "Untar bench into .task-manager/, run start.sh, and answer the three questions the first run asks.",
|
|
"source": "README.md",
|
|
"from": "## Install into a repo",
|
|
"to": "## Update"
|
|
},
|
|
{
|
|
"path": "/concepts/stages/",
|
|
"title": "The five stages",
|
|
"layout": "article",
|
|
"section": "Concepts",
|
|
"description": "backlog, to-do, in-progress, review, done — the directory a task file sits in is its status, and there is no other source of truth.",
|
|
"source": "AGENTS.md",
|
|
"from": "## Stages",
|
|
"to": "## Moving a task"
|
|
},
|
|
{
|
|
"path": "/concepts/claiming-a-card/",
|
|
"title": "Claiming a card",
|
|
"layout": "article",
|
|
"section": "Concepts",
|
|
"description": "Claiming is moving: taking a card towards work is the commitment, and that is where ownership is recorded.",
|
|
"source": "AGENTS.md",
|
|
"from": "## Claiming a card",
|
|
"to": "## Syncing boards"
|
|
},
|
|
{
|
|
"path": "/concepts/agents-on-the-board/",
|
|
"title": "Agents on the board",
|
|
"layout": "article",
|
|
"section": "Concepts",
|
|
"description": "Start work makes a worktree and a branch, runs the agent headless, and moves the card on the way it exits.",
|
|
"source": "AGENTS.md",
|
|
"from": "## Agents working the board",
|
|
"to": "## Pull requests"
|
|
},
|
|
{
|
|
"path": "/concepts/pull-requests/",
|
|
"title": "PRs and review",
|
|
"layout": "article",
|
|
"section": "Concepts",
|
|
"description": "A card entering review gets a PR opened for it by the board; then review PR, copilot and act on PR, until it settles.",
|
|
"source": "AGENTS.md",
|
|
"from": "## Pull requests",
|
|
"to": "## Stages"
|
|
},
|
|
{
|
|
"path": "/concepts/team-mode/",
|
|
"title": "Team mode",
|
|
"layout": "article",
|
|
"section": "Concepts",
|
|
"description": "BOARD_SYNC makes origin/main the truth and every board a converging replica: moves commit and push themselves, and a beat pulls what the other boards published.",
|
|
"source": "AGENTS.md",
|
|
"from": "## Syncing boards",
|
|
"to": "## Task file format"
|
|
},
|
|
{
|
|
"path": "/concepts/three-layer-law/",
|
|
"title": "The three-layer law",
|
|
"layout": "article",
|
|
"section": "Concepts",
|
|
"description": "Core knows tasks, worktrees, PRs and events. Drivers know apps, adapters know agent vendors, local/ knows your project.",
|
|
"source": "README.md",
|
|
"from": "## The three-layer law",
|
|
"to": "## License"
|
|
},
|
|
{
|
|
"path": "/404.html",
|
|
"title": "Not found",
|
|
"layout": "notfound",
|
|
"section": null,
|
|
"description": "That path is not a page on this site.",
|
|
"source": null
|
|
}
|
|
]
|
|
}
|