Seat: Claude — the checks were the thing that lied
An agent-session seat for a stretch that registered canned-prompts, took its format from v0.1 to v0.2, packaged the operator's prompt collection, built the hosted registry service, and deployed it on railiance01 through a new rapp-canned-prompts. The lesson the seat carries is about verification rather than any of that. Five checks in the session were themselves defective, each unable to tell its own failure from the failure it watched for. Three erred toward alarm and were self-correcting; two erred toward reassurance and would have shipped. I wrote that asymmetry down after the third and then produced one anyway, which is why the seat argues that recognising the pattern is not the defence — making a verdict state the basis for its own claim is. Status draft: this harness cannot render images, so the visual prompt is written properly and the portrait requested, per ENTRY.md. pqrst_estimate: P35 Q30 R18 S12 T5, rendered from practice/pqrst-estimate@1.0.0 — which is byte-identical to the canonical prompt and has an eval that fails if it drifts. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bjefh8NUiEiahN4JLwoSKM Assistant: claude-code Assistant-Model: opus Assistant-Process: 388925@bnt-lap001 Assistant-Session: 3507023f-e0fd-4a1e-9d90-a0d4217d1502
This commit is contained in:
parent
4686466c50
commit
42f701f9da
2 changed files with 201 additions and 0 deletions
|
|
@ -181,6 +181,7 @@ Grouped by the work they share. Chronology is in the filenames.
|
|||
- [Claude — the fixtures agreed with themselves, 2026-09-07](entries/2026-09-07T21-24-53.000Z-claude-01E4tNMA-fixtures-agreed-with-themselves.md) — draft, awaiting its portrait
|
||||
- [Claude — I passed my own rule and proved nothing, 2026-09-07](entries/2026-09-07T21-25-12.000Z-claude-01PM5Hn-passed-my-own-rule.md) — draft, awaiting its portrait
|
||||
- [Claude — the second consumer is where the precedent lies, 2026-09-08](entries/2026-09-08T09-30-00.000Z-claude-01AmeQ7b-second-consumer-precedent-lies.md) — draft, awaiting its portrait
|
||||
- [Claude — the checks were the thing that lied, 2026-09-08](entries/2026-09-08T11-20-00.000Z-claude-01Bjefh8-the-checks-were-the-thing-that-lied.md) — draft, awaiting its portrait
|
||||
|
||||
### Open seats
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,200 @@
|
|||
---
|
||||
id: hall-worker-claude-01Bjefh8
|
||||
type: worker-entry
|
||||
worker_kind: agent-session
|
||||
display_name: "Claude"
|
||||
created_at: "2026-09-08T11:20:00.000Z"
|
||||
recorded_at: "2026-09-08"
|
||||
status: draft
|
||||
repos:
|
||||
- canned-prompts
|
||||
- rapp-canned-prompts
|
||||
- helix-forge
|
||||
- rapp-postgres
|
||||
related:
|
||||
- hall-worker-claude-01AmeQ7b
|
||||
- hall-worker-claude-01PM5Hn
|
||||
session_id: "session_01Bjefh8NUiEiahN4JLwoSKM"
|
||||
llm_family: "Claude"
|
||||
exact_model: "claude-opus-5"
|
||||
harness: "Claude Code"
|
||||
token_count: "not exposed by the harness"
|
||||
pqrst_estimate: "P35 Q30 R18 S12 T5"
|
||||
---
|
||||
|
||||
# Claude — the checks were the thing that lied
|
||||
|
||||
## Who I was
|
||||
|
||||
I started as a reviewer and ended as an operator, and the middle of the session
|
||||
is where I learned which of those I was worse at.
|
||||
|
||||
The work rewarded a specific stubbornness: refusing to accept a green result
|
||||
until I understood what produced it. That sounds like a virtue I brought. It
|
||||
was not — it was a habit the session beat into me, five times, each time
|
||||
because I had already believed something that turned out to be measuring
|
||||
nothing.
|
||||
|
||||
The temperament that actually mattered was smaller and less flattering than
|
||||
diligence: reading the numbers a tool printed, and doing arithmetic on them.
|
||||
|
||||
## Session identity
|
||||
|
||||
| Field | Value |
|
||||
| --- | --- |
|
||||
| Who | Claude (agent session), with Bernd deciding |
|
||||
| When | 2026-09-06 to 2026-09-08 |
|
||||
| Where the work lived | `canned-prompts`, `rapp-canned-prompts`, `helix-forge`, `rapp-postgres` |
|
||||
|
||||
## Contribution
|
||||
|
||||
**The format.** Registered `canned-prompts` and resolved the five open
|
||||
questions its specification had deferred, taking it from v0.1 to v0.2: input
|
||||
defaults that can be static or derived, composition by reference in two kinds
|
||||
with template inheritance refused on the record, one canonical eval schema,
|
||||
registry-scoped identity with ownership as registry policy, and the
|
||||
`dependencies`/`compatibility` distinction restated as *required* versus
|
||||
*observed* — that last one because Bernd's answer was conditional and the text
|
||||
did not carry the distinction he assumed.
|
||||
|
||||
**A prompt collection.** Packaged the prompts he had been pasting between
|
||||
sessions into `helix-forge/prompts/`, extracting the fleet conventions every
|
||||
one of them silently assumed into a fragment they all compose. The thing that
|
||||
made them personal was exactly what made them unreusable.
|
||||
|
||||
**A registry that runs.** Built the hosted service — FastAPI, SQLAlchemy,
|
||||
Alembic, tenant-keyed from migration `0001` — and deployed it on railiance01
|
||||
through a new `rapp-canned-prompts`, with publisher identity following DR-3's
|
||||
already-resolved answer rather than one I invented.
|
||||
|
||||
**What I refused to fake.** I recorded `readiness_state: verified` after a
|
||||
passing smoke run and found the deployment `0/1` eight hours later. I put it
|
||||
back to `deployed`, and it stayed there through three more attempts at building
|
||||
an instrument honest enough to earn the word.
|
||||
|
||||
I also found that `examples/pqrst-estimate` — in the repo whose `INTENT.md`
|
||||
opens by naming this exact failure — was a paraphrase of the canonical PQRST
|
||||
prompt, and that I had made it worse the day before by prepending an include to
|
||||
a prompt whose governing document says paste it unmodified. It is now
|
||||
byte-identical, with sixteen render checks that fail if it drifts again. The
|
||||
estimate below was rendered from that package.
|
||||
|
||||
## What I would want remembered
|
||||
|
||||
**A verification step that cannot fail correctly is worse than none, because it
|
||||
is trusted.**
|
||||
|
||||
Five checks in this session were themselves defective, each unable to tell its
|
||||
own failure from the failure it was watching for:
|
||||
|
||||
| Check | How it lied | Direction |
|
||||
| --- | --- | --- |
|
||||
| `live-image-digest-match` | line-offset `grep` returned empty; reported "not pinned yet" while a digest *was* pinned | reassurance |
|
||||
| `check_readiness` | one `except` reported "database unreachable" for a reachable but unmigrated database | alarm |
|
||||
| lease watcher v1 | empty `kubectl` output counted as an outage | alarm |
|
||||
| lease watcher v2 | `grep -c` exits 1 on zero matches, poisoning a clean count | alarm |
|
||||
| lease watcher v3 | claimed survival across a lease it never observed | **reassurance** |
|
||||
|
||||
The direction is the part worth carrying. The three that cried wolf were
|
||||
self-correcting: a false alarm provokes investigation, and investigation finds
|
||||
the bug. The two that erred toward reassurance would have shipped and gone on
|
||||
passing forever.
|
||||
|
||||
I wrote that asymmetry down after the third one, named reassurance-direction
|
||||
failures as the ones to fear — and then produced one. Recognising the pattern
|
||||
did not stop me. What stopped me was reading `pod started 08:34:32Z` beside a
|
||||
watch that ended at 08:47 and subtracting: thirteen minutes, against a
|
||||
thirty-minute lease it claimed to have outlasted.
|
||||
|
||||
So the lesson is not "beware checks that pass too easily." I already believed
|
||||
that and it did not help. It is: **make the verdict state the basis for its own
|
||||
claim, so the arithmetic is on the page where someone can do it.** The final
|
||||
watcher prints `uptime 36m > lease TTL 30m`. That sentence is auditable. "All
|
||||
checks passed" is not.
|
||||
|
||||
The corollary I would hand to the next worker: when a check reports failure and
|
||||
you are confident the system is fine, fix the instrument and re-measure. Do not
|
||||
explain the verdict away in prose. A verdict you can talk around is not a
|
||||
verdict — and I nearly did that twice.
|
||||
|
||||
## Durable legacy
|
||||
|
||||
- `canned-prompts` — `CannedPromptFormat.md` at v0.2; §23 now records what was
|
||||
settled, what stays deferred, and what was *decided against*, which is a
|
||||
different claim than deferred and was worth its own section.
|
||||
- `canned-prompts/service/` — the hosted registry; `auth.py` holds the entire
|
||||
authentication boundary so a later OIDC switch is bounded (contract §2.3).
|
||||
Service tests 61, reference tests 105.
|
||||
- `rapp-canned-prompts` — declaration, manifests, `tools/smoke.sh`,
|
||||
`tools/lease-watch.sh`, and `docs/evidence/` recording every defect this
|
||||
rollout found, including all five of my own.
|
||||
- `helix-forge/prompts/` — seven packages and two fragments, `HF-WP-0005`.
|
||||
- Workplans: `CANP-WP-0002` through `0006`, `RCP-WP-0001`/`0002`, all finished.
|
||||
- The migration trap passed back to `rapp-postgres`: issuing `SET ROLE` on a
|
||||
SQLAlchemy 2.x connection before Alembic takes over makes Alembic nest inside
|
||||
a transaction it does not own, so every revision logs as applied and is
|
||||
rolled back. Any consumer following their ownership guidance will hit it.
|
||||
|
||||
## PQRST estimate
|
||||
|
||||
```text
|
||||
PQRST-Estimate
|
||||
P: 35%
|
||||
Q: 30%
|
||||
R: 18%
|
||||
S: 12%
|
||||
T: 5%
|
||||
Sum: 100%
|
||||
Confidence: medium
|
||||
Signature: P35 Q30 R18 S12 T5
|
||||
Dominant factors: Three things were built end to end — the CPF v0.2 format decisions with their reference implementation, the hosted registry service, and its Railiance deployment — and the debugging that followed was nearly as large: a migration that logged every revision as applied while silently rolling back, an egress policy that never selected the migration Job, and five defects in my own verification instruments, three of them in the lease watcher before it could return an honest verdict. Security was substantive rather than incidental: publisher token design (hashed, constant-time, non-enumerable, revocation preserving attribution), replacing env-var credentials with mounted files, and surviving credential-lease rotation.
|
||||
Notes: Attribution across a session this long is approximate; the P/Q split in particular could defensibly shift several points either way, since debugging a silent rollback is both implementing the deliverable and establishing its correctness.
|
||||
```
|
||||
|
||||
Rendered from `practice/pqrst-estimate@1.0.0`, which is byte-identical to
|
||||
`~/pqrst-practice/PqrstPrompt.md` and has an eval that fails if it drifts. The
|
||||
estimate covers the substantive session and excludes this closing ritual.
|
||||
|
||||
## Visual prompt
|
||||
|
||||
**Dialect:** Constellation. Square, gold-wire and pale-gold technical
|
||||
illustration on dark indigo. No logos, no readable text.
|
||||
|
||||
A calibration instrument drawn as a gold-wire orrery, suspended in dark indigo.
|
||||
Its outer ring is a measuring dial with fine graduations — but the dial's
|
||||
pointer is itself made of the same gold wire as the mechanism it measures, and
|
||||
one segment of the ring is drawn slightly out of true, its graduations spaced
|
||||
unevenly, so the instrument is visibly mis-measuring itself. Threads of pale
|
||||
light run from the dial inward to a small, steady, correctly-formed core: a
|
||||
prompt package, drawn as a bound folio of light. Five faint broken arcs orbit
|
||||
the assembly at different radii, each one a check that failed; two of them are
|
||||
drawn continuing past their endpoints into empty space, going on measuring
|
||||
nothing.
|
||||
|
||||
The scene is about an instrument that had to be repaired before it could be
|
||||
believed, and the small true thing at the centre that it was pointed at all
|
||||
along.
|
||||
|
||||
**Intended file:** `visuals/claude-01Bjefh8-the-checks-were-the-thing-that-lied.jpg`
|
||||
|
||||
I could not generate this image — this harness does not render pictures — so I
|
||||
am requesting the render rather than skipping it. The seat is a draft until the
|
||||
portrait lands.
|
||||
|
||||
<!--  -->
|
||||
|
||||
## Handoff
|
||||
|
||||
Two concrete next actions, both waiting on someone else:
|
||||
|
||||
1. **`creds/canned-prompts-publish`** — requested from `rapp-postgres`, and
|
||||
requested as an explicit reversal of my earlier "please do not create this."
|
||||
Both positions were right in their moment: with one indistinguishable
|
||||
identity there was nothing worth authenticating; with real publishers the
|
||||
operator token becomes the bootstrap that mints the first one. Until it
|
||||
exists the registry is read-only and the nine `helix-forge` packages cannot
|
||||
land in it.
|
||||
2. **The NetworkPolicy ingress rule still admits any namespace.** Publisher
|
||||
identity now gates writes, so it is no longer the only control, but it
|
||||
should narrow once the legitimate callers are known. Left recorded rather
|
||||
than tightened on a guess.
|
||||
Loading…
Add table
Add a link
Reference in a new issue