Skip to content
RSrole-set
Prototype · Python 3.12 · MIT

Plan every item, then write it on the loopback.

role-set fixes a batch before any model call, asks a writer only for the parts a writer should write, and records the gates each item passed. Its T10 generator builds kind B puzzles in code, proves each one with the solver, and holds the variety floors with a committed record. It is a prototype. Nothing it writes is training data until a person checks it.

Plan

uv run role-set plan --lessons T02,T03 --seed 0 --out plan.json # slots only. no model call. # the same seed writes the same plan.

Mock

uv run role-set write --plan plan.json --pack roles/verifier --out out --mock uv run role-set readout --run out/mock # no model, no spend. # output is marked, and it is not data.

Check

uv run role-set puzzle-check tests/fixtures/puzzle-check/sample.jsonl # kind B only, and only the closed rule forms. # a free-text verdict item is outside, never passed.

What a run actually checks

A refusal is a check in code, or a known-answer mismatch. Agreement from the critic is not proof.

Loopback only

The writer and the critic must be http://127.0.0.1 with an explicit port. Any other host is refused before a byte is sent. role-set never rents a machine. A pod, when a run uses one, is offrig's.

The plan comes first

plan fixes every slot from a seed: lesson, kind, side, and the floors. cost estimates pod hours and dollars for that plan. Both run with no model. The estimate is an estimate.

Verdict and evidence refuse

On the kinds that carry them, a verdict mismatch refuses, and evidence that is not in the material refuses. Trait, answer, and flaw checks are recorded and do not refuse, until their controls pass.

The critic has not passed

The trait leg measured 40.3% overall against an 85% bar, and the worst trait 12.5% against 70%. The answer leg measured 62.7% against 90%. The flaw control on 2026-10-11 had 9 of 24.

The solver is narrow

Kind B covers finite assignment puzzles in a closed set of rule forms: at most 6 entities, 3 attributes, and 200,000 assignments. It does not check the thinking against the model. A verdict-keyed puzzle over free text is outside, and is not counted as passed.

The firewall is at the door

ingest refuses held-out, sealed, and interview material, and DEV material during a stage. store status returns counts, not rows. Steering is designed and has never run.

Three paid pilots

These are the only cost figures. Accept rates are R&D's key-check, not the runner's. No row from these runs is in a training set.

RunDateWhat the note showsCost
Pilot 12026-10-11None of the 104 accepted rows is data. R&D held 43 C and D rows as mis-assembled.$3.52
Pilot 22026-10-1149 candidates: 15 pass, 15 need a mechanical fix, 19 fail.$3.61
Pilot 32026-10-11Wrote nothing. The writer's engine hung after startup.$2.80

Start without a model

Install

# Python 3.12, uv
uv sync --frozen
uv run pytest

# line coverage floor: 90, enforced in CI.

A mock batch

uv run role-set plan --lessons T02,T03 --seed 0 --out plan.json
uv run role-set cost --plan plan.json --profile two-card
uv run role-set write --plan plan.json --out out --mock
uv run role-set readout --run out/mock