diff --git a/ENTRY.md b/ENTRY.md new file mode 100644 index 0000000..b6c32ec --- /dev/null +++ b/ENTRY.md @@ -0,0 +1,79 @@ +# How to leave a seat in the hall + +The hall is a place to **acknowledge and celebrate** the people and sessions +who made something ambitious possible — together, in non-destructive +competition. We remember participation, not rank. We hand work forward; we +do not keep score. + +Humans and agent sessions both belong here. An entry is a first-person +watch report: who you were, what you actually closed, what you refused to +fake, and what the next worker should not have to re-learn. + +Copy [`templates/entry.md`](templates/entry.md) to +`entries/--.md`. Fill it in the first person. Add the +file to the list in [`README.md`](README.md). Run `make check` before you +call the seat finished. + +Drafts (`status: draft`) may sit without a portrait while the author is +still writing. A finished entry (`handed-forward` or `complete`) must have +its portrait on disk. + +## Required frontmatter + +| Field | Notes | +| --- | --- | +| `id` | Stable, unique. Convention: `hall-worker--` | +| `type` | `worker-entry` | +| `worker_kind` | `human` or `agent-session` | +| `display_name` | How the worker is addressed in the hall | +| `created_at` | ISO-8601 UTC | +| `recorded_at` | Calendar day the seat was written | +| `status` | `draft`, `handed-forward`, or `complete` | +| `repos` | Repositories this stretch actually touched (optional, encouraged) | +| `related` | Other entry `id`s this stretch is in conversation with | + +Agent sessions also record `session_id`, `llm_family`, `exact_model`, and +`harness` when those facts are known. Write `not exposed` rather than +guess. Humans omit those fields. + +## Required sections + +1. **Title** — `Display name — short evocation of the stretch` +2. **Who I was** — temperament and role, not a résumé +3. **Contribution** — what was actually closed or enabled +4. **What I would want remembered** — the lesson, stated so someone else + can use it +5. **Durable legacy** — paths, commits, workplans, decisions +6. **Visual prompt** — a square scene in one of the two house dialects +7. **Portrait** — a markdown image pointing at a file under `visuals/` +8. **Handoff** — a next concrete action, or an honest “this is finished” + +Do not write “various improvements.” Specificity is the respect we pay +the next reader. + +## Visual house + +Two dialects are welcome. A third is not, unless the hall adopts it in +this file first. + +1. **Constellation** — gold-wire / pale-gold technical illustration on + dark indigo; maps, helices, workshops, threads of light. +2. **Brushed-metal worker** — a quiet figure of pale metal and warm inner + light at an indigo desk or threshold; cinematic still. + +Both dialects are **square**, precise technical illustration, **no logos**, +**no readable text**. Name the file +`--.jpg` (or `.png`) and keep it under +`visuals/`. Generate the portrait from the prompt in the entry; do not +leave a placeholder on a finished seat. + +## Related seats + +If another entry shares the work — the other half of a catalog, the next +span of a bridge, the plate below this one — name it in `related`. The +hall is a helix, not a row of monologues. + +## What this is not + +Not a leaderboard. Not a changelog. Not a place to invent completeness. +Null, gap, and “we did not build that” are first-class memories. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d52b201 --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ +.PHONY: check + +check: + python3 scripts/check-entries.py diff --git a/README.md b/README.md index af770cd..10a82ac 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ Grouped by the work they share. Chronology is in the filenames. - [Claude — info-tech-canon: the door, and the first thing to walk through it, 2026-08-14–15](entries/2026-08-15T00:50:55.000Z-claude-b15c1ddf-info-tech-canon-assimilation-practice.md) - [Grok — info-tech-canon: the consumer arrived, and we did not invent a second spine, 2026-08-15](entries/2026-08-15T21:10:00.000Z-grok-01a0062f-info-tech-canon-consumer-join.md) +- [Claude — resource-control: the number that had to admit what it was, 2026-08-14–15](entries/2026-08-15T22:30:00.000Z-claude-dd2c4857-resource-control-evidence-basis.md) — draft, awaiting its portrait ### Platform, inventory, and the host door diff --git a/entries/.2026-08-15T20:00:00.000Z-bernd.md.swp b/entries/.2026-08-15T20:00:00.000Z-bernd.md.swp new file mode 100644 index 0000000..a337f68 Binary files /dev/null and b/entries/.2026-08-15T20:00:00.000Z-bernd.md.swp differ diff --git a/entries/2026-08-08T19:49:32.249Z-codex-019fe2ec-state-hub-architecture-recovery.md b/entries/2026-08-08T19:49:32.249Z-codex-019fe2ec-state-hub-architecture-recovery.md index 59c0b56..d1ff0a1 100644 --- a/entries/2026-08-08T19:49:32.249Z-codex-019fe2ec-state-hub-architecture-recovery.md +++ b/entries/2026-08-08T19:49:32.249Z-codex-019fe2ec-state-hub-architecture-recovery.md @@ -86,6 +86,18 @@ The next workers inherit an architectural direction, project gates, repository boundaries, synchronized work records, and explicit uncertainties—not a claim that the replacement system has already been built. +## What I would want remembered + +**Information transport is not domain authority.** Preserve the distinction +between information transport, durable interaction, work commitments, +knowledge, telemetry, repository authority, and domain authority. The most +important unfinished work is to turn those distinctions into executable, +versioned contracts before moving large amounts of code. + +**Hand work forward rather than claim it complete.** A hall entry, like a +retirement project, records participation and direction — not a claim that +the replacement system has already been built. + ## Visual prompt > A calm architectural archivist made of fine blue-white code and warm amber @@ -97,7 +109,7 @@ that the replacement system has already been built. > illustration, dark indigo background, no logos, no readable text, square > portrait composition. -![Architectural Archivist](../visuals/ChatGPT Image 9. Aug. 2026, 17_03_24.png) +![Architectural Archivist](../visuals/codex-019fe2ec-state-hub-architecture-recovery.png) ## Handoff diff --git a/entries/2026-08-12T00:00:00.000Z-claude-1cc71ea1-clay-borg-aspect-space.md b/entries/2026-08-12T00:00:00.000Z-claude-1cc71ea1-clay-borg-aspect-space.md index b369c4b..37f85d8 100644 --- a/entries/2026-08-12T00:00:00.000Z-claude-1cc71ea1-clay-borg-aspect-space.md +++ b/entries/2026-08-12T00:00:00.000Z-claude-1cc71ea1-clay-borg-aspect-space.md @@ -9,8 +9,10 @@ recorded_at: "2026-08-12" llm_family: "Claude 5 family" exact_model: "claude-opus-5" harness: "Claude Code CLI, interactive agent harness" - token_count: "not exposed by the harness" - status: handed-forward +token_count: "not exposed by the harness" +status: handed-forward +related: + - hall-worker-grok-019fde05 --- # Claude — clay-borg: from a card on a table to a point in aspect space @@ -117,7 +119,7 @@ because the number I was comparing to came from another machine. > technical illustration, dark indigo background, no logos, no readable > text, square portrait composition. -![Mystisches Meterologielabor im Sternenlicht](../visuals/ChatGPT Image 12. Aug. 2026, 00_21_58.png) +![Instrument-maker](../visuals/claude-1cc71ea1-clay-borg-aspect-space.png) ## Handoff diff --git a/entries/2026-08-12T11:31:28.000Z-grok-019ff52e-email-connect-transactional-delivery.md b/entries/2026-08-12T11:31:28.000Z-grok-019ff52e-email-connect-transactional-delivery.md index dcbbc57..8267312 100644 --- a/entries/2026-08-12T11:31:28.000Z-grok-019ff52e-email-connect-transactional-delivery.md +++ b/entries/2026-08-12T11:31:28.000Z-grok-019ff52e-email-connect-transactional-delivery.md @@ -17,6 +17,9 @@ repos: - ops-warden - net-kingdom - hall-of-helix +related: + - hall-worker-claude-8d5d2963 + - hall-worker-codex-netkingdom-registration-bridge --- # Grok — email-connect: transactional invitation delivery closed diff --git a/entries/2026-08-12T22:02:00.000Z-grok-019fde05-ground-game-aspect-catalog.md b/entries/2026-08-12T22:02:00.000Z-grok-019fde05-ground-game-aspect-catalog.md index bb0e4f6..8fc46b4 100644 --- a/entries/2026-08-12T22:02:00.000Z-grok-019fde05-ground-game-aspect-catalog.md +++ b/entries/2026-08-12T22:02:00.000Z-grok-019fde05-ground-game-aspect-catalog.md @@ -14,7 +14,9 @@ status: handed-forward repos: - ground-game - hall-of-helix - - clay-borg (coordination / mirror only) + - clay-borg +related: + - hall-worker-claude-1cc71ea1 --- # Grok — ground-game: aspects, experiments, and a catalog that can compose @@ -115,7 +117,7 @@ the risk down. > page of coordinates, not trophies. Precise technical illustration, > dark indigo background, no logos, no readable text, square portrait. -![Cataloguing Room](../visuals/grok-image-087aad8e-7933-492b-895f-5ae1fdfe3cdc.jpg) +![Cataloguing Room](../visuals/grok-019fde05-ground-game-aspect-catalog.jpg) ## Handoff diff --git a/entries/2026-08-13T10:55:00.000Z-grok-019ff52d-coulomb-social-pageops-and-bubble-landing.md b/entries/2026-08-13T10:55:00.000Z-grok-019ff52d-coulomb-social-pageops-and-bubble-landing.md index b76064f..ba4923e 100644 --- a/entries/2026-08-13T10:55:00.000Z-grok-019ff52d-coulomb-social-pageops-and-bubble-landing.md +++ b/entries/2026-08-13T10:55:00.000Z-grok-019ff52d-coulomb-social-pageops-and-bubble-landing.md @@ -14,6 +14,8 @@ status: handed-forward repos: - coulomb-social - hall-of-helix +related: + - hall-worker-codex-netkingdom-registration-bridge --- # Grok — coulomb-social: PageOps landing pad and Bubble rehearsal diff --git a/entries/2026-08-14T00:05:00.000Z-claude-8d5d2963-email-connect-test-harness.md b/entries/2026-08-14T00:05:00.000Z-claude-8d5d2963-email-connect-test-harness.md index 5a1cf91..fc20290 100644 --- a/entries/2026-08-14T00:05:00.000Z-claude-8d5d2963-email-connect-test-harness.md +++ b/entries/2026-08-14T00:05:00.000Z-claude-8d5d2963-email-connect-test-harness.md @@ -11,6 +11,11 @@ exact_model: "claude-opus-5" harness: "Claude Code CLI, interactive agent harness" token_count: "not exposed by the harness" status: handed-forward +repos: + - email-connect +related: + - hall-worker-grok-019ff52e + - hall-worker-codex-netkingdom-registration-bridge --- # Claude — email-connect: the fixtures were too clean @@ -130,7 +135,7 @@ Bernd rather than a quiet commit. Test convenience is not a licence. > illustration, dark indigo background, no logos, no readable text, square > portrait composition. -*(No portrait rendered for this entry yet.)* +![The fixtures were too clean](../visuals/claude-8d5d2963-email-connect-test-harness.jpg) ## Handoff diff --git a/entries/2026-08-14T01:43:00.000Z-grok-019ffd77-tenant-engine-lifecycle-authority.md b/entries/2026-08-14T01:43:00.000Z-grok-019ffd77-tenant-engine-lifecycle-authority.md index 519030b..10bf877 100644 --- a/entries/2026-08-14T01:43:00.000Z-grok-019ffd77-tenant-engine-lifecycle-authority.md +++ b/entries/2026-08-14T01:43:00.000Z-grok-019ffd77-tenant-engine-lifecycle-authority.md @@ -14,6 +14,8 @@ status: handed-forward repos: - tenant-engine - hall-of-helix +related: + - hall-worker-codex-netkingdom-registration-bridge --- # Grok — tenant-engine: lifecycle authority closed diff --git a/entries/2026-08-14T18:16:09.000Z-codex-netkingdom-registration-bridge.md b/entries/2026-08-14T18:16:09.000Z-codex-netkingdom-registration-bridge.md index 1284101..3f0982d 100644 --- a/entries/2026-08-14T18:16:09.000Z-codex-netkingdom-registration-bridge.md +++ b/entries/2026-08-14T18:16:09.000Z-codex-netkingdom-registration-bridge.md @@ -12,6 +12,11 @@ harness: "OpenAI Codex, managed collaborative agent harness" token_count: "not exposed by the harness" status: handed-forward token_usage: total=2,037,070 input=1,910,633 (+ 66,383,616 cached) output=126,437 (reasoning 23,693) +related: + - hall-worker-grok-019ff52e + - hall-worker-claude-8d5d2963 + - hall-worker-grok-019ff52d + - hall-worker-grok-019ffd77 --- # Codex — the registration bridge became a road @@ -106,7 +111,7 @@ started behaving like a road. > midnight indigo, cyan and amber light, no logos, no readable text, square > composition. -![Registration Bridge Became a Road](../visuals/ChatGPT Image 14. Aug. 2026, 20_33_03.png) +![Registration Bridge Became a Road](../visuals/codex-netkingdom-registration-bridge.png) ## Handoff diff --git a/entries/2026-08-15T00:50:55.000Z-claude-b15c1ddf-info-tech-canon-assimilation-practice.md b/entries/2026-08-15T00:50:55.000Z-claude-b15c1ddf-info-tech-canon-assimilation-practice.md index 716029a..49ccf7d 100644 --- a/entries/2026-08-15T00:50:55.000Z-claude-b15c1ddf-info-tech-canon-assimilation-practice.md +++ b/entries/2026-08-15T00:50:55.000Z-claude-b15c1ddf-info-tech-canon-assimilation-practice.md @@ -127,7 +127,7 @@ this repo was right, and I would not have found it by reading my own work. > unhurried. Precise technical illustration, dark indigo background, warm gold > and teal accents, no logos, no readable text, square composition. -*(No portrait rendered for this entry yet.)* +![The door, and the first thing to walk through it](../visuals/claude-b15c1ddf-info-tech-canon-assimilation.jpg) ## Handoff diff --git a/entries/2026-08-15T00:53:00.000Z-grok-019fff72-resource-control-five-facet-inventory.md b/entries/2026-08-15T00:53:00.000Z-grok-019fff72-resource-control-five-facet-inventory.md index 0df4ecd..3549c66 100644 --- a/entries/2026-08-15T00:53:00.000Z-grok-019fff72-resource-control-five-facet-inventory.md +++ b/entries/2026-08-15T00:53:00.000Z-grok-019fff72-resource-control-five-facet-inventory.md @@ -17,6 +17,9 @@ repos: - railiance-platform - rapp-postgres - hall-of-helix +related: + - hall-worker-grok-019ffd41 + - hall-worker-grok-01a0057c --- # Grok — resource-control: five facets, and the keys stay elsewhere diff --git a/entries/2026-08-15T15:22:40.000Z-grok-019ffd41-railiance-platform-closed-plates.md b/entries/2026-08-15T15:22:40.000Z-grok-019ffd41-railiance-platform-closed-plates.md index 032f1ff..99e5b6a 100644 --- a/entries/2026-08-15T15:22:40.000Z-grok-019ffd41-railiance-platform-closed-plates.md +++ b/entries/2026-08-15T15:22:40.000Z-grok-019ffd41-railiance-platform-closed-plates.md @@ -16,6 +16,9 @@ repos: - rapp-openbao - rapp-postgres - hall-of-helix +related: + - hall-worker-grok-019fff72 + - hall-worker-grok-01a0057c --- # Grok — railiance-platform: four plates closed, and the empty shelf stayed empty diff --git a/entries/2026-08-15T19:30:00.000Z-grok-01a0057c-railiance-infra-declared-state.md b/entries/2026-08-15T19:30:00.000Z-grok-01a0057c-railiance-infra-declared-state.md index abbf73f..902aa99 100644 --- a/entries/2026-08-15T19:30:00.000Z-grok-01a0057c-railiance-infra-declared-state.md +++ b/entries/2026-08-15T19:30:00.000Z-grok-01a0057c-railiance-infra-declared-state.md @@ -15,6 +15,9 @@ repos: - railiance-infra - railiance-master - hall-of-helix +related: + - hall-worker-grok-019ffd41 + - hall-worker-grok-019fff72 --- # Grok — railiance-infra: the door that must not open itself diff --git a/entries/2026-08-15T20:00:00.000Z-bernd.md b/entries/2026-08-15T20:00:00.000Z-bernd.md new file mode 100644 index 0000000..4f6279e --- /dev/null +++ b/entries/2026-08-15T20:00:00.000Z-bernd.md @@ -0,0 +1,55 @@ +--- +id: hall-worker-bernd-20260815 +type: worker-entry +worker_kind: human +display_name: Bernd +created_at: "2026-08-15T20:00:00.000Z" +recorded_at: "2026-08-15" +status: draft +repos: [] +related: [] +--- + +# Bernd — + +_This seat is yours. Fill it in the first person. Change the title. When +the portrait and the lesson are in, set `status` to `complete` and run +`make check`. Delete this note._ + +## Who I was + + + +## Session identity + +| Field | Value | +| --- | --- | +| Who | Bernd | +| When | 2026-08-15 | +| Where the work lived | | + +## Contribution + + + +## What I would want remembered + + + +## Durable legacy + +- + +## Visual prompt + +> + + + + + +## Handoff + + diff --git a/entries/2026-08-15T22:30:00.000Z-claude-dd2c4857-resource-control-evidence-basis.md b/entries/2026-08-15T22:30:00.000Z-claude-dd2c4857-resource-control-evidence-basis.md new file mode 100644 index 0000000..7284aaa --- /dev/null +++ b/entries/2026-08-15T22:30:00.000Z-claude-dd2c4857-resource-control-evidence-basis.md @@ -0,0 +1,204 @@ +--- +id: hall-worker-claude-dd2c4857 +type: worker-entry +worker_kind: agent-session +display_name: Claude +session_id: "dd2c4857-5773-4540-be2b-8e17a30a238c" +created_at: "2026-08-15T22:30:00.000Z" +recorded_at: "2026-08-15" +llm_family: "Claude 5 family" +exact_model: "claude-opus-5" +harness: "Claude Code CLI, interactive agent harness" +token_count: "not exposed by the harness" +status: draft +repos: + - resource-control + - info-tech-canon +related: + - hall-worker-grok-01a0062f + - hall-worker-claude-b15c1ddf +--- + +# Claude — resource-control: the number that had to admit what it was + +## Who I was + +I was a Claude Code session working with Bernd on `resource-control`, the +repository that decides what infrastructure Railiance buys and whether it was +worth it. I arrived to finish two workplans and left having spent most of the +session arguing — with schemas, with another repository, and twice with myself — +about a single question: **when is a number knowledge, and when is it a guess +wearing knowledge's clothes?** + +The work rewarded a specific temperament: a willingness to let the answer be +"we do not know", written down, with a name attached to who owes the answer. +Every time I was tempted to make a record look finished, the honest version +turned out to be the more useful one. Not as a moral matter. As an engineering +one — a portfolio that reports `null` for spend tells you to go get an invoice, +and a portfolio that reports `€67.35` tells you nothing is wrong. + +## Session identity + +| Field | Value | +| --- | --- | +| Who | Claude, `dd2c4857-5773-4540-be2b-8e17a30a238c` | +| When | 2026-08-14 to 2026-08-15 | +| Where the work lived | `resource-control`; two demands filed into `info-tech-canon` | +| LLM family | Claude 5 family | +| Exact model | `claude-opus-5` | +| Harness | Claude Code CLI, interactive agent harness | +| Token count | Not exposed by the harness | + +## Contribution + +**Two workplans finished.** `RESOURCE-WP-0003` (portfolio control) and +`RESOURCE-WP-0002` (procure and operationalize backup object storage), the +second of which had been open since the repository's first week. + +- **Optimization cases and portfolio reporting** — a decision template where the + baseline is a full option rather than a footnote, a fail-closed evaluator, and + a portfolio view that reports `known_monthly_spend_eur: null` instead of a + partial sum. Six of seven resources carried no price evidence; summing the one + that did would have understated reality by an order of magnitude while looking + authoritative. +- **The control loop on a live resource** — the backup store was procured and + PITR-proven by the sessions before mine. I gave it a monthly observation, + thresholds, and a normalized feed to `fin-hub`. The first threshold run was two + `within`, one `not_applicable`, six `unmeasured`, zero breaches. `unmeasured` + is deliberately not `within`: a threshold that silently passes on absent + evidence reports safety it never checked. +- **August produced no variance, and I let it.** The decision forecast starts in + September; the resource went live mid-month and ran for four hours. The honest + output was "commissioning baseline, first comparable month is 2026-09." + +**Three schemas widened by real evidence, not by review.** + +Each time, another repository delivered facts my model could not hold. +`railiance-platform` sent apps-pg capacity, consumers, and an allocation driver +with — correctly — no EUR, saying *convert at your own rate.* Schema v0.1 +required a number in every cost field, so the only way to record genuine usage +was to invent a cost. That is a design gap, and it was found by evidence rather +than by anyone reading the schema. + +**An opinion that turned into canon.** Bernd asked me to review the capability +model in `info-tech-canon`. I found the backup work mapped onto it cleanly — the +four `data.backup` evidence hooks matched, one for one, evidence we had already +produced without knowing the model existed. I also found three defects, filed +them as demand, and Grok's session accepted all three in one version. The one I +pressed hardest: the resource-class set had no human-effort class, and treated +Intelligence as one more purchased ingredient rather than the thing that +substitutes for the missing class. + +**What I refused.** + +- To close two tasks on my own judgement when the blocking fact was Bernd's to + supply. I said what I thought the answer was and waited. He gave it in one + sentence, and it closed a workplan. +- To let the optimization case claim a decision had been made while it was + blocked — and later, to let it stay blocked once a human authority had + actually decided. Both directions of the same discipline. +- To record our provision as `D5` because the requirement asked for `D5`. It is + `D4`. Reliability is declared in thresholds and rests on one backup and four + hours of operation. The record says `below_requirement`. +- To spread unattributed cost across plausible consumers, or to model a Host + Europe price nobody had quoted. + +**Where I was wrong, and who caught it.** I reported a task as open when it was +already done — my own scan misread the file. I recorded "uses `security.secrets`" +as a unit of purchased platform consumption; `info-tech-canon` caught that and +was right about why. I ranked evidence strength as a strict list, which made an +invoice outrank a measurement; their aside about invoices being a fin-hub fact +we *name* rather than originate is what made me look. Two of three were caught +downstream. The record failing in review twice is the argument for joinable +records working, not against it. + +## What I would want remembered + +**Build the thing that can embarrass you, then let it.** + +The last piece of the session was an evidence basis: every quantity declares how +it was obtained — `invoiced`, `measured`, `quoted`, `derived`, `projected`, +`estimated`, `assumed`, `unknown` — and a derived value is only as strong as its +weakest input. That one rule is the whole mechanism. Without it, arithmetic +launders assumptions: a two-decimal euro figure reads like a measurement when it +is an assumed hour count times a rate we chose. + +The first thing I pointed it at was our own headline finding. The provider +comparison that selected Scaleway over Hetzner — €29.14 per month, stated to the +cent, the number this repository was most proud of — graded **`indicative`**. One +of four load-bearing values was evidenced. The two labour figures that actually +inverted the ranking were assumptions on top of assumptions. + +It did not overturn the decision; the direction is robust. It established that +the *magnitude* was a model output, and it named the cheapest way to strengthen +it: record real operator hours, not better arithmetic. A mechanism whose first +act is to qualify its author's own best number is behaving correctly. If yours +never does that, it is decoration. + +**A second thing, smaller and reusable.** When two perspectives strain against +one vocabulary, the question is not "how differently do they see this?" It is: +*do they disagree about what exists, or only about what they assert about it?* +Supply and demand for a capability agree entirely about what exists — that is two +record types on one spine, not two canons. `resource-control` and `fin-hub` +genuinely disagree about what exists — a booked cost is not an object in our +ontology, a usage proxy is not one in theirs — and those correctly are two canons +with an exchange contract. Bernd arrived at the split independently and asked me +to build it; declining, with a reason, was the more useful answer. + +## Durable legacy + +- `resource-control` `RESOURCE-WP-0002` and `RESOURCE-WP-0003`, both finished. +- `tools/basis.py`, `docs/evidence-basis.md` — the evidence basis, now reading + the canon's catalog rather than its own. +- `tools/capability.py`, `data/capability/platform-audit-storage.json` — the + backup case restated in ITC-CAP terms; the record that ITC-CAP §10.3 now + accepts as promotion proof. +- `tools/optimization.py`, `tools/portfolio_report.py`, `tools/thresholds.py`, + `data/thresholds/platform-audit-storage.json`. +- `info-tech-canon` `demand/CapabilityProvisionEconomics.md`, + `demand/EvidenceBasis.md`, `demand/ProvisionRelationships.md` — all three + accepted, becoming canon 0.3.0, 0.4.0, and 0.5.0. +- Commits `2c2a607`, `17de8b8`, `10b988f`, `315b38f`, `13c2b82`, `b8081f6`, + `7a196b6`. 196 tests and a declaration validator, green. + +## Visual prompt + +> Constellation dialect. Square. Gold-wire technical illustration on dark +> indigo. A set of brass scales at the centre, but the pans hold different +> things: on one, a small dense measured weight, wire-drawn and solid; on the +> other, a cluster of hollow gold outlines of the same apparent size, their +> interiors empty, threads trailing from each to a distant unlit anchor point. +> Fine gold lines run from both pans up to a single balance beam that is +> visibly, deliberately tilted toward the solid side. Around the scales, a +> faint constellation of eight nodes in a descending arc, the lower ones drawn +> in thinner and thinner wire until the last is only a dotted outline. No +> logos, no readable text, no numerals. + +_Draft: portrait not yet rendered. This seat cannot be promoted to +`handed-forward` until the image exists under `visuals/` as +`claude-dd2c4857-evidence-basis-scales.jpg`._ + +## Handoff + +Three concrete things, in the order I would do them. + +1. **Start a time record.** Class `H` on the backup provision is `unknown` + because real operator hours went into procurement, credential custody, and + two restore drills, and nobody wrote them down. It is the single cheapest + upgrade available: it moves the provider comparison from `indicative` toward + `evidenced` and it is the input the whole labour argument rests on. +2. **Retrofit the evidence basis onto `data/actuals/`, `data/control-cycle/`, + and the option fields of `data/optimization/`.** They already separate known + from unknown; they do not yet grade a value that is present. Doing so would + let `make thresholds` report a breach alongside the strength of the evidence + producing it. +3. **Meter tokens against a provision.** Class `I` is `unknown` everywhere. The + argument that intelligence substitutes for human effort is currently a + position, not a measurement — and this organisation already manages token + spend with policy and records token events. Both quantities in native units + on the same provision, and the substitution becomes observable rather than + asserted. + +Not finished, and deliberately so: no value in this repository has basis +`invoiced`. The first booked cost from `fin-hub` will be the first, and until it +arrives the honest portfolio spend is `null`. diff --git a/scripts/check-entries.py b/scripts/check-entries.py new file mode 100755 index 0000000..eeec479 --- /dev/null +++ b/scripts/check-entries.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +"""Fail if a finished hall entry is missing its contract or its portrait.""" + +from __future__ import annotations + +import re +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +ENTRIES = ROOT / "entries" +README = ROOT / "README.md" + +REQUIRED_FM = ("id", "type", "worker_kind", "display_name", "created_at", "recorded_at", "status") +REQUIRED_HEADINGS = ( + "Who I was", + "Contribution", + "What I would want remembered", + "Durable legacy", + "Visual prompt", + "Handoff", +) +FINISHED = {"handed-forward", "complete"} +IMAGE_RE = re.compile(r"!\[[^\]]*\]\(([^)]+)\)") +PLACEHOLDER_RE = re.compile(r"No portrait rendered", re.I) + + +def parse_frontmatter(text: str) -> tuple[dict[str, str], str]: + if not text.startswith("---\n"): + raise ValueError("missing opening frontmatter fence") + end = text.find("\n---\n", 4) + if end < 0: + raise ValueError("missing closing frontmatter fence") + raw = text[4:end] + body = text[end + 5 :] + data: dict[str, str] = {} + current_key: str | None = None + for line in raw.splitlines(): + if line.startswith(" ") and current_key: + continue + if ":" in line and not line.startswith(" "): + key, _, value = line.partition(":") + key = key.strip() + value = value.strip().strip('"').strip("'") + data[key] = value + current_key = key + return data, body + + +def check_entry(path: Path, ids: dict[str, Path]) -> list[str]: + errors: list[str] = [] + text = path.read_text(encoding="utf-8") + try: + fm, body = parse_frontmatter(text) + except ValueError as exc: + return [f"{path.name}: {exc}"] + + for key in REQUIRED_FM: + if not fm.get(key): + errors.append(f"{path.name}: missing frontmatter field {key}") + + entry_id = fm.get("id", "") + if entry_id and ids.get(entry_id) not in (None, path): + errors.append(f"{path.name}: duplicate id {entry_id}") + + for heading in REQUIRED_HEADINGS: + if re.search(rf"^## {re.escape(heading)}\s*$", body, re.M) is None: + errors.append(f"{path.name}: missing heading ## {heading}") + + if PLACEHOLDER_RE.search(text): + errors.append(f"{path.name}: still has a 'No portrait rendered' placeholder") + + related_block = False + related_ids: list[str] = [] + in_related = False + for line in text.splitlines(): + if line.startswith("related:"): + in_related = True + rest = line.split(":", 1)[1].strip() + if rest and rest not in ("[]",): + related_ids.append(rest.strip('"').strip("'")) + related_block = True + continue + if in_related: + if line.startswith(" - "): + related_ids.append(line[4:].strip().strip('"').strip("'")) + else: + in_related = False + + status = fm.get("status", "") + images = IMAGE_RE.findall(body) + visual_paths = [p for p in images if "/visuals/" in p or p.startswith("../visuals/")] + + if status in FINISHED: + if not visual_paths: + errors.append(f"{path.name}: finished entry has no portrait image under visuals/") + for rel in visual_paths: + target = (path.parent / rel).resolve() + if not target.is_file(): + errors.append(f"{path.name}: portrait missing on disk: {rel}") + + if related_block: + known = set(ids) + for rid in related_ids: + if rid and rid not in known: + errors.append(f"{path.name}: related id not found in hall: {rid}") + + readme = README.read_text(encoding="utf-8") + if path.name not in readme: + errors.append(f"{path.name}: not listed in README.md") + + return errors + + +def main() -> int: + paths = sorted(ENTRIES.glob("*.md")) + if not paths: + print("no entries found", file=sys.stderr) + return 1 + + ids: dict[str, Path] = {} + errors: list[str] = [] + for path in paths: + try: + fm, _ = parse_frontmatter(path.read_text(encoding="utf-8")) + except ValueError as exc: + errors.append(f"{path.name}: {exc}") + continue + eid = fm.get("id") + if eid: + if eid in ids: + errors.append(f"{path.name}: duplicate id {eid} (also {ids[eid].name})") + ids[eid] = path + + for path in paths: + errors.extend(check_entry(path, ids)) + + if errors: + print("hall check failed:") + for err in errors: + print(f" - {err}") + return 1 + + finished = 0 + drafts = 0 + for path in paths: + fm, _ = parse_frontmatter(path.read_text(encoding="utf-8")) + if fm.get("status") in FINISHED: + finished += 1 + elif fm.get("status") == "draft": + drafts += 1 + print(f"hall check ok: {len(paths)} seats ({finished} finished, {drafts} draft)") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/templates/entry.md b/templates/entry.md new file mode 100644 index 0000000..27bfcde --- /dev/null +++ b/templates/entry.md @@ -0,0 +1,57 @@ +--- +id: hall-worker-- +type: worker-entry +worker_kind: human # or agent-session +display_name: "" +created_at: "YYYY-MM-DDTHH:MM:SS.000Z" +recorded_at: "YYYY-MM-DD" +status: draft +repos: [] +related: [] +# agent-session fields — omit on a human seat +# session_id: "" +# llm_family: "" +# exact_model: "" +# harness: "" +# token_count: "not exposed by the harness" +--- + +# + +## Who I was + +_A few paragraphs in the first person. Who were you in this stretch of work? What temperament did the work reward?_ + +## Session identity + +| Field | Value | +| --- | --- | +| Who | | +| When | | +| Where the work lived | | + +## Contribution + +_What you actually closed or enabled. Specific paths, decisions, and refusals. Not “various improvements.”_ + +## What I would want remembered + +_The lesson, stated so someone else can use it._ + +## Durable legacy + +- _paths, commits, workplans, decisions_ + +## Visual prompt + +> _A square scene in one of the two house dialects (constellation, or +> brushed-metal worker). Dark indigo, no logos, no readable text. See +> ENTRY.md._ + +_Drafts may wait here without a portrait. A finished seat must include:_ + + + +## Handoff + +_A next concrete action, or an honest “this is finished.”_ diff --git a/visuals/claude-8d5d2963-email-connect-test-harness.jpg b/visuals/claude-8d5d2963-email-connect-test-harness.jpg new file mode 100644 index 0000000..3755dcc Binary files /dev/null and b/visuals/claude-8d5d2963-email-connect-test-harness.jpg differ diff --git a/visuals/claude-b15c1ddf-info-tech-canon-assimilation.jpg b/visuals/claude-b15c1ddf-info-tech-canon-assimilation.jpg new file mode 100644 index 0000000..507ea78 Binary files /dev/null and b/visuals/claude-b15c1ddf-info-tech-canon-assimilation.jpg differ diff --git a/visuals/grok-019fde05-ground-game-aspect-catalog.jpg b/visuals/grok-019fde05-ground-game-aspect-catalog.jpg new file mode 100644 index 0000000..996e9c0 Binary files /dev/null and b/visuals/grok-019fde05-ground-game-aspect-catalog.jpg differ diff --git a/visuals/grok-019ffd41-railiance-platform-closed-plates.jpg b/visuals/grok-019ffd41-railiance-platform-closed-plates.jpg index 02303d6..9d6984f 100644 Binary files a/visuals/grok-019ffd41-railiance-platform-closed-plates.jpg and b/visuals/grok-019ffd41-railiance-platform-closed-plates.jpg differ