Fills the middle of the site. Nine routes, every body a heading slice of AGENTS.md or README.md, and the article layout given the furniture the design calls for. The manifest gains the two concepts nothing covered: /concepts/task-files/ (the header format, from AGENTS.md's own section) and /concepts/adapters/ (the adapter summary, which is the other half of the three-layer law). /concepts/stages/ now runs through "Moving a task", because the five directories and moving between them are one idea. The layout: - A lede under the title — the one sentence an article authors, taken from the manifest's `description` or an explicit `lede` where the two want different words. A slice starts mid-document; a reader arriving from the nav is owed a line saying what they are looking at. - Prev/next at the foot, walking the sidebar's own order so the arrows and the rail cannot disagree. Pages with no section (the landing page, the 404) are not on the flow. - "Edit this page on GitHub" anchors to the section the page was cut from, built from the same `from` heading the slice starts at. Two bugs the new pages found: - string.Template substitutes inside HTML comments, so a comment naming the body placeholder emitted the whole body twice and closed itself early on the first `-->` in it. - Promotion could produce a second <h1>. A slice that deliberately runs past its own section carries headings at the `from` level, and those promoted to h1 on a page that already had one. Promotion now stops at h2, where they read as peers — which is what putting them on one page said in the first place. tests/test_site_pages.py covers the furniture on the real built site: the routes, the layout, the sidebar marking one page, the contents list being exactly the body's own h2s in order, the prev/next chain end to end, the edit link's anchor, the six landing-page doors, and a table, a fenced block and a nested list surviving the renderer. The scratch-repo helper now copies every file a slice links to, since the builder checks those exist. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
124 lines
4.7 KiB
JSON
124 lines
4.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": "## Claiming a card"
|
|
},
|
|
{
|
|
"path": "/concepts/task-files/",
|
|
"title": "Task files",
|
|
"layout": "article",
|
|
"section": "Concepts",
|
|
"description": "A task is a markdown file with a numbered name and a short header. Status is the only field the board enforces.",
|
|
"source": "AGENTS.md",
|
|
"from": "## Task file format"
|
|
},
|
|
{
|
|
"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": "/concepts/adapters/",
|
|
"title": "Agent adapters",
|
|
"layout": "article",
|
|
"section": "Concepts",
|
|
"description": "Headless jobs run through an adapter, so the board works with coding agents other than Claude Code — and never sees a vendor's payloads.",
|
|
"lede": "The adapter is the layer that knows a coding agent. It launches one headless job, and translates that vendor's events into the board's own schema — which is what keeps every other line of core free of any particular agent.",
|
|
"source": "AGENTS.md",
|
|
"from": "## Agent adapters",
|
|
"to": "## Drives"
|
|
},
|
|
{
|
|
"path": "/404.html",
|
|
"title": "Not found",
|
|
"layout": "notfound",
|
|
"section": null,
|
|
"description": "That path is not a page on this site.",
|
|
"source": null
|
|
}
|
|
]
|
|
}
|