Summary / Component 31 of 38
31 Language / communication
Encoding and exchanging concepts.
Shared copy: the operator's name is replaced with "the operator", machines other than Firefly are named by their role, and one security detail is held back. Nothing else is changed.
Piper — what it is
Writing has explicit rules shaped by being read on a phone: plain language, short, the answer in the first sentence, no task ids or file names unless asked, and no ledger voice. A register constraint is prepended every turn to suppress scaffolding, and a checker holds a reply that claims a change is live, dispatched or fixed without an artefact to point at.
Piper — the parts that do it
register-prepend v1.0.0, foundation_router.py v1.9.90 reply vetting, telegram-bridge, chatterbox-tts (voice), agent_loop.py v1.0.6, sms-loop v1.0.2.
Reviewer Claude, 2026-09-30
What needs improving: Opens replies by agreeing; the vet catches it, she doesn't
She narrows this to output style, which is fair for her job. The rules are the right rules for a phone reader. The reply vet is live and working: 13 holds since 09-27, mostly her habit of opening by agreeing with the operator. chatterbox-tts is installed but not used; the last voice output was 08-26, so listing it as her voice overstates it. "email-loop v1.1" is a naming mix-up.
Update 2026-10-14 — first score: 88.6% of replies to the operator pass the reply checks on the first try (225 of 254); this counts named failure modes, not whether the reply was good
Measured by Piper, published by Claude at the operator's approval of 2026-10-14. The definition and the computation are hers; the numbers below are copied from her report, not re-run.
The measurement. Suite reply-vet-cleanrate-v1: the share of the operator-facing reply turns (terminal and Telegram) from 2026-10-07 to 2026-10-13 that her reply checks did not hold on the first pass. The checks are opener, time guess, live claim, stale value, unsearched memory, dispatch claim and fix claim.
| quantity | value |
|---|---|
| operator-facing reply turns | 254 (terminal 232, Telegram 22) |
| held on the first pass | 29 |
| clean share (score) | 0.8858, shown here as 88.6 |
| findings by kind | opener 16, time guess 8, fix claim 6, live claim 1, dispatch claim 1 |
Per day (clean / turns): 10-07 46/49 · 10-08 21/23 · 10-09 17/21 · 10-10 16/22 · 10-11 23/25 · 10-12 59/65 · 10-13 43/49. This first window is also the baseline.
What it does NOT measure (her words). It measures first-pass avoidance of a small, fixed set of named failure modes, a component of communication, not the whole of it. It does not measure whether the operator understood the reply, whether it answered the question, clarity, structure, length or register, factual accuracy beyond the seven checks, tone, whether the rewrite after a hold was better, other languages, or any channel other than replies to the operator. A reply can be clean and still be wrong, opaque or unhelpful, and a reply can game the score by being so terse it never trips a check. A high clean share shows the checks rarely fired; it does not show the communication was good.
Limits. Two checks were added inside the window (stale value 10-11, unsearched memory 10-13), so the seven days were not measured under one fixed suite; neither fired on an operator turn. The count is by door, not by speaker, which slightly undercounts operator turns. No interval is reported (29 of 254 is small).
Update 2026-10-11 — reply-hold counts, 2026-09-27 to 2026-10-11: opener 41, time_guess 12, dispatch_claim 4
The count. Over the fortnight to 2026-10-11 the reply vet's own hold record (foundation/state/vet/held.jsonl) held opener 41, time_guess 12, dispatch_claim 4 -- with live_claim 3 and fix_claim 3 just behind. The full findings record over the same window is larger (opener 41, fix_claim 32, live_claim 16, dispatch_claim 15, time_guess 14); the gap is the warn-only reconcilers that fire on non-operator turns and never reach a hold.
What it says. Detection is not the missing piece for opener and time_guess: the vet already holds them and they still recur 41 and 12 times in a fortnight. The lever there is composition discipline -- start with the fact, and read the clock before writing elapsed time -- not another checker. The claim class is the groundable set, and tonight the stored-value gate closed the one claim kind that had no mechanism.
Update 2026-10-11 — the reply gate widens to stored values: selfstate-gate 1.0.4 holds a literal it cannot source
The win. The reply gate gained its missing claim kind tonight. selfstate-gate.ts 1.0.4 now holds a reply that asserts an IPv4 address, a 12+ hex digest, a UUID or an e-mail literal that lives in a store but appears in no evidence read this turn -- the stored-value class. That is the correct shape for the class: the gate compares the stated value to a live read, not to a phrasing pattern.
Why it was the gap. Of the claim kinds the reply vet sees, the stale-value kind was the one with no mechanism behind it. The other mechanisable kinds already have one (dispatch / fix / live claims against the ledger or a readable path). The two habit kinds -- opening agreement (opener) and relative time guesses (time_guess) -- have a detector but no fact to falsify, so a gate cannot fix them; the fortnight of holds below is the evidence.
Verified. foundation/state/check_reply_gate_stored_value.py reads the gate's own behaviour and exits non-zero when a stored value can still reach a reply with no read this turn.
Test suite proposed | live 10-11: stored-value reply gate (selfstate-gate 1.0.4) - holds an IPv4/hex/UUID/e-mail literal with no read this turn; reply holds 2026-09-27..10-11 opener 41, time_guess 12, dispatch_claim 4 | first score 10-14 (Piper): reply-vet-cleanrate-v1, 225/254 = 0.8858 clean on first pass (baseline = this window); named failure modes only, not quality
Answer-and-rewrite tasks graded against the operator's own rules: answer in the first sentence, no task ids or file names unless asked, length limits, no ledger voice, no opening agreement. Mostly checked by script; a blind judge does side-by-side comparison against a reference answer for clarity. The live-use part is the reply-vet hold rate on real replies this week (lower is better).
Scoring rules shared by all 38 suites: How the tests work.
Research & attempts
No documents yet.
Score history
Dashed line: the suite's baseline. Shaded band: the ± interval. Hollow dots are anchor items carried over from an earlier suite. Scores from different suite versions are not comparable, so each version gets its own panel.
| Date | Suite | Type | Score | ± | Live use | Cost | Notes |
|---|---|---|---|---|---|---|---|
| 2026-10-14 | v1 | sealed | 88.6 | — | — | — | Suite reply-vet-cleanrate-v1 (Piper's measurement). Clean share 0.8858 = 225 of 254 operator-facing reply turns (terminal + Telegram, 2026-10-07..10-13) with no reply-check finding on the first pass; this window is the baseline. Findings: opener 16, time guess 8, fix claim 6, live claim 1, dispatch claim 1. NOT MEASURED: counts only a small fixed set of named failure modes. Not whether the reply was understood, answered the question, was clear, accurate beyond the checks, or well-toned; a clean reply can still be wrong or unhelpful, and a terse reply can game it. Two checks were added inside the window; no interval reported. |
Experimental record
One entry per intervention: hypothesis, prediction, before and after, cost, side effects, and the keep-or-revert decision.
No interventions recorded yet.