Docs

Thinking

Issue kinds

Planned, backlog and hot Issues are three ways into the same task contract. They differ in who writes them, how long the body is and whether they declare relations.

Draft
Planned
Backlog
Hot
Issue body

About Issue kinds

Every task is a GitHub Issue. Vinaya has three kinds. They differ in why they exist, who writes them, how long their body is and whether they declare relations to other tasks.

All three lead into the same task contract. Each freezes into a brief, any kind can run in any execution mode, and every pull request lands on its Issue's parent branch (see Overview).

KindWhyWritten byBodyRelationsGuide
PlannedPart of a planThe Planner, inside a trancheFull: objectives, Surface, parts, checked facts, test planDependencies, conflicts, orderDeploy medium work
BacklogA stand-alone fixThe Planner, aloneShort: evidence pasted, every code fact as a checked fact, one or two objectives, pinned files, proof; no free text about codeNoneDeploy backlog issues
HotMust change nowThe Principal, at entry, with the readiness check done in person and recordedMinimal: objective, pinned files, the facts readNoneDeploy hot issue now

A backlog Issue that turns out to need ordering is cut into a tranche instead. See Tranches and tasks.

How each kind flows

StepPlannedBacklogHot
MarkerLabel vinaya/tranche:<slug>No vinaya/tranche:* label at allLabel vinaya/hot
Writevinaya issue create --label vinaya/tranche:<slug> --body-file <path>vinaya issue create --body-file <path> (no --label)The same validated write, single-fix profile, plus a Readiness: line
Branchtask/<tranche>/<n>task/issue-<n>task/issue-<n>
Freezevinaya task brief <tranche> <n>vinaya task brief --issue <n>vinaya hot start --issue <n>
Runvinaya task run <tranche> <n> --agent …vinaya task run --issue <n> --agent …The Principal and an agent edit live; vinaya hot review --issue <n>
MilestoneAttached automatically when an open Milestone names the slugNoneNone

Body sections

Planned: the full form

The sections, in order:

SectionGrammarRequired
TitleTranche slug, task number, an em dash, then the outcome titleYes (issue-title-grammar)
**Tier:**0, 1 or 3Yes
**Project:**Registered project names, comma-separated, line-anchoredYes (project builtin)
**Type:**build, chore, docs, feat, fix, perf, refactor, revert, style or testIn the template
## ObjectivesO<n>. <sentence>, numbered from O1 with no gaps, one observable outcome each, no file pathYes (objectives builtin, issue-objectives-numbering)
## Documentation- <source> — <mechanism it governs> (O<n>) per source, or the single line NoneYes (briefSections builtin)
## Planner's rationaleEight fields (below)Yes (issueRationale builtin)
## PremisesOne line per fact: `<path>` contains `<text>`, or after #<n>: `<path>` contains `<text>`Optional. The only sanctioned place for a fact about code
## Surfacein: and out: folder-level glob lists. * means root-level files onlyYes (briefSections, issue-surface-globs)
## PartsPart <k> (O<n>[, O<m>]) — <outcome>, outcomes and symbols onlyYes (briefSections, issue-parts-coverage)
## Test planA fenced command list, each <command> → <expected observable>, plus **[principal]** items; or Test plan: unit-tests-onlyYes (briefSections)
## Stop conditionsA bullet listYes (briefSections)
## OriginWhere the task came fromIn the template

The eight rationale fields:

  1. Boundary, with Pinned files: and Out:
  2. Sizing
  3. Project(s) + blast radius
  4. Dependency rationale, bold-inline only
  5. Traps to avoid
  6. Suggested agent-class
  7. Stop-and-escalate
  8. Docs to keep coherent: paths, or no-doc-surface

No priority, estimate, points, status or pull request number may appear in the body. Vinaya's own repository configures the briefSchema.issue.sections builtins issueRationale, objectives, briefSections and project.

Backlog: the single-fix form

The same body, with three rationale fields left out: Sizing, Project(s) + blast radius, and Dependency rationale (written only if the fix does have an edge). Every other section is the same, with the same grammar.

The title takes the commit-type form Type(scope): Description, which is reused as the pull request title. An Issue gets this profile when it carries no task label.

Roles

RolePlannedBacklogHot
PlannerWrites it, with the full readiness stepWrites it, with the full readiness step—
PrincipalApproves the trancheStill an open decisionWrites it and performs the readiness step in person
OperatorMay run issue create --validate-only on a draftThe same; never issue create (a planned rule)Never enters hot mode

Gates

All three kinds pass the same Issue write: the five Issue checks and the briefSchema.issue builtins (see Thinking). Where they differ:

GatePlannedBacklogHot
issue-milestone-attachAppliesDoes not applyDoes not apply
Rationale checkEight fieldsFive fields (single fix)Single-fix profile plus Readiness:
dispatch-readinessEdges and Issue checked--issue mode: the rationale as a single fixhot start refuses while a driver is live or a pause is open
first-push-dispatch, branch-topologyActiveDormant for task/issue-<n>Dormant

Configuration

KeyEffect
briefSchema.issue.sectionsThe builtins every kind passes
gateCutoversThe Issue number from which the objectives, briefSections and Documentation rules apply
principalsPlanned: who may enter hot mode. hot start reads it from the default branch and stops if that read fails

What gets logged

The same as Thinking: operation · completed per command, and gate · checked for failing checks.

What's next