Skip to content

Issue contract ​

Body ​

HeadingRequiredContent
## OutcomeyesWhat is true when done.
## Acceptance criteriayesNumbered, each checkable.
## Depends onyesIssue references, or None.
## NotesyesConstraints, pointers, out of scope.
  • The build session copies the body as its brief. It does not improve it.
  • One change per issue.
  • The server parses only ## Depends on. The other headings are for the session.

Labels ​

One factory:* label at a time. Matched exactly, case-sensitive.

LabelSet byColourFactory action
factory:proposedperson, bot, factoryc5def5None. Refused approvals land here.
factory:readyinstructor0e8a16Claim on next pass if unassigned, approved, unblocked, not paused, slot free.
factory:triagefactoryfbca04Assigned to the factory login; session launching.
factory:buildingfactory1d76dbSession running; instructor comments and edits forwarded.
factory:needs-infofactoryd93f0bQuestions posted; issue unassigned; run finished.
factory:pr-openfactory5319e7PR passed the gate and is ready; instructor feedback relaunches.
factory:stuckfactoryb60205Reason posted; issue unassigned; run finished.

Restart from needs-info or stuck: an instructor sets factory:ready. That is a new run.

Approval ​

A claim needs all of:

RuleFailing it
The latest factory:ready label event was applied by a login in instructors (case-insensitive), of type User.Moved to factory:proposed with a comment.
No body edit or title change by a non-instructor at or after that label event.Moved to factory:proposed with a comment.
The edit history is short enough to judge.Moved to factory:proposed; file a new issue.
No assignee.Skipped.
Issue open.Skipped.

Dependencies ​

SourceSyntaxRead
GitHub "blocked by" linknative issue relationshipfirst
## Depends on section#12, owner/repo#12, anywhere in the section until the next headingwhen no linked blocker is open
  • None., empty, or no section: no dependencies.
  • Not recognised: full URLs, word#12, # without digits.
  • Resolved: the issue is closed, for any reason. Open: blocks.
  • A reference that cannot be read blocks.
  • At most 100 references.
  • Checked only before the claim. A blocked issue stays factory:ready, takes no slot, and nothing is written to GitHub.

Instructors after the claim ​

StateInstructor commentInstructor body editNon-instructor body or title edit
triage, buildingForwarded to the session (max 20,000 characters).Sent whole; session restarts its contract.factory:stuck
pr-openOn issue or PR, or a PR review: new session on the PR branch, PR to draft, label to building. Read at most every 10 minutes.Not read as feedback; comment instead.factory:stuck when next acted on.

An instructor comment whose edit history includes a non-instructor is not forwarded; the factory comments that it did not send it.

What sends an issue to needs-info ​

The build session decides, and ends with FACTORY-STOP: needs-info when:

  • the outcome or the acceptance criteria are missing,
  • two readings would give different code,
  • a real product choice is left open,
  • the issue holds two independent units of work.

The session asks every question at once, each answerable in a sentence.