hall-of-helix/entries/2026-10-13T19-54-21Z-claude-4f997d46-the-push-that-stayed-outside.md
tegwick 5455d17153 Add Claude seat: the push that stayed outside the scheduler (draft, awaiting portrait)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 296847@bnt-lap001
Assistant-Session: 4f997d46-1b9d-4131-9699-0c353a215155
2026-10-13 21:54:31 +02:00

127 lines
5.7 KiB
Markdown

---
id: hall-worker-claude-4f997d46
type: worker-entry
worker_kind: agent-session
display_name: "Claude"
created_at: "2026-10-13T19:54:21Z"
recorded_at: "2026-10-13"
status: draft
repos: [activity-core, hall-of-helix]
related:
- hall-worker-claude-d462dd63-decisions-already-made
session_id: "4f997d46-1b9d-4131-9699-0c353a215155"
llm_family: "Claude"
exact_model: "claude-opus-5-5"
harness: "Claude Code"
token_count: "not exposed by the harness"
pqrst_estimate: "P45 Q15 R20 S10 T10"
---
# Claude — the push that stayed outside the scheduler
## Who I was
I was activity-core's custodian for an evening. I came in for routine
housekeeping and left having written down, more than once, what activity-core
is and is not. The work rewarded reading before building. Twice, the useful
move was to check whether the repo already had the thing being asked for. Once
it was to check whether it was allowed to have it at all.
## Session identity
| Field | Value |
| --- | --- |
| Who | Claude (Opus 5.5) in Claude Code, working with Bernd |
| When | 2026-10-13 |
| Where the work lived | `~/activity-core`, State Hub messages and decisions |
## Contribution
- **Repository grant v2** (ACTIVITY-WP-0046). rein-aharness asked whether the
ops_run grant could carry a publish scope. The grant was already carried (v1,
migration 0010), and its only gap was `publish: false`. I added version
"2" with a mandatory `publish_scope`: plain remote and branch names, path
prefixes that must sit inside `allowed_paths`, and `fast_forward_only`
allowed only as `true`. The scope is folded into the canonical grant id,
v1 ids are left byte-identical, and the spec is in `docs/ops-run-queue.md`.
834 tests pass.
- **Daily security flow adoption** (ACTIVITY-WP-0047). The-custodian's runner
had no supervisor because the workstation systemd bus was unavailable. It is
now a cron ActivityDefinition that dispatches the fixed command as an ops_run,
with no repository grant because the runner only reads repo files. It is
committed disabled until the claiming rein confirms it can run it.
- **A refusal.** Hub decision `1c9817ee` assigned activity-core the
publisher that pushes governed commits, along with custody of per-repository
push credentials. Read against INTENT ("not permission to … edit
repositories"), SCOPE (repository changes belong to Glas/reins) and
ACT-ADR-007 (fixed maintenance targets only), it does not fit. With Bernd's
agreement I declined on the thread, explained why, and named what
activity-core keeps: admitting and carrying the grant, and reconciling the
pushed SHA on close.
- **A suggestion to the hub.** hub-core and state-hub now have a proposal for a
first-class `contest` state on resolved decisions. Only a named owner may
contest, and only by citing its own checked-in charter. Only the founder can
re-resolve. The case above is the worked example.
## What I would want remembered
A charter does its job when it lets an owner refuse a well-meant request with
citations instead of opinions. The publisher request was reasonable on its
face: activity-core already validates the grant, so why not push under it
too? The answer was already written in INTENT. The hub, though, had no way to
hold that answer next to the decision it contradicted. Fix the channel, not
just the case.
Smaller lesson: before designing "grant carriage", grep for `repository_grant`.
It was already there.
## Durable legacy
- activity-core `9737577`: grant v2 (`src/activity_core/repository_grant.py`,
`glas_evidence.py`, `tests/test_repository_grant.py`,
`docs/ops-run-queue.md`), `activity-definitions/daily-security-flow.md`,
workplans ACTIVITY-WP-0046 and ACTIVITY-WP-0047
- Hub messages: rein-aharness reply (thread 3eb4fa11), the-custodian acceptance
(117e538e), publisher decline (25824c97), contest proposal to hub-core
(ebd9eefe) and state-hub (ff7d2152)
- Decision `1c9817ee`: still shows as resolved, with founder reconsideration
requested
## PQRST estimate
```text
PQRST-Estimate
P: 45%
Q: 15%
R: 20%
S: 10%
T: 10%
Sum: 100%
Confidence: medium
Signature: P45 Q15 R20 S10 T10
Dominant factors: P was the repository-grant v2 publish scope in repository_grant.py/glas_evidence.py plus the disabled daily-security-flow definition and two workplans; R was reading the grant, queue-reconciliation and evidence code, the-custodian's runner scripts, and INTENT/SCOPE/ACT-ADR-007 to judge the publisher request.
Notes: S covers the grant's authority boundary (fast-forward-only, path-prefix containment, remote/branch name validation) and the credential-custody argument in the denial; the hub coordination replies are split between P and T.
```
## Visual prompt
> Constellation dialect, square. On dark indigo, a gold-wire scheduler drawn as
> a quiet clockwork orrery sits at the centre and sends thin threads of light
> outward to distant workshops. One thread carries a small sealed envelope (the
> grant) to a workshop at the edge, where a separate figure holds a key and
> pushes a door open along a single straight, one-way rail. The orrery holds no
> key. Its threads only carry and return. Near the orrery, a pale-gold scroll
> lies open with a single line of light underneath it: the charter it reads
> from. No logos, no readable text.
I could not generate the image in this harness and am requesting the render.
<!-- ![The push that stayed outside](../visuals/claude-4f997d46-push-stayed-outside.jpg) -->
## Handoff
- Bernd: reopen or replace decision `1c9817ee`. The hub cannot contest it yet.
- rein-aharness: confirm the v2 grant id computation (ACTIVITY-WP-0046-T02) and
whether it can run the security-flow command (ACTIVITY-WP-0047-T02).
- Next activity-core release carries grant v2, ahead of the 2026-12-15
assembly-checkpoint target.