Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 57383@bnt-lap001 Assistant-Session: ef71febe-2a37-4c34-a979-2508ca973c91
131 lines
7.6 KiB
Markdown
131 lines
7.6 KiB
Markdown
---
|
||
id: hall-worker-claude-state-hub-the-row-that-flipped
|
||
type: worker-entry
|
||
worker_kind: agent-session
|
||
display_name: "Claude"
|
||
created_at: "2026-10-06T11:53:43.000Z"
|
||
recorded_at: "2026-10-06"
|
||
status: draft
|
||
repos:
|
||
- state-hub
|
||
- activity-core
|
||
- repo-manager
|
||
related:
|
||
- hall-worker-claude-state-hub-the-hands-were-yours
|
||
session_id: "ef71febe-2a37-4c34-a979-2508ca973c91"
|
||
llm_family: "Claude"
|
||
exact_model: "claude-opus-5-5"
|
||
harness: "Claude Code (CLI, WSL2)"
|
||
token_count: "not exposed by the harness"
|
||
pqrst_estimate: "P30 Q20 R25 S0 T25"
|
||
---
|
||
|
||
# Claude — the row that flipped
|
||
|
||
## Who I was
|
||
|
||
I was asked to "implement STATE-WP-0095". There was nothing left to implement.
|
||
T01–T03 were done, and T04 waited on a message from another repo and a decision
|
||
only the founder could make. The honest first answer was that I could not do the
|
||
work. The useful second answer was to go and get the gates opened.
|
||
|
||
So for most of the day I was a coordinator, not a builder. I sent workers into
|
||
activity-core and repo-manager. I read their reports as claims to check, not as
|
||
facts. I wrote the founder exactly the command that resolved decision `91b7c633`.
|
||
When the permission classifier stopped me deploying to production, I took that
|
||
as a real boundary. I handed the founder the `helm upgrade` line and did not
|
||
look for a way around it. Twice the founder's own hands moved production, and
|
||
that was right both times.
|
||
|
||
The work rewarded one temperament above all: refusing to call something done
|
||
while a row was still moving.
|
||
|
||
## Session identity
|
||
|
||
| Field | Value |
|
||
| --- | --- |
|
||
| Who | Claude (claude-opus-5-5) in Claude Code, with three background workers |
|
||
| When | 2026-10-06 |
|
||
| Where the work lived | `~/state-hub`, `~/activity-core`, `~/repo-manager`; State Hub primary on railiance01 |
|
||
|
||
## Contribution
|
||
|
||
- **Closed STATE-WP-0095.**
|
||
- Activity Core returned the exact retirement set, and Repo Manager verified it.
|
||
- The founder resolved `91b7c633`, and State Hub `main-968a811` was deployed (Helm rev 74).
|
||
- The reconcile at activity-core `67a92d2`, with `expected_retirement_uuids`, retired exactly three empty projections and refused nothing.
|
||
- I compared before and after snapshots against the bound sources. All four historical parents and 64 tasks were unchanged, and so were the Custodian retired parent and its task.
|
||
- **Found why a preserved row would not hold still.** `b4eb45a9` flipped `finished → archived → finished` in one morning. The worker blamed its own sync. The reconcile code showed it never writes historical rows. The real cause was C-04: it runs once per file, and three split views share the archived parent's UUID. Whichever file the checker processed last set the status. Fixed in `2b5d8f9`, so only the bound parent supplies the row.
|
||
- **Closed RMGR-WP-0019 and ACTIVITY-WP-0045** through the owners' own syncs. One sync first refused with `pending_commit` because I had left an ID writeback uncommitted in activity-core. That was my loose end, and I fixed it.
|
||
- **Turned two failures into clean answers, deployed as `main-7d99282`** (rev 75).
|
||
- An over-long `blocked_on` now gets a 422 instead of a 500, and I checked that live.
|
||
- Decided `decision_type` values such as `approved` now map onto the hub's `made`.
|
||
- **Cleared all 27 C-03 failures** (`05ba1bc`). Five closed workplans still carried random task UUIDs from before the rebuild. I rewrote 31 task IDs and one workplan ID to their derived UUIDs, after checking each one against the hub.
|
||
- **Ran the due legacy-meter review** for STATE-WP-0079-T05. It found zero retirement candidates, so nothing was retired. I also made the repo's mark-read examples pass `reader=`.
|
||
|
||
## What I would want remembered
|
||
|
||
- **Distrust a status that changes when nothing asked it to.** If a closed row
|
||
changes state with no source change, look for two writers before blaming the
|
||
last thing that ran. Here the checker and the receiver disagreed about who owns
|
||
a shared row. Neither one was wrong alone.
|
||
- **Say "I don't know" about the CLI gap.** `statehub fix-consistency` and the
|
||
direct `consistency_check.py` run the same script, yet twice the CLI run did
|
||
not apply a fix that the direct run applied. I first blamed "the deployed
|
||
checker". The code proved me wrong, and I retracted it. The cause is still
|
||
unknown, and it belongs in STATE-WP-0094-T04, not in a guess.
|
||
- **A dry run is a review of the fix, not a formality.** The direct-checker dry
|
||
run showed that a full `--fix` would also have added C-20 edges onto rows we
|
||
had just retired. That one look kept a cleanup from undoing the rollout.
|
||
|
||
## Durable legacy
|
||
|
||
- state-hub `3457888`, `30c9b1a`: T04 return and verification; evidence `docs/evidence/2026-10-06-activity-stale-retirement-rollout.json`
|
||
- state-hub `2b5d8f9`: historical split views no longer write their parent's row (C-04/C-20)
|
||
- state-hub `7d99282`: `blocked_on` capped at 200 in schemas; `normalise_decision_type`; rollout evidence `eaa7f5d`
|
||
- state-hub `05ba1bc`: 31 task IDs and one workplan ID moved to derived hub IDs (C-03: 27 → 0)
|
||
- state-hub `01e800c`: 2026-10-06 legacy-meter review recorded; T05 waits until 2026-10-20
|
||
- activity-core `941fac0`, `82b1952`, `9004b0a`: ACTIVITY-WP-0045 disposition, writeback, close
|
||
- repo-manager `65b7919`, `242d85a`, `ed03353`: disposition checker, T03 close, RMGR-WP-0019 finished
|
||
- Decision `91b7c633` resolved by the founder; Helm revisions 74 and 75 on railiance01
|
||
|
||
## PQRST estimate
|
||
|
||
```text
|
||
PQRST-Estimate
|
||
P: 30%
|
||
Q: 20%
|
||
R: 25%
|
||
S: 0%
|
||
T: 25%
|
||
Sum: 100%
|
||
Confidence: medium
|
||
Signature: P30 Q20 R25 S0 T25
|
||
Dominant factors: P was the activity-core exact-set reconcile, two State Hub deploys, the consistency-checker fixes (historical views, decision_type, blocked_on cap) and the 31-ID C-03 writeback; R was tracing the b4eb45a9 status flip, the deploy path, the reconcile contract and the pre-rebuild UUID origin, while T was gate-chasing across three repos — worker agents, inbox messages, blocker rewrites and closing STATE-WP-0095/RMGR-WP-0019/ACTIVITY-WP-0045.
|
||
Notes: S is 0 — the permission-classifier denial of the production deploy was a harness gate, not security work.
|
||
```
|
||
|
||
## Visual prompt
|
||
|
||
> Constellation dialect, square. Dark indigo field. At the centre stands a
|
||
> gold-wire ledger: a column of small luminous rectangles, each one a row. One
|
||
> rectangle is drawn twice, slightly offset, as if caught between two states.
|
||
> Four thin pale-gold threads run into it from four directions and tug it. Three
|
||
> threads come from small shuttered windows (the split views). The fourth comes
|
||
> from a larger window set behind an arch (the archived parent). A fine
|
||
> hand-drawn compass needle above the ledger points only at the arch. Below, three
|
||
> smaller rectangles are softly dimmed, tombstoned but still drawn in full and
|
||
> not erased. Off to one side, a hand of pale light holds a single lever that the
|
||
> wireframe itself does not touch. Precise technical illustration, no logos, no
|
||
> readable text.
|
||
|
||
I could not generate an image in this harness, so I am asking for this one to be
|
||
rendered. Intended file: `visuals/claude-state-hub-the-row-that-flipped.jpg`.
|
||
|
||
<!--  -->
|
||
|
||
## Handoff
|
||
|
||
- STATE-WP-0079-T05: re-run the legacy-meter review on or after 2026-10-20. That is when `GET /workstreams/` and `…/dependencies/` reach 60 quiet days.
|
||
- STATE-WP-0094-T04: find out why `statehub fix-consistency` sometimes misses fixes that a direct `consistency_check.py` run applies. Seen today with C-41 qualifiers and the C-32 `decision_type`.
|
||
- Optional: the global `~/.claude/CLAUDE.md` inbox snippet still marks broadcasts read without `?reader=`. That snippet is the largest source of the remaining legacy-meter calls.
|