Skip to content

Governance Convergence — Phase 1 Inventory

Status: COMPLETE for canonical sources (non-worktree, non-cache) Date: 2026-09-16 Scope: BluCity .claude/rules/, CLAUDE.md, AGENTS.md, .codex/, GEMINI.md


1. BluCity .claude/rules/ — 13 Files, 5,575 LOC

These are Claude-vendor-specific project rules. They load automatically for Claude sessions inside BluCity. Every one of these is replicated 3× across worktrees (BluCity/, convergence/, release-main-convergence/).

Classification Records


git-completion-law.md — 78 lines

SCOPE=GLOBAL   AUTHORITY_CLAIM=AUTHORITATIVE
CLUSTER=GIT_COMPLETION, WORKTREE_HYGIENE
DUPLICATES=GEMINI.md (worktree law section)
ENFORCED=PARTIALLY (prose only, no CI gate)
TARGET=C (Gas City config) + D (GitLab CI)
MECHANISM=gc doctor check + shared CI for uncommitted/unpushed/unmerged
DISPOSITION=SPLIT: worktree paths → Gas City config; commit chain → shared CI gate

delegation-grant.md — 219 lines

SCOPE=GLOBAL   AUTHORITY_CLAIM=AUTHORITATIVE (NOT YET IN FORCE)
CLUSTER=DELEGATION
DUPLICATES=action-classes.md (delegated authority section)
ENFORCED=NONE — explicitly "APPROVED FOR ISSUANCE, NOT YET IN FORCE"
TARGET=B (ContractPlane + Cedar + Compliance Engine)
MECHANISM=Cedar Lease entity + policy evaluation + Compliance Engine runtime
DISPOSITION=KEEP as grant record; enforce via Cedar Lease issuance

use-what-we-have.md — 75 lines

SCOPE=GLOBAL   AUTHORITY_CLAIM=AUTHORITATIVE
CLUSTER=REUSE_EXISTING_CAPABILITY
DUPLICATES=deletion-is-the-deliverable.md, ownership-audit-law.md (decision hierarchy)
ENFORCED=PARTIALLY (prose only)
TARGET=A (Gas City prompt fragments)
MECHANISM=Gas City global_fragments + gc import check / gc import install
DISPOSITION=MERGE into shared fragment "reuse-first"; deduplicate with deletion-is-the-deliverable

pack-overlays.md — 21 lines

SCOPE=PROJECT   AUTHORITY_CLAIM=AUTHORITATIVE
CLUSTER=PACK_OVERLAYS
DUPLICATES=BluCity/overlays/AGENTS.md (13 lines — ~90% overlap)
ENFORCED=YES (gc doctor checks, partial)
TARGET=C (Gas City config)
MECHANISM=gc doctor + pack.toml validation
DISPOSITION=MERGE with overlays/AGENTS.md → single project-local doc

HANDOFF-2026-09-14.md — 1,021 lines

SCOPE=SESSION/TEMPORARY   AUTHORITY_CLAIM=DERIVED (session state dump)
CLUSTER=HANDOFF
DUPLICATES=None
ENFORCED=N/A
TARGET=E (BluCity-Docs → ledger/agent-memory/) or Beads notes
MECHANISM=Bead handoff notes; not a permanent rule
DISPOSITION=ARCHIVE to BluCity-Docs/ledger/; REMOVE from .claude/rules/

[!WARNING] 1,021 lines of session state loaded into every Claude session as a "rule." This is the single largest context waste in the estate. Not a rule — a dated session handoff.


drupal-standard.md — 842 lines

SCOPE=DOMAIN (Drupal)   AUTHORITY_CLAIM=AUTHORITATIVE
CLUSTER=DRUPAL_STANDARD
DUPLICATES=BluCity-Docs Engineering-Standard drupal-standard.md (partial)
ENFORCED=PARTIALLY (prose + some CI)
TARGET=A (prompt fragment for Drupal agents) + D (CI enforcement)
MECHANISM=Gas City per-agent fragment (drupal role); shared CI lint
DISPOSITION=SPLIT: principles → shared fragment; probes → CI; examples → docs

ownership-audit-law.md — 629 lines

SCOPE=GLOBAL   AUTHORITY_CLAIM=AUTHORITATIVE
CLUSTER=OWNERSHIP_BOUNDARIES, PROVENANCE
DUPLICATES=deletion-is-the-deliverable.md, use-what-we-have.md
ENFORCED=PARTIALLY (prose only, audit prompt is manual)
TARGET=A (prompt fragment) + D (CI structural probes)
MECHANISM=shared fragment "ownership-audit"; CI dependency probes
DISPOSITION=EXTRACT: audit prompt → shared fragment; probes → CI; examples → docs

deletion-is-the-deliverable.md — 370 lines

SCOPE=GLOBAL   AUTHORITY_CLAIM=AUTHORITATIVE
CLUSTER=DELETION_CLEANUP, REUSE_EXISTING_CAPABILITY
DUPLICATES=ownership-audit-law.md, use-what-we-have.md
ENFORCED=PARTIALLY (prose only)
TARGET=A (prompt fragment)
MECHANISM=Gas City global_fragment "deletion-first"
DISPOSITION=MERGE with use-what-we-have → single "reuse-and-delete-first" fragment

success-is-the-effect.md — 791 lines

SCOPE=GLOBAL   AUTHORITY_CLAIM=AUTHORITATIVE
CLUSTER=SUCCESS_ACCEPTANCE, PROVENANCE
DUPLICATES=ownership-audit-law.md (verification methodology)
ENFORCED=NO (pure prose)
TARGET=A (prompt fragment)
MECHANISM=Gas City global_fragment "verify-the-effect"
DISPOSITION=EXTRACT: core rules → shared fragment; worked examples → docs

agent-identity-and-provenance.md — 300 lines

SCOPE=GLOBAL   AUTHORITY_CLAIM=AUTHORITATIVE
CLUSTER=AGENT_IDENTITY, PROVENANCE
DUPLICATES=GEMINI.md (identity section), action-classes.md
ENFORCED=PARTIALLY (designed for CI + Cedar)
TARGET=B (Cedar) + C (Gas City gt prime) + D (CI commit trailer check)
MECHANISM=gt prime + Cedar + CI provenance gate
DISPOSITION=KEEP as reference; enforce via gt prime + CI + Cedar

action-classes.md — 321 lines

SCOPE=GLOBAL   AUTHORITY_CLAIM=AUTHORITATIVE
CLUSTER=ACTION_CLASSIFICATION, DELEGATION, SECRETS
DUPLICATES=delegation-grant.md, agent-identity-and-provenance.md
ENFORCED=PARTIALLY (designed for Cedar + credential separation)
TARGET=B (Cedar) + C (Gas City config)
MECHANISM=Cedar policy evaluation on action class
DISPOSITION=MERGE action class model with delegation-grant → unified Cedar spec

beads-work-ownership.md — 871 lines

SCOPE=GLOBAL   AUTHORITY_CLAIM=AUTHORITATIVE
CLUSTER=WORK_AUTHORITY, BEADS_OWNERSHIP
DUPLICATES=GEMINI.md (beads work authority — extensive overlap)
ENFORCED=PARTIALLY (gc hook pull model, bd commands)
TARGET=A (prompt fragment) + C (Gas City hook/formula)
MECHANISM=Gas City gc hook --claim + formula cook + bd ready
DISPOSITION=EXTRACT: work protocol → Gas City hook/formula; guidance → shared fragment

beads-scope.md — 44 lines

SCOPE=PROJECT   AUTHORITY_CLAIM=AUTHORITATIVE
CLUSTER=WORK_AUTHORITY
DUPLICATES=None (unique topology reference)
ENFORCED=YES (gc doctor bd-split-store check)
TARGET=C (Gas City config)
MECHANISM=gc doctor checks; site-rigs.toml validation
DISPOSITION=KEEP as project-local reference; validate via gc doctor

2. CLAUDE.md Files — 6 Canonical Sources

File Lines Type Content
seo-pack/CLAUDE.md 77 GENERATED scaffold Generic template
validation-city/CLAUDE.md 77 GENERATED scaffold Identical template
.agents/agents/CLAUDE.md 9 STUB "Reference canonical GitLab source"
upstream-agui/CLAUDE.md 9 STUB Same
BluCity-Docs/CLAUDE.md 9 STUB Same
dashboard/CLAUDE.md 9 STUB Same

Two patterns: 77-line scaffold templates and 9-line stubs. Neither contains project-specific governance.


3. AGENTS.md Files

OSSA Role Definitions (10-line stubs)

Role Summary
blu Lead Architect + Local Coordinator
drupal Drupal Product Specialist
foundry Platform, API & CLI Specialist
harbormaster NAS & Durable Data Authority
mayor Production Mayor
refinery GitLab, CI & Release Specialist
sentinel Security, Policy & Supply-Chain
witness Independent Verification & Evidence

[!IMPORTANT] 10-line stubs, not agent config. Gas City agent config belongs in agent.toml / pack.toml, not AGENTS.md.

Project-level AGENTS.md

File Lines Purpose
Estate root ~100 Bootstrap index
BluCity-Packs ~20 Pack development
BluCity-Docs ~20 Documentation
overlays 13 Near-duplicate of pack-overlays.md

4. Codex Configuration

Two Independent Hook Systems

Estate root (.codex/hooks.json — 98 lines):

Hook Script Purpose
SessionStart session-start-loader.sh (11KB) Bootstrap loader
SessionStart bd codex-hook SessionStart Beads context
PreToolUse pre-tool-policy-block.sh Policy gate
PostToolUse post-bash-policy-check.sh Post-exec check
UserPromptSubmit user-prompt-anti-churn.sh Anti-churn
UserPromptSubmit bd codex-hook UserPromptSubmit Beads refresh
Pre/PostCompact bd codex-hook variants Beads context

BluCity project (BluCity/.codex/hooks.json — 50 lines):

Hook Command Purpose
SessionStart gc prime --hook Gas City priming
UserPromptSubmit gc nudge drain --inject Work drain
UserPromptSubmit gc mail check --inject Mail check
PreCompact gc handoff --auto Handoff

[!WARNING] Two hook systems fire independently. Estate root = Beads + policy. BluCity = Gas City. Interaction unspecified.

Agent Definitions (9 files)

Agent Lines Status
oracle-infra.toml 9,369 Pre-Gas City inline prompt
done-gate.toml 5,938 Pre-Gas City inline prompt
quality-gate.toml 3,376 Pre-Gas City inline prompt
test-writer.toml 1,766 Pre-Gas City inline prompt
drupal-specialist.toml 1,391 Pre-Gas City inline prompt
frontend-specialist.toml 1,393 Pre-Gas City inline prompt
researcher.toml 857 Pre-Gas City inline prompt
reviewer.toml 786 Pre-Gas City inline prompt
test-runner.toml 752 Pre-Gas City inline prompt

[!CAUTION] 25,628 lines of inline agent prompts. All from May 5, all predate Gas City composition. Replace with Gas City pack-composed agent definitions.


5. Estate Root

File Lines Vendor Overlap
AGENTS.md ~100 Multi Bootstrap — unique
GEMINI.md ~300 Gemini ~80% overlap with .claude/rules/

6. Summary

Raw Numbers

Category Files LOC
.claude/rules/ 13 5,575
CLAUDE.md 6 190
AGENTS.md 20+ ~400
.codex/ config 4 215
.codex/agents/ 9 25,628
.codex/hooks/ 10 ~1,100
GEMINI.md 1 ~300
Total — ~33,400

Duplication Matrix

Pair Overlap
GEMINI.md ↔ .claude/rules/ ~80% content
pack-overlays.md ↔ overlays/AGENTS.md ~90% content
deletion ↔ use-what-we-have ↔ ownership Decision hierarchy 3×
action-classes ↔ delegation-grant Cedar Lease model 2×
agent-identity ↔ GEMINI.md identity section ~70% content

Enforcement Status

Status Count LOC
Mechanically enforced 2 65
Designed for enforcement (not yet) 4 1,159
No enforcement path 7 4,351

The Rule That States the Problem

From action-classes.md:

CONTROL = "THE AGENT REMEMBERS"  →  THE RULE IS INCOMPLETE

4,351 lines of rules have no enforcement mechanism. They are hopes with documentation.


7. Open Questions

  1. HANDOFF-2026-09-14.md — archive and remove from .claude/rules/? (Saves 1,021 lines of context per session.)
  2. Codex agent .toml files (25,628 LOC, all May 5) — still active or superseded by Gas City?
  3. Two hook systems — unify under Gas City, or are they intentionally separate?
  4. GEMINI.md ↔ .claude/rules/ — Phase 4 designs single-author policy projecting to both?