Tutorial: build Blockfall

This tutorial follows one small browser game from a human intention to a reviewed, merged batch. You are the human. Your agent does the implementation.

You will practise the whole collaboration: spark, refine, pitch, accept, estimate, roadmap, breakdown, clarification, start, handover, review, rework, complete and merge.

::: tip What you will learn How to talk to a agent, what the agent does in mdBoard, when you must decide, and how the board changes. The commands are shown in collapsible sections; you do not need to run them. :::

1. Set up the project

mkdir blockfall
cd blockfall
git init
git commit --allow-empty -m "Start Blockfall"
mdboard init --upstream main \
  --subscription "DeepSeek-V4.1-Flash (off-peak)" \
  --eur-per-million-tokens 0.21
git add .
git commit -m "Initialize mdBoard"

Connect the agent:

Human: Read AGENTS.md, then run `mdboard runbook` and `mdboard context`.
       You are the agent for Blockfall. Follow the runbook.
       Never self-approve or merge. Introduce yourself and brief me.

Agent: mdBoard is ready. No upstream iteration is open. Roadmap 0 of 5.
          I can start a iteration or help you shape the first idea.

2. Start the iteration

Human: Start the upstream iteration.

Agent: Iteration 1 is open from main. I hold the writer lease.
          The board is ready.

::: details What the agent runs mdboard upstream start :::

3. Spark the game

Human: I want a minimal falling-block game in the browser. One piece
       falls; arrow keys move and rotate; game over is clear.

Agent: Created #0001 as a spark with exactly that intent. Do you want
          to refine it now?

The card is an idea in spark. It is one sentence, not a specification.

4. Refine it

Human: Yes. Ask me the decisions that matter, then write acceptance criteria.

Agent: Four decisions:
          1. Grid size and cell size?
          2. Which tetrominoes and rotation rule?
          3. Gravity speed and lock behaviour?
          4. What happens on game over and restart?

Human: 10x20, 30px cells. All seven pieces, simple rotation, one row per
       0.8s. Game over overlay with R to restart.

Agent: I wrote the decisions and acceptance criteria. The content is
          editable only while #0001 is in refine.

5. Pitch it

Human: That is the intent. Pitch it at the consortium review.

Agent: #0001 is in pitch and the content is frozen. It is on the
          consortium agenda.

The human consortium now decides.

6. Accept and estimate

Human: The consortium accepts #0001. Promote it and estimate it.

Agent: Recorded with you as authoriser. #0001 is accepted and is now
          a batch. Estimate: 12,667 weighted tokens, 1.0 agent hour,
          about €0.0027 at the current rate.

The estimate is required before the roadmap.

7. Roadmap it

Human: Put it on the roadmap.

Agent: #0001 is on the roadmap, slot 1 of 5. Estimated total €0.0027.
          Next gate: breakdown.

8. Break it down

Human: Break it down. Ask me everything before starting.

Agent: I moved #0001 to breakdown. Tasks:
          #0001-01 playable falling piece and controls
          #0001-02 locked pieces and game over
          #0001-03 keyboard restart and smoke test
          One clarification meeting is pending: two questions.

Clarification

Agent: 1. Should rotation near a wall be refused, or should it wall-kick?
          2. Should the game-over overlay block arrow keys?

Human: Refuse rotation; no wall kicks. Block arrow keys, allow R.

Agent: Answers recorded and the clarification gate is accepted.
          Say “start #0001” when you want implementation.

9. Start and execute

Human: Start #0001.

Agent: #0001 is doing. #0001-01 is working. I will commit each task
          and keep one task working at a time.

A few minutes later:

Agent: #0001-01 done and committed. #0001-02 is working.
          No blockers.

The agent is autonomous inside the batch. You do not approve each task.

10. Handover

Agent: #0001 is in handover. All tasks done. The report draft is
          .mdboard/reports/R0001.md. I opened the handover review.

The batch now needs a human.

11. Review and request changes

Human: I reviewed it. Locked pieces are drawn, but the game-over overlay
       still lets ArrowLeft move the piece. Request changes.

Agent: Recorded a changes-required review from you, returned #0001 to
          doing, and created #0001-04 from finding F1.

The batch is doing again; only the rework task is pending. The completed tasks stay done.

Agent: #0001-04 done. #0001 is in handover round 2.

12. Accept and complete

Human: I accept #0001. Complete it.

Agent: Owner accept recorded. I wrote the final report and appended
          the changelog entry. #0001 is completed.

The report is at .mdboard/reports/R0001.md; the changelog has one dated bullet.

13. Merge

Human: Prepare the merge for iteration 1.

Agent: The worktree is clean, no active batch, the merge check passes.
          Only you can merge.

Human: I merged it into nightly.

Agent: Iteration 1 is merged. I will open the next iteration when you are ready.

At a release point, the owner merges nightly into stable on the release train.

What you practised

  • You expressed intent and made the human decisions.
  • The agent translated each intent into a legal mdBoard action.
  • The board moved through spark, refine, pitch, accepted, roadmap, breakdown, doing, handover and completed.
  • Review found a real issue; rework was a task, not a reopened completed card.
  • You merged; the agent never did.

Try next

  • Add a second small idea and take it through pitch and rejection.
  • Raise the roadmap limit temporarily and watch the expiry check.
  • Add a second reviewer and review a batch in parallel.

Next