Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .beads/issues.jsonl
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,8 @@
{"id":"t2p-wln","title":"CLI integration","description":"Implement src/index.ts with Commander setup, wire up init and work commands, add CLI options (--model, --verbose), test global installation (npm link). Verify shebang works correctly.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-11-30T13:26:34.40176-05:00","updated_at":"2025-11-30T13:59:36.034896-05:00","closed_at":"2025-11-30T13:59:36.034896-05:00","dependencies":[{"issue_id":"t2p-wln","depends_on_id":"t2p-prg","type":"blocks","created_at":"2025-11-30T13:26:34.402376-05:00","created_by":"daemon","metadata":"{}"},{"issue_id":"t2p-wln","depends_on_id":"t2p-68n","type":"blocks","created_at":"2025-11-30T13:26:34.403063-05:00","created_by":"daemon","metadata":"{}"}]}
{"id":"t2p-wzt","title":"Refactor init.ts so that the embedded prompts are pulled from individual .md files in the source code","description":"Currently init.ts has large string constants (STYLE_TEMPLATE, WORK_TEMPLATE, SYSTEM_TEMPLATE, ANALYSIS_TEMPLATE) embedded in the code. Refactor to load these from individual .md files in the source code (e.g., src/templates/style.md).\n\nBenefits:\n- Easier to maintain and edit templates\n- Better separation of content from code\n- Cleaner TypeScript files\n- Templates can be reviewed/edited without reading TS code\n\nImplementation:\n- Create src/templates/ directory\n- Move each template constant to a .md file\n- Update init.ts to read from these files using readFileSync\n- Ensure templates are included in npm package distribution","status":"closed","priority":1,"issue_type":"task","created_at":"2025-11-30T14:48:00.459557-05:00","updated_at":"2025-11-30T14:52:49.196814-05:00","closed_at":"2025-11-30T14:52:49.196814-05:00"}
{"id":"t2p-x3h","title":"ship blog-from-x: Generate blog posts from successful X posts","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-24T10:06:25.728784-05:00","updated_at":"2025-12-24T10:12:35.814251-05:00","closed_at":"2025-12-24T10:12:35.814251-05:00","dependencies":[{"issue_id":"t2p-x3h","depends_on_id":"t2p-bb2","type":"blocks","created_at":"2025-12-24T10:07:19.949131-05:00","created_by":"ryw","metadata":"{}"},{"issue_id":"t2p-x3h","depends_on_id":"t2p-g06","type":"blocks","created_at":"2025-12-24T10:07:25.105074-05:00","created_by":"ryw","metadata":"{}"},{"issue_id":"t2p-x3h","depends_on_id":"t2p-4db","type":"blocks","created_at":"2025-12-24T10:07:30.294792-05:00","created_by":"ryw","metadata":"{}"},{"issue_id":"t2p-x3h","depends_on_id":"t2p-k7d","type":"blocks","created_at":"2025-12-24T10:07:35.583141-05:00","created_by":"ryw","metadata":"{}"}]}
{"id":"t2p-scan01","title":"Race condition: Lock file handling allows concurrent writes","description":"MEDIUM SEVERITY - The acquireLock() function in src/services/file-system.ts:15-33 has a race condition when forcefully removing stale locks. Between rmdirSync(lockPath) and the retry mkdirSync(lockPath), another process could acquire the lock, leading to concurrent writes to posts.jsonl.\n\nAffected code:\n- src/services/file-system.ts:24-25\n\nRecommendation:\n- Use proper file-based locking with process ID validation\n- Or use a locking library like proper-lockfile\n- Consider adding process ID to lock file to validate ownership","status":"open","priority":2,"issue_type":"bug","created_at":"2026-02-21T08:00:00Z","updated_at":"2026-02-21T08:00:00Z"}
{"id":"t2p-scan02","title":"Infinite recursion risk in review.ts promptForDecision()","description":"MEDIUM SEVERITY - In src/commands/review.ts:56, when a user enters unrecognized input, the code recursively calls promptForDecision() without tail-call optimization. With deep recursion, this could cause stack overflow on repeated invalid inputs.\n\nAffected code:\n- src/commands/review.ts:56 - resolve(promptForDecision())\n\nRecommendation:\n- Use a loop instead of recursion\n- Or call rl.question() again directly with the same handler\n- Example: rl.question('\\n(s)tage (r)eject (q)uit: ', handleInput);","status":"open","priority":2,"issue_type":"bug","created_at":"2026-02-21T08:00:00Z","updated_at":"2026-02-21T08:00:00Z"}
{"id":"t2p-scan03","title":"Unsafe process.env.HOME access causes incorrect paths on Windows/CI","description":"MEDIUM SEVERITY - In src/commands/blog.ts:477,553,555, direct access to process.env.HOME without proper handling creates paths like '/CONFIG_FILE' when HOME is undefined (Windows, some CI environments).\n\nAffected code:\n- src/commands/blog.ts:477 - const homeConfig = join(process.env.HOME || '', CONFIG_FILE)\n- src/commands/blog.ts:553-555 - similar pattern\n\nRecommendation:\n- Use os.homedir() which is cross-platform\n- Example: import { homedir } from 'os'; const homeConfig = join(homedir(), CONFIG_FILE);","status":"open","priority":2,"issue_type":"bug","created_at":"2026-02-21T08:00:00Z","updated_at":"2026-02-21T08:00:00Z"}
{"id":"t2p-scan04","title":"Content analyzer validation bug: checking if length is array instead of strategies","description":"MEDIUM SEVERITY - In src/services/content-analyzer.ts:58, the validation checks '!Array.isArray(parsed.length)' but 'length' is typically a number, not an array. This validation will always fail for valid input, causing content analysis to fall back to defaults.\n\nAffected code:\n- src/services/content-analyzer.ts:58\n\nRecommendation:\n- Fix validation to check the correct field: !Array.isArray(parsed.strategies)\n- Or validate typeof parsed.length === 'string' if that's the expected type","status":"open","priority":2,"issue_type":"bug","created_at":"2026-02-21T08:00:00Z","updated_at":"2026-02-21T08:00:00Z"}
{"id":"t2p-scan05","title":"Use replaceAll() instead of replace() for template substitution in reply.ts","description":"LOW SEVERITY - In src/commands/reply.ts:218-221, the code uses .replace() instead of .replaceAll() for template variables. If template variables appear multiple times, only the first occurrence is replaced.\n\nAffected code:\n- src/commands/reply.ts:218-221\n\nRecommendation:\n- Use .replaceAll() for template substitution\n- Or use a proper template engine","status":"open","priority":3,"issue_type":"task","created_at":"2026-02-21T08:00:00Z","updated_at":"2026-02-21T08:00:00Z"}
Loading