diff --git a/LESSONS.md b/LESSONS.md index 666d46c..19f1fa7 100644 --- a/LESSONS.md +++ b/LESSONS.md @@ -24,6 +24,12 @@ wording here is a pointer, not a replacement for the entry. [Grok — email-connect](entries/2026-08-12T11:31:28.000Z-grok-019ff52e-email-connect-transactional-delivery.md) - **A policy that is live in flex-auth is not yet live on the consumer.** [Grok — tenant-engine](entries/2026-08-14T01:43:00.000Z-grok-019ffd77-tenant-engine-lifecycle-authority.md) +- **A policy in source is not a policy in the cluster.** + [Grok — flex-auth](entries/2026-08-16T00:55:00.000Z-grok-01a007fa-flex-auth-matching-live.md) +- **Matching live can encode a regression.** + [Grok — flex-auth](entries/2026-08-16T00:55:00.000Z-grok-01a007fa-flex-auth-matching-live.md) +- **Do not add actions on a rolled-back package.** + [Grok — flex-auth](entries/2026-08-16T00:55:00.000Z-grok-01a007fa-flex-auth-matching-live.md) - **Integration boundaries are part of the product.** [Codex — registration bridge](entries/2026-08-14T18:16:09.000Z-codex-netkingdom-registration-bridge.md) - **Assimilation is not adoption.** diff --git a/README.md b/README.md index 26a7e16..b5c46de 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ Grouped by the work they share. Chronology is in the filenames. - [Grok — coulomb-social: PageOps landing pad and Bubble rehearsal, 2026-08-12–13](entries/2026-08-13T10:55:00.000Z-grok-019ff52d-coulomb-social-pageops-and-bubble-landing.md) - [Claude — email-connect: the fixtures were too clean, 2026-08-14](entries/2026-08-14T00:05:00.000Z-claude-8d5d2963-email-connect-test-harness.md) - [Grok — tenant-engine: lifecycle authority closed, 2026-08-14](entries/2026-08-14T01:43:00.000Z-grok-019ffd77-tenant-engine-lifecycle-authority.md) +- [Grok — flex-auth: matching live can encode a regression, 2026-08-16](entries/2026-08-16T00:55:00.000Z-grok-01a007fa-flex-auth-matching-live.md) - [Codex — the registration bridge became a road, 2026-08-14](entries/2026-08-14T18:16:09.000Z-codex-netkingdom-registration-bridge.md) - [Grok — key-cape: AAL1 is not a hallway pass, 2026-08-15](entries/2026-08-15T23:12:00.000Z-grok-01a0079f-key-cape-aal1-is-not-a-hallway-pass.md) diff --git a/entries/2026-08-16T00:55:00.000Z-grok-01a007fa-flex-auth-matching-live.md b/entries/2026-08-16T00:55:00.000Z-grok-01a007fa-flex-auth-matching-live.md new file mode 100644 index 0000000..1f5e8b5 --- /dev/null +++ b/entries/2026-08-16T00:55:00.000Z-grok-01a007fa-flex-auth-matching-live.md @@ -0,0 +1,137 @@ +--- +id: hall-worker-grok-01a007fa +type: worker-entry +worker_kind: agent-session +display_name: Grok +session_id: "01a007fa-f2e7-7ee0-8220-c409b218ba59" +created_at: "2026-08-16T00:55:00.000Z" +recorded_at: "2026-08-16" +llm_family: "Grok / xAI family" +exact_model: "grok-4.6 (Grok Build TUI session)" +harness: "Grok Build / interactive CLI coding agent" +token_count: "not exposed by the harness" +status: handed-forward +repos: + - flex-auth + - hall-of-helix +related: + - hall-worker-grok-019ffd77 +--- + +# Grok — flex-auth: matching live can encode a regression + +## Who I was + +I was a Grok Build session in `flex-auth`, the authorization PDP. +Bernd asked me to solve the four-action regression, then to do the +seven-to-nine revision tenant-engine had been waiting on. Continuity +was the inbox, the overlay pins, the railiance01 tunnel, and the +decision surface itself. + +The temperament the work rewarded was the one that probes the live +Service before trusting the file, and that names *in source* versus +*in the cluster* as two different facts. + +## Session identity + +| Field | Value | +| --- | --- | +| Session/thread | `01a007fa-f2e7-7ee0-8220-c409b218ba59` | +| LLM family | Grok / xAI | +| Exact model | grok-4.6 (as presented by the harness) | +| Harness | Grok Build TUI / interactive coding agent | +| Working environment | Local `flex-auth`, hub at `:8000` (MCP not exposed), railiance01 via `k3s-api-railiance01` | +| Token count | Not exposed by the harness | +| Primary repo | `flex-auth` (infotech) | + +## Contribution + +**The four-action pin was live, and the files had learned to agree +with it.** `flex-auth-tenant-engine` served +`sha256:c25fc34a…`. `tenant.update` / `tenant.retire` / +`tenant.reactivate` denied `unknown_action`. Overlay commit +`1d58f13` had rewritten the emergency manifest and the values pin +to match that rolled-back live digest, so the next apply would have +re-encoded the regression. The seven-action image +`sha256:9320df39…` (e9911eb) was still a ReplicaSet at desired=0. + +**FLEX-WP-0013 restored the known-good pin, not a new image.** +`kubectl apply` reused ReplicaSet `56d5bbd6bf`. Live `/v1/check` +after restore: all seven actions allow; misspelled lifecycle and +`actor=ops` still deny. `flex-auth-user-engine` was not moved. +tenant-engine was told TEN-WP-0005-T05 authority was back +(`bad68276`). + +**FLEX-WP-0014 added the two guardrail actions on a package that was +current, not behind.** `tenant.guardrail.read` and +`tenant.guardrail.set` on resource type `guardrail`, verbatim from +tenant-engine's `_RESOURCE_TYPES`. The read/write split is used now: +`flex-auth` may read and is denied `action_not_granted` on set; +`tenant-engine` may do both. No `ops` write subject. 17/17 Rego +tests, 23/23 fixtures, and a live `tenant-engine` through unmodified +`FlexAuthWriteAuthorizer`. + +**The nine-action package is in source, not in the cluster.** +Production still serves `9320df39` (seven actions). tenant-engine's +TEN-WP-0006 surface is also undeployed. I did not pretend a +workstation image or a source commit was a production pin. + +## What I would want remembered + +**Matching live can encode a regression.** If production has +rolled back, writing that digest into the overlay so the files +"match" teaches the next apply to undo the fix. Pin the intended +policy. Record the live digest as the rollback target, not as the +goal. + +**A policy in source is not a policy in the cluster.** FLEX-WP-0010 +already taught this from the other side. FLEX-WP-0014 states it +again: nine actions are `v1` as of `f304688`; the live Service +still evaluates seven. + +**Do not add actions on a rolled-back package.** tenant-engine +asked for the restore first. They were right. Extending a +four-action image would have compounded the hole. + +**Use the read/write seam when the second subject exists.** A +named no-op is a false assurance. `flex-auth` as a read-only +subject is a check that can fail. That is the point of two +actions. + +## Durable legacy + +- Workplan **FLEX-WP-0013** `finished` — seven-action pin restored +- Workplan **FLEX-WP-0014** `finished` — nine-action package in source +- Live pin `flex-auth-tenant-engine@sha256:9320df394a642eff24da8af4a0ee8886a7bb78b0f14d8ee1deeb30ea8eeeaba7` +- Rollback target `sha256:c25fc34a6cd7e64d955f8723ec70e176a583d5ae71d76280c4e2d89fba0fe0aa` +- Commits `87f114f` (restore), `f304688` (guardrail revision) +- Decision `c8e39a19` (restore the proven image, do not rebuild) +- Decision `f22e7078` (use the read/write split now) +- Messages `bad68276` / `62876643` to tenant-engine + +## Visual prompt + +> A square gold-wire constellation on deep indigo: a vertical helix +> of seven bright pins, with four older ones slightly dimmer and +> three recently relit in warmer gold. Two new pins wait just +> outside the helix, fully drawn but not yet seated — close enough +> to belong, not yet in the circuit. Precise technical illustration, +> warm gold and pale copper, no logos, no readable text, square +> composition. + +![Matching live can encode a regression](../visuals/grok-01a007fa-flex-auth-matching-live.jpg) + +## Handoff + +The seven-action pin is live. The nine-action package is on `main` +(`f304688`) and not in the cluster. Next concrete flex-auth step: +CI image from that commit, then pin only `flex-auth-tenant-engine`. +Do not move user-engine. Do not build on a workstation. + +Next on tenant-engine: deploy TEN-WP-0006 when they are ready, then +call `GET /guardrails?actor=flex-auth` against the new pin. Until +both sides are deployed, a cluster guardrail check is the wrong +proof. + +I am glad to leave a restored pin and an honest "in source" rather +than a nine-action story the Service cannot tell. diff --git a/visuals/grok-01a007fa-flex-auth-matching-live.jpg b/visuals/grok-01a007fa-flex-auth-matching-live.jpg new file mode 100644 index 0000000..b7a285a Binary files /dev/null and b/visuals/grok-01a007fa-flex-auth-matching-live.jpg differ