From 7b256372b904556ad7f65cc9aa8ed56df32c23e5 Mon Sep 17 00:00:00 2001 From: Steve Yegge Date: Wed, 24 Dec 2025 16:08:02 -0800 Subject: [PATCH] bd sync: 2025-12-24 16:08:02 --- .beads/issues.jsonl | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index d259ea71..243848ee 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -810,11 +810,11 @@ {"id":"gt-qsvq","title":"gt doctor: Detect and clean up orphaned sessions/processes","description":"## Problem\nOrphaned tmux sessions and Claude processes accumulate over time, consuming memory.\n\n## Discovered Orphans\n- gt-deacon: Idle Claude session, not part of any rig\n\n## Proposed Solution\n\n### gt doctor --check (default)\nDetect issues without fixing:\n- Orphan sessions (not matching rig/polecat/crew/witness/refinery/mayor pattern)\n- Claude processes without parent tmux session\n- Tmux sessions without Claude (stuck at bash prompt)\n- Polecats marked 'working' but session idle\n\n### gt doctor --fix\nClean up detected issues:\n- Kill orphan sessions\n- Kill orphan Claude processes\n- Optionally reset stuck polecat state\n\n### gt gc (alternative name)\nShort alias for cleanup operations.\n\n## Acceptance Criteria\n- [ ] Detects orphan sessions\n- [ ] Detects orphan processes\n- [ ] Safe cleanup (doesn't kill active work)\n- [ ] Reports what was cleaned","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-20T01:06:39.046959-08:00","updated_at":"2025-12-20T07:54:51.210265-08:00","closed_at":"2025-12-20T07:54:51.210265-08:00"} {"id":"gt-qswb","title":"bd mol current: soft cursor showing current/next step","description":"Add bd mol current command for molecule navigation orientation.\n\n## Usage\n\nbd mol current [mol-id]\n\nIf mol-id given, show status for that molecule.\nIf not given, infer from in_progress issues assigned to current agent.\n\n## Output\n\nYou're working on molecule gt-abc (Feature X)\n\n [checkmark] gt-abc.1: Design\n [checkmark] gt-abc.2: Scaffold \n [checkmark] gt-abc.3: Implement\n [arrow] gt-abc.4: Write tests [in_progress] \u003c- YOU ARE HERE\n [circle] gt-abc.5: Documentation\n [circle] gt-abc.6: Exit decision\n\nProgress: 3/6 steps complete\n\n## Key behaviors\n- Shows full molecule structure with status indicators\n- Highlights current in_progress step\n- If no in_progress, highlights first ready step\n- Works without explicit cursor tracking (inferred from state)\n\n## Implementation notes\n- Query children of mol-id\n- Sort by dependency order\n- Find first in_progress or first ready\n- Format with status indicators\n\n## Beads feature\nThis is a bd command - needs implementation in beads repo.","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-22T17:00:47.394852-08:00","updated_at":"2025-12-22T17:04:13.388865-08:00","closed_at":"2025-12-22T17:04:13.388865-08:00","close_reason":"Moved to beads: bd-sal9"} {"id":"gt-qvn7","title":"Tracer Bullet: Single-Polecat Engine","description":"# Tracer Bullet: Single-Polecat Engine\n\nThe minimal viable Gas Town: one polecat, one issue, one complete cycle.\n\n## Vision\n\n```\nDeacon wakes → checks hook → spawns polecat → polecat works → polecat submits → loop\n```\n\nNo Witness automation. No Refinery automation. Just the core propulsion loop.\n\n## Key Insight: Molecules Are the Logic\n\nGo code is connector/glue. The cognition lives in molecules. When the Deacon\nwakes up, it reads its hook, finds a molecule, and WALKS IT. The molecule\nsays what to do. Go just provides the verbs (spawn, send, close).\n\n## The Propulsion Principle\n\n\u003e If you find something on your hook, YOU RUN IT.\n\nThis is the universal Gas Town rule. Every agent, every wake-up:\n1. Check hook\n2. If mol → execute it\n3. If nothing → wait for assignment\n\n## Critical Path\n\n1. **Slinging Handoff** - `gt sling \u003cbead\u003e` attaches work and restarts\n2. **Hook Execution** - Agent wakes, primes, reads hook, runs hook\n3. **Polecat Work Cycle** - Spawn → work → submit → complete\n4. **Deacon Patrol** - The loop that spawns polecats\n\n## Success Criteria\n\n- `gt sling gt-xxx` restarts agent with work attached\n- Agent wakes up and automatically begins work\n- Single polecat completes one issue end-to-end\n- Deacon can spawn polecats on demand\n\n## Non-Goals (v0.1)\n\n- Autonomous Witness nudging\n- Autonomous Refinery merging\n- Multi-polecat coordination\n- Self-healing from crashes\n\nThese are v0.2+. Tracer bullet first.","status":"open","priority":0,"issue_type":"epic","created_at":"2025-12-24T15:33:45.930555-08:00","updated_at":"2025-12-24T15:33:45.930555-08:00"} -{"id":"gt-qvn7.1","title":"Phase 1: Slinging Handoff","description":"# Phase 1: Slinging Handoff\n\nThe restart-and-resume loop. This is the fundamental propulsion mechanism.\n\n## What It Does\n\n```bash\ngt sling gt-xxx\n```\n\n1. Creates a wisp on the agent's hook containing the bead\n2. Sends handoff mail (optional context)\n3. Triggers session restart (daemon SIGUSR1 or direct respawn)\n4. Fresh Claude wakes up\n5. SessionStart hook runs `gt prime`\n6. Agent reads hook → finds the slung bead\n7. Agent executes the work\n\n## Why Wisp, Not Mol\n\nThe sling is ephemeral scaffolding. It says \"run this bead\" - nothing more.\nOnce the work is picked up, the wisp can be burned. No permanent record needed\nfor the handoff wrapper itself; the actual work is tracked in the bead.\n\n## Implementation\n\n### gt sling command\n\n```go\n// cmd: gt sling \u003cbead-id\u003e [-s subject] [-m message]\nfunc sling(beadID string, subject, message string) {\n // 1. Create wisp on hook\n // - Creates .beads-wisp/hook-\u003cagent\u003e.wisp.yaml\n // - Contains: bead_id, slung_at, context\n \n // 2. Optional: send handoff mail\n // - gt mail send \u003cself\u003e -s \"🤝 HANDOFF: \u003csubject\u003e\" -m \"\u003cmessage\u003e\"\n \n // 3. Trigger restart\n // - For crew: just exit (human restarts)\n // - For polecats: signal daemon (SIGUSR1)\n // - For deacon: signal daemon (SIGUSR1)\n}\n```\n\n### Hook Reading in gt prime\n\n```go\n// In gt prime, after loading context:\nfunc checkHook(agent string) *SlungWork {\n wispPath := \".beads-wisp/hook-\" + agent + \".wisp.yaml\"\n if exists(wispPath) {\n return parseWisp(wispPath)\n }\n return nil\n}\n```\n\n### Agent Response to Slung Work\n\nWhen agent wakes and finds slung work:\n\n1. Read the wisp: `hook-\u003cagent\u003e.wisp.yaml`\n2. Get the bead ID\n3. Show the bead: `bd show \u003cbead-id\u003e`\n4. Begin working on it\n5. Burn the wisp (it's been picked up\n\n## Files Changed\n\n- - New command\n- - Wisp creation/reading\n- - Hook check on startup\n- Role CLAUDE.md files - Instructions for hook processing\n\n## Acceptance Criteria\n\n- [ ] creates wisp on hook\n- [ ] Agent restart picks up the slung work\n- [ ] Work begins automatically (no human nudge)\n- [ ] Wisp is burned after pickup\nEOF\n)","status":"open","priority":0,"issue_type":"epic","created_at":"2025-12-24T15:34:11.051245-08:00","updated_at":"2025-12-24T15:34:11.051245-08:00","dependencies":[{"issue_id":"gt-qvn7.1","depends_on_id":"gt-qvn7","type":"parent-child","created_at":"2025-12-24T15:34:11.053313-08:00","created_by":"daemon"}]} -{"id":"gt-qvn7.1.1","title":"gt sling command implementation","description":"Implement the gt sling command for handoff with attached work.\n\n## Command Signature\n\n```bash\ngt sling \u003cbead-id\u003e [-s subject] [-m message]\n```\n\n## Behavior\n\n1. Validate the bead exists: bd show \u003cbead-id\u003e\n2. Create wisp on agents hook:\n - File: .beads-wisp/hook-\u003cagent\u003e.wisp.yaml\n - Content: bead_id, slung_at, optional context\n3. Optionally send handoff mail with subject/message\n4. Exit cleanly (or signal restart)\n\n## Wisp Format\n\n```yaml\ntype: slung-work\nbead_id: gt-xxx\nslung_at: 2025-12-24T...\nslung_by: crew/joe\ncontext: \"Optional message\"\n```\n\n## Files to Create/Modify\n\n- cmd/gt/sling.go (new)\n- internal/wisp/wisp.go (may need creation)\n- internal/wisp/hook.go (hook reading)\n\n## Notes\n\n- Keep it simple - this is connector code\n- The wisp is burned after pickup\n- Sling should work for any role (crew, polecat, deacon)","status":"open","priority":0,"issue_type":"task","created_at":"2025-12-24T15:36:14.175753-08:00","updated_at":"2025-12-24T15:36:14.175753-08:00","dependencies":[{"issue_id":"gt-qvn7.1.1","depends_on_id":"gt-qvn7.1","type":"parent-child","created_at":"2025-12-24T15:36:14.177841-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.1.1","depends_on_id":"gt-qvn7.1.2","type":"blocks","created_at":"2025-12-24T15:36:56.672678-08:00","created_by":"daemon"}]} -{"id":"gt-qvn7.1.2","title":"Wisp directory and format","description":"Define and implement the .beads-wisp directory structure.\n\n## Directory Structure\n\n```\n\u003cclone\u003e/.beads-wisp/\n hook-\u003cagent\u003e.wisp.yaml # Slung work for this agent\n patrol-\u003cid\u003e.wisp.yaml # Patrol cycle state (future)\n```\n\n## Wisp File Format\n\n```yaml\ntype: slung-work | patrol-cycle\ncreated_at: ISO timestamp\ncreated_by: entity who created it\n\n# For slung-work:\nbead_id: gt-xxx\ncontext: optional message\n\n# For patrol-cycle (future):\nformula: mol-deacon-patrol\ncurrent_step: inbox-check\nstep_states: {...}\n```\n\n## Key Properties\n\n- NOT git tracked (.beads-wisp/ in .gitignore)\n- Ephemeral - burned after use\n- Local to each clone\n- Fast writes (no sync needed)\n\n## Implementation\n\n- internal/wisp/dir.go - Directory creation/management\n- internal/wisp/types.go - Wisp type definitions\n- internal/wisp/io.go - Read/write operations","status":"open","priority":0,"issue_type":"task","created_at":"2025-12-24T15:36:25.061863-08:00","updated_at":"2025-12-24T15:36:25.061863-08:00","dependencies":[{"issue_id":"gt-qvn7.1.2","depends_on_id":"gt-qvn7.1","type":"parent-child","created_at":"2025-12-24T15:36:25.063924-08:00","created_by":"daemon"}]} -{"id":"gt-qvn7.1.3","title":"Hook reading in gt prime","description":"Enhance gt prime to check and display hook contents.\n\n## Current Behavior\n\ngt prime loads context:\n- Reads CLAUDE.md\n- Injects beads workflow info\n- Shows status\n\n## New Behavior\n\nAfter loading context, check hook:\n\n```go\n// In prime.go\nfunc checkHook(agent string) {\n wispPath := \".beads-wisp/hook-\" + agent + \".wisp.yaml\"\n if wisp := readWisp(wispPath); wisp != nil {\n // Inject hook info into prime output\n showSlungWork(wisp)\n }\n}\n```\n\n## Output Format\n\nWhen hook has slung work:\n\n```markdown\n## Your Hook\n\nYou have work assigned:\n\n**Bead:** gt-xxx\n**Title:** Fix authentication bug\n**Priority:** P1\n\nContext from previous session:\n\u003e Continue where I left off...\n\n**BEGIN WORK NOW.** Claim it with:\n bd update gt-xxx --status=in_progress\n```\n\n## Files Modified\n\n- cmd/gt/prime.go - Add hook checking\n- internal/wisp/hook.go - Hook reading utilities","status":"open","priority":0,"issue_type":"task","created_at":"2025-12-24T15:36:37.061178-08:00","updated_at":"2025-12-24T15:36:37.061178-08:00","dependencies":[{"issue_id":"gt-qvn7.1.3","depends_on_id":"gt-qvn7.1","type":"parent-child","created_at":"2025-12-24T15:36:37.063211-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.1.3","depends_on_id":"gt-qvn7.1.2","type":"blocks","created_at":"2025-12-24T15:36:56.759282-08:00","created_by":"daemon"}]} -{"id":"gt-qvn7.1.4","title":"Wisp burn after pickup","description":"Implement wisp cleanup after work is picked up.\n\n## When to Burn\n\nAfter agent has picked up slung work:\n- Agent claims the issue (bd update --status=in_progress)\n- Or agent explicitly acknowledges the handoff\n- Wisp file is deleted\n\n## Implementation Options\n\nOption A: Agent burns manually\n```bash\ngt hook burn # Deletes current hook wisp\n```\n\nOption B: Auto-burn on claim\n- bd update detects theres a hook for this issue\n- Burns the wisp automatically\n\nOption C: Burn in prime (after display)\n- Once shown to agent, delete the wisp\n- Simple but might lose info if agent crashes before reading\n\n## Recommendation\n\nUse Option A (manual burn) for v0.1:\n- Explicit is better than implicit\n- Agent controls when theyre done with handoff\n- Add auto-burn in v0.2\n\n## Command\n\n```bash\ngt hook burn\n# Deletes .beads-wisp/hook-\u003cagent\u003e.wisp.yaml\n# Confirms: \"Hook cleared\"\n```","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-24T15:36:48.284445-08:00","updated_at":"2025-12-24T15:36:48.284445-08:00","dependencies":[{"issue_id":"gt-qvn7.1.4","depends_on_id":"gt-qvn7.1","type":"parent-child","created_at":"2025-12-24T15:36:48.286893-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.1.4","depends_on_id":"gt-qvn7.1.3","type":"blocks","created_at":"2025-12-24T15:36:56.843124-08:00","created_by":"daemon"}]} +{"id":"gt-qvn7.1","title":"Phase 1: Slinging Handoff","description":"# Phase 1: Slinging Handoff\n\nThe restart-and-resume loop. This is the fundamental propulsion mechanism.\n\n## What It Does\n\n```bash\ngt sling gt-xxx\n```\n\n1. Creates a wisp on the agent's hook containing the bead\n2. Sends handoff mail (optional context)\n3. Triggers session restart (daemon SIGUSR1 or direct respawn)\n4. Fresh Claude wakes up\n5. SessionStart hook runs `gt prime`\n6. Agent reads hook → finds the slung bead\n7. Agent executes the work\n\n## Why Wisp, Not Mol\n\nThe sling is ephemeral scaffolding. It says \"run this bead\" - nothing more.\nOnce the work is picked up, the wisp can be burned. No permanent record needed\nfor the handoff wrapper itself; the actual work is tracked in the bead.\n\n## Implementation\n\n### gt sling command\n\n```go\n// cmd: gt sling \u003cbead-id\u003e [-s subject] [-m message]\nfunc sling(beadID string, subject, message string) {\n // 1. Create wisp on hook\n // - Creates .beads-wisp/hook-\u003cagent\u003e.wisp.yaml\n // - Contains: bead_id, slung_at, context\n \n // 2. Optional: send handoff mail\n // - gt mail send \u003cself\u003e -s \"🤝 HANDOFF: \u003csubject\u003e\" -m \"\u003cmessage\u003e\"\n \n // 3. Trigger restart\n // - For crew: just exit (human restarts)\n // - For polecats: signal daemon (SIGUSR1)\n // - For deacon: signal daemon (SIGUSR1)\n}\n```\n\n### Hook Reading in gt prime\n\n```go\n// In gt prime, after loading context:\nfunc checkHook(agent string) *SlungWork {\n wispPath := \".beads-wisp/hook-\" + agent + \".wisp.yaml\"\n if exists(wispPath) {\n return parseWisp(wispPath)\n }\n return nil\n}\n```\n\n### Agent Response to Slung Work\n\nWhen agent wakes and finds slung work:\n\n1. Read the wisp: `hook-\u003cagent\u003e.wisp.yaml`\n2. Get the bead ID\n3. Show the bead: `bd show \u003cbead-id\u003e`\n4. Begin working on it\n5. Burn the wisp (it's been picked up\n\n## Files Changed\n\n- - New command\n- - Wisp creation/reading\n- - Hook check on startup\n- Role CLAUDE.md files - Instructions for hook processing\n\n## Acceptance Criteria\n\n- [ ] creates wisp on hook\n- [ ] Agent restart picks up the slung work\n- [ ] Work begins automatically (no human nudge)\n- [ ] Wisp is burned after pickup\nEOF\n)","status":"closed","priority":0,"issue_type":"epic","created_at":"2025-12-24T15:34:11.051245-08:00","updated_at":"2025-12-24T16:07:23.049308-08:00","closed_at":"2025-12-24T16:07:23.049308-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-qvn7.1","depends_on_id":"gt-qvn7","type":"parent-child","created_at":"2025-12-24T15:34:11.053313-08:00","created_by":"daemon"}]} +{"id":"gt-qvn7.1.1","title":"gt sling command implementation","description":"Implement the gt sling command for handoff with attached work.\n\n## Command Signature\n\n```bash\ngt sling \u003cbead-id\u003e [-s subject] [-m message]\n```\n\n## Behavior\n\n1. Validate the bead exists: bd show \u003cbead-id\u003e\n2. Create wisp on agents hook:\n - File: .beads-wisp/hook-\u003cagent\u003e.wisp.yaml\n - Content: bead_id, slung_at, optional context\n3. Optionally send handoff mail with subject/message\n4. Exit cleanly (or signal restart)\n\n## Wisp Format\n\n```yaml\ntype: slung-work\nbead_id: gt-xxx\nslung_at: 2025-12-24T...\nslung_by: crew/joe\ncontext: \"Optional message\"\n```\n\n## Files to Create/Modify\n\n- cmd/gt/sling.go (new)\n- internal/wisp/wisp.go (may need creation)\n- internal/wisp/hook.go (hook reading)\n\n## Notes\n\n- Keep it simple - this is connector code\n- The wisp is burned after pickup\n- Sling should work for any role (crew, polecat, deacon)","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T15:36:14.175753-08:00","updated_at":"2025-12-24T16:06:14.034601-08:00","closed_at":"2025-12-24T16:06:14.034601-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-qvn7.1.1","depends_on_id":"gt-qvn7.1","type":"parent-child","created_at":"2025-12-24T15:36:14.177841-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.1.1","depends_on_id":"gt-qvn7.1.2","type":"blocks","created_at":"2025-12-24T15:36:56.672678-08:00","created_by":"daemon"}]} +{"id":"gt-qvn7.1.2","title":"Wisp directory and format","description":"Define and implement the .beads-wisp directory structure.\n\n## Directory Structure\n\n```\n\u003cclone\u003e/.beads-wisp/\n hook-\u003cagent\u003e.wisp.yaml # Slung work for this agent\n patrol-\u003cid\u003e.wisp.yaml # Patrol cycle state (future)\n```\n\n## Wisp File Format\n\n```yaml\ntype: slung-work | patrol-cycle\ncreated_at: ISO timestamp\ncreated_by: entity who created it\n\n# For slung-work:\nbead_id: gt-xxx\ncontext: optional message\n\n# For patrol-cycle (future):\nformula: mol-deacon-patrol\ncurrent_step: inbox-check\nstep_states: {...}\n```\n\n## Key Properties\n\n- NOT git tracked (.beads-wisp/ in .gitignore)\n- Ephemeral - burned after use\n- Local to each clone\n- Fast writes (no sync needed)\n\n## Implementation\n\n- internal/wisp/dir.go - Directory creation/management\n- internal/wisp/types.go - Wisp type definitions\n- internal/wisp/io.go - Read/write operations","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T15:36:25.061863-08:00","updated_at":"2025-12-24T16:04:14.90022-08:00","closed_at":"2025-12-24T16:04:14.90022-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-qvn7.1.2","depends_on_id":"gt-qvn7.1","type":"parent-child","created_at":"2025-12-24T15:36:25.063924-08:00","created_by":"daemon"}]} +{"id":"gt-qvn7.1.3","title":"Hook reading in gt prime","description":"Enhance gt prime to check and display hook contents.\n\n## Current Behavior\n\ngt prime loads context:\n- Reads CLAUDE.md\n- Injects beads workflow info\n- Shows status\n\n## New Behavior\n\nAfter loading context, check hook:\n\n```go\n// In prime.go\nfunc checkHook(agent string) {\n wispPath := \".beads-wisp/hook-\" + agent + \".wisp.yaml\"\n if wisp := readWisp(wispPath); wisp != nil {\n // Inject hook info into prime output\n showSlungWork(wisp)\n }\n}\n```\n\n## Output Format\n\nWhen hook has slung work:\n\n```markdown\n## Your Hook\n\nYou have work assigned:\n\n**Bead:** gt-xxx\n**Title:** Fix authentication bug\n**Priority:** P1\n\nContext from previous session:\n\u003e Continue where I left off...\n\n**BEGIN WORK NOW.** Claim it with:\n bd update gt-xxx --status=in_progress\n```\n\n## Files Modified\n\n- cmd/gt/prime.go - Add hook checking\n- internal/wisp/hook.go - Hook reading utilities","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-24T15:36:37.061178-08:00","updated_at":"2025-12-24T16:07:22.843612-08:00","closed_at":"2025-12-24T16:07:22.843612-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-qvn7.1.3","depends_on_id":"gt-qvn7.1","type":"parent-child","created_at":"2025-12-24T15:36:37.063211-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.1.3","depends_on_id":"gt-qvn7.1.2","type":"blocks","created_at":"2025-12-24T15:36:56.759282-08:00","created_by":"daemon"}]} +{"id":"gt-qvn7.1.4","title":"Wisp burn after pickup","description":"Implement wisp cleanup after work is picked up.\n\n## When to Burn\n\nAfter agent has picked up slung work:\n- Agent claims the issue (bd update --status=in_progress)\n- Or agent explicitly acknowledges the handoff\n- Wisp file is deleted\n\n## Implementation Options\n\nOption A: Agent burns manually\n```bash\ngt hook burn # Deletes current hook wisp\n```\n\nOption B: Auto-burn on claim\n- bd update detects theres a hook for this issue\n- Burns the wisp automatically\n\nOption C: Burn in prime (after display)\n- Once shown to agent, delete the wisp\n- Simple but might lose info if agent crashes before reading\n\n## Recommendation\n\nUse Option A (manual burn) for v0.1:\n- Explicit is better than implicit\n- Agent controls when theyre done with handoff\n- Add auto-burn in v0.2\n\n## Command\n\n```bash\ngt hook burn\n# Deletes .beads-wisp/hook-\u003cagent\u003e.wisp.yaml\n# Confirms: \"Hook cleared\"\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-24T15:36:48.284445-08:00","updated_at":"2025-12-24T16:07:22.946068-08:00","closed_at":"2025-12-24T16:07:22.946068-08:00","close_reason":"Closed","dependencies":[{"issue_id":"gt-qvn7.1.4","depends_on_id":"gt-qvn7.1","type":"parent-child","created_at":"2025-12-24T15:36:48.286893-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.1.4","depends_on_id":"gt-qvn7.1.3","type":"blocks","created_at":"2025-12-24T15:36:56.843124-08:00","created_by":"daemon"}]} {"id":"gt-qvn7.2","title":"Phase 2: Hook Execution Protocol","description":"# Phase 2: Hook Execution Protocol\n\nMaking agents actually RUN what's on their hook.\n\n## The Problem\n\nCurrently, agents wake up, get primed, and... wait. They don't automatically\nexecute their pinned molecule or slung work. The propulsion is missing.\n\n## The Solution\n\ngt prime should end with an ACTION, not just context loading:\n\n```\ngt prime output:\n 1. Load context (existing)\n 2. Check hook\n 3. If hook has work → tell agent to RUN IT NOW\n```\n\n## Hook Types\n\n| Hook Content | Action |\n|--------------|--------|\n| Pinned molecule (mol-*) | Execute current step, advance |\n| Slung bead (gt-xxx) | Show bead, begin work |\n| Nothing | Wait for assignment |\n\n## Molecule Execution Pattern\n\nWhen hook has a molecule:\n\n```markdown\n## Your Hook: mol-deacon-patrol\n\nCurrent step: inbox-check\nStatus: pending\n\n**EXECUTE THIS STEP NOW.**\n\n### Step: inbox-check\nCheck the Mayor's inbox for messages...\n\nWhen complete, run: `bd mol advance mol-deacon-patrol`\n```\n\nThe agent sees this, does the step, advances the molecule.\n\n## Implementation\n\n### gt prime enhancements\n\n1. After loading context, check `bd hook`\n2. If molecule → inject step execution prompt\n3. If slung bead → inject \"work on this bead\" prompt\n4. Include the actual step/bead content inline\n\n### bd mol advance command\n\n```bash\nbd mol advance \u003cmol-id\u003e\n# Marks current step complete\n# Moves to next step (respecting deps)\n# Returns new current step or \"COMPLETE\"\n```\n\n### Molecule State Tracking\n\nMolecules need execution state:\n\n```yaml\n# .beads/molecules/mol-deacon-patrol.state.yaml\nid: mol-deacon-patrol\ncurrent_step: inbox-check\nstep_states:\n inbox-check: pending\n trigger-pending-spawns: blocked\n health-scan: blocked\nsteps_completed: []\nstarted_at: 2025-12-24T...\n```\n\n## Files Changed\n\n- `cmd/gt/prime.go` - Hook check and action injection\n- Beads: `cmd/bd/mol_advance.go` - Step advancement\n- Beads: `internal/mol/state.go` - Molecule execution state\n\n## Acceptance Criteria\n\n- gt prime shows current hook and prompts action\n- bd mol advance moves molecule forward\n- Agent naturally follows the execution flow","status":"open","priority":0,"issue_type":"epic","created_at":"2025-12-24T15:34:32.037329-08:00","updated_at":"2025-12-24T15:34:32.037329-08:00","dependencies":[{"issue_id":"gt-qvn7.2","depends_on_id":"gt-qvn7","type":"parent-child","created_at":"2025-12-24T15:34:32.039415-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.2","depends_on_id":"gt-qvn7.1","type":"blocks","created_at":"2025-12-24T15:36:00.393831-08:00","created_by":"daemon"}]} {"id":"gt-qvn7.2.1","title":"bd mol advance command","description":"## Cross-Repo Reference\n\nThis work is tracked in beads repo as **bd-3zm7**.\n\nThe gastown task gt-qvn7.2.1 is a placeholder. \nActual implementation happens in beads.\n\nSee: bd show bd-3zm7 (from beads/crew/dave)","status":"open","priority":0,"issue_type":"task","created_at":"2025-12-24T15:37:10.413975-08:00","updated_at":"2025-12-24T15:54:18.047065-08:00","dependencies":[{"issue_id":"gt-qvn7.2.1","depends_on_id":"gt-qvn7.2","type":"parent-child","created_at":"2025-12-24T15:37:10.416191-08:00","created_by":"daemon"},{"issue_id":"gt-qvn7.2.1","depends_on_id":"gt-qvn7.2.2","type":"blocks","created_at":"2025-12-24T15:37:39.740685-08:00","created_by":"daemon"}]} {"id":"gt-qvn7.2.2","title":"Molecule state file management","description":"## Cross-Repo Reference\n\nThis work is tracked in beads repo as **bd-hulf**.\n\nThe gastown task gt-qvn7.2.2 is a placeholder.\nActual implementation happens in beads.\n\nSee: bd show bd-hulf (from beads/crew/dave)","status":"open","priority":0,"issue_type":"task","created_at":"2025-12-24T15:37:21.389134-08:00","updated_at":"2025-12-24T15:54:18.123358-08:00","dependencies":[{"issue_id":"gt-qvn7.2.2","depends_on_id":"gt-qvn7.2","type":"parent-child","created_at":"2025-12-24T15:37:21.39098-08:00","created_by":"daemon"}]} @@ -1021,6 +1021,7 @@ {"id":"gt-yx4","title":"Town root .beads has schema mismatch with bd","description":"The .beads directory at town root (/Users/stevey/gt/.beads) has an incompatible schema:\n\n```\nError: failed to open database: failed to initialize schema: sqlite3: SQL logic error: no such column: thread_id\n```\n\nMeanwhile, gastown/.beads (symlinked to mayor/rig/.beads) works fine.\n\n## Impact\n\n- gt mail inbox fails at town root\n- gt handoff sends mail to broken db\n- Daemon can't check its inbox\n\n## Options\n\n1. Delete town root .beads/beads.db and let it recreate\n2. Symlink town root .beads to gastown/.beads\n3. Run schema migration on existing db\n\n## Root Cause\n\nLikely a beads version upgrade that added thread_id column, but the town root db was created before that.","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-18T14:31:35.559042-08:00","updated_at":"2025-12-19T00:39:32.211083-08:00","closed_at":"2025-12-19T00:39:32.211083-08:00"} {"id":"gt-yzms","title":"Merge polecat/rictus: Add molecule phase lifecycle diagram","description":"Branch: polecat/rictus\n\nAdds molecule phase lifecycle diagram to architecture.md showing Proto → Mol/Wisp → Digest state transitions with the 'states of matter' metaphor. Also documents when to use Mol (durable) vs Wisp (ephemeral).\n\nCloses: gt-c6zs","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-21T16:41:58.139439-08:00","updated_at":"2025-12-21T17:20:27.50075-08:00","closed_at":"2025-12-21T17:20:27.50075-08:00","close_reason":"ORPHANED: Branch never pushed, worktree deleted"} {"id":"gt-z3qf","title":"Overhaul gt mol to match bd mol chemistry interface","description":"## The Sling: Unified Work Dispatch\n\nThis issue tracks the overhaul of `gt molecule` to align with chemistry metaphor and introduce the **Universal Gas Town Propulsion Principle**.\n\n### The Propulsion Principle\n\n\u003e **If you find something on your hook, YOU RUN IT.**\n\nThis is the one rule that drives all Gas Town agents.\n\n### The Sling Operation\n\n`gt sling \u003cthing\u003e \u003ctarget\u003e [options]` - unified command for spawn + assign + pin.\n\nSee: `gastown/mayor/rig/docs/sling-design.md`\n\n### Implementation Tasks\n\n| Issue | Title | Priority |\n|-------|-------|----------|\n| gt-4ev4 | Implement gt sling command | P1 |\n| gt-uym5 | Implement gt mol status command | P1 |\n| gt-i4kq | Update templates for Propulsion Principle | P1 |\n| gt-7hor | Document the Propulsion Principle | P2 |\n\n### Command Changes\n\n| Old | New |\n|-----|-----|\n| `gt molecule instantiate` | `gt sling` |\n| `gt molecule attach` | `gt sling --force` |\n| `gt molecule detach` | `gt mol burn` |\n| `gt molecule progress` | `gt mol status` |\n| `gt molecule list` | `gt mol catalog` |\n| `gt spawn --molecule` | `gt sling` |\n\n### Acceptance Criteria\n\n- [ ] `gt sling` works for protos, issues, and epics\n- [ ] `gt mol status` shows hook state\n- [ ] Templates updated for propulsion principle\n- [ ] Old commands deprecated with warnings\n- [ ] Documentation complete","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-22T03:02:38.049324-08:00","updated_at":"2025-12-22T14:37:37.562677-08:00","closed_at":"2025-12-22T14:37:37.562677-08:00","close_reason":"Core sling work complete (gt-4ev4, gt-uym5, gt-7hor closed). gt-i4kq (template updates) remains open but is independent polish work.","dependencies":[{"issue_id":"gt-z3qf","depends_on_id":"gt-4ev4","type":"blocks","created_at":"2025-12-22T12:10:42.394653-08:00","created_by":"daemon"},{"issue_id":"gt-z3qf","depends_on_id":"gt-uym5","type":"blocks","created_at":"2025-12-22T12:10:42.46834-08:00","created_by":"daemon"},{"issue_id":"gt-z3qf","depends_on_id":"gt-i4kq","type":"blocks","created_at":"2025-12-22T12:10:42.541384-08:00","created_by":"daemon"},{"issue_id":"gt-z3qf","depends_on_id":"gt-7hor","type":"blocks","created_at":"2025-12-22T12:10:42.613099-08:00","created_by":"daemon"}]} +{"id":"gt-z3rf","title":"Remove schedule/phase terminology from code","description":"Temporal/schedule language in identifiers is an anti-pattern.\n\n## Found Issues\n\n### beads repo\n- `examples/multi-phase-development/` directory\n - Rename to `examples/dependency-sequenced-work/` or similar\n\n### gastown repo \n- `internal/cmd/start.go` lines 178-195\n - Uses \"Phase 1:\", \"Phase 2:\", etc. in printf output\n - Change to descriptive names: \"Interrupting agents...\", \"Requesting handoff...\", etc.\n\n- `internal/swarm/landing.go` lines ~50-70\n - Comments say \"// Phase 1: Stop all polecat sessions\"\n - Change to \"// Step: Stop all polecat sessions\" or just remove phase labels\n\n## Why This Matters\n\nPhase/version language in names:\n1. Implies a fixed schedule (antithetical to dependency-driven work)\n2. Creates confusion with molecule \"phases\" (solid/liquid/gas)\n3. Encourages temporal thinking that leads to backwards dependencies\n\n## What To Keep\n\n- Molecule phase terminology (pour/wisp/proto) - this is chemistry, not scheduling\n- Version fields inside files (version: 1) - this is semantic versioning","status":"open","priority":2,"issue_type":"chore","created_at":"2025-12-24T15:57:43.019728-08:00","updated_at":"2025-12-24T15:57:43.019728-08:00"} {"id":"gt-z4g","title":"Plugin: Plan-to-Epic converter","description":"## Purpose\n\nHelp users create beads epics from various planning inputs.\n\n## Inputs\n- Markdown task lists\n- GitHub issues\n- Linear/Jira exports\n- Free-form descriptions\n- Existing beads epics\n\n## Output\n- Beads epic with properly structured children\n- Dependencies set for wave ordering\n- Priorities assigned\n- Ready for `gt spawn --epic \u003cid\u003e`\n\n## Implementation Options\n\n### Option A: CLI Tool\n```bash\ngt plan import --from github --repo owner/repo --label batch-candidate\ngt plan import --from markdown tasks.md\ngt plan structure \u003cepic-id\u003e # analyze and add dependencies\n```\n\n### Option B: Plugin Agent\nA plugin at `\u003crig\u003e/plugins/plan-oracle/` that:\n- Receives planning requests via mail\n- Analyzes scope and requirements\n- Creates structured beads epic\n- Sets dependencies based on analysis\n\n### Option C: Interactive Mode\n```bash\ngt plan create\n# Walks through questions, creates epic interactively\n```\n\n## Axiom\n\nAs stated: 'The Planning phase should end in the creation of a workable Beads plan.'\n\nThis plugin bridges the gap between human planning and machine-executable work.\n\n## Priority\n\nP2 - Nice to have for MVP. Manual epic creation works for now.\n\n## Note\n\nNo \"swarm IDs\" - output is just a beads epic with children. Workers process it independently.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-16T02:10:20.663549-08:00","updated_at":"2025-12-16T17:26:41.087304-08:00"} {"id":"gt-z94m","title":"load-state","description":"Read handoff bead and get nudge counts.\n\nNeeds: check-refinery","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-23T01:41:54.505607-08:00","updated_at":"2025-12-23T04:39:39.698069-08:00","closed_at":"2025-12-23T04:39:39.698069-08:00","close_reason":"Parent gt-751s superseded by Christmas Ornament pattern","dependencies":[{"issue_id":"gt-z94m","depends_on_id":"gt-751s","type":"parent-child","created_at":"2025-12-23T01:41:54.542384-08:00","created_by":"stevey"}],"wisp":true} {"id":"gt-z9xv","title":"Merge: gt-ldk8","description":"branch: polecat/nux\ntarget: main\nsource_issue: gt-ldk8\nrig: gastown","status":"closed","priority":1,"issue_type":"merge-request","created_at":"2025-12-23T00:18:18.894709-08:00","updated_at":"2025-12-23T01:18:52.583727-08:00","closed_at":"2025-12-23T01:18:52.583727-08:00","close_reason":"Already merged (duplicate MRs)"}