board-validate
Skill6 starsChanged 48 days agoMITView on GitHub
Check the board (data.json) for structural and logical integrity. Use before running the orchestrator, after hand-editing the board, or when a run picks the wrong ticket — validates the schema, dependency graph, agent plans, and status consistency.
In this repository24 other files it gives its agents.
- docs/AGENTS.mdAGENTS.md
- atomic-reportSkill
- data-modelSkill
- delivery-hygieneSkill
- dev-reportSkill
- dev-setupSkill
- frontend-qualitySkill
- gcSkill
- git-branchSkill
- land-and-archiveSkill
- orchestration-healthSkill
- orchestratorSkill
- pipeline-qualitySkill
- plan-updateSkill
- project-planSkill
- release-gateSkill
- repo-auditSkill
- scaleSkill
- security-reviewSkill
- swarmSkill
- test-coverageSkill
- tpmSkill
- trackerSkill
- worktree-cleanupSkill
The file
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 0 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
Run node {{KIT}}/scripts/validate-board.mjs {{BOARD}}/data.json and fix what it flags.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Board Validate
Run node {{KIT}}/scripts/validate-board.mjs {{BOARD}}/data.json and fix what it flags.
Validate whenever the board was hand-edited or a run behaves unexpectedly.
What to check
- Schema — every ticket matches
{{BOARD}}/board.schema.json(validstatus,priority,swag,model; requiredid+status). Tickets in{{BOARD}}/archive.jsonare schema-checked too — they stay dependency targets forever. - Unique ids — no two epics or tickets share an id, across
data.json+archive.json. A cross-file collision is an error: archive-on-done tooling deletes the wrong ticket on exactly that case. - Dependencies resolve — every id in
depends_onexists indata.jsonorarchive.json(landed tickets move to the archive by design, so deps legitimately point there), and there are no cycles. An id found in neither file is a hard error: the runtime treats an absent dependency as satisfied, so a typo silently unblocks the ticket instead of holding it. - Archive-only statuses —
archived,duplicate, andwont-doare terminal states for tickets that left the board without being completed; they may appear only inarchive.json. A live ticket carrying one is an error — folding a declined or duplicate ticket intodonerecords work as finished that never was. - failureKind — blocker tickets from a failed merge may carry
failureKind(merge-conflict,merge-schema-invalid,merge-unknown-status,merge-missing-sha) so failures are classifiable; the validator warns on unknown values. - Eligibility sanity — at least one
todoticket is unblocked, or the orchestrator will correctly reportidle. If you expected work to run, this is usually why it didn't. - Agent plans — every code in
agent_planmaps to a real agent inagents/. Terminal gates (qa → merge, pluspdfor multi-agent/human-gated) are appended at run time by the orchestrator, so a bare["backend"]is fine — it runsbackend → qa → merge. - Model floors — the validator warns when a ticket's
modelis below its area's floor (config.model.floors); it will run on the stronger model. Set it explicitly to silence the warning. - Epic references — every
epicIdpoints at a real epic. - Plan scope — once
{{BOARD}}/plan.jsonnames a deliverable, use case, or requirement, the validator warns on any ticket whosetraces_tois empty, points at an id the plan doesn't define, or points at anOUT-id. It stays a warning here on purpose: you must be able to jot a ticket before the plan covers it. It becomes a block at run time — the orchestrator refuses to pick a scope-blocked ticket. Fix it by adding the requirement (/plan-update) or by having a human write ascope_exceptionwith the reason. A project with no plan has the gate off, and the validator says so. - Initiative ownership — only once
{{BOARD}}/plan.jsondefines at least one initiative; a plan without them changes nothing here. Then:- a live epic with no
initiativeIdwarns, and its tickets are refused at pick time. That split is deliberate: a board gains its first initiative with every epic unassigned, and erroring would make it invalid at exactly the moment nothing could fix it — the plan CLI cannot write a board. So the work stops without the board breaking. Assign it withmaestro ticket edit-epic <id> --initiative <I-n>. - an epic naming an initiative the plan does not define is an error, whether or not the plan still defines any initiatives at all. Deleting the last one does not make a dangling reference acceptable, it just makes it easier to miss.
- a trace that crosses initiatives is an error, for epics and tickets alike. An epic or ticket may trace to a project-wide item (one no initiative owns) or to one owned by its own initiative. Nothing else.
- a
scope_exceptiondoes not clear an ownership error. It is a human's decision about project scope; it says nothing about which initiative owns a requirement. - archived epics and archived tickets are checked too — a landed ticket's traces are what per-initiative delivery is computed from, so a dangling one there corrupts the reporting rather than merely being untidy.
- a live epic with no
- Plan coverage — the validator lists plan items no ticket is working. An uncovered
FR-is either a missing ticket or a requirement that shouldn't have been in the plan. - Human gates — the validator warns when a
human_gatevalue isn't inconfig.humanGates, so gates stay a known vocabulary the orchestrator matches reliably rather than free text. It also warns when a human-gated ticket sits intodoorin-progress— the gate makes it ineligible, so that status is misleading; clear the gate or move it back tobacklog.
Common failures
- A ticket stuck because it
depends_onsomething that'sblocked, notdone. - A dev ticket wrongly depending on a release/prod ticket — prod is a separate track; remove the dependency.
- A ticket with no
model— it'll fall back to the area default; set it explicitly if it matters.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

