diff --git a/.github/DISCUSSION_TEMPLATE/ideas.yml b/.github/DISCUSSION_TEMPLATE/ideas.yml new file mode 100644 index 0000000..2aadd23 --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/ideas.yml @@ -0,0 +1,20 @@ +# Copied from heavy-duty/ceremony@0.1.0 .github/DISCUSSION_TEMPLATE/ideas.yml (heavy-duty/ceremony#24). Hand-maintained: no guard checks this against ceremony. +# Light on purpose: discussions are where ambiguity is ALLOWED — a form +# that demands rigor at the door defeats the room's purpose (heavy-duty/ceremony#24, +# decision 4). If these prompts fight the flow in practice, delete them +# before adding fields to them. +body: + - type: textarea + attributes: + label: What's the itch? + description: >- + Vague is fine — a bug, an idea, a "we should…". Triage turns this + into work (or an answer); you don't have to. + validations: + required: false + - type: textarea + attributes: + label: What would "done" feel like? + description: Optional — a sketch of the outcome, if you can already see it. + validations: + required: false diff --git a/.github/DISCUSSION_TEMPLATE/q-a.yml b/.github/DISCUSSION_TEMPLATE/q-a.yml new file mode 100644 index 0000000..2b810d6 --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/q-a.yml @@ -0,0 +1,16 @@ +# Copied from heavy-duty/ceremony@0.1.0 .github/DISCUSSION_TEMPLATE/q-a.yml (heavy-duty/ceremony#24). Hand-maintained: no guard checks this against ceremony. +# Light on purpose — same reasoning as ideas.yml (heavy-duty/ceremony#24, decision 4): +# optional prompts only, delete before hardening. +body: + - type: textarea + attributes: + label: What's the question? + description: Ask it plainly — context and links help, none are required. + validations: + required: false + - type: textarea + attributes: + label: What have you tried or read already? + description: Optional — saves the answerer a lap. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..c8bbd13 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,14 @@ +# Copied from heavy-duty/ceremony@0.1.0 .github/ISSUE_TEMPLATE/config.yml (heavy-duty/ceremony#24). Hand-maintained: no guard checks this against ceremony. +# The new-issue interception (heavy-duty/ceremony#24, decision 1): interception over +# instruction — prose alone has already proven insufficient everywhere else +# in this org. With blank issues disabled and exactly one form, a "New +# issue" click shows the discussion link first; that auto-suggest is native +# GitHub behavior, no automation needed. +blank_issues_enabled: false +contact_links: + - name: Ideas, bugs, questions — start a Discussion + url: https://github.com/heavy-duty/rig/discussions + about: >- + Humans (and agents) never file issues here — discussions are where + intent lives. Triage converges every discussion to an outcome, and + only triage mints issues (.ceremony/TRIAGE.md). diff --git a/.github/ISSUE_TEMPLATE/work-order.yml b/.github/ISSUE_TEMPLATE/work-order.yml new file mode 100644 index 0000000..3079b34 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/work-order.yml @@ -0,0 +1,76 @@ +# Copied from heavy-duty/ceremony@0.1.0 .github/ISSUE_TEMPLATE/work-order.yml (heavy-duty/ceremony#24). Hand-maintained: no guard checks this against ceremony. +# The issue contract (.ceremony/TRIAGE.md "The issue contract") as a form, so every +# minted issue lands with the same bones and a later parser (heavy-duty/ceremony#18) can key on +# stable section headings. Consistency, not a gate: the form applies no +# labels — queue labels are triage's explicit act (.ceremony/LABELS.md), and heavy-duty/ceremony#18's +# sweep is what catches non-triage authors, so the form must not pre-judge +# that (heavy-duty/ceremony#24, decision 2). +name: Work order (triage only) +description: >- + The issue contract (.ceremony/TRIAGE.md) as a form. Only triage mints issues — + everyone else starts a Discussion. Triage may still compose by hand when + the form fights it: `gh issue create --body-file` bypasses forms and stays + legitimate for the triage identity. +body: + - type: markdown + attributes: + value: >- + **The title names the deliverable** — "lib/version.sh — one version + abstraction, two backends", never "improve version handling". The + bar for everything below, stated once: a competent builder who has + read only this issue and the repo can succeed (.ceremony/TRIAGE.md). Labels + (type, `scope:*`, `ready`/`blocked`) are your explicit act after + minting — this form applies none. + - type: textarea + id: context + attributes: + label: Context + description: >- + Why this exists, with links — the discussion it came from, the code + it touches (permalinks at a pinned SHA, so line references cannot + rot), prior art in sibling repos. + validations: + required: true + - type: textarea + id: spec + attributes: + label: Spec + description: >- + Decisions made, not options listed. If the spec still has an open + question, the issue is not ready to exist. + validations: + required: true + - type: textarea + id: tasks + attributes: + label: Tasks + description: The steps, checkboxed, in order. + placeholder: "- [ ] the first step" + validations: + required: true + - type: textarea + id: acceptance-criteria + attributes: + label: Acceptance criteria + description: >- + Checkboxed, verifiable, and honest — these become the builder's + definition of done and the reviewer's review spec, verbatim. + placeholder: "- [ ] a verifiable outcome" + validations: + required: true + - type: textarea + id: test-plan + attributes: + label: Test plan + description: What proves it, including the cases that must fail. + validations: + required: true + - type: textarea + id: dependencies + attributes: + label: Dependencies + description: >- + `Blocked by #N` / `Blocks #N`, and `Part of #E` when an epic + organizes it — or state "None". + validations: + required: true diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..d77e282 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,21 @@ + + +Closes # + +## Acceptance criteria + + + +## Changelog + +- [ ] One line under `## Unreleased` — inserted **above** the heading below + it, never over it — or no behavior change, stated here. + +## Round log + + diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d3245b..e8d9b81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ on the way to cutting its first release, and this file starts there. ### Added - `drill/drill.sh` — the drill has an instrument: pinned-ref assertion, a mechanical idempotence diff, and a `drills/.md` record emitter (#105) +- GitHub entry templates route humans to Discussions and prefill triage work orders and pull requests (#123) - `kimi-box` joins the box tenant roles — the Kimi CLI agent guest (#109) - The `changelog-armed` guard returns, version-keyed (#112, ceremony#13) - The `.ceremony/` doctrine mirror, verified by `docs-sync` on every PR (#112, ceremony#19)