basic BMAD setup

This commit is contained in:
Ebbe Baß
2026-10-15 08:57:23 +02:00
parent 44029127dc
commit 5e747654b9
438 changed files with 41818 additions and 0 deletions
@@ -0,0 +1,51 @@
# tickets.toml — a container's agreed children. tickets.py reads it.
# The order of the tables is the build order: move a table to reorder. `id` names a child for good and is never reused; it is not an order.
# An epic's file holds [[entry]] tables. An initiative's holds [[epic]] tables; with no epics it holds [[entry]] tables.
# Keys tickets.py does not know are ignored, so a team may add its own.
# Status never lives here: an entry with no plan and no leaf file is planned; its plan beside it carries `status`, and on a tracker `tickets.py mirror` writes `tracker_status` in the leaf file.
# ---- In an epic folder: one table per planned story, spike, or bug ----
[[entry]]
id = 1 # the leaf file carries it as `id:`; refer to it as 1 here, as <epic id>.1 from another epic
type = "story" # story | spike | bug
title = "Cart service scaffold"
description = "Stands up the cart service with one add-item path through UI, API, and store."
verify = "A shopper adds one item on the deployed site and sees it in the cart."
covers = ["R1"] # ids from the epic's requirement source
after = [] # real prerequisites only, never the sequence; empty means it can run beside anything above it. A bare number is a sibling's id; everything else is quoted
hitl = true # a person runs the starter
risk = "low" # low | medium | high
# estimate = 2 # only when the user gives one; never proposed
# unknown = "..." # a question to settle with the user before this entry starts, one sentence; `tickets.py next` lists the entry under blocked until it is removed
# references = ["architecture-checkout/architecture-checkout.md#ad-8"] # what this entry needs beyond the epic's own References; pull writes them to the ticket
# notes = ["..."] # the user's words only, never filled by the agent; pull writes them to the ticket's Notes
# refine = true # refine to full acceptance criteria before it starts
# plan_checkpoint = true # a person reviews the ticket, or the builder's plan, before work starts
# done_checkpoint = true # work pauses after this ticket until a person says continue
[[entry]]
id = 2
type = "story"
title = "Apply and refuse discount codes"
description = "Adds code validation to the pricing call and shows the refusal reason."
verify = "A valid code lowers the total; an expired one is refused with its reason."
covers = ["R2", "R3"]
after = [1, "1.3"] # a sibling's id; "<epic id>.<entry id>" for an entry in another epic; "epic-<slug>" for that whole epic
hitl = false
risk = "medium"
# ---- In an initiative folder: one table per epic; table order is the build order ----
[[epic]]
id = 1 # entries in other epics refer to this epic's entries as 1.<entry id>
slug = "epic-pricing-rules" # the epic's folder name
title = "Pricing rules"
covers = ["P1", "P2"]
[[epic]]
id = 2
slug = "epic-cart-rules"
title = "Shoppers manage their cart"
covers = ["C1", "C2", "C3"]
after = [{ epic = 1, needs = "the one-function pricing contract" }] # what this epic needs from which; the entries that wait on it carry the `after`