bd sync: 2026-01-11 15:34:25

This commit is contained in:
dan 2026-01-11 15:34:25 -08:00
parent 61cce7e380
commit fb6da27e96

View file

@ -113,7 +113,7 @@
{"id":"skills-den","title":"Design: Negative permission pattern","description":"Permission escalation via exclusion, not approval.\n\n## Pattern (from GPT brainstorm)\nInstead of asking 'can I do X?', agent asks:\n'Which of these should I NOT do?'\n [ ] Delete migrations\n [ ] Modify auth code\n [x] Add new endpoint (safe)\n\nHuman clicks exclusions → fast.\n\n## Implementation\n- worker permit X - answers permission request\n- Worker writes permission request to .worker-state/X.json\n- Orchestrator/human sees it via worker status\n- Human responds with exclusions\n- Worker continues with constraints\n\n## Benefits\n- Faster than line-by-line approval\n- Human sets constraints, not line edits\n- Trains agents to propose options","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T12:14:33.33605382-08:00","created_by":"dan","updated_at":"2026-01-10T13:24:21.065162159-08:00","closed_at":"2026-01-10T13:24:21.065162159-08:00","close_reason":"Deprioritized - not loving this pattern","dependencies":[{"issue_id":"skills-den","depends_on_id":"skills-s6y","type":"blocks","created_at":"2026-01-10T12:15:10.05892805-08:00","created_by":"dan"}]} {"id":"skills-den","title":"Design: Negative permission pattern","description":"Permission escalation via exclusion, not approval.\n\n## Pattern (from GPT brainstorm)\nInstead of asking 'can I do X?', agent asks:\n'Which of these should I NOT do?'\n [ ] Delete migrations\n [ ] Modify auth code\n [x] Add new endpoint (safe)\n\nHuman clicks exclusions → fast.\n\n## Implementation\n- worker permit X - answers permission request\n- Worker writes permission request to .worker-state/X.json\n- Orchestrator/human sees it via worker status\n- Human responds with exclusions\n- Worker continues with constraints\n\n## Benefits\n- Faster than line-by-line approval\n- Human sets constraints, not line edits\n- Trains agents to propose options","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T12:14:33.33605382-08:00","created_by":"dan","updated_at":"2026-01-10T13:24:21.065162159-08:00","closed_at":"2026-01-10T13:24:21.065162159-08:00","close_reason":"Deprioritized - not loving this pattern","dependencies":[{"issue_id":"skills-den","depends_on_id":"skills-s6y","type":"blocks","created_at":"2026-01-10T12:15:10.05892805-08:00","created_by":"dan"}]}
{"id":"skills-dnm","title":"Refactor deploy-skill.sh: dedupe injection calls","description":"File: bin/deploy-skill.sh (lines 112-189)\n\nIssues:\n- Three nearly-identical inject_nix_config() calls\n- Only difference is config block content and target file\n- Repeated pattern bloats file\n\nFix:\n- Parameterize inject_nix_config() better\n- Or create config-specific injection functions\n- Reduce duplication\n\nSeverity: MEDIUM","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-24T02:51:01.855452762-05:00","updated_at":"2026-01-03T12:02:48.140656044-08:00","closed_at":"2026-01-03T12:02:48.140656044-08:00","close_reason":"Refactored injection logic using inject_home_file helper, deduping Claude, OpenCode and Antigravity blocks."} {"id":"skills-dnm","title":"Refactor deploy-skill.sh: dedupe injection calls","description":"File: bin/deploy-skill.sh (lines 112-189)\n\nIssues:\n- Three nearly-identical inject_nix_config() calls\n- Only difference is config block content and target file\n- Repeated pattern bloats file\n\nFix:\n- Parameterize inject_nix_config() better\n- Or create config-specific injection functions\n- Reduce duplication\n\nSeverity: MEDIUM","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-24T02:51:01.855452762-05:00","updated_at":"2026-01-03T12:02:48.140656044-08:00","closed_at":"2026-01-03T12:02:48.140656044-08:00","close_reason":"Refactored injection logic using inject_home_file helper, deduping Claude, OpenCode and Antigravity blocks."}
{"id":"skills-dpw","title":"orch: add command to show available/configured models","description":"## Problem\n\nWhen trying to use orch, you have to trial-and-error through models to find which ones have API keys configured. Each failure looks like:\n\n```\nError: GEMINI_API_KEY not set. Required for Google Gemini models.\n```\n\nNo way to know upfront which models are usable.\n\n## Proposed Solution\n\nAdd `orch models` or `orch status` command:\n\n```bash\n$ orch models\nAvailable models:\n ✓ flash (GEMINI_API_KEY set)\n ✓ gemini (GEMINI_API_KEY set)\n ✗ deepseek (OPENROUTER_KEY not set)\n ✗ qwen (OPENROUTER_KEY not set)\n ✓ gpt (OPENAI_API_KEY set)\n```\n\nOr at minimum, on failure suggest alternatives:\n```\nError: GEMINI_API_KEY not set. Try --model gpt or --model deepseek instead.\n```\n\n## Context\n\nHit this while trying to brainstorm with high-temp gemini - had to try 4 models before realizing none were configured in this environment.","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-04T14:10:07.069103175-08:00","updated_at":"2025-12-04T14:11:05.49122538-08:00","closed_at":"2025-12-04T14:11:05.49122538-08:00"} {"id":"skills-dpw","title":"orch: add command to show available/configured models","description":"## Problem\n\nWhen trying to use orch, you have to trial-and-error through models to find which ones have API keys configured. Each failure looks like:\n\n```\nError: GEMINI_API_KEY not set. Required for Google Gemini models.\n```\n\nNo way to know upfront which models are usable.\n\n## Proposed Solution\n\nAdd `orch models` or `orch status` command:\n\n```bash\n$ orch models\nAvailable models:\n ✓ flash (GEMINI_API_KEY set)\n ✓ gemini (GEMINI_API_KEY set)\n ✗ deepseek (OPENROUTER_KEY not set)\n ✗ qwen (OPENROUTER_KEY not set)\n ✓ gpt (OPENAI_API_KEY set)\n```\n\nOr at minimum, on failure suggest alternatives:\n```\nError: GEMINI_API_KEY not set. Try --model gpt or --model deepseek instead.\n```\n\n## Context\n\nHit this while trying to brainstorm with high-temp gemini - had to try 4 models before realizing none were configured in this environment.","status":"closed","priority":3,"issue_type":"feature","created_at":"2025-12-04T14:10:07.069103175-08:00","updated_at":"2025-12-04T14:11:05.49122538-08:00","closed_at":"2025-12-04T14:11:05.49122538-08:00"}
{"id":"skills-dszn","title":"Extract loadContextFromPath helper in context.nim","description":"[REDUNDANCY] LOW context.nim:21-23,31-33 - Same read+parse pattern repeated. Extract: proc loadContextFromPath(path: string): WorkerContext","status":"open","priority":3,"issue_type":"task","created_at":"2026-01-10T20:10:03.6228906-08:00","created_by":"dan","updated_at":"2026-01-10T20:10:03.6228906-08:00"} {"id":"skills-dszn","title":"Extract loadContextFromPath helper in context.nim","description":"[REDUNDANCY] LOW context.nim:21-23,31-33 - Same read+parse pattern repeated. Extract: proc loadContextFromPath(path: string): WorkerContext","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-10T20:10:03.6228906-08:00","created_by":"dan","updated_at":"2026-01-11T15:34:20.571875891-08:00","closed_at":"2026-01-11T15:34:20.571875891-08:00","close_reason":"Closed"}
{"id":"skills-dtk","title":"Consolidate isStale() and staleLevel() logic","description":"[SMELL] MED state.nim:214-223,225-241 - Both compute heartbeat age with overlapping checks. Have isStale() call staleLevel() \\!= 'ok', or extract shared ageStatus() helper.","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-10T19:49:51.730374503-08:00","created_by":"dan","updated_at":"2026-01-10T19:49:51.730374503-08:00"} {"id":"skills-dtk","title":"Consolidate isStale() and staleLevel() logic","description":"[SMELL] MED state.nim:214-223,225-241 - Both compute heartbeat age with overlapping checks. Have isStale() call staleLevel() \\!= 'ok', or extract shared ageStatus() helper.","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-10T19:49:51.730374503-08:00","created_by":"dan","updated_at":"2026-01-10T19:49:51.730374503-08:00"}
{"id":"skills-e8h","title":"Investigate waybar + niri integration improvements","description":"Look into waybar configuration and niri compositor integration.\n\nPotential areas:\n- Waybar modules for niri workspaces\n- Status indicators\n- Integration with existing niri-window-capture skill\n- Custom scripts in pkgs/waybar-scripts\n\nRelated: dotfiles has home/waybar.nix (196 lines) and pkgs/waybar-scripts/","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T20:11:23.115445797-05:00","created_by":"dan","updated_at":"2025-12-28T20:37:16.465731945-05:00","closed_at":"2025-12-28T20:37:16.465731945-05:00","close_reason":"Moved to dotfiles repo - waybar config lives there"} {"id":"skills-e8h","title":"Investigate waybar + niri integration improvements","description":"Look into waybar configuration and niri compositor integration.\n\nPotential areas:\n- Waybar modules for niri workspaces\n- Status indicators\n- Integration with existing niri-window-capture skill\n- Custom scripts in pkgs/waybar-scripts\n\nRelated: dotfiles has home/waybar.nix (196 lines) and pkgs/waybar-scripts/","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-28T20:11:23.115445797-05:00","created_by":"dan","updated_at":"2025-12-28T20:37:16.465731945-05:00","closed_at":"2025-12-28T20:37:16.465731945-05:00","close_reason":"Moved to dotfiles repo - waybar config lives there"}
{"id":"skills-e96","title":"skill: semantic-grep using LSP","description":"Use workspace/symbol, documentSymbol, and references instead of ripgrep.\n\nExample: 'Find all places where we handle User objects but only where we modify the email field directly'\n- LSP references finds all User usages\n- Filter by AST analysis for .email assignments\n- Return hit list for bead or further processing\n\nBetter than regex for Go interfaces, Rust traits, TS types.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-24T02:29:57.119983837-05:00","updated_at":"2025-12-24T02:29:57.119983837-05:00","dependencies":[{"issue_id":"skills-e96","depends_on_id":"skills-gga","type":"blocks","created_at":"2025-12-24T02:30:06.632906383-05:00","created_by":"daemon"}]} {"id":"skills-e96","title":"skill: semantic-grep using LSP","description":"Use workspace/symbol, documentSymbol, and references instead of ripgrep.\n\nExample: 'Find all places where we handle User objects but only where we modify the email field directly'\n- LSP references finds all User usages\n- Filter by AST analysis for .email assignments\n- Return hit list for bead or further processing\n\nBetter than regex for Go interfaces, Rust traits, TS types.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-24T02:29:57.119983837-05:00","updated_at":"2025-12-24T02:29:57.119983837-05:00","dependencies":[{"issue_id":"skills-e96","depends_on_id":"skills-gga","type":"blocks","created_at":"2025-12-24T02:30:06.632906383-05:00","created_by":"daemon"}]}
@ -158,12 +158,12 @@
{"id":"skills-kvdl","title":"Remove unused globalChannel variable in heartbeat.nim","description":"[DEAD] LOW heartbeat.nim:37 - globalChannel declared but never used. Compiler warns about this. Delete unused variable.","status":"closed","priority":4,"issue_type":"task","created_at":"2026-01-10T19:54:45.125528634-08:00","created_by":"dan","updated_at":"2026-01-10T20:24:43.733773826-08:00","closed_at":"2026-01-10T20:24:43.733773826-08:00","close_reason":"Fixed: removed unused globalChannel in heartbeat.nim rewrite"} {"id":"skills-kvdl","title":"Remove unused globalChannel variable in heartbeat.nim","description":"[DEAD] LOW heartbeat.nim:37 - globalChannel declared but never used. Compiler warns about this. Delete unused variable.","status":"closed","priority":4,"issue_type":"task","created_at":"2026-01-10T19:54:45.125528634-08:00","created_by":"dan","updated_at":"2026-01-10T20:24:43.733773826-08:00","closed_at":"2026-01-10T20:24:43.733773826-08:00","close_reason":"Fixed: removed unused globalChannel in heartbeat.nim rewrite"}
{"id":"skills-le9","title":"beads new --from-cursor: capture symbol context","description":"When creating a bead, auto-capture LSP context:\n- Current symbol FQN (fully qualified name)\n- Definition snippet\n- Top 10 references/callers\n- Current diagnostics for the symbol\n\nMakes beads self-contained without copy/paste archaeology. Symbol URI allows jumping back to exact location even if file moved.","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-24T02:29:55.989876856-05:00","updated_at":"2025-12-24T02:29:55.989876856-05:00","dependencies":[{"issue_id":"skills-le9","depends_on_id":"skills-gga","type":"blocks","created_at":"2025-12-24T02:30:06.416484732-05:00","created_by":"daemon"}]} {"id":"skills-le9","title":"beads new --from-cursor: capture symbol context","description":"When creating a bead, auto-capture LSP context:\n- Current symbol FQN (fully qualified name)\n- Definition snippet\n- Top 10 references/callers\n- Current diagnostics for the symbol\n\nMakes beads self-contained without copy/paste archaeology. Symbol URI allows jumping back to exact location even if file moved.","status":"open","priority":3,"issue_type":"feature","created_at":"2025-12-24T02:29:55.989876856-05:00","updated_at":"2025-12-24T02:29:55.989876856-05:00","dependencies":[{"issue_id":"skills-le9","depends_on_id":"skills-gga","type":"blocks","created_at":"2025-12-24T02:30:06.416484732-05:00","created_by":"daemon"}]}
{"id":"skills-lie","title":"Compare DEPENDENCIES.md with upstream","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-03T20:15:53.925914243-08:00","updated_at":"2025-12-03T20:19:28.665641809-08:00","closed_at":"2025-12-03T20:19:28.665641809-08:00","dependencies":[{"issue_id":"skills-lie","depends_on_id":"skills-ebh","type":"discovered-from","created_at":"2025-12-03T20:15:53.9275694-08:00","created_by":"daemon","metadata":"{}"}]} {"id":"skills-lie","title":"Compare DEPENDENCIES.md with upstream","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-03T20:15:53.925914243-08:00","updated_at":"2025-12-03T20:19:28.665641809-08:00","closed_at":"2025-12-03T20:19:28.665641809-08:00","dependencies":[{"issue_id":"skills-lie","depends_on_id":"skills-ebh","type":"discovered-from","created_at":"2025-12-03T20:15:53.9275694-08:00","created_by":"daemon","metadata":"{}"}]}
{"id":"skills-luzk","title":"Extract rowToWorkerInfo helper in state.nim","description":"[REDUNDANCY] LOW state.nim:136-143,165-172 - WorkerInfo construction duplicated in getWorker() and getAllWorkers(). Extract proc rowToWorkerInfo(row): WorkerInfo.","status":"open","priority":3,"issue_type":"task","created_at":"2026-01-10T19:49:53.238303032-08:00","created_by":"dan","updated_at":"2026-01-10T19:49:53.238303032-08:00"} {"id":"skills-luzk","title":"Extract rowToWorkerInfo helper in state.nim","description":"[REDUNDANCY] LOW state.nim:136-143,165-172 - WorkerInfo construction duplicated in getWorker() and getAllWorkers(). Extract proc rowToWorkerInfo(row): WorkerInfo.","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-10T19:49:53.238303032-08:00","created_by":"dan","updated_at":"2026-01-11T15:34:20.564896474-08:00","closed_at":"2026-01-11T15:34:20.564896474-08:00","close_reason":"Closed"}
{"id":"skills-lvg","title":"Compare ISSUE_CREATION.md with upstream","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-03T20:15:54.609282051-08:00","updated_at":"2025-12-03T20:19:29.134966356-08:00","closed_at":"2025-12-03T20:19:29.134966356-08:00","dependencies":[{"issue_id":"skills-lvg","depends_on_id":"skills-ebh","type":"discovered-from","created_at":"2025-12-03T20:15:54.610717055-08:00","created_by":"daemon","metadata":"{}"}]} {"id":"skills-lvg","title":"Compare ISSUE_CREATION.md with upstream","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-03T20:15:54.609282051-08:00","updated_at":"2025-12-03T20:19:29.134966356-08:00","closed_at":"2025-12-03T20:19:29.134966356-08:00","dependencies":[{"issue_id":"skills-lvg","depends_on_id":"skills-ebh","type":"discovered-from","created_at":"2025-12-03T20:15:54.610717055-08:00","created_by":"daemon","metadata":"{}"}]}
{"id":"skills-lxb9","title":"Return proper exit codes for InvalidTransition errors","description":"When approve/reject/start fail due to invalid state transitions, the InvalidTransition exception bubbles up unhandled, causing exit code 1 instead of ExitInvalidTransition (3). Should catch these exceptions and return proper exit codes.","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-01-11T00:17:51.270060721-08:00","created_by":"dan","updated_at":"2026-01-11T14:28:25.732926303-08:00","closed_at":"2026-01-11T14:28:25.732926303-08:00","close_reason":"Fixed exit codes for state transition errors. All 56 tests pass."} {"id":"skills-lxb9","title":"Return proper exit codes for InvalidTransition errors","description":"When approve/reject/start fail due to invalid state transitions, the InvalidTransition exception bubbles up unhandled, causing exit code 1 instead of ExitInvalidTransition (3). Should catch these exceptions and return proper exit codes.","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-01-11T00:17:51.270060721-08:00","created_by":"dan","updated_at":"2026-01-11T14:28:25.732926303-08:00","closed_at":"2026-01-11T14:28:25.732926303-08:00","close_reason":"Fixed exit codes for state transition errors. All 56 tests pass."}
{"id":"skills-lzh2","title":"Create utils.nim with common helpers","description":"Extract repeated patterns into src/worker/utils.nim:\n- branchName(taskId): string - from git.nim:36,59,89\n- worktreePath(taskId): string - from git.nim:37,53\n- msToUnix(ms): int64 - from state.nim (8 occurrences)\n- optField[T](row, idx): Option[T] - from db.nim:167-176\n- withTransaction template - from state.nim:37-74\n- validateTaskId(id): string - new, for CLI validation\n\nConsolidates: skills-3d9o, skills-5x2o, skills-r3k, skills-luzk, skills-qiq0, skills-2xc, skills-73yu, skills-vuj2\n\nParent: skills-g2wa","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-10T20:18:49.280359755-08:00","created_by":"dan","updated_at":"2026-01-10T20:32:28.34903461-08:00","closed_at":"2026-01-10T20:32:28.34903461-08:00","close_reason":"Created utils.nim with common helpers"} {"id":"skills-lzh2","title":"Create utils.nim with common helpers","description":"Extract repeated patterns into src/worker/utils.nim:\n- branchName(taskId): string - from git.nim:36,59,89\n- worktreePath(taskId): string - from git.nim:37,53\n- msToUnix(ms): int64 - from state.nim (8 occurrences)\n- optField[T](row, idx): Option[T] - from db.nim:167-176\n- withTransaction template - from state.nim:37-74\n- validateTaskId(id): string - new, for CLI validation\n\nConsolidates: skills-3d9o, skills-5x2o, skills-r3k, skills-luzk, skills-qiq0, skills-2xc, skills-73yu, skills-vuj2\n\nParent: skills-g2wa","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-10T20:18:49.280359755-08:00","created_by":"dan","updated_at":"2026-01-10T20:32:28.34903461-08:00","closed_at":"2026-01-10T20:32:28.34903461-08:00","close_reason":"Created utils.nim with common helpers"}
{"id":"skills-lzk","title":"Simplify branch name generation in create-new-feature.sh","description":"File: .specify/scripts/bash/create-new-feature.sh (lines 137-181)\n\nIssues:\n- 3 nested loops/conditionals\n- Complex string transformations with multiple sed operations\n- Stop-words list and filtering logic hard to maintain\n\nFix:\n- Extract to separate function\n- Simplify word filtering logic\n- Add input validation\n\nSeverity: MEDIUM","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-24T02:51:14.286951249-05:00","updated_at":"2026-01-03T12:13:27.083639201-08:00","closed_at":"2026-01-03T12:13:27.083639201-08:00","close_reason":"Simplifed generate_branch_name logic, added main() function, and BASH_SOURCE guard for testability."} {"id":"skills-lzk","title":"Simplify branch name generation in create-new-feature.sh","description":"File: .specify/scripts/bash/create-new-feature.sh (lines 137-181)\n\nIssues:\n- 3 nested loops/conditionals\n- Complex string transformations with multiple sed operations\n- Stop-words list and filtering logic hard to maintain\n\nFix:\n- Extract to separate function\n- Simplify word filtering logic\n- Add input validation\n\nSeverity: MEDIUM","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-24T02:51:14.286951249-05:00","updated_at":"2026-01-03T12:13:27.083639201-08:00","closed_at":"2026-01-03T12:13:27.083639201-08:00","close_reason":"Simplifed generate_branch_name logic, added main() function, and BASH_SOURCE guard for testability."}
{"id":"skills-m0e2","title":"Write developer docs for compiling/deployment workflow","status":"open","priority":3,"issue_type":"task","created_at":"2026-01-10T23:14:36.685506396-08:00","created_by":"dan","updated_at":"2026-01-10T23:14:36.685506396-08:00"} {"id":"skills-m0e2","title":"Write developer docs for compiling/deployment workflow","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-10T23:14:36.685506396-08:00","created_by":"dan","updated_at":"2026-01-11T15:34:20.579336918-08:00","closed_at":"2026-01-11T15:34:20.579336918-08:00","close_reason":"Closed"}
{"id":"skills-m21","title":"Apply niri-window-capture code review recommendations","description":"CODE-REVIEW-niri-window-capture.md identifies action items: add dependency checks to scripts, improve error handling for niri failures, add screenshot directory validation, implement rate limiting. See High/Medium priority sections.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-11-30T11:58:24.648846875-08:00","updated_at":"2025-12-28T20:16:53.914141949-05:00","closed_at":"2025-12-28T20:16:53.914141949-05:00","close_reason":"Implemented all 4 high-priority recommendations from code review: dependency checks, directory validation, error handling, audit logging"} {"id":"skills-m21","title":"Apply niri-window-capture code review recommendations","description":"CODE-REVIEW-niri-window-capture.md identifies action items: add dependency checks to scripts, improve error handling for niri failures, add screenshot directory validation, implement rate limiting. See High/Medium priority sections.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-11-30T11:58:24.648846875-08:00","updated_at":"2025-12-28T20:16:53.914141949-05:00","closed_at":"2025-12-28T20:16:53.914141949-05:00","close_reason":"Implemented all 4 high-priority recommendations from code review: dependency checks, directory validation, error handling, audit logging"}
{"id":"skills-mjf","title":"Design: Portable adversarial reviewer","description":"Design a reviewer agent/skill that can run on any capable model.\n\nalice is Claude Opus with specific tools. We need:\n- Model-agnostic reviewer prompt/instructions\n- Tool requirements (read-only: Read, Grep, Glob, Bash)\n- Integration with orch for multi-model consensus\n- Decision format (APPROVED/ISSUES)\n- Issue filing (beads or tissue)\n\nKey principles from alice:\n- Work for the USER, not the agent\n- Assume errors exist, find them\n- Steel-man then attack\n- Seek second opinions\n\nOutput: Reviewer skill spec that works across agents","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-09T17:14:20.778647076-08:00","created_by":"dan","updated_at":"2026-01-09T19:59:37.80146821-08:00","closed_at":"2026-01-09T19:59:37.80146821-08:00","close_reason":"Covered in architecture design doc - adversarial reviewer section"} {"id":"skills-mjf","title":"Design: Portable adversarial reviewer","description":"Design a reviewer agent/skill that can run on any capable model.\n\nalice is Claude Opus with specific tools. We need:\n- Model-agnostic reviewer prompt/instructions\n- Tool requirements (read-only: Read, Grep, Glob, Bash)\n- Integration with orch for multi-model consensus\n- Decision format (APPROVED/ISSUES)\n- Issue filing (beads or tissue)\n\nKey principles from alice:\n- Work for the USER, not the agent\n- Assume errors exist, find them\n- Steel-man then attack\n- Seek second opinions\n\nOutput: Reviewer skill spec that works across agents","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-09T17:14:20.778647076-08:00","created_by":"dan","updated_at":"2026-01-09T19:59:37.80146821-08:00","closed_at":"2026-01-09T19:59:37.80146821-08:00","close_reason":"Covered in architecture design doc - adversarial reviewer section"}
{"id":"skills-ms5","title":"Design: Local message passing layer","description":"Design: Local message passing layer\n\nImplementation: Nim (tiny_sqlite, channels)\nDesign doc: docs/design/message-passing-layer.md (v4)\n\nKey components:\n- SQLite WAL mode as source of truth\n- Heartbeat thread with own connection + channel control\n- Task claims with lease expiry\n- At-least-once delivery with explicit ack\n- JSONL export for debugging\n\nSee: skills-q40 for language decision","design":"docs/design/message-passing-layer.md","notes":"DESIGN UPDATED v2: SQLite as primary storage (not JSONL+flock). After orch consensus (3 models unanimous), aligned with Beads approach. Key change: SQLite with BEGIN IMMEDIATE for atomic writes, WAL mode for concurrency. JSONL becomes read-only export for debugging. See docs/design/message-passing-layer.md and message-passing-comparison.md.","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-10T13:24:21.597509853-08:00","created_by":"dan","updated_at":"2026-01-10T18:04:18.389932002-08:00","dependencies":[{"issue_id":"skills-ms5","depends_on_id":"skills-s6y","type":"blocks","created_at":"2026-01-10T13:24:36.033492407-08:00","created_by":"dan"}]} {"id":"skills-ms5","title":"Design: Local message passing layer","description":"Design: Local message passing layer\n\nImplementation: Nim (tiny_sqlite, channels)\nDesign doc: docs/design/message-passing-layer.md (v4)\n\nKey components:\n- SQLite WAL mode as source of truth\n- Heartbeat thread with own connection + channel control\n- Task claims with lease expiry\n- At-least-once delivery with explicit ack\n- JSONL export for debugging\n\nSee: skills-q40 for language decision","design":"docs/design/message-passing-layer.md","notes":"DESIGN UPDATED v2: SQLite as primary storage (not JSONL+flock). After orch consensus (3 models unanimous), aligned with Beads approach. Key change: SQLite with BEGIN IMMEDIATE for atomic writes, WAL mode for concurrency. JSONL becomes read-only export for debugging. See docs/design/message-passing-layer.md and message-passing-comparison.md.","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-10T13:24:21.597509853-08:00","created_by":"dan","updated_at":"2026-01-10T18:04:18.389932002-08:00","dependencies":[{"issue_id":"skills-ms5","depends_on_id":"skills-s6y","type":"blocks","created_at":"2026-01-10T13:24:36.033492407-08:00","created_by":"dan"}]}
@ -182,7 +182,7 @@
{"id":"skills-qeh","title":"Add README.md for web-research skill","description":"web-research skill has SKILL.md and scripts but no README.md. AGENTS.md says README.md is for humans, contains installation instructions, usage examples, prerequisites.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-11-30T11:58:14.475647113-08:00","updated_at":"2025-12-28T22:37:48.339288261-05:00","closed_at":"2025-12-28T22:37:48.339288261-05:00","close_reason":"Added README.md with prerequisites, usage examples, and cross-references","dependencies":[{"issue_id":"skills-qeh","depends_on_id":"skills-vb5","type":"blocks","created_at":"2025-11-30T12:01:30.278784381-08:00","created_by":"daemon","metadata":"{}"}]} {"id":"skills-qeh","title":"Add README.md for web-research skill","description":"web-research skill has SKILL.md and scripts but no README.md. AGENTS.md says README.md is for humans, contains installation instructions, usage examples, prerequisites.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-11-30T11:58:14.475647113-08:00","updated_at":"2025-12-28T22:37:48.339288261-05:00","closed_at":"2025-12-28T22:37:48.339288261-05:00","close_reason":"Added README.md with prerequisites, usage examples, and cross-references","dependencies":[{"issue_id":"skills-qeh","depends_on_id":"skills-vb5","type":"blocks","created_at":"2025-11-30T12:01:30.278784381-08:00","created_by":"daemon","metadata":"{}"}]}
{"id":"skills-qekj","title":"Start heartbeat before state transition in start command","description":"[ERROR] MED worker.nim:202-206 - Heartbeat started after state transition. If heartbeat fails, worker is WORKING but not heartbeating. Start heartbeat before transition, or handle failure by reverting state.","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-01-10T20:12:10.656162605-08:00","created_by":"dan","updated_at":"2026-01-10T20:55:02.327535804-08:00","closed_at":"2026-01-10T20:55:02.327535804-08:00","close_reason":"P2 bugs fixed"} {"id":"skills-qekj","title":"Start heartbeat before state transition in start command","description":"[ERROR] MED worker.nim:202-206 - Heartbeat started after state transition. If heartbeat fails, worker is WORKING but not heartbeating. Start heartbeat before transition, or handle failure by reverting state.","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-01-10T20:12:10.656162605-08:00","created_by":"dan","updated_at":"2026-01-10T20:55:02.327535804-08:00","closed_at":"2026-01-10T20:55:02.327535804-08:00","close_reason":"P2 bugs fixed"}
{"id":"skills-qiq0","title":"Extract DefaultRemote and IntegrationBranch constants","description":"[EVOLVE] LOW git.nim - 'origin' remote and 'integration' branch hardcoded throughout (lines 40,66,67,93,96,97,109,133). Extract to constants in types.nim.","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-10T19:52:14.580188398-08:00","created_by":"dan","updated_at":"2026-01-10T20:32:28.36719341-08:00","closed_at":"2026-01-10T20:32:28.36719341-08:00","close_reason":"Created utils.nim with common helpers"} {"id":"skills-qiq0","title":"Extract DefaultRemote and IntegrationBranch constants","description":"[EVOLVE] LOW git.nim - 'origin' remote and 'integration' branch hardcoded throughout (lines 40,66,67,93,96,97,109,133). Extract to constants in types.nim.","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-10T19:52:14.580188398-08:00","created_by":"dan","updated_at":"2026-01-10T20:32:28.36719341-08:00","closed_at":"2026-01-10T20:32:28.36719341-08:00","close_reason":"Created utils.nim with common helpers"}
{"id":"skills-r3k","title":"Extract helper for repetitive null-check pattern in poll()","description":"[SMELL] LOW db.nim:167-176 - Same null-check pattern repeated 5 times. Extract helper: proc optField[T](row, idx): Option[T]","status":"open","priority":3,"issue_type":"task","created_at":"2026-01-10T18:52:40.828545508-08:00","created_by":"dan","updated_at":"2026-01-10T18:52:40.828545508-08:00"} {"id":"skills-r3k","title":"Extract helper for repetitive null-check pattern in poll()","description":"[SMELL] LOW db.nim:167-176 - Same null-check pattern repeated 5 times. Extract helper: proc optField[T](row, idx): Option[T]","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-10T18:52:40.828545508-08:00","created_by":"dan","updated_at":"2026-01-11T15:34:20.547557264-08:00","closed_at":"2026-01-11T15:34:20.547557264-08:00","close_reason":"Closed"}
{"id":"skills-r5c","title":"Extract shared logging library from scripts","description":"Duplicated logging/color functions across multiple scripts:\n- bin/deploy-skill.sh\n- skills/tufte-press/scripts/generate-and-build.sh\n- Other .specify scripts\n\nPattern repeated:\n- info(), warn(), error() functions\n- Color definitions (RED, GREEN, etc.)\n- Same 15-20 lines in each file\n\nFix:\n- Create scripts/common-logging.sh\n- Source from all scripts that need it\n- Estimated reduction: 30+ lines of duplication\n\nSeverity: MEDIUM","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T02:50:58.324852578-05:00","updated_at":"2025-12-29T18:48:20.448077879-05:00","closed_at":"2025-12-29T18:48:20.448077879-05:00","close_reason":"Minimal duplication: only 2 files with different logging styles. Shared library overhead not justified."} {"id":"skills-r5c","title":"Extract shared logging library from scripts","description":"Duplicated logging/color functions across multiple scripts:\n- bin/deploy-skill.sh\n- skills/tufte-press/scripts/generate-and-build.sh\n- Other .specify scripts\n\nPattern repeated:\n- info(), warn(), error() functions\n- Color definitions (RED, GREEN, etc.)\n- Same 15-20 lines in each file\n\nFix:\n- Create scripts/common-logging.sh\n- Source from all scripts that need it\n- Estimated reduction: 30+ lines of duplication\n\nSeverity: MEDIUM","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T02:50:58.324852578-05:00","updated_at":"2025-12-29T18:48:20.448077879-05:00","closed_at":"2025-12-29T18:48:20.448077879-05:00","close_reason":"Minimal duplication: only 2 files with different logging styles. Shared library overhead not justified."}
{"id":"skills-r62","title":"Design: Role + Veto pattern","description":"Some agents do, some agents can only block.\n\n## Pattern (from GPT brainstorm)\nRole specialization with cross-cutting veto powers:\n- Claude = spec/architecture (can veto incoherent APIs)\n- Codex = implementation (fast edits, compilation focus)\n- Gemini = repo archaeologist (searches long-range coupling)\n- Security agent = can't code, can only BLOCK\n\nKey: some agents can't 'do' but can block.\n\n## Implementation\n- worker veto X \"reason\" - block without doing\n- Reviewer agents have veto-only mode\n- Veto writes rejection to .worker-state/X.json\n- Worker must address veto before proceeding\n\n## Benefits\n- Prevents groupthink\n- Security review can't 'fix' things (no scope creep)\n- Clear separation of concerns","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-10T12:14:51.397604607-08:00","created_by":"dan","updated_at":"2026-01-10T12:14:51.397604607-08:00","dependencies":[{"issue_id":"skills-r62","depends_on_id":"skills-s6y","type":"blocks","created_at":"2026-01-10T12:15:10.205645756-08:00","created_by":"dan"}]} {"id":"skills-r62","title":"Design: Role + Veto pattern","description":"Some agents do, some agents can only block.\n\n## Pattern (from GPT brainstorm)\nRole specialization with cross-cutting veto powers:\n- Claude = spec/architecture (can veto incoherent APIs)\n- Codex = implementation (fast edits, compilation focus)\n- Gemini = repo archaeologist (searches long-range coupling)\n- Security agent = can't code, can only BLOCK\n\nKey: some agents can't 'do' but can block.\n\n## Implementation\n- worker veto X \"reason\" - block without doing\n- Reviewer agents have veto-only mode\n- Veto writes rejection to .worker-state/X.json\n- Worker must address veto before proceeding\n\n## Benefits\n- Prevents groupthink\n- Security review can't 'fix' things (no scope creep)\n- Clear separation of concerns","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-10T12:14:51.397604607-08:00","created_by":"dan","updated_at":"2026-01-10T12:14:51.397604607-08:00","dependencies":[{"issue_id":"skills-r62","depends_on_id":"skills-s6y","type":"blocks","created_at":"2026-01-10T12:15:10.205645756-08:00","created_by":"dan"}]}
{"id":"skills-rex","title":"Test integration on worklog skill","description":"Use worklog skill as first real test case:\n- Create wisp for worklog execution\n- Capture execution trace\n- Test squash → digest\n- Validate trace format captures enough info for replay\n\nMigrated from dotfiles-drs.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-23T19:21:18.75525644-05:00","updated_at":"2025-12-29T13:55:35.814174815-05:00","closed_at":"2025-12-29T13:55:35.814174815-05:00","close_reason":"Parked with ADR-001: skills-molecules integration deferred. Current simpler approach (skills as standalone) works well. Revisit when complex orchestration needed.","dependencies":[{"issue_id":"skills-rex","depends_on_id":"skills-3em","type":"blocks","created_at":"2025-12-23T19:22:00.34922734-05:00","created_by":"dan"}]} {"id":"skills-rex","title":"Test integration on worklog skill","description":"Use worklog skill as first real test case:\n- Create wisp for worklog execution\n- Capture execution trace\n- Test squash → digest\n- Validate trace format captures enough info for replay\n\nMigrated from dotfiles-drs.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-23T19:21:18.75525644-05:00","updated_at":"2025-12-29T13:55:35.814174815-05:00","closed_at":"2025-12-29T13:55:35.814174815-05:00","close_reason":"Parked with ADR-001: skills-molecules integration deferred. Current simpler approach (skills as standalone) works well. Revisit when complex orchestration needed.","dependencies":[{"issue_id":"skills-rex","depends_on_id":"skills-3em","type":"blocks","created_at":"2025-12-23T19:22:00.34922734-05:00","created_by":"dan"}]}