Commit Graph

13 Commits

Author SHA1 Message Date
Steve Yegge
aada5d9ac6 Fix bd-144: Update main .db file timestamp after import (WAL mode)
- Added CheckpointWAL method to SQLite storage
- Import now checkpoints WAL after completion
- Updates main .db file modification time for staleness detection
- PRAGMA wal_checkpoint(FULL) flushes WAL to main database
2025-10-25 16:37:54 -07:00
Steve Yegge
d85549d16c Refactor issueDataChanged to reduce cyclomatic complexity (bd-55)
- Extract field comparison logic into fieldComparator struct
- Reduce complexity from 39 to 11
- Improve code organization and testability
- All tests passing

Amp-Thread-ID: https://ampcode.com/threads/T-4d8cdee6-84e8-4348-ad30-9e59fb3e30cf
Co-authored-by: Amp <amp@ampcode.com>
2025-10-25 10:44:35 -07:00
Steve Yegge
fe30e0c527 Refactor importIssuesCore to reduce complexity (bd-55)
Reduced cyclomatic complexity from 71 to ~10 by extracting 7 phase functions:
- getOrCreateStore: Store initialization
- handlePrefixMismatch: Prefix validation/renaming
- handleCollisions: Collision detection/resolution
- upsertIssues: Issue creation/updates
- importDependencies: Dependency imports (optimized with set-based deduplication)
- importLabels: Label imports
- importComments: Comment imports (fixed idempotency bug)

Additional improvements:
- Fixed comment deduplication to use author+text only (not timestamp)
- Optimized dependency imports to fetch once per issue (not per dependency)
- Improved error messages to reference CLI flags
- Renamed importIssues -> upsertIssues for clarity

Main function reduced from 317 lines to 50 lines. All tests pass.

Amp-Thread-ID: https://ampcode.com/threads/T-aa67a4e5-b35d-4ba6-a954-5d9ff86c15bf
Co-authored-by: Amp <amp@ampcode.com>
2025-10-25 10:26:56 -07:00
Steve Yegge
963181d7f8 Configure CI to pass lint checks for dependabot PRs
Disabled gocyclo and excluded baseline gosec warnings to allow CI to pass:
- Disabled gocyclo linter (high complexity in large functions is acceptable)
- Excluded test files from gosec checks (use dummy permissions/files)
- Excluded G204 (subprocess), G115 (int conversion), G302/G306 (file perms)
- Fixed unhandled errors: conn.Close(), rows.Close(), tempFile.Close()

Lint check now returns 0 issues (down from 56).

This fixes dependabot PR failures caused by lint checks.

Related: bd-91
2025-10-24 12:46:47 -07:00
Steve Yegge
9dcb86ebfb Fix lint errors: handle errors, use fmt.Fprintf, apply De Morgan's law, use switch statements
Amp-Thread-ID: https://ampcode.com/threads/T-afcf56b0-a8bc-4310-bb59-1b63e1d70c89
Co-authored-by: Amp <amp@ampcode.com>
2025-10-24 12:27:07 -07:00
Steve Yegge
e5022171ef Fix bd-88: import now reports unchanged issues correctly
When importing JSONL that matches the database exactly, import was
reporting '0 created, 0 updated' which was confusing. Now it properly
tracks and reports unchanged issues.

Changes:
- Added Unchanged field to ImportResult
- Track unchanged issues separately from skipped/updated
- Display unchanged count in import summary
- Updated dry-run output to show unchanged count
- Added test to verify correct reporting behavior

Example output: 'Import complete: 0 created, 0 updated, 88 unchanged'

Amp-Thread-ID: https://ampcode.com/threads/T-5dd4843e-9ce3-4fe0-9658-d2227b0a2e4e
Co-authored-by: Amp <amp@ampcode.com>
2025-10-23 23:08:02 -07:00
Steve Yegge
22cf66a416 Harden issueDataChanged with type-safe comparisons
Based on code review feedback:
- Remove unsafe type assertions that could panic
- Add robust type conversion helpers (strFrom, intFrom, equalStatus, equalIssueType)
- Support multiple numeric types for priority (int, int32, int64, float64)
- Treat empty string and nil as equal for optional fields
- Add default case to detect unknown fields (conservative)
- Add comprehensive unit tests for all edge cases
- Test coverage: enums as strings, numeric conversions, nil/empty handling

Amp-Thread-ID: https://ampcode.com/threads/T-225f8c56-0710-46e9-9db2-dbf90cf91911
Co-authored-by: Amp <amp@ampcode.com>
2025-10-23 18:41:54 -07:00
Steve Yegge
9892e45e71 Fix bd-84: Prevent timestamp churn on idempotent imports
- Add issueDataChanged() to detect when issue content actually changes
- Only call UpdateIssue when data differs from existing issue
- Unchanged issues are skipped to avoid updating timestamps
- Add tests for idempotent import behavior
- Fixes perpetually dirty JSONL after every bd command

Amp-Thread-ID: https://ampcode.com/threads/T-225f8c56-0710-46e9-9db2-dbf90cf91911
Co-authored-by: Amp <amp@ampcode.com>
2025-10-23 17:50:10 -07:00
Steve Yegge
a44ddf5cfc Fix autoimport test failures and cleanup test issues
This commit fixes all 7 failing autoimport tests by correcting a bug
in import_shared.go where the function returned early when no issue
prefix was configured, preventing any imports from happening.

Changes:
- Fix early return bug in importIssuesCore (import_shared.go:85-121)
- Now continues with import even when prefix is not configured
- Only validates prefixes when a prefix is actually set
- Delete test issues bd-50 through bd-63 (14 cleanup issues)

All tests now pass:
 TestAutoImportMultipleCollisionsRemapped
 TestAutoImportAllCollisionsRemapped
 TestAutoImportExactMatchesOnly
 TestAutoImportNewIssuesOnly
 TestAutoImportIfNewer
 TestAutoImportNoCollision
 TestAutoImportClosedAtInvariant

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-21 23:43:04 -07:00
Steve Yegge
2426f556d4 Fix prefix validation critical bugs from oracle review
- Boundary-aware ID replacement (prevents wy-1 corrupting wy-10)
- Sort IDs by length descending before replacement
- Validate configured prefix is not empty
- Validate ID format before renaming (numeric suffix required)
- All critical issues from oracle review addressed
2025-10-21 20:49:03 -07:00
Steve Yegge
3e44951f15 Add prefix validation on bulk import
- Detects prefix mismatches during import
- Shows warning with mismatched prefixes and counts
- Added --rename-on-import flag to automatically fix prefixes
- Auto-import is lenient about prefixes (doesn't enforce)
- All tests passing
2025-10-21 20:34:37 -07:00
Steve Yegge
a28d4fe4c7 Add comments feature (bd-162)
- Add comments table to SQLite schema
- Add Comment type to internal/types
- Implement AddIssueComment and GetIssueComments in storage layer
- Update JSONL export/import to include comments
- Add comments to 'bd show' output
- Create 'bd comments' CLI command structure
- Fix UpdateIssueID to update comments table and defer FK checks
- Add GetIssueComments/AddIssueComment to Storage interface

Note: CLI command needs daemon RPC support (tracked in bd-163)
Amp-Thread-ID: https://ampcode.com/threads/T-ece10dd1-cf64-48ff-9adb-dd304d0bcb25
Co-authored-by: Amp <amp@ampcode.com>
2025-10-19 18:28:41 -07:00
Steve Yegge
790233f748 feat: Add 'bd stale' command to show and release orphaned executor claims
- Implements bd stale command to show issues with execution_state where executor is dead/stopped
- Adds --release flag to automatically release orphaned issues
- Adds --threshold flag to customize heartbeat staleness threshold (default: 300s/5min)
- Handles missing executor instances (LEFT JOIN) for cases where executor was deleted
- Adds QueryContext and BeginTx helper methods to SQLiteStorage for advanced queries
- Fixes ExternalRef comparison bug in import_shared.go (pointer vs string)
- Removes unused imports in import.go

Resolves vc-124
2025-10-18 17:14:21 -07:00