Preview 0.30

P01 - Feature through a user-approved spec and derived plan

Know before you begin

P01 is the first Practitioner lesson in this preview. It starts from the F04 repair boundary and ends with one preserved feature attempt on a safe learner branch.

Complete F04 and begin in the same Academy fork and clone. Before Prepare, switch to main and confirm that git status --short prints nothing. Keep a native terminal open at the clone root for Academy Prepare, Check, and Reset. Keep one CodeArbiter harness open at that same clone for the feature workflow.

This lesson has two honest review paths. In Solo practice, you review the drafted specification yourself, using the checklist below. In Collaborative practice, you ask for or use feedback in the Arbiter Academy GitHub Discussion, then relay that feedback to your agent. If feedback is not available, return to Solo practice. Neither path asks you to make up feedback or persist a marker that pretends to prove another person approved the work.

Commands shown as native-terminal actions are entered directly and never begin with !. A shell command shown for a harness begins with exactly one !. CodeArbiter commands and agent messages are entered in the selected harness and never begin with !.

What you will prove

You will preserve one feature attempt containing the exact specification, a plan derived from its acceptance criteria, the sanctioned transition of academy.feature.0002, a focused regression, and the bounded unresolved-ticket repair. The task is to report the exact total of open plus claimed tickets through the existing summary boundary.

The agent drafts the specification and stops. You choose a review path, then send a separate proceed instruction. Only then does the agent derive the plan, start the staged task, run the focused RED test, make the bounded repair, run GREEN verification, and invoke the governed commit gate.

Prepare safely

Prepare a numbered feature attempt

From a clean main branch at your Academy clone root, run Prepare in a native terminal. Academy creates the numbered attempt branch before any feature work begins.

Why

The prepared branch preserves a fixed starting point for the specification, plan, repair, and final Check.

You · Native terminal · Windows

$academy = "$env:LOCALAPPDATA\ArbiterAcademy\preview-0.30\Scripts\arbiter-academy.exe"
& $academy --repository (Get-Location).Path prepare P01-feature-through-plan

You · Native terminal · macOS

academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.30/bin/arbiter-academy"
"$academy" --repository "$PWD" prepare P01-feature-through-plan

You · Native terminal · Linux

academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.30/bin/arbiter-academy"
"$academy" --repository "$PWD" prepare P01-feature-through-plan

Expected result

Academy switches this clone to academy/P01-feature-through-plan/ATTEMPT_NUMBER and queues academy.feature.0002.

If that does not happen

If Prepare stops, preserve its message and resolve the named clean-worktree or branch condition. Do not force-reset main or delete another attempt.

Evidence

The numbered attempt branch records the baseline from which Check reconstructs the exercise.

ATTEMPT_NUMBER means the number Academy prints, such as 1; it is not text to type literally. Stay on that numbered branch for the whole attempt.

Ask CodeArbiter to draft the specification

In your selected CodeArbiter harness, send the copied host-native feature command. It is a CodeArbiter command, not a shell command, so it never begins with !. The agent drafts the specification and stops for your review.

Why

The feature lane makes the observable contract explicit before work is planned or implemented.

Your agent · Claude Code harness · All operating systems

/ca:feature "Show unresolved tickets in the Workshop Queue summary"

Your agent · Codex harness · All operating systems

$ca-feature "Show unresolved tickets in the Workshop Queue summary"

Your agent · Pi harness · All operating systems

/ca-feature "Show unresolved tickets in the Workshop Queue summary"

Your agent · Pi harness · All operating systems

/skill:ca-feature "Show unresolved tickets in the Workshop Queue summary"

Expected result

The agent writes .codearbiter/specs/academy-feature.md and asks for review before deriving a plan, starting the task, or editing production code.

If that does not happen

If the feature lane reports that the repository or task is not ready, preserve its finding. Do not write a substitute specification or bypass its review stop.

Evidence

The draft is a tracked input to your review, not proof that anyone approved it.

The feature command creates the draft and stops at the specification decision. It does not grant approval, derive a plan, start the task, or change production code.

Practice

Read the draft with its source boundary

Ask your active harness to show the drafted specification beside the queued task and current summary boundary. This is a request to your agent, not a shell command, so it never begins with !.

Why

Review is reliable only when the proposed outcome is compared with the task that authorized it and the existing caller-visible behavior.

You · Claude Code harness · All operating systems

Open .codearbiter/specs/academy-feature.md, the academy.feature.0002 task in .codearbiter/open-tasks.md, tests/test_cli.py, and workshop_queue/cli.py. Show the draft acceptance criteria next to the current summary behavior. Do not derive a plan, start the task, edit files, or commit.

You · Codex harness · All operating systems

Open .codearbiter/specs/academy-feature.md, the academy.feature.0002 task in .codearbiter/open-tasks.md, tests/test_cli.py, and workshop_queue/cli.py. Show the draft acceptance criteria next to the current summary behavior. Do not derive a plan, start the task, edit files, or commit.

You · Pi harness · All operating systems

Open .codearbiter/specs/academy-feature.md, the academy.feature.0002 task in .codearbiter/open-tasks.md, tests/test_cli.py, and workshop_queue/cli.py. Show the draft acceptance criteria next to the current summary behavior. Do not derive a plan, start the task, edit files, or commit.

Expected result

You can see every drafted criterion, the queued task boundary, and that the existing JSON summary omits unresolved tickets.

If that does not happen

If a required source is missing or the task is no longer queued, stop. Preserve the attempt and use Reset for a new baseline rather than inventing a replacement.

Evidence

Your review compares the proposal to repository sources instead of a chat summary.

Use exactly one review path before you continue.

Review the specification yourself

You · Active CodeArbiter harness · All operating systems

Choose Solo practice when you are the reviewer. Check that the draft names open and claimed ticket states, states that their exact total is caller-visible, avoids prescribing a private implementation loop, and can map each criterion to a plan step and focused test.

Why

Solo practice rehearses a concrete review decision without pretending that an external reviewer participated.

Expected result

You can either identify a concrete correction for the draft or explain why each criterion is observable and testable.

If that does not happen

If a criterion is vague or exceeds the task boundary, ask the agent to revise only the specification and return to this review. Do not continue to implementation.

Evidence

This is a learner review rehearsal. Check does not authenticate it.

Request or relay collaborative feedback

You · Browser · All operating systems

Choose Collaborative practice only when you can request or use actual feedback. Open the Arbiter Academy GitHub Discussion, describe the draft's observable contract, and relay real feedback to your agent before continuing. If no feedback arrives, use Solo practice instead.

Why

A discussion can add another perspective, but its absence must not cause invented feedback or an unverifiable claim.

Reviewed resources for Request or relay collaborative feedback

Expected result

You either have real feedback to relay or have deliberately chosen the Solo practice path.

If that does not happen

If the discussion is unavailable or no response arrives, do not wait or fabricate one. Return to Solo practice and use its checklist.

Evidence

Discussion participation is external process context. Check does not authenticate a GitHub Discussion response.

If review finds a concrete correction

Use the revision action. It sends a bounded request and returns you to the same review choice. It does not begin planning or implementation.

Request a bounded specification revision

If review identifies a concrete correction, send this message in the active harness. It asks the agent to revise only the draft specification, do not derive a plan, and stop for another review. It is not a shell command, so it never begins with !.

Why

A visible revision path lets a first-time learner correct a weak contract without accidentally authorizing planning or implementation.

You · Claude Code harness · All operating systems

Revise only .codearbiter/specs/academy-feature.md to address this concrete review finding: [paste the concrete finding here]. Keep the task boundary: the Workshop Queue summary must report the exact total of open plus claimed tickets. Do not derive a plan, start academy.feature.0002, edit tests or production code, or commit. Stop and show the revised acceptance criteria for my review.

You · Codex harness · All operating systems

Revise only .codearbiter/specs/academy-feature.md to address this concrete review finding: [paste the concrete finding here]. Keep the task boundary: the Workshop Queue summary must report the exact total of open plus claimed tickets. Do not derive a plan, start academy.feature.0002, edit tests or production code, or commit. Stop and show the revised acceptance criteria for my review.

You · Pi harness · All operating systems

Revise only .codearbiter/specs/academy-feature.md to address this concrete review finding: [paste the concrete finding here]. Keep the task boundary: the Workshop Queue summary must report the exact total of open plus claimed tickets. Do not derive a plan, start academy.feature.0002, edit tests or production code, or commit. Stop and show the revised acceptance criteria for my review.

Expected result

The agent changes only the draft specification and presents its revised criteria before any plan, task transition, test, production edit, or commit.

If that does not happen

If the agent changes anything beyond the draft or starts planning, stop. Preserve the attempt and use Reset for a new baseline rather than trying to hide the boundary violation.

Evidence

The revised specification remains visible for learner review. Check does not authenticate the review or revision conversation.

When the draft is acceptable

Give the separate proceed instruction

Only after you complete one review path, send this separate message in the selected harness. It tells the agent what to do next without claiming an authenticated approval.

Why

The deliberate second instruction keeps drafting and review distinct from planning and implementation.

You · Claude Code harness · All operating systems

I completed the P01 review. Proceed with this feature: derive .codearbiter/plans/academy-feature.md from the specification, start academy.feature.0002 through the sanctioned task writer, add and run a focused failing summary regression before production code, make only the bounded open plus claimed repair, run focused and full GREEN verification, stage the exact final boundary, and invoke the CodeArbiter commit gate. Stop and report if a gate blocks. Do not write a marker that claims to prove review or approval.

You · Codex harness · All operating systems

I completed the P01 review. Proceed with this feature: derive .codearbiter/plans/academy-feature.md from the specification, start academy.feature.0002 through the sanctioned task writer, add and run a focused failing summary regression before production code, make only the bounded open plus claimed repair, run focused and full GREEN verification, stage the exact final boundary, and invoke the CodeArbiter commit gate. Stop and report if a gate blocks. Do not write a marker that claims to prove review or approval.

You · Pi harness · All operating systems

I completed the P01 review. Proceed with this feature: derive .codearbiter/plans/academy-feature.md from the specification, start academy.feature.0002 through the sanctioned task writer, add and run a focused failing summary regression before production code, make only the bounded open plus claimed repair, run focused and full GREEN verification, stage the exact final boundary, and invoke the CodeArbiter commit gate. Stop and report if a gate blocks. Do not write a marker that claims to prove review or approval.

Expected result

The agent derives the plan, moves only academy.feature.0002 through the task writer, and follows the bounded test-first feature path.

If that does not happen

If the agent begins implementation before this message or a gate blocks, stop. Preserve the attempt and inspect the named boundary rather than writing an approval claim or direct Git commit.

Evidence

The final commit can prove repository artifacts, not the identity or process of the reviewer.

After you send the proceed instruction, let the agent execute the governed path it describes. Add and run a focused summary test before touching production code. The RED result must fail because unresolved tickets are absent, not because a file, import, or fixture is broken. The repair remains the exact open + claimed assignment. Do not create a RED commit, amend, or rebase.

Recognize success

The attempt has one final green commit after Prepare. That commit contains exactly the feature specification, derived plan, canonical task-board transition, focused regression, and bounded production repair. The task has a writer-produced start date, and git status --short prints nothing before Check.

The specification is the review boundary. The plan has authority because it maps each approved criterion to implementation and verification work. It is not a separate approval ceremony.

Check

Run the external Academy Check

After the governed commit and a clean status, run the installed Academy Check in a native terminal. It reads the prepared baseline, final Git state, and live worktree from outside the learner flow.

Why

Check independently recomputes the final artifact and commit-boundary contract.

You · Native terminal · Windows

$academy = "$env:LOCALAPPDATA\ArbiterAcademy\preview-0.30\Scripts\arbiter-academy.exe"
& $academy --repository (Get-Location).Path check P01-feature-through-plan

You · Native terminal · macOS

academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.30/bin/arbiter-academy"
"$academy" --repository "$PWD" check P01-feature-through-plan

You · Native terminal · Linux

academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.30/bin/arbiter-academy"
"$academy" --repository "$PWD" check P01-feature-through-plan

Expected result

Check prints checkpoint P01-feature-through-plan: passed; progress: .academy/progress.json.

If that does not happen

If Check fails, preserve the clean committed attempt and read the failed predicate. Use Reset for a new numbered attempt instead of rewriting committed evidence.

Evidence

Only a passing external Check records P01 progress.

A pass contains checkpoint P01-feature-through-plan: passed; progress: .academy/progress.json. Check validates the final descendant commit, exact spec and plan shape, task transition, focused regression, bounded repair, and a clean worktree. It does not authenticate a human approval. It does not authenticate a GitHub Discussion response. It does not prove that you ran the test before production code or the order in which the agent ran RED and GREEN commands. Those are workflow practices you observe during the lesson, not claims made by this final-state verifier.

Recover or continue

If the draft is wrong, use the revision action and repeat the review before proceeding. If review is incomplete, plan coverage is weak, the task transition is wrong, or Check fails, preserve the attempt. Read the named predicate and correct only that boundary in a new numbered attempt. Do not conceal evidence by amending or rebasing history.

Hint 1

Read the queued task and current report API before reviewing the draft. Describe visible ticket states and caller-visible output, not a private loop you expect to edit.

Hint 2

For Solo practice, check that every acceptance criterion is observable, names the relevant ticket states, and can map to one plan step and one focused test. For Collaborative practice, compare the feedback with those same facts before relaying it.

Hint 3

The final verifier recomputes data and repository shape. Keep the test narrow and inspect the final commit boundary; it cannot reconstruct chat, review, or command history.

After Check passes, leave the completed branch intact and return to main with this native-terminal action.

Return to main after success

After Check passes, return to main in a native terminal without deleting the completed attempt branch.

Why

The passing attempt remains available for a reviewer to inspect while the clone is ready for the next guided lesson.

You · Native terminal · Windows

git switch main

You · Native terminal · macOS

git switch main

You · Native terminal · Linux

git switch main

Expected result

Git switches to main and leaves academy/P01-feature-through-plan/ATTEMPT_NUMBER reachable.

If that does not happen

If Git refuses because work is uncommitted, stop and preserve it. Do not force the switch or delete the completed attempt.

Evidence

The completed evidence remains separated from main and available for later inspection.

P02 is public, guided, and runnable in this preview. Continue with its published Academy lesson after you return to main; do not substitute unpublished source exercises for the accepted course.

If P01 needs another attempt, use the preserved retry action.

Create a preserved numbered retry

Use Reset only when P01 needs another attempt. Run it in a native terminal at the Academy clone root; it preserves the earlier attempt before creating the next number.

Why

Preserved retries leave review and implementation evidence inspectable instead of hiding it with a force reset or rebase.

You · Native terminal · Windows

$academy = "$env:LOCALAPPDATA\ArbiterAcademy\preview-0.30\Scripts\arbiter-academy.exe"
& $academy --repository (Get-Location).Path reset P01-feature-through-plan

You · Native terminal · macOS

academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.30/bin/arbiter-academy"
"$academy" --repository "$PWD" reset P01-feature-through-plan

You · Native terminal · Linux

academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.30/bin/arbiter-academy"
"$academy" --repository "$PWD" reset P01-feature-through-plan

Expected result

Academy archives the prior attempt and prints the next academy/P01-feature-through-plan/ATTEMPT_NUMBER branch.

If that does not happen

If Reset stops, preserve its message and current branch. Resolve only the named repository condition; never force-reset or delete the prior attempt.

Evidence

A retry starts from the clean lesson baseline while the earlier attempt remains reachable.

Understand the mechanism

A feature contract begins with observable behavior. The specification tells the agent and reviewer what must be true; the plan traces that contract into work; the focused test protects the caller boundary; and the commit gate records only the verified final change. Academy Check then compares the prepared baseline, commit ancestry, required artifacts, and live worktree without trusting a transcript supplied by the learner checkout.

Next step

Continue with P02-commit-review-pr.

Recovery guidance