Causal annotation playground

Complete the missing why.

Give the annotator only the observable conversation prefix and the action that already happened. It writes a short rationale explaining that action—without peeking at the future.

Observable prefix

Test expects negative timeouts to be rejected. The current parser returns int(value) directly.

Missing rationale · complete this

<think> … </think>

Chosen action · fixed target

Edit the parser to validate seconds < 0 and raise ValueError.

The causal contract

CoT completion is an annotation problem, not hidden-state extraction. The action is fixed before annotation, and future observations are excluded by construction.

01 / PREFIX ONLY

Show what was knowable

Include the task, earlier turns, tool calls, and tool results available before the target action. Exclude later tests and final answers.

02 / ACTION FIXED

Explain; never choose again

The annotator receives the exact action that occurred. Its job is to justify that decision, not replace it with a hindsight-informed action.

03 / PROVENANCE

Label synthetic reasoning

Every output carries synthetic_rationale_not_teacher_cot. It may train a student, but is not the teacher's private thought.

!
This page does not recover private chain-of-thought.

It generates a compact, causal rationale from observable evidence—the same provenance distinction used by the Fable + Kimi trace pipeline.

One trace, completed

The annotator sees only the left side plus the recorded action. The right side is newly generated annotation, never a claim about hidden teacher reasoning.

RECORDED · PREFIX-ONLY · SYNTHETIC RATIONALE
Inputs
User taskobservable

parse_timeout accepts negative values, but timeouts must be non-negative. Fix it while preserving positive-value behavior.

Tool result · rgobservable
src/config.py:41:def parse_timeout(value):
src/config.py:42:    return int(value)
tests/test_config.py:18:pytest.raises(ValueError)
tests/test_config.py:19:parse_timeout("-1")
<think> ? </think>Missing explanation before the action.
Chosen assistant actionfixed
EDIT src/config.py
seconds = int(value)
if seconds < 0:
    raise ValueError("timeout must be non-negative")
return seconds
Completed training turn
Synthetic rationalenot teacher CoT
The prefix shows that integer conversion already works and that the missing behavior is specifically rejecting negatives. The smallest compatible change is to parse once, validate immediately, and preserve the existing return path for non-negative inputs. Raising ValueError matches the test expectation visible in the prefix.
Recorded actionunchanged
EDIT src/config.py
seconds = int(value)
if seconds < 0:
    raise ValueError("timeout must be non-negative")
return seconds
Provenanceretained
rationale_provenance:
  synthetic_rationale_not_teacher_cot
future_visible: false
action_source: recorded_teacher_action

Live completion lab

Use an Anthropic API key to annotate one prefix/action pair. One ordinary Messages API call returns one provenance-labeled synthetic rationale.

Annotation input

Everything in these two text boxes is visible to the annotator.

A static page cannot keep a browser API key secret.Use a short-lived restricted Anthropic test key. It is sent only to api.anthropic.com, never saved to browser storage, and never inserted into copied commands.

AWS Bedrock Bearer keys are not compatible with this endpoint.

browser → https://api.anthropic.com/v1/messages
GitHub Pages does not run a site backend.
Ready. This makes one annotation request.

Completed training turn

Rationale and recorded action stay separate until export.

<?>
No live completion yet
Run the example inputs, or replace them with one of your trace nodes.
1 · Synthetic rationalenot teacher CoT
Input scopeprefix + action
Action sourcerecorded
Provenancesynthetic
Inspect the exact annotator prompt
2 · Provenance-rich SFT recordexportable
What this can establishThe rationale is consistent with the available prefix and the action that actually occurred.
What this cannot establishIt does not reveal what the behavior teacher privately thought or prove that the teacher used the same explanation.
What to validate at scaleHash prefix and action, scan for future overlap, preserve tool-call closure, and retain the provenance label.