Skip to content

Gas City Doctrine Enforcement (v2.0) - Sessions perform work. (Sessions are disposable). - Beads remember work. (Durable universal substrate). - Convoys group work. - Mail coordinates work. - Formulas remember how. (Reusable methods). - Agents execute. - Packs configure. - Rigs scope. - Orders trigger. - Events prove what happened. - Work is not complete until verified and promoted (Capability, Skill, Formula, Pack, Order, Policy). (No parallel "learning lifecycles" or "agent memory" outside this machinery).

Infra Convergence Roadmap

Scope: Bluefly worktrees/ infrastructure lane — reduce custom runtime ownership. Lawbooks: BluCity-Docs/library/governance/upstream-lawbooks.md Investigation law: Engineering Authority Exhaustion (NOT_FOUND) · Zero-Assumption Convergence Audit (NOT_FOUND) Packets: convergence-audit/packets/ (NOT_FOUND — packet never committed to this repository) · EXECUTION-PLAN (NOT_FOUND — packet never committed to this repository) Wiring: gas-city-deployment-wiring.md

This document records layer ownership, candidates, and dependency gates. Canonical disposition lifecycle: zero-assumption-convergence-audit.md (NOT_FOUND).


Disposition tracking (roadmap view)

Status Meaning May delete?
Candidate Hypothesis; preconditions listed No
Approved Receipt + replacement path verified No
Scheduled Bound to one implementation MR No
Removed Merged with receipt Done
Retained Audit terminal — ownership justified N/A

Promotion rule (delete path): Candidate → Approved → Scheduled → Removed. See ZACA for full promotion requirements.

Evaluation phases (P2–P3 here): produce packets — do not delete.


Execution authority (one owner per layer)

When every layer has one owner, duplicate implementations become obvious.

Layer Owner Responsibility
IaC (worktrees/iac) Bluefly Provisions infrastructure — cloud-init, Terraform, systemd, binary install paths, /opt/bluefly/city
agent-docker Bluefly Deploys containerized supporting services — compose profiles, tunnel config snapshots, DDEV sidecars
gitlab_components Bluefly Orchestrates deployment — CI components, gt/bd receipt jobs, oracle-compose-deploy
agent-tailscale Bluefly Tailnet attachment — Serve, Funnel, ACL, routing between Oracle and NAS
OpenClaw Upstream Runtime actuator — single gateway process per host; unaware of multi-site topology
Gas City / Gas City / Beads Upstream Execution primitives — gt, gc, bd; packs and city lifecycle
Drupal Upstream core + contrib Application system of record — adapters only, no parallel execution SoR

INFERRED: Duplicate sprawl appears when a layer above reimplements behavior owned below (for example HTTP gateway wrapping gt shell). OBSERVED: iac cloud-init installs gascity, gascity, and beads binaries and runs gc init (worktrees/iac/terraform/oci/cloud-init.tftpl). OBSERVED: Workspace doctrine places Oracle execution SoR on ~/gt + gt/bd (library/governance/upstream-lawbooks.md). INFERRED: Until migration completes, both models may coexist — convergence removes duplicates, not upstream tools.


Mandatory custom-component review

Every custom component under review must complete this table before merge or before approval for removal.

Field Question
Purpose What operator or deploy problem does it solve?
Current owner Repository + path
Upstream owner Official project that should own the behavior
Why custom still exists Gap citation — upstream doc section or NOT_FOUND after authority exhaustion
Removal path Config / compose / CI / upstream adopt — not “rewrite later”
Estimated LOC removed Net-negative target if approved
Status Candidate or Approved (with receipt id)

No row with empty Removal path may ship new custom code.


Candidate registry (not active work)

All items below are Candidate for removal only. Do not schedule deletion in implementation plans until promoted per promotion rule above.

C1 — agent-docker — src/gastown-gateway/

Packet: C1-gastown-gateway.md (NOT_FOUND — packet never committed to this repository) — Retained (thin adapter; terminal).

Purpose HTTP API wrapping gt for Drupal /api/v1/gascity/status
Current owner worktrees/agent-docker (~1,446 LOC TypeScript — OBSERVED line count)
Upstream owner Gas City (gt status, mail, convoy contracts)
Why custom exists Drupal needed HTTP from DDEV; historical adapter
Preconditions (for approval) Upstream gt contract available to adapter; Drupal path migrated; no remaining consumers; integration tests green
Removal target src/gastown-gateway/, related systemd/DDEV wiring if superseded
Potential LOC ~1,500

C2 — agent-docker — services/gascity/ (compose fragment + placeholder runtime)

Packet: C2-services-gascity.md (NOT_FOUND — packet never committed to this repository)

Purpose Compose scaffold for containerized Gas City (gascity-runtime, BLUEFLY_GASTOWN_IMAGE:declared-not-built)
Current owner worktrees/agent-docker/services/gascity/
Upstream owner Host gt on Oracle /home/ubuntu/gt (OBSERVED healthcheck gt doctor in same fragment)
Why custom exists Placeholder until image published; overlaps host execution
Preconditions (for approval) No compose consumer requires containerized gt; Oracle health uses host gt doctor; profiles documented without this service
Removal target gascity-runtime service and undeclared image reference
Potential LOC ~25 YAML + env

C3 — agent-docker — vendored openclaw/ tree

Packet: C3-vendored-openclaw-tree.md (NOT_FOUND — packet never committed to this repository) — Retained (Bluefly authority; terminal).

Purpose Capability fabric / OpenAPI duplicates
Current owner worktrees/agent-docker/openclaw/ (~144 KB — OBSERVED)
Upstream owner OpenClaw + owning OpenClaw repos
Why custom exists Historical bundling
Preconditions (for approval) Compose references upstream image/config only; no import from vendored tree
Removal target openclaw/ directory inside agent-docker
Potential LOC ~144 KB + duplicate OpenAPI

C4 — agent-docker — install shell scripts

Packet: C4-agent-docker-shell-scripts.md (NOT_FOUND — packet never committed to this repository)

Purpose One-off gateway / health / NAS mount
Current owner deployments/oracle/systemd/install-gastown-gateway.sh + 7 others (OBSERVED)
Upstream owner iac cloud-init + gitlab_components deploy components
Why custom exists Pre-CI deploy paths
Preconditions (for approval) Equivalent steps in IaC or CI; no operator runbook depends on script
Removal target All *.sh under agent-docker except upstream-vendored assets
Potential LOC 8 files

C5 — iac — dual gc install declaration

Packet: C5-dual-gc-install.md (NOT_FOUND — packet never committed to this repository) — first likely Approved win post-P0.

Purpose Runtime contract provider entry
Current owner runtime/bluefly-runtime.oracle.yml (npm install -g @gascity/gc — OBSERVED)
Upstream owner gascityhall/gascity GitHub release tarball (OBSERVED in cloud-init)
Why custom exists Contract drift from provision path
Preconditions (for approval) Single install path in contract matches cloud-init; acceptance stage still passes
Removal target npm provider stanza; keep tarball path only
Potential LOC ~5 YAML lines

Approved · Scheduled · Retained (tracking)

Approved (delete path — not yet implemented)

Id Artifact Receipt Approved date
— (none) — —

Scheduled (bound to MR)

Id Artifact MR Scheduled date
— (none) — —

Retained (terminal — audit complete)

Id Artifact Packet Retained date
C1 agent-docker/src/gastown-gateway/ C1-gastown-gateway.md (NOT_FOUND — packet never committed to this repository) 2026-07-07
C3 agent-docker/openclaw/ vendored tree C3-vendored-openclaw-tree.md (NOT_FOUND — packet never committed to this repository) 2026-07-07

Implementation MRs may reference Scheduled rows only. Retained is terminal unless architecture change opens a new Candidate.


OpenClaw — single gateway (Oracle authoritative)

RETRIEVED: OpenClaw is designed around a single gateway process per deployment.

OBSERVED (operator decision, 2026-07-07): Oracle only for OpenClaw gateway in this cleanup pass. NAS remains storage/archive/operator fabric — not a second OpenClaw gateway.

IaC → Oracle → OpenClaw Gateway (authoritative)
NAS → storage, backup, observability — no OpenClaw gateway (this pass)

Bluefly owns: Oracle gateway provisioning (iac, agent-docker compose). Upstream owns: gateway runtime semantics.


Dependency-gated phases (active vs evaluation)

Phases P0–P1 and P4 are active infrastructure work. Phases P2–P3 are evaluation gates for the candidate registry — not deletion schedules.

P0 — Reproducible Oracle (active)

Action Merge iac fix/cloud-init-deploy-hardening → release/v0.1.x (MR !74)
Gate Fresh provision: gc binary, city.toml, gc-worker + gc-city-init enabled — OBSERVED acceptance ids in bluefly-runtime.oracle.yml
Unblocks Evidence for C5 and honest single-path gc claims

P1 — CI deploy authority (active)

Action Merge gitlab_components feat/component-triage-and-slop-removal → release/v0.1.x; treat release/v0.1.x as shipping line
Gate CI deploys from one component model (oracle-compose-deploy, four-tool-preflight, gascity-receipt)
Unblocks Evidence for C4 approval

P2 — Evaluate duplicate runtime candidates (evaluation only)

Action Run authority exhaustion on C2, C5; produce receipt; promote to Approved only if preconditions pass
Gate OBSERVED gt doctor on Oracle host; contract matches cloud-init; no undeclared compose dependency on placeholder image
Does not Schedule deletion of services/gascity/ or npm gc stanza without approval row

P3 — Evaluate gateway and bundle candidates (evaluation only)

Action Run authority exhaustion on C1, C3, C4; produce receipt; promote to Approved only if preconditions pass
Gate Drupal adapter proof; zero consumers for vendored openclaw/; CI replaces shell paths
Does not Schedule deletion of src/gastown-gateway/ or vendored openclaw/ without approval row

P4 — Pack configuration only (active)

Action Merge blucity-packs feature/amcs-pack-foundation → main; city imports via gc init append only
Gate No hand-authored city root in blucity-packs monorepo; pack.toml imports use durable source or provisioned paths

Status snapshot (evidence-tagged)

Re-verify before merge decisions.

Repo OBSERVED state
BluCity-Docs main @ 598695de = origin/main; worktree blucity-docs-gas-town removed
iac Branch fix/cloud-init-deploy-hardening; 18 commits not in release/v0.1.x
gitlab_components Branch feat/component-triage-and-slop-removal; 3 commits not in release
agent-docker Branch fix/oracle-volume-ownership-init; 52 ahead / 4 behind origin/main
blucity-packs Branch feature/amcs-pack-foundation; 12 ahead of main
agent-tailscale Branch chore/evac-backup-2026-06-28; 3 commits not in release/v0.1.x

Potential LOC delta (if candidates are approved)

Not a schedule. Totals apply only after Approved for removal rows exist.

Candidates Potential reduction
C1 + C2 + C3 + C4 −~1,500 TS, −8 scripts, −~144 KB vendored OpenClaw, −~25 YAML
C5 −~5 YAML lines
P4 +0 code — configuration only

Audits update the Status snapshot or attach a dated receipt — not fork parallel roadmaps.