Skip to content

docs+agents: reconcile with the 2026-09 release and modernize the agent surface - #33

Merged
verlyn13 merged 4 commits into
mainfrom
docs/reconcile-production-release
Sep 16, 2026
Merged

verlyn13 merged 4 commits into
mainfrom
docs/reconcile-production-release

Conversation

@verlyn13

@verlyn13 verlyn13 commented Sep 16, 2026 •

Copy link
Copy Markdown
Member

Two related workstreams: reconcile the documentation with the completed 2026-09 production release, then tighten the agent-client configuration that the reconciliation exposed as drifting.

Part 1 — documentation reconciliation

Every document still described the release as pending.

  • docs/status.md — actions 3, 5, 6 and 7 closed; action 8 rewritten to the remaining legacy-Worker boundary with the gamelobby-first sequence and the required dashboard route read; new actions 16 (Cloudflare token scope) and 17 (expiring Supabase CLI credential); readback rows replaced rather than appended. 73/80 lines.
  • docs/cloudflare.md — Pages removed as an origin and as a rollback path. The completed five-step cutover runbook is gone; the platform constraints that stay true were kept. "Live checks still needed" narrowed to the one genuinely unknown surface: zone-level Worker routes, which the scoped credential cannot read (HTTP 403).
  • docs/roadmap.md — section 1 reordered around unfinished work; the Pages/OpenTofu field-boundary bullet retargeted at surfaces that still exist.
  • AGENTS.md, project.yaml, organization-alignment.md, architecture/README.md, two ws proxies — phase, cutover and Worker-classification statements aligned; the is_game_participant RLS-recursion invariant recorded; two file headers no longer claim a Pages frontend.

Two durable facts were recorded that existed nowhere in the repository: the legacy aliases redirect from jefahnierocks.com, a second zone, and the RLS invariant.

Four drafted statements were corrected before landing: an invented precise timestamp (now date-only, the precision the evidence supports); a claim the full post-deploy smoke was green (only routing, headers and the lobby REST path were evidenced — the browser-side items are now listed as still owed); a retained "the Worker had likely never persisted a game" contradicting the one completed game; and a live-state claim placed in the file that forbids them.

Part 2 — agent-client configuration

Boundaries encoded rather than described. .claude/settings.json now denies mcp__supabase__execute_sql and mcp__supabase__apply_migration; deny outranks allow from any settings file, so the prohibition survives a local override. .codex/rules/dicee.rules no longer auto-allows linked-project Supabase writes — read-only inspection stays allow, while db push/pull/dump/reset, migration repair/up/apply, link, login, secrets, functions deploy/delete, gen types, pnpm db:types and op read/op item are prompt. Destructive Git stays forbidden. op item was added because it reaches the same credential as op read.

Drift detection. New pnpm agent:doctor (scripts/agent-doctor.mjs), dependency-free and in the house style. Committed checks run in CI; local checks run only when the file or client exists, so an absent ignored file can never fail CI. This closes the blind spot that let .claude/settings.local.json set enableAllProjectMcpServers: true and pre-allow mutating Supabase MCP tools while lint:docs stayed green — check-docs.mjs fixes its file set to git ls-files and hardcodes the shared settings path.

Completions rather than transitional states. Infisical is out: launcher, metadata names, credential checks, wrapper tests and command-policy rules deleted. Tracked references drop from 15 files to 8, each a deliberate guard or a retirement note, and a new retired-token entry keeps the remainder visible and shrinking. check-1password-setup.sh previously failed closed on six retired Infisical fields before reaching the Cloudflare check; it no longer does, and display-only identifiers no longer gate the credential report. The dead Cloudflare Pages permission and policy entries are gone.

Consistency. Every client now launches the AKG MCP server through mise, so it runs on the pinned Bun rather than whatever is first on that client's PATH. agent-clients.md records supported minimums (VS Code 1.137, Claude Code 2.1.272 stable, Codex 0.154.0) instead of pinning patch releases, corrects the Codex rules description, and adds model selection as guidance only — no model or maxEffortLevel in repository config.

Validation

pnpm lint exit 0 across all eight lanes, agent-doctor 0 errors, 40 doctor fixtures pass, check-docs 0 findings across 647 files, git diff --check clean. Pre-push validate-ci green on both pushes.

Risks and what is not included

  • No infrastructure was touched, and nothing here authorizes any. Live claims trace to operator readbacks and are written as names, counts and HTTP status only.
  • Status decision and action numbers are cited elsewhere, so none were renumbered.
  • .vscode/settings.json carries an unrelated local modification, deliberately excluded.
  • Four retired untracked surfaces (.windsurf/, .codex/workflows/, .claude/AGENT-CONFIGURATION-SUMMARY.md, .codex/rules/core-guardrails.md) are triaged DELETE OUTRIGHT with nothing to fold in, but remain on disk — removing never-tracked files is irreversible and was left to the owner.
  • Git identity routing for this workspace is a workstation concern and is deliberately not solved here. agent:doctor warns about it.
  • supabase db reset --local now prompts: a prefix rule cannot distinguish --local from --linked at that token position, and a destructive reset defaults to the safer decision. Documented as known friction.

The first production release is complete, so the documentation that still
described it as pending is now wrong. Reconcile the source-of-truth files
against the observed provider state and drop the intermediate-state language.

- status.md: release, stats projection and RLS actions closed; action 8
  rewritten to the remaining legacy Worker boundary; new actions 16 and 17
  for the Cloudflare token scope and the expiring Supabase CLI credential;
  readbacks replaced by current subjects, superseded rows dropped.
- cloudflare.md: Pages removed as an origin and as a rollback path; the
  completed cutover runbook replaced by the platform constraints that stay
  true; live checks narrowed to the zone-route gap the scoped token cannot
  read; the zone redirects recorded for the first time.
- roadmap.md: section 1 reordered around the work the release did not close;
  the Pages/OpenTofu field-boundary bullet retargeted at the surfaces that
  actually overlap now.
- project.yaml, AGENTS.md, organization-alignment.md: phase, cutover and
  Worker-classification statements brought into line.
- architecture/README.md: record the is_game_participant RLS-recursion
  invariant, which existed only in a migration header.
- ws proxies: the frontend is the dicee-web Worker, not Pages.

No infrastructure was touched. Live claims trace to operator readbacks;
counts, names and HTTP status only.

pnpm lint green (rust, analysis, biome, akg, cf:audit, scripts, docs).
…s hazard

Three rules existed only as gate code with no stated reason, so a future
reader could not tell a deliberate constraint from an accident.

- Say why lint:docs refuses a hooks key and tracked command/hook files: it
  is an anti-regrowth ratchet from the 2026-09-13 cleanup, not a claim that
  the features are useless, and Claude agent and rule directories are
  deliberately outside it.
- Warn against enableAllProjectMcpServers. It enables every .mcp.json entry
  including the opt-in OAuth servers, and the gate cannot catch it because
  it reads only the shared settings file.
- Note that the skill front-matter fields and the 60-line cap are enforced.
…lchain

One repository contract, thin client adapters, no repo-wide model pinning, and a
check that catches drift in the places the docs gate structurally cannot see.

Boundaries encoded rather than described:
- .claude/settings.json denies mcp__supabase__execute_sql and
  mcp__supabase__apply_migration. Deny outranks allow from any settings file, so
  the prohibition now survives a local override.
- .codex/rules/dicee.rules no longer auto-allows linked-project Supabase writes.
  Read-only inspection stays allow; db push/pull/dump/reset, migration
  repair/up/apply, link, login, secrets, functions deploy/delete, gen types,
  pnpm db:types and op read/item are prompt. Destructive Git stays forbidden.
  op item was added because it reaches the same credential as op read.

Drift detection:
- scripts/agent-doctor.mjs, dependency-free and in the house style. Committed
  checks run in CI; local checks run only when the file or client exists, so an
  absent ignored file can never fail CI. It is what would have caught the
  enableAllProjectMcpServers hole and the AKG launcher drift below.

Completions rather than transitional states:
- Infisical is out: launcher, metadata names, credential checks, wrapper tests
  and command-policy rules deleted, tracked references down from 15 files to 8,
  each one a deliberate guard or a retirement note. A retired-token entry in the
  docs gate keeps the remainder visible and shrinking.
- The dead Cloudflare Pages permission and policy entries are gone.
- check-1password-setup.sh no longer fails closed on display-only identifiers.

Consistency:
- Every client launches the AKG MCP server through mise, so it runs on the
  pinned Bun rather than whatever is first on that client's PATH.
- agent-clients.md records supported minimums instead of pinning patch releases,
  corrects the Codex rules description, and adds model guidance as guidance.

pnpm lint green. agent-doctor: 0 errors. 40 doctor fixtures pass.
@verlyn13 verlyn13 changed the title docs: reconcile with the 2026-09 production release docs+agents: reconcile with the 2026-09 release and modernize the agent surface Sep 16, 2026
Yesterday three client versions were hand-written into a Markdown table. One day
later Codex had moved 0.147.0-alpha.6.4 -> 0.155.0-alpha.2.5 and the line saying
"the 0.155 series is prerelease and is not a target" was already wrong. Prose is
the wrong storage for a number that moves weekly.

Versions become data:
- scripts/agent-doctor.config.json holds one entry per client: the supported
  minimum and whether a prerelease channel is deliberate. agent-clients.md now
  carries no version number at all and points at that file.
- The CLIENT rule compares the installed build against the minimum instead of
  only reporting it, and understands each client's spelling of --version
  (2.1.273 (Claude Code), codex-cli 0.155.0-alpha.2.5, 1.137.0). A minimum is a
  floor, not a mirror: a patch release is not a reason to edit the file.

The binary becomes the schema:
- Codex 0.155 rejects an unknown config key rather than ignoring it, verified
  empirically, and accepts agents.max_depth which its published reference omits.
  So the new CODEX rule asks the installed Codex whether this repository's
  configuration loads rather than keeping a copy of the schema in the gate. It
  reports honestly that Codex reads .codex/ only for a trusted project.

Codex config:
- Both [agents] keys confirmed still valid on 0.155.
- akg gets startup_timeout_sec: mise exec may resolve the pinned Bun on a cold
  checkout and exceed the default allowance. Confirmed applied via codex mcp get.
- The header records the vendor's own project-scope rule, which enforces the same
  personal/project split the file already asked for.

Also: the sharpened PERSONAL rule caught three more machine-specific absolute
paths in the ignored local settings; they now name commands on PATH.

pnpm lint exit 0. 40 doctor fixtures, 31 self-test cases, codex rules test green.
@verlyn13
verlyn13 merged commit ea512f3 into main Sep 16, 2026
8 checks passed
@verlyn13
verlyn13 deleted the docs/reconcile-production-release branch September 16, 2026 17:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant