diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 5d1df944..b9ee0b2c 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -365,7 +365,7 @@ {"id":"gt-jpt","title":"Town-level beads: Real DB for coordination mail","description":"Implement Option A from mail redesign: Town gets real beads DB for coordination.\n\n## Background\n\nMail is now Beads. But currently:\n- Town .beads/redirect points to rig beads\n- mayor/mail/ has legacy JSONL files\n- Cross-rig coordination has no clear home\n\n## Design\n\nTown beads = coordination, cross-rig mail, mayor inbox, handoffs\nRig beads = project issues, work items\n\nMatches HOP hierarchy: platform \u003e project \u003e worker\n\n## Structure\n\n~/gt/\n .beads/ # REAL beads DB (prefix: gm-)\n mayor/\n town.json\n state.json # NO mail/ directory\n gastown/\n .beads/ # Rig beads (prefix: ga-)\n\n## Tasks\n\n1. Delete ~/gt/.beads/redirect\n2. Run bd init --prefix gm at ~/gt/ (town beads)\n3. Delete ~/gt/mayor/mail/ directory\n4. Update gt mail to use beads not JSONL\n5. Add mail fields (thread_id, reply_to, msg_type)\n6. Update gt prime for two-tier model\n7. Update docs/architecture.md\n\n## Addressing\n\n- mayor/ -\u003e town beads\n- rig/agent -\u003e rig beads\n- Cross-rig -\u003e town beads","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-17T19:09:55.855955-08:00","updated_at":"2025-12-19T01:57:17.032558-08:00","closed_at":"2025-12-19T01:57:17.032558-08:00"} {"id":"gt-jvr3","title":"mol-polecat-work","description":"Full polecat lifecycle from assignment to decommission.\n\nThis proto enables nondeterministic idempotence for polecat work.\nA polecat that crashes after any step can restart, read its molecule state,\nand continue from the last completed step. No work is lost.\n\nVariables:\n- gt-test - The source issue ID being worked on","status":"closed","priority":2,"issue_type":"epic","assignee":"gastown/test-polecat","created_at":"2025-12-21T22:04:43.420231-08:00","updated_at":"2025-12-21T22:05:10.498762-08:00","closed_at":"2025-12-21T22:05:10.498762-08:00","close_reason":"test cleanup","wisp":true} {"id":"gt-k1lr","title":"Consolidate configuration architecture: three-tier model","description":"Rationalize Gas Town's scattered configuration into a clean three-tier model:\n\n## Current Problems\n- Config split across mayor/, .gastown/, and rig/config.json\n- Runtime state mixed with configuration\n- Hidden directories (.gastown/) are missed by agents\n- Category confusion: identity vs config vs runtime state\n\n## Proposed Architecture\n\n### Tier 1: Town Config (mayor/)\n```\nmayor/\n├── town.json # Town identity (unchanged)\n├── rigs.json # Rig registry (unchanged)\n└── config.json # NEW: Town-level configuration\n # theme defaults, daemon settings, etc.\n```\n\n### Tier 2: Town Runtime (.runtime/)\n```\n~/gt/.runtime/ # NEW: Gitignored\n├── daemon.json # {pid, started_at, heartbeat}\n├── deacon.json # {cycle, last_action}\n└── agent-requests.json # Lifecycle requests\n```\n\n### Tier 3: Rig Config (settings/)\n```\n\u003crig\u003e/\n├── config.json # Rig identity only (type, git_url, beads.prefix)\n├── settings/ # NEW: Visible, git-tracked\n│ ├── config.json # theme, merge_queue, max_workers\n│ ├── namepool.json # pool settings (style, max)\n│ └── roles/ # Per-role overrides (optional)\n└── .runtime/ # NEW: Gitignored\n ├── witness.json # {state, started_at, stats}\n ├── refinery.json # {state, started_at, stats}\n └── namepool-state.json # {in_use, overflow_next}\n```\n\n## Key Principles\n1. **Visible \u003e Hidden** for config agents need to find\n2. **Git-tracked** for identity and config; **gitignored** for runtime\n3. **Separation of concerns**: identity, config, runtime are distinct\n4. **Locality**: town config at town root, rig config at rig root\n\n## Migration\n- Move .gastown/ contents to appropriate new locations\n- Update all code that reads/writes these files\n- Update .gitignore patterns\n- Update documentation (architecture.md, CLAUDE.md)\n","status":"open","priority":1,"issue_type":"epic","created_at":"2025-12-22T01:01:48.96788-08:00","updated_at":"2025-12-22T01:01:48.96788-08:00"} -{"id":"gt-k1lr.1","title":"Add mayor/config.json for town-level configuration","description":"Create new town-level config file:\n- Add TownConfig.Config field to types.go\n- Create mayor/config.json with theme defaults, daemon settings\n- Update loader to read/write mayor/config.json\n- Migrate any town-level config from .gastown/ to here","status":"in_progress","priority":1,"issue_type":"task","created_at":"2025-12-22T01:02:20.091293-08:00","updated_at":"2025-12-22T01:02:55.106058-08:00","dependencies":[{"issue_id":"gt-k1lr.1","depends_on_id":"gt-k1lr","type":"parent-child","created_at":"2025-12-22T01:02:20.09177-08:00","created_by":"daemon"}]} +{"id":"gt-k1lr.1","title":"Add mayor/config.json for town-level configuration","description":"Create new town-level config file:\n- Add TownConfig.Config field to types.go\n- Create mayor/config.json with theme defaults, daemon settings\n- Update loader to read/write mayor/config.json\n- Migrate any town-level config from .gastown/ to here","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-22T01:02:20.091293-08:00","updated_at":"2025-12-22T01:04:37.85173-08:00","dependencies":[{"issue_id":"gt-k1lr.1","depends_on_id":"gt-k1lr","type":"parent-child","created_at":"2025-12-22T01:02:20.09177-08:00","created_by":"daemon"}]} {"id":"gt-k1lr.2","title":"Create .runtime/ for town-level runtime state","description":"Move ephemeral town state to .runtime/:\n- Create ~/gt/.runtime/ directory structure\n- Move daemon/state.json → .runtime/daemon.json\n- Move deacon/heartbeat.json → .runtime/deacon.json \n- Move .gastown/agent-state.json → .runtime/agent-requests.json\n- Move .gastown/keepalive.json → .runtime/keepalive.json\n- Update .gitignore to ignore .runtime/\n- Update all code references","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-22T01:02:21.166304-08:00","updated_at":"2025-12-22T01:02:21.166304-08:00","dependencies":[{"issue_id":"gt-k1lr.2","depends_on_id":"gt-k1lr","type":"parent-child","created_at":"2025-12-22T01:02:21.166715-08:00","created_by":"daemon"}]} {"id":"gt-k1lr.3","title":"Create rig settings/ directory for rig configuration","description":"Replace .gastown/ with visible settings/ at rig level:\n- Create \u003crig\u003e/settings/ directory\n- Move .gastown/config.json → settings/config.json (theme, merge_queue, max_workers)\n- Create settings/namepool.json for pool settings (style, max - not state)\n- Create settings/roles/ for per-role overrides (optional)\n- Update RigConfig type to reference settings/\n- Update loader to read from settings/","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-22T01:02:22.13096-08:00","updated_at":"2025-12-22T01:02:22.13096-08:00","dependencies":[{"issue_id":"gt-k1lr.3","depends_on_id":"gt-k1lr","type":"parent-child","created_at":"2025-12-22T01:02:22.13369-08:00","created_by":"daemon"}]} {"id":"gt-k1lr.4","title":"Create rig .runtime/ for rig runtime state","description":"Move ephemeral rig state to .runtime/:\n- Create \u003crig\u003e/.runtime/ directory\n- Move .gastown/witness.json → .runtime/witness.json\n- Move .gastown/refinery.json → .runtime/refinery.json\n- Move .gastown/namepool.json (state portion) → .runtime/namepool-state.json\n- Update .gitignore to ignore .runtime/\n- Update all code references","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-22T01:02:23.072213-08:00","updated_at":"2025-12-22T01:02:23.072213-08:00","dependencies":[{"issue_id":"gt-k1lr.4","depends_on_id":"gt-k1lr","type":"parent-child","created_at":"2025-12-22T01:02:23.073919-08:00","created_by":"daemon"}]}