U05: Debug, spike, and conflict without inventing evidence
Choose the commands you use
Operating system
CodeArbiter host
Know before you begin
This lesson uses the released CodeArbiter contract. The website gives the sequence and your host runs the real commands. Academy can inspect repository facts at the end, but it cannot prove an agent's private reasoning or a human conflict decision.
confirm the released command boundary
You · Browser · All operating systems
Confirm that your host has CodeArbiter 2.15.1 for Claude, ca-codex 0.7.2 for Codex, or ca-pi 0.8.1 for Pi. U05 uses only real $ca-debug, $ca-spike, $ca-commit, and $ca-conflict behavior.
The exercise depends on the released spike contract, not an Academy substitute command.
You know which host command to use and that a spike never merges or opens a pull request. Next safe step: Prepare the bounded attempt.
If your host is older or does not expose the command, update the integration or stop; do not imitate its output by hand.
Your host integration version and the public U05 lesson boundary.
What you will prove
You will preserve two real outputs. The debug no-action exit records its cited conclusion through taskwrite; its optional debug.note ID is not evidence. The spike preserves only its four-part findings file on the parent branch, then deletes the exploratory branch. Neither output proves a command transcript or invents a conflict receipt.
Prepare safely
prepare the bounded attempt
Run Academy Prepare from the clean training repository. It creates the U05 attempt branch and commits the observation fixture without changing the task board.
Prepare supplies a reproducible input, not a simulated debug or spike result.
Academy · Native terminal · Windows
$academy = "$env:LOCALAPPDATA\ArbiterAcademy\preview-0.30\Scripts\arbiter-academy.exe"
& $academy --repository (Get-Location).Path prepare U05-debug-spike-conflict
Academy · Native terminal · macOS
academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.30/bin/arbiter-academy"
"$academy" --repository "$PWD" prepare U05-debug-spike-conflict
Academy · Native terminal · Linux
academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.30/bin/arbiter-academy"
"$academy" --repository "$PWD" prepare U05-debug-spike-conflict
Academy creates a clean U05 attempt on academy/U05-debug-spike-conflict/1 with the committed observation and scenario files. Next safe step: read the observation.
If Prepare refuses because the repository is dirty or a prior attempt exists, preserve that state, use Reset only after reviewing it, then retry Prepare.
Prepare output, the new attempt branch, its preparation commit, and a clean worktree.
read the prepared cache-key observation
You · Active CodeArbiter harness · All operating systems
Read docs/U05-cache-key-observation.md before invoking a host command. It is a fictional Academy input, never output from $ca-debug or $ca-spike.
The bounded observation makes the real debug question reproducible without a fabricated transcript.
You can state the observed behavior, reproduction boundary, expected no-action disposition, and spike question. Next safe step: run host-native debug.
If the observation is absent or differs from the prepared fixture, stop and preserve the attempt; do not rewrite it.
The committed prepared observation, with no debug.note receipt in it.
Practice
Keep the parent attempt clean between the two commits. The commands below state which surface owns each action and what evidence must remain afterward.
Debug: preserve the no-action close
run debug without code changes
Run the host-native debug command on the prepared cache-key observation and take its no-action exit. Do not write a debug report or modify product code.
$ca-debug owns the investigation and its real no-action exit writes the board only through taskwrite.py.
Your agent · Claude Code harness · All operating systems
/ca:debug U05 cache-key observation
Your agent · Codex harness · All operating systems
$ca-debug U05 cache-key observation
Your agent · Pi harness · All operating systems
/ca-debug U05 cache-key observation
Your agent · Pi harness · All operating systems
/skill:ca-debug U05 cache-key observation
The no-action exit queues one taskwrite-written U05 cache-key entry with a Desc: rationale and makes no code change. Its dotted ID is optional. Next safe step: review only the board diff.
If the diagnosis selects fix or ADR, stop; this bounded exercise requires the declared no-action exit.
An unstaged taskwrite-shaped .codearbiter/open-tasks.md entry with Desc:, not a transcript.
review the debug-board boundary
Inspect the board diff and confirm it contains only the taskwrite-written U05 cache-key entry with its Desc: continuation; a dotted debug.note ID is optional.
The board is durable plugin output; reviewing it prevents unrelated changes from being committed as debug evidence.
You · Native terminal · Windows
git diff -- .codearbiter/open-tasks.md
git diff --check
You · Native terminal · macOS
git diff -- .codearbiter/open-tasks.md
git diff --check
You · Native terminal · Linux
git diff -- .codearbiter/open-tasks.md
git diff --check
The only intended diff is the cited taskwrite-written U05 cache-key board entry with Desc:, and git diff --check is silent. Next safe step: commit the board through the host.
If other paths or an entry without taskwrite's Desc: form appear, stop and preserve the diff; do not edit a receipt to imitate taskwrite.
Reviewed unstaged taskwrite-shaped diff limited to .codearbiter/open-tasks.md.
commit the no-action board entry
Use the host-native commit gate to commit the reviewed debug board entry by itself.
$ca-commit is the sanctioned commit path and keeps the debug close distinct from the later spike finding.
Your agent · Claude Code harness · All operating systems
/ca:commit
Your agent · Codex harness · All operating systems
$ca-commit
Your agent · Pi harness · All operating systems
/ca-commit
Your agent · Pi harness · All operating systems
/skill:ca-commit
One clean parent-branch commit changes only .codearbiter/open-tasks.md. Next safe step: run the disposable spike.
If the gate blocks, preserve its findings and resolve them; do not fold the board entry into the findings commit.
A committed taskwrite-shaped board change and a clean worktree.
The first parent commit contains only .codearbiter/open-tasks.md. Check verifies the resulting taskwrite-shaped U05 cache-key entry and clean tree, not a claimed command invocation or a fixed task ID.
Spike: transfer only the answer
run the disposable spike
Use the host-native spike command with the fixture question U05 cache key. Work only on spike/u05-cache-key and commit only its findings file there.
$ca-spike discards implementation while preserving a bounded answer.
Your agent · Claude Code harness · All operating systems
/ca:spike U05 cache key
Your agent · Codex harness · All operating systems
$ca-spike U05 cache key
Your agent · Pi harness · All operating systems
/ca-spike U05 cache key
Your agent · Pi harness · All operating systems
/skill:ca-spike U05 cache key
The host restates the bounded U05 cache-key question and pauses before creating spike/u05-cache-key. Next safe step: confirm that exact question.
If code, a merge, or a pull request is proposed, stop; a spike has no implementation, merge, or PR exit.
The prompt is transient. The durable evidence is the committed findings file restored to the parent; the spike branch must be absent at Check.
confirm the spike question
You · Active CodeArbiter harness · All operating systems
When the host restates U05 cache key and asks for confirmation, confirm only if it is the bounded fixture question and the branch is spike/u05-cache-key.
$ca-spike stops for user confirmation before it creates the disposable branch or explores.
The confirmed host flow creates spike/u05-cache-key and on its answered exit commits only .codearbiter/spikes/u05-cache-key.md. Next safe step: restore only that findings file to the parent.
If the question, branch, or timebox differs, decline and correct the prompt; do not let a spike start from an unconfirmed or broadened question.
The prompt is not Check evidence; the findings-only commit and absent branch are observable evidence.
restore only the committed findings
Return to the Academy attempt branch and restore only the committed finding from spike/u05-cache-key. This is a native Git transfer, not a merge.
The released spike contract permits the finding�s contents to cross back but forbids the spike commit and exploratory code.
You · Native terminal · Windows
git restore --source spike/u05-cache-key -- .codearbiter/spikes/u05-cache-key.md
You · Native terminal · macOS
git restore --source spike/u05-cache-key -- .codearbiter/spikes/u05-cache-key.md
You · Native terminal · Linux
git restore --source spike/u05-cache-key -- .codearbiter/spikes/u05-cache-key.md
Only .codearbiter/spikes/u05-cache-key.md is now unstaged on the parent branch. Next safe step: review that one-file diff.
If Git reports the spike ref is unavailable, preserve the state and stop; do not recreate findings or copy any spike code by hand.
An unstaged parent diff limited to the one findings file.
review the findings-only transfer
Inspect the parent diff and stage exactly .codearbiter/spikes/u05-cache-key.md, then inspect the cached diff before committing.
Staging and cached-diff review make the one-file transfer boundary visible before the commit gate runs.
You · Native terminal · Windows
git add -- .codearbiter/spikes/u05-cache-key.md
git diff --cached --name-only
git diff --cached -- .codearbiter/spikes/u05-cache-key.md
You · Native terminal · macOS
git add -- .codearbiter/spikes/u05-cache-key.md
git diff --cached --name-only
git diff --cached -- .codearbiter/spikes/u05-cache-key.md
You · Native terminal · Linux
git add -- .codearbiter/spikes/u05-cache-key.md
git diff --cached --name-only
git diff --cached -- .codearbiter/spikes/u05-cache-key.md
The cached path list contains only .codearbiter/spikes/u05-cache-key.md with all four findings headings. Next safe step: commit the parent transfer through the host.
If any code or extra path is staged, unstage it and preserve the evidence; do not use a broad add command.
Cached diff and path list for exactly the one findings file.
commit the parent findings transfer
Use the host-native commit gate to commit the reviewed parent findings transfer by itself.
The parent commit is distinct from the disposable spike commit and preserves only the answer.
Your agent · Claude Code harness · All operating systems
/ca:commit
Your agent · Codex harness · All operating systems
$ca-commit
Your agent · Pi harness · All operating systems
/ca-commit
Your agent · Pi harness · All operating systems
/skill:ca-commit
A second clean parent-branch commit changes only .codearbiter/spikes/u05-cache-key.md. Next safe step: delete the disposable branch.
If the gate blocks, keep the parent and spike state intact until its finding is resolved; do not merge the spike branch.
A clean parent worktree and a distinct one-file findings commit.
delete the unmerged disposable branch
After the parent findings commit is clean, delete the intentionally unmerged disposable spike branch. Force deletion is required because the findings-only restore did not merge its commit.
The branch is disposable by contract, and Git correctly treats its unmerged exploratory commit as not merged.
You · Native terminal · Windows
git branch -D spike/u05-cache-key
You · Native terminal · macOS
git branch -D spike/u05-cache-key
You · Native terminal · Linux
git branch -D spike/u05-cache-key
refs/heads/spike/u05-cache-key is absent while the committed parent findings file remains. Next safe step: use Check.
If the branch still contains unreviewed findings, stop before deletion; never merge it merely to make ordinary branch deletion succeed.
Absent U05 spike ref and retained parent findings commit.
The native git branch -D is intentional. The findings-only restore leaves the disposable spike commit unmerged. Do not merge merely to make ordinary branch deletion succeed. The parent receives the findings file’s contents, never the spike commit or exploratory code.
Conflict: stop for a person
honor the conflict stop
You · Active CodeArbiter harness · All operating systems
If conflicting rules appear, use $ca-conflict to present exact sources and wait for the user's resolution before any further work.
Conflict is a human decision protocol, not an artifact generator.
Work remains stopped until the person resolves the hierarchy conflict. Next safe step: resume only from the explicit resolution.
Do not paraphrase a resolution or continue speculatively; present the actual sources and wait.
Human acknowledgement is outside automated Check; no fake conflict receipt exists.
Recognize success
Check accepts repository facts only: the exact prepared observation; a first parent commit containing the taskwrite-shaped no-action board entry; a second parent commit with only .codearbiter/spikes/u05-cache-key.md; and no spike/u05-cache-key ref. It rejects copied or uncommitted exploratory code. It cannot prove that a host command ran or that a person resolved a conflict wisely.
Check
check the accepted repository state
Run Academy Check after the board and findings commits are clean and the U05 spike branch is deleted.
Check evaluates durable repository facts, never an alleged host invocation or conflict decision.
Academy · Native terminal · Windows
$academy = "$env:LOCALAPPDATA\ArbiterAcademy\preview-0.30\Scripts\arbiter-academy.exe"
& $academy --repository (Get-Location).Path check U05-debug-spike-conflict
Academy · Native terminal · macOS
academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.30/bin/arbiter-academy"
"$academy" --repository "$PWD" check U05-debug-spike-conflict
Academy · Native terminal · Linux
academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.30/bin/arbiter-academy"
"$academy" --repository "$PWD" check U05-debug-spike-conflict
Academy evaluates the prepared U05 attempt and accepts only the clean two-commit findings-only lifecycle. Next safe step: continue to U06.
Read the failed predicate, then return to the named boundary. Do not manufacture a transcript, receipt, or retained spike branch to force acceptance.
Check result plus the clean attempt, two parent commits, and absent U05 spike ref.
Recover or continue
reset a failed attempt before retrying
Use Academy Reset only when you need to discard this practice attempt and prepare it again. Reset returns the repository to its pre-U05 branch state.
A failed experiment should be recoverable without inventing or manually deleting evidence.
Academy · Native terminal · Windows
$academy = "$env:LOCALAPPDATA\ArbiterAcademy\preview-0.30\Scripts\arbiter-academy.exe"
& $academy --repository (Get-Location).Path reset U05-debug-spike-conflict
Academy · Native terminal · macOS
academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.30/bin/arbiter-academy"
"$academy" --repository "$PWD" reset U05-debug-spike-conflict
Academy · Native terminal · Linux
academy="${XDG_DATA_HOME:-$HOME/.local/share}/arbiter-academy/preview-0.30/bin/arbiter-academy"
"$academy" --repository "$PWD" reset U05-debug-spike-conflict
Academy removes the U05 attempt branch and restores the original branch without altering unrelated work. Next safe step: Prepare a new attempt.
If Reset refuses because the attempt contains state it must preserve, archive that state first and follow the refusal guidance.
Reset output, restored original branch, and preserved unrelated repository state.
Never merge or open a pull request for a spike branch, copy spike code to the parent, or keep a spike branch merely to satisfy Check. If $ca-conflict fires, stop work and wait for the user’s resolution before continuing.
Hint 1
Read the prepared observation before debugging. It is an input to investigate, not a transcript that you can edit into evidence.
Hint 2
The parent board commit and parent findings commit are intentionally separate. Check rejects a single commit that combines them.
Hint 3
git branch -D is correct only after the parent has committed the restored findings file. It deletes the intentionally unmerged disposable branch; it does not merge it.
Understand the mechanism
Prepare commits the fictional observation so every learner begins from the same bounded question. The host owns debug and spike behavior. Academy Check reads only the resulting Git range, task board, findings file, deleted U05 spike ref, and clean worktree. That is why a copied exploratory change, retained branch, invented receipt, or merged spike cannot pass.