feat(tbd-cli): Complete tbd V1 CLI implementation (Phases 1-25)#6
Merged
Conversation
Move sync tests from cli-advanced.tryscript.md to a dedicated file that properly documents the critical sync commit behavior: - Tests that verify files are committed before push - Tests for sync status command - Tests for error handling with missing remotes - Tests for idempotent sync behavior This makes it clear that sync commit verification is a core workflow requirement, not an "advanced" feature. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace tbd info with tbd status - a git-like orientation command that works without initialization. Unlike Beads where bd status is an alias for bd stats, tbd status is a distinct orientation command. - Update tbd-design-v3.md with full status command spec - Add Phase 25 to implementation plan with tasks tbd-1890 through tbd-1895 - Create beads for Phase 25 work Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create beads for status command work: - tbd-1890: Phase 25 Epic - tbd-1891: Implement tbd status command - tbd-1892: Add beads detection - tbd-1893: Add integration detection - tbd-1894: Remove info command - tbd-1895: Golden tests for status Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create comprehensive sync test file to verify critical commit behavior: - Tests that files written to worktree are committed before push - Tests for multiple issues and batch syncing - Tests for sync --status command and JSON output - Tests for error handling with missing remotes - Tests for idempotent sync behavior Move detailed sync tests out of cli-advanced.tryscript.md to this dedicated file, keeping only smoke tests in advanced. This makes it clear that sync commit verification is a core workflow requirement, not an "advanced" feature. Relates-to: tbd-1885 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add comprehensive tryscript golden tests for three command groups: cli-prime.tryscript.md (21 tests): - Prime in initialized vs uninitialized project - Prime --full, --mcp, --export flags - Custom PRIME.md override behavior cli-setup-commands.tryscript.md (35 tests): - Setup claude --check and --dry-run (safe operations only) - Setup cursor: install, check, remove - Setup codex: create, update, remove AGENTS.md cli-uninstall.tryscript.md (27 tests): - Uninstall without confirmation (preview) - Uninstall --confirm (full cleanup) - Uninstall --keep-branch option - Uninstall --dry-run mode Total: 83 new golden tests, bringing tryscript total to 438. Closes tbd-1880, tbd-1883 Partially addresses tbd-1881 (aider tests blocked on tbd-1879) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Verified and closed: - Phase 22 (tbd-1868-1873): Import ID preservation - all implemented - Phase 23 (tbd-1874, 1874.1-1874.4): Init behavior - requireInit in all commands - Phase 25 (tbd-1891-1893): Status command with beads/integration detection Still open: - tbd-1874.5: Auto-init import tests (tests not yet written) - tbd-1894: Remove info command (not done) - tbd-1895: Status golden tests (not done) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
New issue added: tbd-1896 - Remove MCP auto-detection from tbd prime Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…(tbd-1897 through tbd-1905)
- tbd-1879: tbd setup aider - will not implement, not needed - tbd-1881: Golden tests for setup - complete (claude/cursor/codex done) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Closed: - tbd-1880: Golden tests for prime (12 tests) - tbd-1894: Remove info command (deleted) - tbd-1895: Golden tests for status (9 tests) - tbd-1890: Phase 25 Epic complete Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implement `tbd status` as the orientation command that works without initialization (like `git status`). Unlike Beads where `bd status` is an alias for `bd stats`, `tbd status` is a distinct orientation command. Status command features: - Works pre-init: shows git repo, beads detection, init suggestions - Post-init: shows config, issue summary, integration status - Detects integrations: Claude Code hooks, Cursor rules, Codex AGENTS.md - JSON output support with --json flag Changes: - Add src/cli/commands/status.ts with StatusHandler - Remove src/cli/commands/info.ts (replaced by status) - Update cli.ts to use statusCommand instead of infoCommand - Update README.md, tbd-docs.md with status command docs - Add cli-status.tryscript.md golden tests - Update all test files referencing info to use status - Close beads tbd-1890 through tbd-1895 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove the --mcp and --full flags along with the MCP auto-detection logic. tbd prime now always outputs the full workflow context. Changes: - Remove isMcpEnabled() function that checked ~/.claude/settings.json - Remove MCP_MODE_OUTPUT constant (minimal ~50 token output) - Remove --mcp and --full CLI options - Rename CLI_MODE_OUTPUT to PRIME_OUTPUT for clarity The MCP detection was dead code since tbd doesn't provide an MCP server. Simplifying to always output full context matches actual usage. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add sort.ts with naturalCompare/naturalSort for stable alphanumeric ordering - Use extractUlidFromInternalId() helper instead of manual regex in import.ts, list.ts, idMapping.ts - Add secondary sort by short ID in list command for deterministic output - Use naturalSort in idMapping for consistent YAML output - Add INTERNAL_ID_PREFIX constant to ids.ts - Add test for invalid --title option in cli-crud.tryscript.md - Remove deprecated YAML-based golden tests (replaced by tryscripts) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace hardcoded 'is-' prefix with makeInternalId() and isInternalId() helper functions from ids.ts for better maintainability. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- create.ts: Use extractUlidFromInternalId() instead of slice(3) - doctor.ts: Use validateIssueId() instead of hardcoded prefix check Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…-1905) All YAML scenario tests were already migrated to tryscript format in commit 89528ad.
The performance tests were timing out because: 1. beforeEach was writing 1000 files before EACH test (not once) 2. Sequential file writes took >10s, exceeding the default hook timeout Fixed by: - Using beforeAll instead of beforeEach for expensive setup - Creating dedicated temp directories per describe block - Writing files in parallel batches of 50 for faster I/O - Adding explicit 60s timeout for setup hooks - Proper cleanup with afterAll Test duration reduced from potential 5×10s timeouts to ~6s total. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Commander.js's addCommand() does not inherit configureHelp() settings from the parent command. This caused subcommand help (e.g., tbd list --help) to be uncolored while the main program help was colored. Added applyColoredHelpToAllCommands() function that recursively applies the colored help configuration to all commands after they are added to the program. Also updated research doc to correct the misinformation about configureHelp() propagation. Fixes: tbd-1823, tbd-1831, tbd-1832, tbd-1833, tbd-1834 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add colored epilog text at the bottom of all help commands displaying: "For more on tbd, see: https://github.com/jlevy/tbd" The epilog is rendered in blue and respects the --color option. Also fix: use colors.id instead of colors.cyan in docs command (colors.id is semantically correct for slugs and uses cyan internally) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The docs command uses github-slugger for generating markdown-style anchor IDs, but the dependency was missing from package.json. Closes tbd-1826: Add topic-specific help to tbd docs Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
… IDs Add tests for: - docs --help shows [topic] argument - docs --list shows slugified IDs (e.g., id-system) - docs <topic> positional argument works - docs --list --json outputs array with slugs Also update cli-setup.tryscript.md to reflect new docs command signature. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix cli-filesystem.tryscript.md test expectation for description after frontmatter - Fix cli-color-modes.tryscript.md list tests to use --sort=created for deterministic order - Update test expectations to match descending created_at order Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…liases Replace all short option aliases (-t, -p, -d, -f, -l) with their full equivalents (--type, --priority, --description, --file, --label) in documentation. This prepares for removing short option support to reduce CLI surface area and improve clarity. Also includes doc structure improvements and formatting updates. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace short options (-t, -p, -d, -f, -l) with full equivalents (--type, --priority, --description, --file, --label) in all test files - Update expected help output to include new readme command - Add "For more on tbd" footer to help output expectations - Add cli-import-autoinit.tryscript.md for auto-init during import - Fix spacing issues with --description and --label arguments - Normalize "TBD" to "tbd" in test file titles All 467 tryscript tests pass. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Change all CLI option examples from space-separated format (--type bug) to equals-separated format (--type=bug) for consistency. Both formats work with Commander.js, but the equals format is more explicit and GNU-style. Updated files: - docs/tbd-docs.md - Main CLI documentation - README.md - Quick start examples - docs/project/architecture/current/tbd-design-v3.md - Design document - packages/tbd-cli/src/docs/ - Embedded documentation copies - packages/tbd-cli/tests/*.tryscript.md - All test files All 467 tryscript tests pass. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
After importing from beads, display helpful tip showing how to disable beads integrations to prevent agent confusion: - bd hooks uninstall (git hooks) - bd setup claude --remove (Claude Code hooks) - bd setup <editor> --remove (cursor, codex, etc.) Also: - Run flowmark --auto on all markdown files - Add new research docs - Add readme command Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update measured timing data from verification run on 2026-01-17: - V8 baseline: ~20ms → ~15ms - Dependency loading: ~28ms → ~23ms - YAML library: 13ms → ~11ms - Zod: 5.2ms → ~4.4ms - Lazy loading potential improvement: 45% → ~55% Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…tency Match Beads CLI convention by using 'tbd dep' instead of 'tbd depends' for dependency management commands. This aligns with the design spec and maintains familiar command names for users migrating from Beads. Changes: - Rename depends.ts to dep.ts - Update cli.ts imports to use depCommand - Update all tryscript tests to use 'tbd dep' command - Update documentation (README.md, tbd-docs.md) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The files in src/docs/ are copied from the repo root during the prebuild step by copy-docs.mjs. They should be gitignored as generated files, not tracked. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Phase 25 (Status Command & Test Expansion) to implementation plan - Update test counts: 187 vitest, 420 tryscript golden tests - Document CLI help style improvements (full option names) - Remove short -V version flag for consistent --option=value style - Add explicit --help option to CLI - Sync beads tracking state Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update expected output to match current CLI behavior: - Remove -V short flag test (option no longer exists) - Update help output: `--help` instead of `-h, --help` - Update help output: `dep` instead of `depends` (renamed command) - Update status output: `Tbd` capitalization - Update status output: branch shown only when repo has commits - Fix Git repository line to match actual output format Note: --sync-branch and --remote init options are not currently applied (tracked as bug for future fix). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Set Commander help text max width to 88 characters (or terminal width if smaller) - Add marked + marked-terminal for colorized Markdown rendering - Integrate renderMarkdown into docs and readme commands for colored output - Respects --color option and TTY detection Closes tbd-1935, tbd-1936 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use lowercase 'tbd' consistently in status output tests to match actual CLI output (the capitalized 'Tbd' was from a stale global install). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add marked and marked-terminal dependencies to root lockfile. These were added in 2618591 but only to npm lockfile, not pnpm. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The CJS bootstrap file was missing from version control. This file is required for the build to produce dist/bin-bootstrap.cjs. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Closed issues: - tbd-1934: Lazy command loading (superseded by compile cache) - tbd-1921: Beads migration docs (Beads-side documentation) - tbd-1937: Enable Node.js compile cache (implemented) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Change test:coverage to run vitest with --coverage first (which generates coverage-summary.json and coverage-final.json required by CI), then run tryscript tests separately. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
jlevy
pushed a commit
that referenced
this pull request
Jan 17, 2026
Merged Beads vs tbd comparison into main review document. Now includes: Bugs (6 total): - #1: Exit codes return 0 on errors (CRITICAL) - #2: Dependency direction semantics confusing - #3: Search outputs message with --quiet - #4: Doctor warns on empty issues dir - #5: Import changes ID prefix - #6: Errors not JSON with --json flag Enhancements (20 total): - Critical (3): exit codes, npm publish, git version check - High (5): dep semantics, error JSON, tests, docs, import prefix - Medium (7): brief flag, templates, query DSL, batch ops, etc. - Low (5): history, GitHub sync, plugins, index, auto-links Key finding: tbd's single session protocol is better than Beads' 5 conditional protocols. Keep it simple.
gbasin
added a commit
to gbasin/tbd
that referenced
this pull request
Feb 12, 2026
Design decisions applied: - Remove AI spec review from v1 (harness expects finished spec) - Move human_review gate to Phase 2 (after decomposition) - Agents receive entire frozen spec (no section extraction) - Cycle detection in buildDependencyGraph() — fail fast - Deadlock detection in scheduler (blocked-bead deadlock) - Process group killing via detached: true + kill(-pid) - Resume re-reads harness.yml for operational config changes - Trust agent push (no post-completion verification) New sections: - Example Agent Prompt (complete prompt template) - Known Limitations (soft isolation, spec tampering, Unix-only, no cost controls, LWW) - Deadlock Detection (cycle + blocked-bead scenarios) Fixes: - Pipeline diagram: removed AI review box, fixed "dedicated" → "fresh" worktree - Agent Pool Model: "dedicated worktree" → "fresh ephemeral worktree" - JudgeResult.newBeads: added 'feature' type - Config YAML: human_review under phases.decompose with correct comment - Defaults: added guidelines, completion checks, acceptance model - Open Questions: resolved jlevy#1 (entire spec) and jlevy#6 (port algorithm) - Code Organization: added lib/graph.ts - Process Lifecycle: spawn with detached:true, SIGTERM targets process groups - Testing: added cycle detection, deadlock, process group, resume config tests - Future Work: added preview-acceptance, spec review phase, Windows, hash verify Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR completes the tbd V1 CLI implementation across 25 phases of development:
prime/setup/uninstallcommands,statuscommandKey Features:
prime,setup claude/cursor/codex,uninstall,status--option=valuesyntaxTest Coverage
Validation Plan
See valid-2026-01-15-tbd-v1-implementation.md for complete validation details.
Manual Validation
Phase 24-25 Commands
tbd status- Works in initialized and uninitialized statestbd prime- Outputs workflow context for AI agentstbd prime --full/--mcp- Mode selection workstbd setup claude- Creates Claude Code hookstbd setup cursor- Creates Cursor rulestbd setup codex- Creates AGENTS.md sectiontbd uninstall --all- Removes all integrationsImport Validation
requireInit() Enforcement
🤖 Generated with Claude Code