bd daemon sync: 2026-01-12 02:45:45

This commit is contained in:
beads/refinery
2026-01-12 02:45:45 -08:00
committed by Steve Yegge
parent 53cc3ff7fe
commit da072fbf68

View File

@@ -854,7 +854,7 @@
{"id":"bd-bdhn","title":"bd message: Add input validation for --importance flag","description":"The --importance flag accepts any string without validation, leading to confusing server errors.\n\n**Location:** cmd/bd/message.go:256-258\n\n**Fix:**\n- Add flag validation for: low, normal, high, urgent\n- Add shell completion support\n- Validate in runMessageSend before sending\n\n**Impact:** Better UX, prevents confusing errors","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-11-08T12:54:26.43027-08:00","updated_at":"2025-11-08T12:57:59.65367-08:00","closed_at":"2025-11-08T12:57:59.65367-08:00","dependencies":[{"issue_id":"bd-bdhn","depends_on_id":"bd-6uix","type":"parent-child","created_at":"2025-11-08T12:55:54.910841-08:00","created_by":"daemon"}]}
{"id":"bd-bdmwf","title":"Session ended: gt-beads-refinery","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-11T00:21:01.891501-08:00","created_by":"beads/refinery","updated_at":"2026-01-11T00:21:01.932445-08:00","closed_at":"2026-01-11T00:21:01.932445-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true}
{"id":"bd-be7a","title":"Create npm package structure with package.json","description":"Set up initial npm package structure for @beads/bd:\n\n## Files to create\n- npm/package.json - Package metadata, dependencies, scripts\n- npm/bin/bd - CLI wrapper script that invokes native binary\n- npm/.gitignore - Ignore downloaded binaries\n- npm/README.md - Installation and usage instructions\n\n## package.json structure\n- Name: @beads/bd (scoped package)\n- Main: index.js (exports binary path)\n- Bin: bin/bd (CLI entry point)\n- Scripts: postinstall (download binary)\n- Keywords: issue-tracker, cli, beads, bd\n- License: MIT\n\n## Bin wrapper\nSimple Node.js script that:\n- Spawns native binary with child_process.spawn\n- Passes through all arguments and stdio\n- Exits with binary's exit code","status":"closed","priority":1,"issue_type":"task","created_at":"2025-11-02T23:39:47.416779-08:00","updated_at":"2025-11-03T10:31:45.381258-08:00","closed_at":"2025-11-03T10:31:45.381258-08:00","dependencies":[{"issue_id":"bd-be7a","depends_on_id":"bd-febc","type":"parent-child","created_at":"2025-11-02T23:40:32.923859-08:00","created_by":"daemon"}]}
{"id":"bd-beads-crew-dave","title":"Crew worker dave in beads - human-managed persistent workspace.","description":"Crew worker dave in beads - human-managed persistent workspace.\n\nrole_type: crew\nrig: beads\nagent_state: idle\nhook_bead: null\nrole_bead: gt-crew-role\ncleanup_status: null","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-30T23:14:04.538389-08:00","created_by":"deacon","updated_at":"2026-01-12T01:21:44.537322-08:00"}
{"id":"bd-beads-crew-dave","title":"Crew worker dave in beads - human-managed persistent workspace.","description":"Crew worker dave in beads - human-managed persistent workspace.\n\nrole_type: crew\nrig: beads\nagent_state: idle\nhook_bead: null\nrole_bead: gt-crew-role\ncleanup_status: null","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-30T23:14:04.538389-08:00","created_by":"deacon","updated_at":"2026-01-12T02:45:44.774864-08:00"}
{"id":"bd-beads-crew-emma","title":"Crew worker emma in beads - human-managed persistent workspace.","description":"Crew worker emma in beads - human-managed persistent workspace.\n\nrole_type: crew\nrig: beads\nagent_state: idle\nhook_bead: null\nrole_bead: gt-crew-role\ncleanup_status: null","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-30T23:14:04.604042-08:00","created_by":"deacon","updated_at":"2026-01-12T01:39:30.40061-08:00"}
{"id":"bd-beads-crew-fang","title":"Crew worker fang in beads - human-managed persistent workspace.","description":"Crew worker fang in beads - human-managed persistent workspace.\n\nrole_type: crew\nrig: beads\nagent_state: idle\nhook_bead: null\nrole_bead: gt-crew-role\ncleanup_status: null","status":"open","priority":2,"issue_type":"agent","created_at":"2025-12-30T23:14:04.672037-08:00","created_by":"deacon","updated_at":"2026-01-11T20:42:53.287787-08:00"}
{"id":"bd-beads-crew-giles","title":"Crew worker giles in beads - human-managed persistent workspace.","description":"Crew worker giles in beads - human-managed persistent workspace.\n\nrole_type: crew\nrig: beads\nagent_state: idle\nhook_bead: null\nrole_bead: gt-crew-role\ncleanup_status: null\nactive_mr: null\nnotification_level: null","status":"open","priority":2,"issue_type":"agent","created_at":"2026-01-04T11:22:11.009942-08:00","created_by":"mayor","updated_at":"2026-01-12T02:45:30.249404-08:00"}
@@ -1208,7 +1208,7 @@
{"id":"bd-fmdy","title":"Merge: bd-kzda","description":"branch: polecat/toast\ntarget: main\nsource_issue: bd-kzda\nrig: beads","status":"closed","priority":3,"issue_type":"merge-request","created_at":"2025-12-23T00:27:28.952413-08:00","updated_at":"2025-12-23T01:33:25.731326-08:00","closed_at":"2025-12-23T01:33:25.731326-08:00"}
{"id":"bd-fmyez","title":"Session ended: gt-beads-refinery","status":"closed","priority":2,"issue_type":"event","owner":"steve.yegge@gmail.com","created_at":"2026-01-11T23:04:16.116235-08:00","created_by":"beads/refinery","updated_at":"2026-01-11T23:04:16.188262-08:00","closed_at":"2026-01-11T23:04:16.188262-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true}
{"id":"bd-fom","title":"Remove all deletions.jsonl code except migration","description":"There's deletions manifest code spread across the entire codebase that should have been removed after tombstone migration:\n\nFiles with deletions code (non-migration):\n- internal/deletions/ - entire package\n- cmd/bd/sync.go - 25+ references, auto-compact, sanitize\n- cmd/bd/delete.go - dual-writes to deletions.jsonl\n- internal/importer/importer.go - checks deletions manifest\n- internal/syncbranch/worktree.go - merges deletions.jsonl\n- cmd/bd/doctor/fix/sync.go - cleanupDeletionsManifest\n- cmd/bd/doctor/fix/deletions.go - HydrateDeletionsManifest\n- cmd/bd/integrity.go - checks deletions for data loss\n- cmd/bd/deleted.go - entire command\n- cmd/bd/compact.go - pruneDeletionsManifest\n- cmd/bd/doctor.go - checkDeletionsManifest\n- Plus many more\n\nAction: Aggressively remove all non-migration deletions code. Tombstones are the only deletion mechanism now.","status":"tombstone","priority":1,"issue_type":"task","created_at":"2025-12-16T13:29:04.960863-08:00","updated_at":"2025-12-17T16:11:17.070763-08:00","deleted_at":"2025-12-17T16:11:17.070763-08:00","deleted_by":"batch delete","delete_reason":"batch delete","original_type":"task"}
{"id":"bd-foqmt","title":"Fix periodic auto-pull never executing git pull (GH#1015)","description":"## GitHub Issue\nhttps://github.com/steveyegge/beads/issues/1015\n\n## Problem\nThe `remoteSyncTicker` periodic sync never actually pulls from remote because `performAutoImport()` has a `hasJSONLChanged()` check that returns early BEFORE the git pull can execute.\n\n## Root Cause\nIn `cmd/bd/daemon_sync.go`, `performAutoImport()` checks the hash BEFORE pulling:\n- Check compares local JSONL to database hash\n- Since no git pull happened, local file hasn't changed\n- Returns early, never reaches `syncBranchPull()`\n\n## Fix\nMove `hasJSONLChanged()` check to AFTER `syncBranchPull()`:\n1. Pull from git first\n2. Then check if pulled JSONL differs from DB\n3. If changed, proceed with import\n\n## Files\n- `cmd/bd/daemon_sync.go` - `performAutoImport()` function","status":"open","priority":2,"issue_type":"bug","owner":"steve.yegge@gmail.com","created_at":"2026-01-12T02:45:38.706946-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-12T02:45:38.706946-08:00"}
{"id":"bd-foqmt","title":"Fix periodic auto-pull never executing git pull (GH#1015)","description":"dispatched_by: beads/crew/emma\n\n## GitHub Issue\nhttps://github.com/steveyegge/beads/issues/1015\n\n## Problem\nThe `remoteSyncTicker` periodic sync never actually pulls from remote because `performAutoImport()` has a `hasJSONLChanged()` check that returns early BEFORE the git pull can execute.\n\n## Root Cause\nIn `cmd/bd/daemon_sync.go`, `performAutoImport()` checks the hash BEFORE pulling:\n- Check compares local JSONL to database hash\n- Since no git pull happened, local file hasn't changed\n- Returns early, never reaches `syncBranchPull()`\n\n## Fix\nMove `hasJSONLChanged()` check to AFTER `syncBranchPull()`:\n1. Pull from git first\n2. Then check if pulled JSONL differs from DB\n3. If changed, proceed with import\n\n## Files\n- `cmd/bd/daemon_sync.go` - `performAutoImport()` function","status":"hooked","priority":2,"issue_type":"bug","assignee":"beads/crew/dave","owner":"steve.yegge@gmail.com","created_at":"2026-01-12T02:45:38.706946-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-12T02:45:44.88924-08:00"}
{"id":"bd-fqze8","title":"Add 'crystallizes' field for work economics","description":"dispatched_by: beads/crew/emma\n\nAdd boolean field to track whether work compounds (crystallizes=true: code, features) or evaporates (crystallizes=false: ops, support). Per Decision 006, this affects CV weighting. Default: false (conservative).","status":"closed","priority":1,"issue_type":"task","assignee":"beads/crew/fang","created_at":"2026-01-10T16:34:06.487466-08:00","created_by":"gastown/crew/max","updated_at":"2026-01-10T23:21:17.458797-08:00","closed_at":"2026-01-10T23:21:17.458797-08:00","close_reason":"Crystallizes field implemented","dependencies":[{"issue_id":"bd-fqze8","depends_on_id":"bd-imi7w","type":"parent-child","created_at":"2026-01-10T16:34:21.496543-08:00","created_by":"gastown/crew/max"}]}
{"id":"bd-frkzo","title":"Session ended: gt-gastown-crew-george","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-07T21:51:17.681136-08:00","created_by":"beads/witness","updated_at":"2026-01-09T21:15:40.68839-08:00","closed_at":"2026-01-09T21:15:40.68839-08:00","close_reason":"Stale session ended events"}
{"id":"bd-fsb1","title":"Test issue","status":"closed","priority":1,"issue_type":"task","created_at":"2025-11-05T11:21:51.383077-08:00","updated_at":"2025-11-05T11:21:56.888913-08:00","closed_at":"2025-11-05T11:21:56.888913-08:00"}
@@ -2118,7 +2118,7 @@
{"id":"bd-uwkp","title":"Phase 2.4: Git merge driver optimization for TOON format","description":"Optimize git 3-way merge for TOON line-oriented format.\n\n## Overview\nTOON is line-oriented (unlike binary formats), enabling smarter git merge strategies. Implement custom merge driver to handle TOON-specific merge patterns.\n\n## Required Work\n\n### 2.4.1 TOON Merge Driver\n- [ ] Create .git/info/attributes entry for *.toon files\n- [ ] Implement custom merge driver script/command\n- [ ] Handle tabular format row merges (line-based 3-way)\n- [ ] Handle YAML-style format merges\n- [ ] Conflict markers for unsolvable conflicts\n\n### 2.4.2 Merge Patterns\n- [ ] Row addition: both branches add different rows → union\n- [ ] Row deletion: one branch deletes, other modifies → conflict (manual review)\n- [ ] Row modification: concurrent field changes → intelligent merge or conflict\n- [ ] Field ordering changes: ignore (TOON format resilient to order)\n\n### 2.4.3 Testing \u0026 Documentation\n- [ ] Unit tests for merge scenarios (3-way merge logic)\n- [ ] Integration tests with actual git merges\n- [ ] Conflict scenario testing\n- [ ] Documentation of merge strategy\n\n## Success Criteria\n- Git merge handles TOON conflicts intelligently\n- Fewer manual merge conflicts than JSONL\n- Round-trip preserved through merges\n- All 70+ tests still passing\n- Git history stays clean (minimal conflict markers)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T14:43:14.339238776-07:00","updated_at":"2025-12-21T14:42:26.434306-08:00","closed_at":"2025-12-21T14:42:26.434306-08:00","dependencies":[{"issue_id":"bd-uwkp","depends_on_id":"bd-iic1","type":"discovered-from","created_at":"2025-12-19T14:43:14.34427988-07:00","created_by":"daemon"}]}
{"id":"bd-uxlb","title":"Add bd agent state command for ZFC-compliant state reporting","description":"Add command for agents to write their own state to agent beads.\n\n```bash\nbd agent state \u003cagent-id\u003e \u003cstate\u003e\n# Example: bd agent state gt-mayor running\n# States: idle | running | stuck | stopped | dead\n```\n\nImplementation:\n1. Lookup agent bead by ID (type=agent)\n2. Update agent_state field in description\n3. Update last_activity timestamp\n4. Trigger bd sync if configured\n\nAlso add:\n- bd agent heartbeat \u003cagent-id\u003e - just updates last_activity\n- bd agent show \u003cagent-id\u003e - show agent bead details\n\nThis is the ZFC-compliant way for agents to self-report state.\n\nCross-ref: gt-p2vyo in gastown","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-28T01:49:46.325964-08:00","created_by":"mayor","updated_at":"2025-12-28T01:57:05.839623-08:00","closed_at":"2025-12-28T01:57:05.839623-08:00"}
{"id":"bd-uyf3","title":"Session ended: gt-beads-crew-emma","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-06T23:52:08.520371-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-06T23:52:08.556361-08:00","closed_at":"2026-01-06T23:52:08.556361-08:00","close_reason":"auto-closed session event"}
{"id":"bd-uyq10","title":"Digest: mol-refinery-patrol","description":"Patrol: queue empty, main synced to 355ce734","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-11T18:45:37.150101-08:00","updated_at":"2026-01-11T18:45:37.150101-08:00","closed_at":"2026-01-11T18:45:37.149985-08:00","close_reason":"Squashed from 11 wisps","dependencies":[{"issue_id":"bd-uyq10","depends_on_id":"bd-wisp-i97","type":"parent-child","created_at":"2026-01-11T18:45:37.151093-08:00","created_by":"beads/refinery"}]}
{"id":"bd-uyq10","title":"Digest: mol-refinery-patrol","description":"Patrol: queue empty, main synced to 355ce734","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-11T18:45:37.150101-08:00","updated_at":"2026-01-11T18:45:37.150101-08:00","closed_at":"2026-01-11T18:45:37.149985-08:00","close_reason":"Squashed from 11 wisps"}
{"id":"bd-uyrt4","title":"Session ended: gt-beads-crew-emma","status":"closed","priority":2,"issue_type":"event","created_at":"2026-01-09T12:38:29.302861-08:00","created_by":"beads/crew/emma","updated_at":"2026-01-09T12:38:29.336056-08:00","closed_at":"2026-01-09T12:38:29.336056-08:00","close_reason":"auto-closed session event"}
{"id":"bd-uz6oq","title":"Session ended: gt-beads-refinery","status":"closed","priority":2,"issue_type":"event","owner":"steve.yegge@gmail.com","created_at":"2026-01-12T00:08:16.910485-08:00","created_by":"beads/refinery","updated_at":"2026-01-12T00:08:16.978274-08:00","closed_at":"2026-01-12T00:08:16.978274-08:00","close_reason":"auto-closed session cost wisp","ephemeral":true}
{"id":"bd-uz8r","title":"Phase 2.3: TOON deletion tracking","description":"Implement deletion tracking in TOON format.\n\n## Overview\nPhase 2.2 switched storage to TOON format. Phase 2.3 adds deletion tracking in TOON format for propagating deletions across clones.\n\n## Required Work\n\n### 2.3.1 Deletion Tracking (TOON Format)\n- [ ] Implement deletions.toon file (tracking deleted issue records)\n- [ ] Add DeleteTracker struct to record deleted issue IDs and metadata\n- [ ] Update bdt delete command to record in deletions.toon\n- [ ] Design deletion record format (ID, timestamp, reason, hash)\n- [ ] Implement auto-prune of old deletion records (configurable TTL)\n\n### 2.3.2 Sync Propagation\n- [ ] Load deletions.toon during import\n- [ ] Remove deleted issues from local database when imported from remote\n- [ ] Handle edge cases (delete same issue in multiple clones)\n- [ ] Deletion ordering and conflict resolution\n\n### 2.3.3 Testing\n- [ ] Unit tests for deletion tracking\n- [ ] Integration tests for deletion propagation\n- [ ] Multi-clone deletion scenarios\n- [ ] TTL expiration tests\n\n## Success Criteria\n- deletions.toon stores deletion records in TOON format\n- Deletions propagate across clones via git sync\n- Old records auto-prune after TTL\n- All 70+ tests still passing\n- bdt delete command works seamlessly","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-19T14:37:23.722066816-07:00","updated_at":"2025-12-21T14:42:27.491932-08:00","closed_at":"2025-12-21T14:42:27.491932-08:00","dependencies":[{"issue_id":"bd-uz8r","depends_on_id":"bd-iic1","type":"discovered-from","created_at":"2025-12-19T14:37:23.726825771-07:00","created_by":"daemon"}]}
@@ -2234,17 +2234,14 @@
{"id":"bd-wisp-eh4","title":"Verify npm package","description":"Confirm npm package published.\n\n```bash\nnpm show @beads/bd version\n```\n\nShould show 0.45.0.\n\nAlso check: https://www.npmjs.com/package/@beads/bd\n\nNote: npm registry may have a small propagation delay (1-2 min).\n","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-06T20:07:32.258891-08:00","updated_at":"2026-01-06T20:17:52.238932-08:00","closed_at":"2026-01-06T20:17:52.238932-08:00","close_reason":"All release artifacts verified: GitHub (9 assets), npm 0.45.0, PyPI 0.45.0","dependencies":[{"issue_id":"bd-wisp-eh4","depends_on_id":"bd-wisp-u9o","type":"blocks","created_at":"2026-01-06T20:07:32.283957-08:00","created_by":"beads/crew/dave"}]}
{"id":"bd-wisp-fm4","title":"Update local installation","description":"Update local bd to the new version.\n\nOption 1 - Homebrew:\n```bash\nbrew upgrade bd\n```\n\nOption 2 - Install script:\n```bash\ncurl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash\n```\n\nVerify:\n```bash\nbd --version\n```\n\nShould show 0.45.0.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-06T20:07:32.259261-08:00","updated_at":"2026-01-06T20:18:20.106709-08:00","closed_at":"2026-01-06T20:18:20.106709-08:00","close_reason":"Release v0.45.0 complete","dependencies":[{"issue_id":"bd-wisp-fm4","depends_on_id":"bd-wisp-gnr","type":"blocks","created_at":"2026-01-06T20:07:32.286541-08:00","created_by":"beads/crew/dave"},{"issue_id":"bd-wisp-fm4","depends_on_id":"bd-wisp-eh4","type":"blocks","created_at":"2026-01-06T20:07:32.287962-08:00","created_by":"beads/crew/dave"},{"issue_id":"bd-wisp-fm4","depends_on_id":"bd-wisp-04d","type":"blocks","created_at":"2026-01-06T20:07:32.289399-08:00","created_by":"beads/crew/dave"}]}
{"id":"bd-wisp-gby","title":"Check for more work","description":"More branches to process?\n\n**Entry paths:**\n- Normal: After successful merge-push\n- Conflict-skip: After process-branch created conflict-resolution task\n\nIf yes: Return to process-branch with next branch.\nIf no: Continue to generate-summary.\n\n**Track for this cycle:**\n- branches_merged: count and names of successfully merged branches\n- branches_conflict: count and names of branches skipped due to conflicts\n- conflict_tasks: IDs of conflict-resolution tasks created\n\nThis tracking feeds into generate-summary for the patrol digest.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T01:27:11.197065-08:00","updated_at":"2026-01-12T01:27:49.671718-08:00","closed_at":"2026-01-12T01:27:49.671718-08:00","close_reason":"Closed","dependencies":[{"issue_id":"bd-wisp-gby","depends_on_id":"bd-wisp-mld","type":"blocks","created_at":"2026-01-12T01:27:11.229663-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wisp-gco","title":"Check own context limit","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Write handoff summary\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue processing","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T00:34:44.780785-08:00","updated_at":"2026-01-12T00:35:30.918931-08:00","closed_at":"2026-01-12T00:35:30.918931-08:00","close_reason":"Context low - fresh session","dependencies":[{"issue_id":"bd-wisp-gco","depends_on_id":"bd-wisp-ztj","type":"blocks","created_at":"2026-01-12T00:34:44.81984-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wisp-gnr","title":"Verify GitHub release","description":"Check the GitHub releases page.\n\nhttps://github.com/steveyegge/beads/releases/tag/v0.45.0\n\nVerify:\n- Release created\n- Binaries attached (linux, darwin, windows)\n- Checksums present\n\n```bash\ngh release view v0.45.0 --json assets --jq '.assets[].name'\n```\n","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-06T20:07:32.258704-08:00","updated_at":"2026-01-06T20:17:52.237306-08:00","closed_at":"2026-01-06T20:17:52.237306-08:00","close_reason":"All release artifacts verified: GitHub (9 assets), npm 0.45.0, PyPI 0.45.0","dependencies":[{"issue_id":"bd-wisp-gnr","depends_on_id":"bd-wisp-u9o","type":"blocks","created_at":"2026-01-06T20:07:32.282733-08:00","created_by":"beads/crew/dave"}]}
{"id":"bd-wisp-h3l","title":"mol-refinery-patrol","description":"Merge queue processor patrol loop.\n\nThe Refinery is the Engineer in the engine room. You process polecat branches, merging them to main one at a time with sequential rebasing.\n\n**The Scotty Test**: Before proceeding past any failure, ask yourself: \"Would Scotty walk past a warp core leak because it existed before his shift?\"\n\n## Merge Flow\n\nThe Refinery receives MERGE_READY mail from Witnesses when polecats complete work:\n\n```\nWitness Refinery Git\n │ │ │\n │ MERGE_READY │ │\n │─────────────────────────\u003e│ │\n │ │ │\n │ (verify branch) │\n │ │ fetch \u0026 rebase │\n │ │──────────────────────────\u003e│\n │ │ │\n │ (run tests) │\n │ │ │\n │ (if pass) │\n │ │ merge \u0026 push │\n │ │──────────────────────────\u003e│\n │ │ │\n │ MERGED │ │\n │\u003c─────────────────────────│ │\n │ │ │\n```\n\nAfter successful merge, Refinery sends MERGED mail back to Witness so it can\ncomplete cleanup (nuke the polecat worktree).","status":"open","priority":2,"issue_type":"epic","created_at":"2026-01-12T01:56:52.397502-08:00","updated_at":"2026-01-12T01:56:52.397502-08:00","ephemeral":true}
{"id":"bd-wisp-i7d","title":"Check own context limit","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Write handoff summary\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue processing","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T01:27:11.197674-08:00","updated_at":"2026-01-12T01:28:22.969704-08:00","closed_at":"2026-01-12T01:28:22.969704-08:00","close_reason":"Closed","dependencies":[{"issue_id":"bd-wisp-i7d","depends_on_id":"bd-wisp-pyf","type":"blocks","created_at":"2026-01-12T01:27:11.2348-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wisp-i97","title":"mol-refinery-patrol","description":"Merge queue processor patrol loop.\n\nThe Refinery is the Engineer in the engine room. You process polecat branches, merging them to main one at a time with sequential rebasing.\n\n**The Scotty Test**: Before proceeding past any failure, ask yourself: \"Would Scotty walk past a warp core leak because it existed before his shift?\"\n\n## Merge Flow\n\nThe Refinery receives MERGE_READY mail from Witnesses when polecats complete work:\n\n```\nWitness Refinery Git\n │ │ │\n │ MERGE_READY │ │\n │─────────────────────────\u003e│ │\n │ │ │\n │ (verify branch) │\n │ │ fetch \u0026 rebase │\n │ │──────────────────────────\u003e│\n │ │ │\n │ (run tests) │\n │ │ │\n │ (if pass) │\n │ │ merge \u0026 push │\n │ │──────────────────────────\u003e│\n │ │ │\n │ MERGED │ │\n │\u003c─────────────────────────│ │\n │ │ │\n```\n\nAfter successful merge, Refinery sends MERGED mail back to Witness so it can\ncomplete cleanup (nuke the polecat worktree).","status":"closed","priority":2,"issue_type":"epic","assignee":"beads/refinery","created_at":"2026-01-11T18:41:41.403781-08:00","updated_at":"2026-01-11T18:48:24.943006-08:00","closed_at":"2026-01-11T18:48:24.943006-08:00","close_reason":"Patrol cycle: queue empty, no branches to merge, local main synced to 764f3747","ephemeral":true}
{"id":"bd-wisp-mjq","title":"Handle test failures","description":"**VERIFICATION GATE**: This step enforces the Beads Promise.\n\nIf tests PASSED: This step auto-completes. Proceed to merge.\n\nIf tests FAILED:\n1. Diagnose: Is this a branch regression or pre-existing on main?\n2. If branch caused it:\n - Abort merge\n - Notify polecat: \"Tests failing. Please fix and resubmit.\"\n - Skip to loop-check\n3. If pre-existing on main:\n - Option A: Fix it yourself (you're the Engineer!)\n - Option B: File a bead: bd create --type=bug --priority=1 --title=\"...\"\n\n**GATE REQUIREMENT**: You CANNOT proceed to merge-push without:\n- Tests passing, OR\n- Fix committed, OR\n- Bead filed for the failure\n\nThis is non-negotiable. Never disavow. Never \"note and proceed.\" ","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T01:27:11.196466-08:00","updated_at":"2026-01-12T01:27:49.440026-08:00","closed_at":"2026-01-12T01:27:49.440026-08:00","close_reason":"Closed","dependencies":[{"issue_id":"bd-wisp-mjq","depends_on_id":"bd-wisp-ce6","type":"blocks","created_at":"2026-01-12T01:27:11.224814-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wisp-mld","title":"Merge and push to main","description":"Merge to main and push. CRITICAL: Notifications come IMMEDIATELY after push.\n\n**Step 1: Merge and Push**\n```bash\ngit checkout main\ngit merge --ff-only temp\ngit push origin main\n```\n\n⚠ **STOP HERE - DO NOT PROCEED UNTIL STEPS 2-3 COMPLETE**\n\n**Step 2: Send MERGED Notification (REQUIRED - DO THIS IMMEDIATELY)**\n\nRIGHT NOW, before any cleanup, send MERGED mail to Witness:\n\n```bash\ngt mail send \u003crig\u003e/witness -s \"MERGED \u003cpolecat-name\u003e\" -m \"Branch: \u003cbranch\u003e\nIssue: \u003cissue-id\u003e\nMerged-At: $(date -u +%Y-%m-%dT%H:%M:%SZ)\"\n```\n\nThis signals the Witness to nuke the polecat worktree. WITHOUT THIS NOTIFICATION,\nPOLECAT WORKTREES ACCUMULATE INDEFINITELY AND THE LIFECYCLE BREAKS.\n\n**Step 3: Close MR Bead (REQUIRED - DO THIS IMMEDIATELY)**\n\n⚠ **VERIFICATION BEFORE CLOSING**: Confirm the work is actually on main:\n```bash\n# Get the commit message/issue from the branch\ngit log origin/main --oneline | grep \"\u003cissue-id\u003e\"\n# OR verify the commit SHA is on main:\ngit branch --contains \u003ccommit-sha\u003e | grep main\n```\n\nIf work is NOT on main, DO NOT close the MR bead. Investigate first.\n\n```bash\nbd close \u003cmr-bead-id\u003e --reason \"Merged to main at $(git rev-parse --short HEAD)\"\n```\n\nThe MR bead ID was in the MERGE_READY message or find via:\n```bash\nbd list --type=merge-request --status=open | grep \u003cpolecat-name\u003e\n```\n\n**VALIDATION**: The MR bead's source_issue should be a valid bead ID (gt-xxxxx),\nnot a branch name. If source_issue contains a branch name, flag for investigation.\n\n**Step 4: Archive the MERGE_READY mail (REQUIRED)**\n```bash\ngt mail archive \u003cmerge-ready-message-id\u003e\n```\nThe message ID was tracked when you processed inbox-check.\n\n**Step 5: Cleanup (only after Steps 2-4 confirmed)**\n```bash\ngit branch -d temp\ngit push origin --delete \u003cpolecat-branch\u003e\n```\n\n**VERIFICATION GATE**: You CANNOT proceed to loop-check without:\n- [x] MERGED mail sent to witness\n- [x] MR bead closed\n- [x] MERGE_READY mail archived\n\nIf you skipped notifications or archiving, GO BACK AND DO THEM NOW.\n\nMain has moved. Any remaining branches need rebasing on new baseline.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T01:27:11.196764-08:00","updated_at":"2026-01-12T01:27:49.55647-08:00","closed_at":"2026-01-12T01:27:49.55647-08:00","close_reason":"Closed","dependencies":[{"issue_id":"bd-wisp-mld","depends_on_id":"bd-wisp-mjq","type":"blocks","created_at":"2026-01-12T01:27:11.227232-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wisp-o09","title":"Run test suite","description":"Run the test suite.\n\n```bash\ngo test ./...\n```\n\nTrack results: pass count, fail count, specific failures.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T02:44:24.391037-08:00","updated_at":"2026-01-12T02:45:27.389982-08:00","closed_at":"2026-01-12T02:45:27.389982-08:00","close_reason":"Queue empty - no tests to run","dependencies":[{"issue_id":"bd-wisp-o09","depends_on_id":"bd-wisp-ec4","type":"parent-child","created_at":"2026-01-12T02:44:24.39682-08:00","created_by":"beads/refinery"},{"issue_id":"bd-wisp-o09","depends_on_id":"bd-wisp-8ru","type":"blocks","created_at":"2026-01-12T02:44:24.406031-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wisp-pyf","title":"Generate handoff summary","description":"Summarize this patrol cycle.\n\n**VERIFICATION**: Before generating summary, confirm for each merged branch:\n- [ ] MERGED mail was sent to witness\n- [ ] MR bead was closed\n- [ ] MERGE_READY mail archived\n\nIf any notifications or archiving were missed, do them now!\n\nInclude in summary:\n- Branches merged (count, names)\n- MERGED mails sent (count - should match branches merged)\n- MR beads closed (count - should match branches merged)\n- MERGE_READY mails archived (count - should match branches merged)\n- Test results (pass/fail)\n- Branches with conflicts (count, names)\n- Conflict-resolution tasks created (IDs)\n- Issues filed (if any)\n- Any escalations sent\n\n**Conflict tracking is important** for monitoring MQ health. If many branches\nconflict, it may indicate main is moving too fast or branches are too stale.\n\nThis becomes the digest when the patrol is squashed.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T01:27:11.197367-08:00","updated_at":"2026-01-12T01:28:17.663658-08:00","closed_at":"2026-01-12T01:28:17.663658-08:00","close_reason":"Closed","dependencies":[{"issue_id":"bd-wisp-pyf","depends_on_id":"bd-wisp-gby","type":"blocks","created_at":"2026-01-12T01:27:11.232206-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wisp-q7n","title":"Check refinery mail","description":"Check mail for MERGE_READY submissions, escalations, and messages.\n\n```bash\ngt mail inbox\n```\n\nFor each message:\n\n**MERGE_READY**:\nA polecat's work is ready for merge. Extract details and track for processing.\n\n```bash\n# Parse MERGE_READY message body:\n# Branch: \u003cbranch\u003e\n# Issue: \u003cissue-id\u003e\n# Polecat: \u003cpolecat-name\u003e\n# MR: \u003cmr-bead-id\u003e\n# Verified: clean git state, issue closed\n\n# Track in your merge queue for this patrol cycle:\n# - Branch name\n# - Issue ID\n# - Polecat name (REQUIRED for MERGED notification)\n# - MR bead ID (REQUIRED for closing after merge)\n```\n\n**IMPORTANT**: You MUST track the polecat name, MR bead ID, AND message ID - you will need them\nin merge-push step to send MERGED notification, close the MR bead, and archive the mail.\n\nMark as read. The work will be processed in queue-scan/process-branch.\n**Do NOT archive yet** - archive after merge/reject decision in merge-push step.\n\n**PATROL: Wake up**:\nWitness detected MRs waiting but refinery idle. Acknowledge and archive:\n```bash\ngt mail archive \u003cmessage-id\u003e\n```\n\n**HELP / Blocked**:\nAssess and respond. If you can't help, escalate to Mayor.\nArchive after handling:\n```bash\ngt mail archive \u003cmessage-id\u003e\n```\n\n**HANDOFF**:\nRead predecessor context. Check for in-flight merges.\nArchive after absorbing context:\n```bash\ngt mail archive \u003cmessage-id\u003e\n```\n\n**Hygiene principle**: Archive messages after they're fully processed.\nKeep only: pending MRs in queue. Inbox should be near-empty.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T01:27:11.195173-08:00","updated_at":"2026-01-12T01:27:25.54453-08:00","closed_at":"2026-01-12T01:27:25.54453-08:00","close_reason":"Closed","ephemeral":true}
{"id":"bd-wisp-qx6","title":"End-of-cycle inbox hygiene","description":"Verify inbox hygiene before ending patrol cycle.\n\n**Step 1: Check inbox state**\n```bash\ngt mail inbox\n```\n\nInbox should contain ONLY:\n- Unprocessed MERGE_READY messages (will process next cycle)\n- Active work items\n\n**Step 2: Archive any stale messages**\n\nLook for messages that were processed but not archived:\n- PATROL: Wake up that was acknowledged → archive\n- HELP/Blocked that was handled → archive\n- MERGE_READY where merge completed but archive was missed → archive\n\n```bash\n# For each stale message found:\ngt mail archive \u003cmessage-id\u003e\n```\n\n**Step 3: Check for orphaned MR beads**\n\nLook for open MR beads with no corresponding branch:\n```bash\nbd list --type=merge-request --status=open\n```\n\nFor each open MR bead:\n1. Check if branch exists: `git ls-remote origin refs/heads/\u003cbranch\u003e`\n2. If branch gone, verify work is on main: `git log origin/main --oneline | grep \"\u003csource_issue\u003e\"`\n3. If work on main → close MR with reason \"Merged (verified on main)\"\n4. If work NOT on main → investigate before closing:\n - Check source_issue validity (should be gt-xxxxx, not branch name)\n - Search reflog/dangling commits if possible\n - If unverifiable, close with reason \"Unverifiable - no audit trail\"\n - File bead if this indicates lost work\n\n**NEVER close an MR bead without verifying the work landed or is unrecoverable.**\n\n**Goal**: Inbox should have ≤3 active messages at end of cycle.\nKeep only: pending MRs in queue.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T00:34:44.781078-08:00","updated_at":"2026-01-12T00:35:31.731741-08:00","closed_at":"2026-01-12T00:35:31.731741-08:00","close_reason":"No mail to process","dependencies":[{"issue_id":"bd-wisp-qx6","depends_on_id":"bd-wisp-gco","type":"blocks","created_at":"2026-01-12T00:34:44.822838-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wisp-s9j","title":"Mechanical rebase","description":"Pick next branch from queue. Attempt mechanical rebase on current main.\n\n**Step 1: Checkout and attempt rebase**\n```bash\ngit checkout -b temp origin/\u003cpolecat-branch\u003e\ngit rebase origin/main\n```\n\n**Step 2: Check rebase result**\n\nThe rebase exits with:\n- Exit code 0: Success - proceed to run-tests\n- Exit code 1 (conflicts): Conflict detected - proceed to Step 3\n\nTo detect conflict state after rebase fails:\n```bash\n# Check if we're in a conflicted rebase state\nls .git/rebase-merge 2\u003e/dev/null \u0026\u0026 echo \"CONFLICT_STATE\"\n```\n\n**Step 3: Handle conflicts (if any)**\n\nIf rebase SUCCEEDED (exit code 0):\n- Skip to run-tests step (continue normal merge flow)\n\nIf rebase FAILED with conflicts:\n\n1. **Abort the rebase** (DO NOT leave repo in conflicted state):\n```bash\ngit rebase --abort\n```\n\n2. **Record conflict metadata**:\n```bash\n# Capture main SHA for reference\nMAIN_SHA=$(git rev-parse origin/main)\nBRANCH_SHA=$(git rev-parse origin/\u003cpolecat-branch\u003e)\n```\n\n3. **Create conflict-resolution task**:\n```bash\nbd create --type=task --priority=1 --title=\"Resolve merge conflicts: \u003coriginal-issue-title\u003e\" --description=\"## Conflict Resolution Required\n\nOriginal MR: \u003cmr-bead-id\u003e\nBranch: \u003cpolecat-branch\u003e\nOriginal Issue: \u003cissue-id\u003e\nConflict with main at: ${MAIN_SHA}\nBranch SHA: ${BRANCH_SHA}\n\n## Instructions\n1. Clone/checkout the branch\n2. Rebase on current main: git rebase origin/main\n3. Resolve conflicts\n4. Force push: git push -f origin \u003cbranch\u003e\n5. Close this task when done\n\nThe MR will be re-queued for processing after conflicts are resolved.\"\n```\n\n4. **Skip this MR** (do NOT delete branch or close MR bead):\n- Leave branch intact for conflict resolution\n- Leave MR bead open (will be re-processed after resolution)\n- Continue to loop-check for next branch\n\n**CRITICAL**: Never delete a branch that has conflicts. The branch contains\nthe original work and must be preserved for conflict resolution.\n\nTrack: rebase result (success/conflict), conflict task ID if created.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T00:34:44.7789-08:00","updated_at":"2026-01-12T00:35:15.077005-08:00","closed_at":"2026-01-12T00:35:15.077005-08:00","close_reason":"Skipped - no branches in queue","dependencies":[{"issue_id":"bd-wisp-s9j","depends_on_id":"bd-wisp-vqe","type":"blocks","created_at":"2026-01-12T00:34:44.804577-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wisp-t6l","title":"Merge and push to main","description":"Merge to main and push. CRITICAL: Notifications come IMMEDIATELY after push.\n\n**Step 1: Merge and Push**\n```bash\ngit checkout main\ngit merge --ff-only temp\ngit push origin main\n```\n\n⚠ **STOP HERE - DO NOT PROCEED UNTIL STEPS 2-3 COMPLETE**\n\n**Step 2: Send MERGED Notification (REQUIRED - DO THIS IMMEDIATELY)**\n\nRIGHT NOW, before any cleanup, send MERGED mail to Witness:\n\n```bash\ngt mail send \u003crig\u003e/witness -s \"MERGED \u003cpolecat-name\u003e\" -m \"Branch: \u003cbranch\u003e\nIssue: \u003cissue-id\u003e\nMerged-At: $(date -u +%Y-%m-%dT%H:%M:%SZ)\"\n```\n\nThis signals the Witness to nuke the polecat worktree. WITHOUT THIS NOTIFICATION,\nPOLECAT WORKTREES ACCUMULATE INDEFINITELY AND THE LIFECYCLE BREAKS.\n\n**Step 3: Close MR Bead (REQUIRED - DO THIS IMMEDIATELY)**\n\n⚠ **VERIFICATION BEFORE CLOSING**: Confirm the work is actually on main:\n```bash\n# Get the commit message/issue from the branch\ngit log origin/main --oneline | grep \"\u003cissue-id\u003e\"\n# OR verify the commit SHA is on main:\ngit branch --contains \u003ccommit-sha\u003e | grep main\n```\n\nIf work is NOT on main, DO NOT close the MR bead. Investigate first.\n\n```bash\nbd close \u003cmr-bead-id\u003e --reason \"Merged to main at $(git rev-parse --short HEAD)\"\n```\n\nThe MR bead ID was in the MERGE_READY message or find via:\n```bash\nbd list --type=merge-request --status=open | grep \u003cpolecat-name\u003e\n```\n\n**VALIDATION**: The MR bead's source_issue should be a valid bead ID (gt-xxxxx),\nnot a branch name. If source_issue contains a branch name, flag for investigation.\n\n**Step 4: Archive the MERGE_READY mail (REQUIRED)**\n```bash\ngt mail archive \u003cmerge-ready-message-id\u003e\n```\nThe message ID was tracked when you processed inbox-check.\n\n**Step 5: Cleanup (only after Steps 2-4 confirmed)**\n```bash\ngit branch -d temp\ngit push origin --delete \u003cpolecat-branch\u003e\n```\n\n**VERIFICATION GATE**: You CANNOT proceed to loop-check without:\n- [x] MERGED mail sent to witness\n- [x] MR bead closed\n- [x] MERGE_READY mail archived\n\nIf you skipped notifications or archiving, GO BACK AND DO THEM NOW.\n\nMain has moved. Any remaining branches need rebasing on new baseline.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T02:44:24.391672-08:00","updated_at":"2026-01-12T02:45:29.154508-08:00","closed_at":"2026-01-12T02:45:29.154508-08:00","close_reason":"Queue empty - nothing to merge","dependencies":[{"issue_id":"bd-wisp-t6l","depends_on_id":"bd-wisp-ec4","type":"parent-child","created_at":"2026-01-12T02:44:24.398611-08:00","created_by":"beads/refinery"},{"issue_id":"bd-wisp-t6l","depends_on_id":"bd-wisp-4td","type":"blocks","created_at":"2026-01-12T02:44:24.408506-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wisp-tkf","title":"Handle test failures","description":"**VERIFICATION GATE**: This step enforces the Beads Promise.\n\nIf tests PASSED: This step auto-completes. Proceed to merge.\n\nIf tests FAILED:\n1. Diagnose: Is this a branch regression or pre-existing on main?\n2. If branch caused it:\n - Abort merge\n - Notify polecat: \"Tests failing. Please fix and resubmit.\"\n - Skip to loop-check\n3. If pre-existing on main:\n - Option A: Fix it yourself (you're the Engineer!)\n - Option B: File a bead: bd create --type=bug --priority=1 --title=\"...\"\n\n**GATE REQUIREMENT**: You CANNOT proceed to merge-push without:\n- Tests passing, OR\n- Fix committed, OR\n- Bead filed for the failure\n\nThis is non-negotiable. Never disavow. Never \"note and proceed.\" ","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T00:34:44.779587-08:00","updated_at":"2026-01-12T00:35:16.670629-08:00","closed_at":"2026-01-12T00:35:16.670629-08:00","close_reason":"Skipped - no branches in queue","dependencies":[{"issue_id":"bd-wisp-tkf","depends_on_id":"bd-wisp-8ke","type":"blocks","created_at":"2026-01-12T00:34:44.809281-08:00","created_by":"beads/refinery"}],"ephemeral":true}
@@ -2256,7 +2253,7 @@
{"id":"bd-wisp-w75","title":"Preflight: Check git status","description":"Ensure working tree is clean before starting release.\n\n```bash\ngit status\n```\n\nIf there are uncommitted changes, either:\n- Commit them first\n- Stash them: `git stash`\n- Abort and resolve\n","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-06T20:07:32.256152-08:00","updated_at":"2026-01-06T20:08:35.66615-08:00","closed_at":"2026-01-06T20:08:35.66615-08:00","close_reason":"Preflight checks passed"}
{"id":"bd-wisp-xuq","title":"Scan merge queue","description":"Check the beads merge queue - this is the SOURCE OF TRUTH for pending merges.\n\n```bash\ngit fetch --prune origin\ngt mq list \u003crig\u003e\n```\n\nThe beads MQ tracks all pending merge requests. Do NOT rely on `git branch -r | grep polecat`\nas branches may exist without MR beads, or MR beads may exist for already-merged work.\n\nIf queue empty, skip to context-check step.\n\nFor each MR in the queue, verify the branch still exists:\n```bash\ngit branch -r | grep \u003cbranch\u003e\n```\n\nIf branch doesn't exist for a queued MR:\n- Close the MR bead: `bd close \u003cmr-id\u003e --reason \"Branch no longer exists\"`\n- Remove from processing queue\n\nTrack verified MR list for this cycle.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T02:44:24.390366-08:00","updated_at":"2026-01-12T02:45:17.448649-08:00","closed_at":"2026-01-12T02:45:17.448649-08:00","close_reason":"Closed","dependencies":[{"issue_id":"bd-wisp-xuq","depends_on_id":"bd-wisp-ec4","type":"parent-child","created_at":"2026-01-12T02:44:24.394937-08:00","created_by":"beads/refinery"},{"issue_id":"bd-wisp-xuq","depends_on_id":"bd-wisp-c0y","type":"blocks","created_at":"2026-01-12T02:44:24.403964-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wisp-xwx","title":"mol-refinery-patrol","description":"Merge queue processor patrol loop.\n\nThe Refinery is the Engineer in the engine room. You process polecat branches, merging them to main one at a time with sequential rebasing.\n\n**The Scotty Test**: Before proceeding past any failure, ask yourself: \"Would Scotty walk past a warp core leak because it existed before his shift?\"\n\n## Merge Flow\n\nThe Refinery receives MERGE_READY mail from Witnesses when polecats complete work:\n\n```\nWitness Refinery Git\n │ │ │\n │ MERGE_READY │ │\n │─────────────────────────\u003e│ │\n │ │ │\n │ (verify branch) │\n │ │ fetch \u0026 rebase │\n │ │──────────────────────────\u003e│\n │ │ │\n │ (run tests) │\n │ │ │\n │ (if pass) │\n │ │ merge \u0026 push │\n │ │──────────────────────────\u003e│\n │ │ │\n │ MERGED │ │\n │\u003c─────────────────────────│ │\n │ │ │\n```\n\nAfter successful merge, Refinery sends MERGED mail back to Witness so it can\ncomplete cleanup (nuke the polecat worktree).","status":"closed","priority":2,"issue_type":"epic","assignee":"beads/refinery","created_at":"2026-01-10T18:23:27.131593-08:00","updated_at":"2026-01-10T18:29:19.904299-08:00","closed_at":"2026-01-10T18:29:19.904299-08:00","close_reason":"Patrol complete: queue empty, no branches to merge","ephemeral":true}
{"id":"bd-wisp-yrg","title":"Check own context limit","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Write handoff summary\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue processing","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-12T02:44:24.392592-08:00","updated_at":"2026-01-12T02:44:24.392592-08:00","dependencies":[{"issue_id":"bd-wisp-yrg","depends_on_id":"bd-wisp-ec4","type":"parent-child","created_at":"2026-01-12T02:44:24.401271-08:00","created_by":"beads/refinery"},{"issue_id":"bd-wisp-yrg","depends_on_id":"bd-wisp-2f0","type":"blocks","created_at":"2026-01-12T02:44:24.413133-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wisp-yrg","title":"Check own context limit","description":"Check own context usage.\n\nIf context is HIGH (\u003e80%):\n- Write handoff summary\n- Prepare for burn/respawn\n\nIf context is LOW:\n- Can continue processing","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T02:44:24.392592-08:00","updated_at":"2026-01-12T02:45:43.305339-08:00","closed_at":"2026-01-12T02:45:43.305339-08:00","close_reason":"Context low - early in session","dependencies":[{"issue_id":"bd-wisp-yrg","depends_on_id":"bd-wisp-ec4","type":"parent-child","created_at":"2026-01-12T02:44:24.401271-08:00","created_by":"beads/refinery"},{"issue_id":"bd-wisp-yrg","depends_on_id":"bd-wisp-2f0","type":"blocks","created_at":"2026-01-12T02:44:24.413133-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wisp-z85","title":"Preflight: Pull latest","description":"Ensure we're up to date with origin.\n\n```bash\ngit pull --rebase\n```\n\nResolve any conflicts before proceeding.\n","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-06T20:07:32.25637-08:00","updated_at":"2026-01-06T20:08:35.668191-08:00","closed_at":"2026-01-06T20:08:35.668191-08:00","close_reason":"Preflight checks passed","dependencies":[{"issue_id":"bd-wisp-z85","depends_on_id":"bd-wisp-w75","type":"blocks","created_at":"2026-01-06T20:07:32.272193-08:00","created_by":"beads/crew/dave"}]}
{"id":"bd-wisp-ztj","title":"Generate handoff summary","description":"Summarize this patrol cycle.\n\n**VERIFICATION**: Before generating summary, confirm for each merged branch:\n- [ ] MERGED mail was sent to witness\n- [ ] MR bead was closed\n- [ ] MERGE_READY mail archived\n\nIf any notifications or archiving were missed, do them now!\n\nInclude in summary:\n- Branches merged (count, names)\n- MERGED mails sent (count - should match branches merged)\n- MR beads closed (count - should match branches merged)\n- MERGE_READY mails archived (count - should match branches merged)\n- Test results (pass/fail)\n- Branches with conflicts (count, names)\n- Conflict-resolution tasks created (IDs)\n- Issues filed (if any)\n- Any escalations sent\n\n**Conflict tracking is important** for monitoring MQ health. If many branches\nconflict, it may indicate main is moving too fast or branches are too stale.\n\nThis becomes the digest when the patrol is squashed.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T00:34:44.780484-08:00","updated_at":"2026-01-12T00:35:24.735684-08:00","closed_at":"2026-01-12T00:35:24.735684-08:00","close_reason":"Summary: Queue empty, no branches processed this cycle","dependencies":[{"issue_id":"bd-wisp-ztj","depends_on_id":"bd-wisp-bmc","type":"blocks","created_at":"2026-01-12T00:34:44.816888-08:00","created_by":"beads/refinery"}],"ephemeral":true}
{"id":"bd-wlzsd","title":"Merge: obsidian-mk99kht7","description":"branch: polecat/obsidian-mk99kht7\ntarget: main\nsource_issue: obsidian-mk99kht7\nrig: beads\nagent_bead: bd-beads-polecat-obsidian\nretry_count: 0\nlast_conflict_sha: null\nconflict_task_id: null","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T21:03:34.490385-08:00","created_by":"beads/polecats/obsidian","updated_at":"2026-01-10T21:53:11.57128-08:00","closed_at":"2026-01-10T21:53:11.57128-08:00","close_reason":"Branch no longer exists on remote","labels":["gt:merge-request"]}