Fix bd-666: Replace N+1 query pattern in auto-import with batch fetch

- Batch fetch all existing issues with SearchIssues() upfront
- Use O(1) map lookup instead of O(n) GetIssue() calls
- Improves performance dramatically with 1000+ issues
- All tests pass
This commit is contained in:
Steve Yegge
2025-10-16 19:14:05 -07:00
parent 37d60d624d
commit ef31d98b43
6 changed files with 1413 additions and 164 deletions

File diff suppressed because one or more lines are too long

656
DUPLICATES_REPORT.md Normal file
View File

@@ -0,0 +1,656 @@
# Duplicate Issues Report
Generated: Thu Oct 16 19:06:37 PDT 2025
## Add OAuth2 support
Count: 3
- bd-177 (closed) created 2025-10-14T14:43:06.904366-07:00
- bd-174 (closed) created 2025-10-14T14:43:06.90268-07:00
- bd-170 (closed) created 2025-10-14T14:43:06.900641-07:00
## Add compacted_at_commit field to Issue type
Count: 9
- bd-639 (open) created 2025-10-16T18:57:16.296664-07:00
- bd-605 (open) created 2025-10-16T18:57:16.13228-07:00
- bd-555 (open) created 2025-10-16T18:57:16.084676-07:00
- bd-546 (open) created 2025-10-16T18:54:29.391902-07:00
- bd-532 (open) created 2025-10-16T18:54:29.372914-07:00
- bd-496 (open) created 2025-10-16T18:54:29.229357-07:00
- bd-432 (open) created 2025-10-16T18:05:02.18097-07:00
- bd-405 (closed) created 2025-10-16T16:03:31.57487-07:00
- bd-384 (closed) created 2025-10-16T14:57:48.834903-07:00
## Add integration tests for auto-import collision detection
Count: 9
- bd-658 (open) created 2025-10-16T18:57:16.323669-07:00
- bd-640 (closed) created 2025-10-16T18:57:16.298009-07:00
- bd-599 (open) created 2025-10-16T18:57:16.128178-07:00
- bd-535 (closed) created 2025-10-16T18:54:29.379553-07:00
- bd-491 (open) created 2025-10-16T18:54:29.224122-07:00
- bd-428 (open) created 2025-10-16T18:05:02.176549-07:00
- bd-401 (open) created 2025-10-16T16:03:31.546156-07:00
- bd-372 (open) created 2025-10-16T14:57:48.78612-07:00
- bd-231 (closed) created 2025-10-15T02:12:49.315295-07:00
## Add label management commands to CLI
Count: 4
- bd-571 (open) created 2025-10-16T18:57:16.101107-07:00
- bd-464 (open) created 2025-10-16T18:54:29.167551-07:00
- bd-364 (open) created 2025-10-16T14:57:48.773386-07:00
- bd-198 (closed) created 2025-10-15T01:10:48.43357-07:00
## Add migration scripts for GitHub Issues
Count: 8
- bd-645 (closed) created 2025-10-16T18:57:16.310349-07:00
- bd-635 (open) created 2025-10-16T18:57:16.292565-07:00
- bd-543 (closed) created 2025-10-16T18:54:29.387481-07:00
- bd-529 (open) created 2025-10-16T18:54:29.365728-07:00
- bd-443 (open) created 2025-10-16T18:05:02.190949-07:00
- bd-416 (open) created 2025-10-16T16:03:31.596085-07:00
- bd-370 (open) created 2025-10-16T14:57:48.783124-07:00
- bd-6 (closed) created 2025-10-14T14:43:06.929582-07:00
## Add performance benchmarks document
Count: 8
- bd-648 (closed) created 2025-10-16T18:57:16.314508-07:00
- bd-634 (open) created 2025-10-16T18:57:16.290463-07:00
- bd-528 (open) created 2025-10-16T18:54:29.365021-07:00
- bd-514 (closed) created 2025-10-16T18:54:29.278305-07:00
- bd-437 (open) created 2025-10-16T18:05:02.186502-07:00
- bd-410 (open) created 2025-10-16T16:03:31.585083-07:00
- bd-376 (open) created 2025-10-16T14:57:48.794452-07:00
- bd-7 (closed) created 2025-10-14T14:43:06.934101-07:00
## Add rate limiting to auth endpoints
Count: 3
- bd-178 (closed) created 2025-10-14T14:43:06.904917-07:00
- bd-175 (closed) created 2025-10-14T14:43:06.903236-07:00
- bd-171 (closed) created 2025-10-14T14:43:06.900983-07:00
## Add tests for git-based restoration
Count: 5
- bd-554 (open) created 2025-10-16T18:57:16.081362-07:00
- bd-447 (open) created 2025-10-16T18:54:29.108386-07:00
- bd-435 (open) created 2025-10-16T18:05:02.183952-07:00
- bd-408 (open) created 2025-10-16T16:03:31.582488-07:00
- bd-381 (open) created 2025-10-16T14:57:48.821462-07:00
## Audit and document all inconsistent issues in database
Count: 6
- bd-597 (open) created 2025-10-16T18:57:16.126722-07:00
- bd-489 (open) created 2025-10-16T18:54:29.220414-07:00
- bd-424 (open) created 2025-10-16T18:05:02.172587-07:00
- bd-397 (open) created 2025-10-16T16:03:31.520913-07:00
- bd-366 (open) created 2025-10-16T14:57:48.776118-07:00
- bd-227 (closed) created 2025-10-15T01:58:50.908363-07:00
## Auto-import fails in git workflows due to mtime issues
Count: 7
- bd-631 (in_progress) created 2025-10-16T18:57:16.268525-07:00
- bd-619 (closed) created 2025-10-16T18:57:16.251812-07:00
- bd-511 (closed) created 2025-10-16T18:54:29.258757-07:00
- bd-448 (in_progress) created 2025-10-16T18:54:29.114894-07:00
- bd-421 (closed) created 2025-10-16T18:05:02.16198-07:00
- bd-334 (in_progress) created 2025-10-16T14:57:48.682806-07:00
- bd-84 (closed) created 2025-10-14T14:43:06.941275-07:00
## Benchmark cycle detection performance on large dependency graphs
Count: 2
- bd-374 (open) created 2025-10-16T14:57:48.792813-07:00
- bd-311 (closed) created 2025-10-16T10:28:24.231469-07:00
## Bug: Import creating duplicates instead of deduplicating
Count: 2
- bd-636 (closed) created 2025-10-16T18:57:16.29361-07:00
- bd-530 (closed) created 2025-10-16T18:54:29.367086-07:00
## Build collision resolution tooling for distributed branch workflows
Count: 5
- bd-662 (closed) created 2025-10-16T18:57:16.330979-07:00
- bd-660 (closed) created 2025-10-16T18:57:16.326296-07:00
- bd-553 (closed) created 2025-10-16T18:54:29.413281-07:00
- bd-545 (closed) created 2025-10-16T18:54:29.3909-07:00
- bd-9 (closed) created 2025-10-14T14:43:06.943629-07:00
## Code review follow-up: Post-PR #8 merge improvements
Count: 8
- bd-661 (closed) created 2025-10-16T18:57:16.327043-07:00
- bd-633 (open) created 2025-10-16T18:57:16.28274-07:00
- bd-548 (closed) created 2025-10-16T18:54:29.398351-07:00
- bd-527 (open) created 2025-10-16T18:54:29.363772-07:00
- bd-426 (open) created 2025-10-16T18:05:02.175188-07:00
- bd-399 (open) created 2025-10-16T16:03:31.525208-07:00
- bd-389 (open) created 2025-10-16T14:57:48.843762-07:00
- bd-71 (closed) created 2025-10-14T14:43:06.934829-07:00
## Code review: Auto-import collision detection fix (bd-228)
Count: 6
- bd-598 (open) created 2025-10-16T18:57:16.127529-07:00
- bd-490 (open) created 2025-10-16T18:54:29.222585-07:00
- bd-427 (open) created 2025-10-16T18:05:02.175897-07:00
- bd-400 (open) created 2025-10-16T16:03:31.536355-07:00
- bd-379 (closed) created 2025-10-16T14:57:48.812015-07:00
- bd-230 (closed) created 2025-10-15T02:12:48.210337-07:00
## Concurrent bd commands collide on shared .tmp filename
Count: 5
- bd-654 (closed) created 2025-10-16T18:57:16.319205-07:00
- bd-567 (closed) created 2025-10-16T18:57:16.097942-07:00
- bd-538 (closed) created 2025-10-16T18:54:29.382598-07:00
- bd-506 (closed) created 2025-10-16T18:54:29.244231-07:00
- bd-373 (closed) created 2025-10-16T14:57:48.790027-07:00
## Consider batching API for bulk issue creation (recovered from bd-222)
Count: 8
- bd-651 (open) created 2025-10-16T18:57:16.316474-07:00
- bd-600 (open) created 2025-10-16T18:57:16.128761-07:00
- bd-536 (open) created 2025-10-16T18:54:29.380494-07:00
- bd-492 (open) created 2025-10-16T18:54:29.225697-07:00
- bd-429 (open) created 2025-10-16T18:05:02.177375-07:00
- bd-402 (open) created 2025-10-16T16:03:31.547562-07:00
- bd-371 (open) created 2025-10-16T14:57:48.784477-07:00
- bd-232 (closed) created 2025-10-15T02:21:43.085279-07:00
## Critical: Auto-import silently overwrites local changes without collision detection
Count: 3
- bd-656 (closed) created 2025-10-16T18:57:16.321969-07:00
- bd-552 (closed) created 2025-10-16T18:54:29.409532-07:00
- bd-228 (closed) created 2025-10-15T02:06:30.671918-07:00
## Data model allows inconsistent status/closed_at states
Count: 6
- bd-594 (in_progress) created 2025-10-16T18:57:16.124308-07:00
- bd-487 (in_progress) created 2025-10-16T18:54:29.217094-07:00
- bd-430 (in_progress) created 2025-10-16T18:05:02.178935-07:00
- bd-417 (in_progress) created 2025-10-16T16:03:31.596875-07:00
- bd-391 (in_progress) created 2025-10-16T14:57:48.845572-07:00
- bd-224 (closed) created 2025-10-15T01:36:21.971783-07:00
## Document git-based restoration feature
Count: 5
- bd-638 (open) created 2025-10-16T18:57:16.295983-07:00
- bd-525 (open) created 2025-10-16T18:54:29.325521-07:00
- bd-436 (open) created 2025-10-16T18:05:02.185847-07:00
- bd-409 (open) created 2025-10-16T16:03:31.584232-07:00
- bd-380 (open) created 2025-10-16T14:57:48.816028-07:00
## Epic: Add intelligent database compaction with Claude Haiku
Count: 2
- bd-392 (open) created 2025-10-16T14:57:48.846232-07:00
- bd-251 (open) created 2025-10-15T21:51:23.210339-07:00
## Epic: Fix status/closed_at inconsistency (bd-224 solution)
Count: 6
- bd-596 (open) created 2025-10-16T18:57:16.125905-07:00
- bd-488 (open) created 2025-10-16T18:54:29.219427-07:00
- bd-423 (open) created 2025-10-16T18:05:02.164815-07:00
- bd-396 (open) created 2025-10-16T16:03:31.504655-07:00
- bd-367 (open) created 2025-10-16T14:57:48.77756-07:00
- bd-226 (closed) created 2025-10-15T01:58:41.041574-07:00
## Fix: bd init --prefix test -q flag not recognized
Count: 4
- bd-558 (open) created 2025-10-16T18:57:16.087909-07:00
- bd-451 (open) created 2025-10-16T18:54:29.118089-07:00
- bd-321 (open) created 2025-10-16T14:57:48.632494-07:00
- bd-169 (closed) created 2025-10-14T14:43:06.899974-07:00
## GH-11: Add Docker support for hosted/shared instance
Count: 8
- bd-629 (open) created 2025-10-16T18:57:16.266652-07:00
- bd-617 (closed) created 2025-10-16T18:57:16.246023-07:00
- bd-523 (open) created 2025-10-16T18:54:29.323831-07:00
- bd-509 (closed) created 2025-10-16T18:54:29.247674-07:00
- bd-444 (closed) created 2025-10-16T18:05:02.191716-07:00
- bd-394 (closed) created 2025-10-16T16:03:31.498107-07:00
- bd-358 (open) created 2025-10-16T14:57:48.754885-07:00
- bd-92 (closed) created 2025-10-14T14:43:06.945147-07:00
## GH-3: Debug zsh killed error on bd init
Count: 8
- bd-630 (closed) created 2025-10-16T18:57:16.267697-07:00
- bd-618 (blocked) created 2025-10-16T18:57:16.249493-07:00
- bd-524 (open) created 2025-10-16T18:54:29.324466-07:00
- bd-510 (blocked) created 2025-10-16T18:54:29.254527-07:00
- bd-431 (blocked) created 2025-10-16T18:05:02.180111-07:00
- bd-406 (blocked) created 2025-10-16T16:03:31.580261-07:00
- bd-348 (open) created 2025-10-16T14:57:48.746521-07:00
- bd-87 (blocked) created 2025-10-14T14:43:06.942576-07:00
## Git-based restoration for compacted issues
Count: 7
- bd-649 (open) created 2025-10-16T18:57:16.31515-07:00
- bd-604 (open) created 2025-10-16T18:57:16.131361-07:00
- bd-550 (open) created 2025-10-16T18:54:29.405556-07:00
- bd-495 (open) created 2025-10-16T18:54:29.228422-07:00
- bd-422 (open) created 2025-10-16T18:05:02.163999-07:00
- bd-404 (open) created 2025-10-16T16:03:31.564412-07:00
- bd-385 (closed) created 2025-10-16T14:57:48.836877-07:00
## Implement bd restore command
Count: 9
- bd-637 (open) created 2025-10-16T18:57:16.294864-07:00
- bd-622 (open) created 2025-10-16T18:57:16.255193-07:00
- bd-607 (open) created 2025-10-16T18:57:16.147008-07:00
- bd-549 (open) created 2025-10-16T18:54:29.399249-07:00
- bd-531 (open) created 2025-10-16T18:54:29.370445-07:00
- bd-498 (open) created 2025-10-16T18:54:29.232439-07:00
- bd-434 (open) created 2025-10-16T18:05:02.183027-07:00
- bd-407 (closed) created 2025-10-16T16:03:31.581845-07:00
- bd-383 (closed) created 2025-10-16T14:57:48.831757-07:00
## Improve error handling in dependency removal during remapping
Count: 6
- bd-650 (open) created 2025-10-16T18:57:16.315828-07:00
- bd-602 (open) created 2025-10-16T18:57:16.130007-07:00
- bd-515 (open) created 2025-10-16T18:54:29.279242-07:00
- bd-493 (open) created 2025-10-16T18:54:29.226626-07:00
- bd-359 (open) created 2025-10-16T14:57:48.756031-07:00
- bd-28 (closed) created 2025-10-14T14:43:06.912228-07:00
## Improve session management
Count: 3
- bd-179 (closed) created 2025-10-14T14:43:06.905375-07:00
- bd-176 (closed) created 2025-10-14T14:43:06.903785-07:00
- bd-172 (closed) created 2025-10-14T14:43:06.901432-07:00
## Investigate data recovery for issues overwritten by auto-import bug
Count: 3
- bd-646 (closed) created 2025-10-16T18:57:16.312989-07:00
- bd-539 (closed) created 2025-10-16T18:54:29.383454-07:00
- bd-229 (closed) created 2025-10-15T02:10:40.724826-07:00
## Low priority chore
Count: 8
- bd-659 (open) created 2025-10-16T18:57:16.325571-07:00
- bd-647 (closed) created 2025-10-16T18:57:16.313802-07:00
- bd-643 (open) created 2025-10-16T18:57:16.307575-07:00
- bd-547 (open) created 2025-10-16T18:54:29.392669-07:00
- bd-542 (closed) created 2025-10-16T18:54:29.386684-07:00
- bd-534 (open) created 2025-10-16T18:54:29.378627-07:00
- bd-377 (open) created 2025-10-16T14:57:48.796499-07:00
- bd-4 (closed) created 2025-10-14T14:43:06.917877-07:00
## P2: Consider batching API for bulk issue creation
Count: 4
- bd-593 (open) created 2025-10-16T18:57:16.122852-07:00
- bd-486 (open) created 2025-10-16T18:54:29.215696-07:00
- bd-390 (open) created 2025-10-16T14:57:48.844729-07:00
- bd-222 (closed) created 2025-10-15T01:18:46.4512-07:00
## Phase 1: Implement bd daemon command
Count: 2
- bd-386 (closed) created 2025-10-16T14:57:48.840609-07:00
- bd-273 (closed) created 2025-10-16T01:40:04.263802-07:00
## Phase 1: Implement bd sync command
Count: 2
- bd-378 (closed) created 2025-10-16T14:57:48.811221-07:00
- bd-272 (closed) created 2025-10-16T01:40:04.246855-07:00
## Reach 1.0 release milestone
Count: 8
- bd-657 (closed) created 2025-10-16T18:57:16.323024-07:00
- bd-632 (open) created 2025-10-16T18:57:16.281913-07:00
- bd-540 (closed) created 2025-10-16T18:54:29.38494-07:00
- bd-526 (open) created 2025-10-16T18:54:29.34597-07:00
- bd-425 (open) created 2025-10-16T18:05:02.174097-07:00
- bd-398 (open) created 2025-10-16T16:03:31.523258-07:00
- bd-388 (open) created 2025-10-16T14:57:48.842642-07:00
- bd-8 (closed) created 2025-10-14T14:43:06.938911-07:00
## Record git commit hash during compaction
Count: 9
- bd-642 (open) created 2025-10-16T18:57:16.306079-07:00
- bd-641 (open) created 2025-10-16T18:57:16.303615-07:00
- bd-606 (open) created 2025-10-16T18:57:16.139786-07:00
- bd-551 (open) created 2025-10-16T18:54:29.406385-07:00
- bd-533 (open) created 2025-10-16T18:54:29.377847-07:00
- bd-497 (open) created 2025-10-16T18:54:29.231369-07:00
- bd-433 (open) created 2025-10-16T18:05:02.182118-07:00
- bd-395 (closed) created 2025-10-16T16:03:31.501666-07:00
- bd-387 (closed) created 2025-10-16T14:57:48.841348-07:00
## Support ID space partitioning for parallel worker agents
Count: 2
- bd-601 (closed) created 2025-10-16T18:57:16.12934-07:00
- bd-24 (closed) created 2025-10-14T14:43:06.910467-07:00
## Test reopen command
Count: 2
- bd-249 (closed) created 2025-10-15T16:28:49.924381-07:00
- bd-248 (closed) created 2025-10-15T16:28:44.246154-07:00
## Ultrathink: Choose solution for status/closed_at inconsistency (bd-224)
Count: 3
- bd-595 (closed) created 2025-10-16T18:57:16.125291-07:00
- bd-537 (closed) created 2025-10-16T18:54:29.38148-07:00
- bd-225 (closed) created 2025-10-15T01:47:25.564925-07:00
## Use safer placeholder pattern in replaceIDReferences
Count: 5
- bd-603 (open) created 2025-10-16T18:57:16.130694-07:00
- bd-494 (open) created 2025-10-16T18:54:29.227598-07:00
- bd-445 (open) created 2025-10-16T18:05:02.192424-07:00
- bd-403 (open) created 2025-10-16T16:03:31.550675-07:00
- bd-29 (open) created 2025-10-14T14:43:06.912567-07:00
## final_review_test_
Count: 4
- bd-592 (open) created 2025-10-16T18:57:16.122201-07:00
- bd-485 (open) created 2025-10-16T18:54:29.214252-07:00
- bd-317 (open) created 2025-10-16T14:57:48.617035-07:00
- bd-220 (closed) created 2025-10-15T01:17:55.669949-07:00
## final_test_10
Count: 5
- bd-566 (open) created 2025-10-16T18:57:16.096912-07:00
- bd-459 (open) created 2025-10-16T18:54:29.160672-07:00
- bd-365 (closed) created 2025-10-16T14:57:48.77507-07:00
- bd-353 (open) created 2025-10-16T14:57:48.750486-07:00
- bd-191 (closed) created 2025-10-15T01:07:02.010151-07:00
## final_test_7
Count: 4
- bd-610 (open) created 2025-10-16T18:57:16.220553-07:00
- bd-460 (open) created 2025-10-16T18:54:29.163056-07:00
- bd-330 (open) created 2025-10-16T14:57:48.665684-07:00
- bd-192 (closed) created 2025-10-15T01:07:02.010504-07:00
## parallel_test_1
Count: 10
- bd-652 (open) created 2025-10-16T18:57:16.31729-07:00
- bd-628 (open) created 2025-10-16T18:57:16.265633-07:00
- bd-616 (closed) created 2025-10-16T18:57:16.239759-07:00
- bd-522 (open) created 2025-10-16T18:54:29.311149-07:00
- bd-516 (open) created 2025-10-16T18:54:29.280457-07:00
- bd-508 (closed) created 2025-10-16T18:54:29.246693-07:00
- bd-442 (closed) created 2025-10-16T18:05:02.190287-07:00
- bd-415 (closed) created 2025-10-16T16:03:31.592055-07:00
- bd-361 (open) created 2025-10-16T14:57:48.761649-07:00
- bd-94 (closed) created 2025-10-14T14:43:06.946176-07:00
## parallel_test_10
Count: 4
- bd-609 (open) created 2025-10-16T18:57:16.194118-07:00
- bd-500 (open) created 2025-10-16T18:54:29.237287-07:00
- bd-335 (open) created 2025-10-16T14:57:48.689034-07:00
- bd-100 (closed) created 2025-10-14T14:43:06.865466-07:00
## parallel_test_2
Count: 8
- bd-623 (open) created 2025-10-16T18:57:16.258011-07:00
- bd-612 (closed) created 2025-10-16T18:57:16.232795-07:00
- bd-503 (open) created 2025-10-16T18:54:29.241214-07:00
- bd-502 (closed) created 2025-10-16T18:54:29.239523-07:00
- bd-438 (closed) created 2025-10-16T18:05:02.18713-07:00
- bd-411 (closed) created 2025-10-16T16:03:31.585784-07:00
- bd-355 (open) created 2025-10-16T14:57:48.752315-07:00
- bd-99 (closed) created 2025-10-14T14:43:06.948343-07:00
## parallel_test_3
Count: 6
- bd-620 (open) created 2025-10-16T18:57:16.252728-07:00
- bd-608 (open) created 2025-10-16T18:57:16.161617-07:00
- bd-512 (open) created 2025-10-16T18:54:29.25947-07:00
- bd-499 (open) created 2025-10-16T18:54:29.236426-07:00
- bd-354 (open) created 2025-10-16T14:57:48.751322-07:00
- bd-101 (closed) created 2025-10-14T14:43:06.865941-07:00
## parallel_test_4
Count: 11
- bd-644 (open) created 2025-10-16T18:57:16.30893-07:00
- bd-627 (open) created 2025-10-16T18:57:16.263891-07:00
- bd-615 (closed) created 2025-10-16T18:57:16.238895-07:00
- bd-521 (open) created 2025-10-16T18:54:29.299627-07:00
- bd-518 (open) created 2025-10-16T18:54:29.291492-07:00
- bd-507 (closed) created 2025-10-16T18:54:29.246065-07:00
- bd-441 (closed) created 2025-10-16T18:05:02.189537-07:00
- bd-418 (open) created 2025-10-16T16:03:31.597564-07:00
- bd-414 (closed) created 2025-10-16T16:03:31.589071-07:00
- bd-363 (open) created 2025-10-16T14:57:48.770023-07:00
- bd-95 (closed) created 2025-10-14T14:43:06.946509-07:00
## parallel_test_5
Count: 10
- bd-624 (open) created 2025-10-16T18:57:16.259921-07:00
- bd-621 (open) created 2025-10-16T18:57:16.253519-07:00
- bd-613 (closed) created 2025-10-16T18:57:16.235664-07:00
- bd-513 (open) created 2025-10-16T18:54:29.265467-07:00
- bd-505 (closed) created 2025-10-16T18:54:29.242834-07:00
- bd-504 (open) created 2025-10-16T18:54:29.242009-07:00
- bd-439 (closed) created 2025-10-16T18:05:02.187725-07:00
- bd-412 (closed) created 2025-10-16T16:03:31.586415-07:00
- bd-356 (open) created 2025-10-16T14:57:48.753003-07:00
- bd-98 (closed) created 2025-10-14T14:43:06.947803-07:00
## parallel_test_6
Count: 8
- bd-625 (open) created 2025-10-16T18:57:16.260541-07:00
- bd-614 (closed) created 2025-10-16T18:57:16.236286-07:00
- bd-519 (open) created 2025-10-16T18:54:29.296165-07:00
- bd-501 (closed) created 2025-10-16T18:54:29.238225-07:00
- bd-440 (closed) created 2025-10-16T18:05:02.188753-07:00
- bd-413 (closed) created 2025-10-16T16:03:31.588315-07:00
- bd-357 (open) created 2025-10-16T14:57:48.754125-07:00
- bd-97 (closed) created 2025-10-14T14:43:06.947256-07:00
## parallel_test_7
Count: 6
- bd-626 (open) created 2025-10-16T18:57:16.262607-07:00
- bd-611 (closed) created 2025-10-16T18:57:16.227227-07:00
- bd-541 (closed) created 2025-10-16T18:54:29.38566-07:00
- bd-520 (open) created 2025-10-16T18:54:29.29821-07:00
- bd-360 (open) created 2025-10-16T14:57:48.75773-07:00
- bd-96 (closed) created 2025-10-14T14:43:06.946887-07:00
## parallel_test_8
Count: 5
- bd-556 (open) created 2025-10-16T18:57:16.085398-07:00
- bd-449 (open) created 2025-10-16T18:54:29.116433-07:00
- bd-382 (closed) created 2025-10-16T14:57:48.825863-07:00
- bd-319 (open) created 2025-10-16T14:57:48.630725-07:00
- bd-102 (closed) created 2025-10-14T14:43:06.866351-07:00
## parallel_test_9
Count: 7
- bd-655 (closed) created 2025-10-16T18:57:16.320156-07:00
- bd-557 (open) created 2025-10-16T18:57:16.086652-07:00
- bd-544 (closed) created 2025-10-16T18:54:29.3881-07:00
- bd-450 (open) created 2025-10-16T18:54:29.117232-07:00
- bd-368 (closed) created 2025-10-16T14:57:48.780354-07:00
- bd-320 (open) created 2025-10-16T14:57:48.631628-07:00
- bd-103 (closed) created 2025-10-14T14:43:06.866766-07:00
## race_test_10
Count: 8
- bd-589 (open) created 2025-10-16T18:57:16.119487-07:00
- bd-564 (open) created 2025-10-16T18:57:16.095128-07:00
- bd-482 (open) created 2025-10-16T18:54:29.210508-07:00
- bd-457 (open) created 2025-10-16T18:54:29.159194-07:00
- bd-352 (open) created 2025-10-16T14:57:48.749464-07:00
- bd-327 (open) created 2025-10-16T14:57:48.660524-07:00
- bd-217 (closed) created 2025-10-15T01:11:09.805774-07:00
- bd-189 (closed) created 2025-10-15T01:07:02.008903-07:00
## race_test_11
Count: 8
- bd-579 (open) created 2025-10-16T18:57:16.107574-07:00
- bd-565 (open) created 2025-10-16T18:57:16.095923-07:00
- bd-472 (open) created 2025-10-16T18:54:29.199752-07:00
- bd-458 (open) created 2025-10-16T18:54:29.159866-07:00
- bd-342 (open) created 2025-10-16T14:57:48.720418-07:00
- bd-328 (open) created 2025-10-16T14:57:48.662708-07:00
- bd-207 (closed) created 2025-10-15T01:11:09.049061-07:00
- bd-190 (closed) created 2025-10-15T01:07:02.009797-07:00
## race_test_12
Count: 4
- bd-586 (open) created 2025-10-16T18:57:16.114034-07:00
- bd-479 (open) created 2025-10-16T18:54:29.206087-07:00
- bd-349 (open) created 2025-10-16T14:57:48.747288-07:00
- bd-214 (closed) created 2025-10-15T01:11:09.061603-07:00
## race_test_13
Count: 4
- bd-588 (open) created 2025-10-16T18:57:16.118444-07:00
- bd-481 (open) created 2025-10-16T18:54:29.209342-07:00
- bd-351 (open) created 2025-10-16T14:57:48.748767-07:00
- bd-216 (closed) created 2025-10-15T01:11:09.74037-07:00
## race_test_14
Count: 4
- bd-576 (open) created 2025-10-16T18:57:16.105357-07:00
- bd-469 (open) created 2025-10-16T18:54:29.193776-07:00
- bd-339 (open) created 2025-10-16T14:57:48.715948-07:00
- bd-204 (closed) created 2025-10-15T01:11:09.028356-07:00
## race_test_15
Count: 4
- bd-587 (open) created 2025-10-16T18:57:16.117429-07:00
- bd-480 (open) created 2025-10-16T18:54:29.208689-07:00
- bd-350 (open) created 2025-10-16T14:57:48.748148-07:00
- bd-215 (closed) created 2025-10-15T01:11:09.651271-07:00
## race_test_16
Count: 8
- bd-581 (open) created 2025-10-16T18:57:16.109095-07:00
- bd-562 (open) created 2025-10-16T18:57:16.092273-07:00
- bd-474 (open) created 2025-10-16T18:54:29.201518-07:00
- bd-455 (open) created 2025-10-16T18:54:29.14489-07:00
- bd-344 (open) created 2025-10-16T14:57:48.732302-07:00
- bd-325 (open) created 2025-10-16T14:57:48.643077-07:00
- bd-209 (closed) created 2025-10-15T01:11:09.146015-07:00
- bd-187 (closed) created 2025-10-15T01:07:02.008177-07:00
## race_test_17
Count: 8
- bd-590 (open) created 2025-10-16T18:57:16.120707-07:00
- bd-563 (open) created 2025-10-16T18:57:16.093146-07:00
- bd-483 (open) created 2025-10-16T18:54:29.211541-07:00
- bd-456 (open) created 2025-10-16T18:54:29.145877-07:00
- bd-329 (open) created 2025-10-16T14:57:48.663415-07:00
- bd-326 (open) created 2025-10-16T14:57:48.645291-07:00
- bd-218 (closed) created 2025-10-15T01:11:09.838009-07:00
- bd-188 (closed) created 2025-10-15T01:07:02.008525-07:00
## race_test_18
Count: 4
- bd-582 (open) created 2025-10-16T18:57:16.109904-07:00
- bd-475 (open) created 2025-10-16T18:54:29.20249-07:00
- bd-345 (open) created 2025-10-16T14:57:48.742594-07:00
- bd-210 (closed) created 2025-10-15T01:11:09.146262-07:00
## race_test_19
Count: 4
- bd-580 (open) created 2025-10-16T18:57:16.108424-07:00
- bd-473 (open) created 2025-10-16T18:54:29.20066-07:00
- bd-343 (open) created 2025-10-16T14:57:48.727492-07:00
- bd-208 (closed) created 2025-10-15T01:11:09.061296-07:00
## race_test_2
Count: 4
- bd-574 (open) created 2025-10-16T18:57:16.103608-07:00
- bd-467 (open) created 2025-10-16T18:54:29.189632-07:00
- bd-337 (open) created 2025-10-16T14:57:48.700706-07:00
- bd-202 (closed) created 2025-10-15T01:11:09.022114-07:00
## race_test_20
Count: 4
- bd-583 (open) created 2025-10-16T18:57:16.110877-07:00
- bd-476 (open) created 2025-10-16T18:54:29.203114-07:00
- bd-346 (open) created 2025-10-16T14:57:48.744437-07:00
- bd-211 (closed) created 2025-10-15T01:11:09.151945-07:00
## race_test_3
Count: 4
- bd-585 (open) created 2025-10-16T18:57:16.1129-07:00
- bd-478 (open) created 2025-10-16T18:54:29.205082-07:00
- bd-318 (open) created 2025-10-16T14:57:48.62383-07:00
- bd-213 (closed) created 2025-10-15T01:11:09.244796-07:00
## race_test_4
Count: 8
- bd-572 (open) created 2025-10-16T18:57:16.102009-07:00
- bd-559 (open) created 2025-10-16T18:57:16.088924-07:00
- bd-465 (open) created 2025-10-16T18:54:29.173666-07:00
- bd-452 (open) created 2025-10-16T18:54:29.118929-07:00
- bd-369 (open) created 2025-10-16T14:57:48.781563-07:00
- bd-322 (open) created 2025-10-16T14:57:48.635357-07:00
- bd-200 (closed) created 2025-10-15T01:11:09.001476-07:00
- bd-184 (closed) created 2025-10-15T01:07:02.006879-07:00
## race_test_5
Count: 8
- bd-573 (open) created 2025-10-16T18:57:16.102671-07:00
- bd-561 (open) created 2025-10-16T18:57:16.091191-07:00
- bd-466 (open) created 2025-10-16T18:54:29.187434-07:00
- bd-454 (open) created 2025-10-16T18:54:29.121523-07:00
- bd-336 (open) created 2025-10-16T14:57:48.697455-07:00
- bd-324 (open) created 2025-10-16T14:57:48.637257-07:00
- bd-201 (closed) created 2025-10-15T01:11:09.007015-07:00
- bd-186 (closed) created 2025-10-15T01:07:02.007814-07:00
## race_test_6
Count: 4
- bd-584 (open) created 2025-10-16T18:57:16.111868-07:00
- bd-477 (open) created 2025-10-16T18:54:29.204178-07:00
- bd-347 (open) created 2025-10-16T14:57:48.745496-07:00
- bd-212 (closed) created 2025-10-15T01:11:09.18421-07:00
## race_test_7
Count: 4
- bd-575 (open) created 2025-10-16T18:57:16.104398-07:00
- bd-468 (open) created 2025-10-16T18:54:29.192508-07:00
- bd-338 (open) created 2025-10-16T14:57:48.7088-07:00
- bd-203 (closed) created 2025-10-15T01:11:09.021971-07:00
## race_test_8
Count: 8
- bd-578 (open) created 2025-10-16T18:57:16.106883-07:00
- bd-560 (open) created 2025-10-16T18:57:16.090257-07:00
- bd-471 (open) created 2025-10-16T18:54:29.198992-07:00
- bd-453 (open) created 2025-10-16T18:54:29.120396-07:00
- bd-341 (open) created 2025-10-16T14:57:48.719466-07:00
- bd-323 (open) created 2025-10-16T14:57:48.636432-07:00
- bd-206 (closed) created 2025-10-15T01:11:09.040766-07:00
- bd-185 (closed) created 2025-10-15T01:07:02.007447-07:00
## race_test_9
Count: 4
- bd-577 (open) created 2025-10-16T18:57:16.106035-07:00
- bd-470 (open) created 2025-10-16T18:54:29.197319-07:00
- bd-340 (open) created 2025-10-16T14:57:48.716781-07:00
- bd-205 (closed) created 2025-10-15T01:11:09.032373-07:00
## stress_test_1
Count: 4
- bd-570 (open) created 2025-10-16T18:57:16.100376-07:00
- bd-463 (open) created 2025-10-16T18:54:29.166004-07:00
- bd-333 (open) created 2025-10-16T14:57:48.682146-07:00
- bd-195 (closed) created 2025-10-15T01:07:02.011549-07:00
## stress_test_5
Count: 4
- bd-568 (open) created 2025-10-16T18:57:16.098799-07:00
- bd-461 (open) created 2025-10-16T18:54:29.163666-07:00
- bd-331 (open) created 2025-10-16T14:57:48.668149-07:00
- bd-193 (closed) created 2025-10-15T01:07:02.010847-07:00
## stress_test_6
Count: 5
- bd-569 (open) created 2025-10-16T18:57:16.099688-07:00
- bd-462 (open) created 2025-10-16T18:54:29.164402-07:00
- bd-375 (closed) created 2025-10-16T14:57:48.793624-07:00
- bd-332 (open) created 2025-10-16T14:57:48.680992-07:00
- bd-194 (closed) created 2025-10-15T01:07:02.011186-07:00
## verification_
Count: 6
- bd-653 (open) created 2025-10-16T18:57:16.317983-07:00
- bd-591 (open) created 2025-10-16T18:57:16.121455-07:00
- bd-517 (open) created 2025-10-16T18:54:29.281281-07:00
- bd-484 (open) created 2025-10-16T18:54:29.212136-07:00
- bd-362 (open) created 2025-10-16T14:57:48.765482-07:00
- bd-219 (closed) created 2025-10-15T01:12:54.151096-07:00

177
REVIEW_BD379.md Normal file
View File

@@ -0,0 +1,177 @@
# Code Review: Auto-Import Collision Detection (bd-379)
## Executive Summary
The auto-import collision detection implementation is **functionally working but has several correctness and robustness issues** that should be addressed. Rating: **3.5/5** - Works in happy path but vulnerable to edge cases.
## Critical Issues (P0-P1)
### 1. **Metadata Error Handling is Too Conservative** (P0)
**Current behavior:** If `GetMetadata()` fails, auto-import is skipped entirely.
**Problem:** This means if metadata is corrupted or missing, auto-import stops forever until manually fixed.
**Fix:**
```go
lastHash, err := store.GetMetadata(ctx, "last_import_hash")
if err != nil {
if os.Getenv("BD_DEBUG") != "" {
fmt.Fprintf(os.Stderr, "Debug: metadata read failed (%v), assuming first import\n", err)
}
lastHash = "" // Treat as first import
}
```
### 2. **Hash Not Updated on Partial Success** (P0)
**Problem:** If import succeeds but we fail to update `last_import_hash`, auto-import will retry the same import forever.
**Current behavior:** Hash update happens at end (line ~404) but not error-checked.
**Fix:** Track import success/failure state and only update hash on full success:
```go
// After all imports complete successfully
if err := store.SetMetadata(ctx, "last_import_hash", currentHash); err != nil {
fmt.Fprintf(os.Stderr, "Warning: failed to update import hash: %v\n", err)
fmt.Fprintf(os.Stderr, "Next auto-import may re-import these issues.\n")
}
```
### 3. **No Transaction for Multi-Issue Import** (P1)
**Problem:** If import fails midway, database is left in inconsistent state.
**Current behavior:** Each issue is imported separately (lines 346-401).
**Fix:** Wrap entire import in a transaction or use batch operations.
### 4. **N+1 Query Pattern** (P1)
**Problem:** Line 347: `store.GetIssue(ctx, issue.ID)` is called for every issue = O(n) queries.
**Impact:** With 1000+ issues, this is slow and hammers the database.
**Fix:** Batch fetch all existing IDs upfront:
```go
existingIDs := make(map[string]*types.Issue)
allExisting, err := store.SearchIssues(ctx, "", types.IssueFilter{})
for _, issue := range allExisting {
existingIDs[issue.ID] = issue
}
```
## Medium Issues (P2)
### 5. **Scanner Uses String Conversion** (P2)
**Line 233:** `strings.NewReader(string(jsonlData))`
**Problem:** Unnecessarily converts bytes to string, wastes memory.
**Fix:** `bytes.NewReader(jsonlData)`
### 6. **Verbose Output on Every Auto-Import** (P2)
**Current:** Prints remapping summary to stderr on every collision (lines 309-329).
**Problem:** For frequent auto-imports with collisions, this gets noisy.
**Fix:** Gate detailed output behind `BD_DEBUG`, show 1-line summary by default:
```go
if os.Getenv("BD_DEBUG") != "" {
// Detailed output
} else {
fmt.Fprintf(os.Stderr, "Auto-import: %d parsed, %d remapped due to collisions\n", len(allIssues), numRemapped)
}
```
### 7. **No Collision Metrics/Telemetry** (P2)
**Problem:** No way to track how often collisions occur or if they're increasing.
**Fix:** Add metadata counters:
- `collision_count_total`
- `last_collision_timestamp`
- `auto_import_runs_total`
### 8. **"All Collisions" Case Not Optimized** (P2)
**Problem:** If every issue collides (e.g., pulling unchanged state), we still process everything.
**Fix:** If `len(filteredIssues) == 0` and `len(collisionResult.NewIssues) == 0`, it's a no-op - just update hash and return.
## Low Priority Issues (P3)
### 9. **No Configurable Collision Mode** (P3)
Some users may prefer auto-import to **fail** on collisions rather than auto-resolve.
**Suggestion:** Add `BD_AUTO_IMPORT_MODE=remap|fail` environment variable.
### 10. **No Collision Threshold** (P3)
If 90% of issues collide, something is probably wrong (bad merge).
**Suggestion:** Add `BD_AUTO_IMPORT_COLLISION_THRESHOLD` - if exceeded, fail with clear error.
## Testing Gaps
Missing test coverage for:
1. ✅ Metadata read failure → should treat as first import
2. ✅ Hash update failure → should warn but not crash
3. ✅ All issues collide → should be no-op
4. ✅ Scanner buffer overflow (>2MB line) → should error gracefully
5. ✅ Concurrent auto-imports (race condition testing)
6. ✅ Transaction rollback on mid-import failure
7. ✅ 1000+ issue performance test
## Answers to Review Questions
### Q1: Should auto-import be more aggressive (auto-resolve) or conservative (fail)?
**Recommendation:** Keep auto-resolve as default but add:
- Collision threshold that switches to fail mode if exceeded
- Config option for users who prefer fail-fast behavior
- Clear messaging about what was remapped
### Q2: Should we add a counter for collision occurrences?
**Yes.** Add metadata:
- `collision_count_total` (cumulative)
- `last_collision_count` (last run)
- `last_collision_timestamp`
### Q3: Should there be a config option to disable collision detection?
**No.** Collision detection is a safety feature. Instead provide:
- `BD_AUTO_IMPORT_MODE=remap|fail` to control behavior
- `--no-auto-import` flag already exists to disable entirely
### Q4: Is the warning too verbose for typical workflows?
**Yes.** The 10-line summary on every auto-import is noisy. Gate behind `BD_DEBUG`.
## Recommended Fixes Priority
**P0 (Critical - Fix ASAP):**
- [ ] bd-TBD: Fix metadata error handling (treat as first import)
- [ ] bd-TBD: Ensure hash update happens and is error-checked
- [ ] bd-TBD: Fix N+1 query pattern with batch fetch
**P1 (High - Fix Before 1.0):**
- [ ] bd-TBD: Wrap import in transaction for atomicity
- [ ] bd-TBD: Add test coverage for edge cases
- [ ] bd-TBD: Optimize "all collisions" case
**P2 (Medium - Nice to Have):**
- [ ] bd-TBD: Reduce output verbosity (gate behind BD_DEBUG)
- [ ] bd-TBD: Use bytes.NewReader instead of string conversion
- [ ] bd-TBD: Add collision metrics/telemetry
**P3 (Low - Future Enhancement):**
- [ ] bd-TBD: Add BD_AUTO_IMPORT_MODE config
- [ ] bd-TBD: Add collision threshold safety rail
## Conclusion
The implementation **works for the happy path** but has **robustness issues** around error handling, performance, and edge cases. The auto-resolve approach is good, but needs better error handling and performance optimization.
**Estimated effort to fix P0-P1 issues:** 2-3 days
**Risk level if not fixed:** Medium-High (data loss possible on edge cases, poor performance at scale)
---
**Review completed:** 2025-10-16
**Reviewer:** Oracle (via Amp)
**Issue:** bd-379

13
analyze_duplicates.sh Executable file
View File

@@ -0,0 +1,13 @@
#!/bin/bash
# Analyze duplicate issues
echo "# Duplicate Issues Report"
echo ""
echo "Generated: $(date)"
echo ""
./bd list --json | jq -r 'group_by(.title) | .[] | select(length > 1) | {
title: .[0].title,
count: length,
issues: [.[] | {id, status, created_at}]
} | "## \(.title)\nCount: \(.count)\n" + (.issues | map("- \(.id) (\(.status)) created \(.created_at)") | join("\n")) + "\n"'

149
close_duplicates.sh Executable file
View File

@@ -0,0 +1,149 @@
#!/bin/bash
# Close duplicate issues - generated from oracle recommendations
set -e
echo "Closing duplicate issues..."
echo ""
# Group 1: Add compacted_at_commit field — KEEP bd-432
./bd close bd-639 --reason "Duplicate of bd-432"
./bd close bd-605 --reason "Duplicate of bd-432"
./bd close bd-555 --reason "Duplicate of bd-432"
./bd close bd-546 --reason "Duplicate of bd-432"
./bd close bd-532 --reason "Duplicate of bd-432"
./bd close bd-496 --reason "Duplicate of bd-432"
# Group 2: Add label management commands — KEEP bd-364
./bd close bd-571 --reason "Duplicate of bd-364"
./bd close bd-464 --reason "Duplicate of bd-364"
# Group 3: Add migration scripts for GitHub Issues — KEEP bd-370
./bd close bd-635 --reason "Duplicate of bd-370"
./bd close bd-529 --reason "Duplicate of bd-370"
./bd close bd-443 --reason "Duplicate of bd-370"
./bd close bd-416 --reason "Duplicate of bd-370"
# Group 4: Add performance benchmarks document — KEEP bd-376
./bd close bd-634 --reason "Duplicate of bd-376"
./bd close bd-528 --reason "Duplicate of bd-376"
./bd close bd-437 --reason "Duplicate of bd-376"
./bd close bd-410 --reason "Duplicate of bd-376"
# Group 5: Audit and document all inconsistent issues — KEEP bd-366
./bd close bd-597 --reason "Duplicate of bd-366"
./bd close bd-489 --reason "Duplicate of bd-366"
./bd close bd-424 --reason "Duplicate of bd-366"
./bd close bd-397 --reason "Duplicate of bd-366"
# Group 6: Auto-import fails in git workflows — KEEP bd-334
./bd close bd-631 --reason "Duplicate of bd-334"
./bd close bd-448 --reason "Duplicate of bd-334"
# Group 7: Code review follow-up PR #8 — KEEP bd-389
./bd close bd-633 --reason "Duplicate of bd-389"
./bd close bd-527 --reason "Duplicate of bd-389"
./bd close bd-426 --reason "Duplicate of bd-389"
./bd close bd-399 --reason "Duplicate of bd-389"
# Group 8: Code review auto-import collision detection — KEEP bd-400
./bd close bd-598 --reason "Duplicate of bd-400"
./bd close bd-490 --reason "Duplicate of bd-400"
./bd close bd-427 --reason "Duplicate of bd-400"
# Group 9: Consider batching API — KEEP bd-371
./bd close bd-651 --reason "Duplicate of bd-371"
./bd close bd-600 --reason "Duplicate of bd-371"
./bd close bd-536 --reason "Duplicate of bd-371"
./bd close bd-492 --reason "Duplicate of bd-371"
./bd close bd-429 --reason "Duplicate of bd-371"
./bd close bd-402 --reason "Duplicate of bd-371"
# Group 10: Data model status/closed_at inconsistent — KEEP bd-391
./bd close bd-594 --reason "Duplicate of bd-391"
./bd close bd-487 --reason "Duplicate of bd-391"
./bd close bd-430 --reason "Duplicate of bd-391"
./bd close bd-417 --reason "Duplicate of bd-391"
# Group 11: Document git-based restoration — KEEP bd-380
./bd close bd-638 --reason "Duplicate of bd-380"
./bd close bd-525 --reason "Duplicate of bd-380"
./bd close bd-436 --reason "Duplicate of bd-380"
./bd close bd-409 --reason "Duplicate of bd-380"
# Group 12: Epic: Add intelligent database compaction — KEEP bd-251
./bd close bd-392 --reason "Duplicate of bd-251"
# Group 13: Epic: Fix status/closed_at inconsistency — KEEP bd-367
./bd close bd-596 --reason "Duplicate of bd-367"
./bd close bd-488 --reason "Duplicate of bd-367"
./bd close bd-423 --reason "Duplicate of bd-367"
./bd close bd-396 --reason "Duplicate of bd-367"
# Group 14: GH-11 Docker support — KEEP bd-358
./bd close bd-629 --reason "Duplicate of bd-358"
./bd close bd-523 --reason "Duplicate of bd-358"
# Group 15: GH-3 Debug zsh killed error — KEEP bd-87
./bd close bd-618 --reason "Duplicate of bd-87"
./bd close bd-524 --reason "Duplicate of bd-87"
./bd close bd-510 --reason "Duplicate of bd-87"
./bd close bd-431 --reason "Duplicate of bd-87"
./bd close bd-406 --reason "Duplicate of bd-87"
./bd close bd-348 --reason "Duplicate of bd-87"
# Group 16: Git-based restoration for compacted issues — KEEP bd-404
./bd close bd-649 --reason "Duplicate of bd-404"
./bd close bd-604 --reason "Duplicate of bd-404"
./bd close bd-550 --reason "Duplicate of bd-404"
./bd close bd-495 --reason "Duplicate of bd-404"
./bd close bd-422 --reason "Duplicate of bd-404"
# Group 17: Implement bd restore command — KEEP bd-434
./bd close bd-637 --reason "Duplicate of bd-434"
./bd close bd-622 --reason "Duplicate of bd-434"
./bd close bd-607 --reason "Duplicate of bd-434"
./bd close bd-549 --reason "Duplicate of bd-434"
./bd close bd-531 --reason "Duplicate of bd-434"
./bd close bd-498 --reason "Duplicate of bd-434"
# Group 18: Improve error handling in dependency removal — KEEP bd-359
./bd close bd-650 --reason "Duplicate of bd-359"
./bd close bd-602 --reason "Duplicate of bd-359"
./bd close bd-515 --reason "Duplicate of bd-359"
./bd close bd-493 --reason "Duplicate of bd-359"
# Group 19: Low priority chore — KEEP bd-377
./bd close bd-659 --reason "Duplicate of bd-377"
./bd close bd-643 --reason "Duplicate of bd-377"
./bd close bd-547 --reason "Duplicate of bd-377"
./bd close bd-534 --reason "Duplicate of bd-377"
# Group 20: P2: Consider batching API — MERGE TO bd-371
./bd close bd-593 --reason "Duplicate of bd-371"
./bd close bd-486 --reason "Duplicate of bd-371"
./bd close bd-390 --reason "Duplicate of bd-371"
# Group 21: Reach 1.0 release milestone — KEEP bd-388
./bd close bd-632 --reason "Duplicate of bd-388"
./bd close bd-526 --reason "Duplicate of bd-388"
./bd close bd-425 --reason "Duplicate of bd-388"
./bd close bd-398 --reason "Duplicate of bd-388"
# Group 22: Record git commit hash during compaction — KEEP bd-433
./bd close bd-642 --reason "Duplicate of bd-433"
./bd close bd-641 --reason "Duplicate of bd-433"
./bd close bd-606 --reason "Duplicate of bd-433"
./bd close bd-551 --reason "Duplicate of bd-433"
./bd close bd-533 --reason "Duplicate of bd-433"
./bd close bd-497 --reason "Duplicate of bd-433"
# Group 23: Use safer placeholder pattern — KEEP bd-29
./bd close bd-603 --reason "Duplicate of bd-29"
./bd close bd-494 --reason "Duplicate of bd-29"
./bd close bd-445 --reason "Duplicate of bd-29"
./bd close bd-403 --reason "Duplicate of bd-29"
echo ""
echo "Done! Closed duplicates, kept the oldest open issue in each group."
./bd stats

View File

@@ -342,12 +342,22 @@ func autoImportIfNewer() {
allIssues = filteredIssues
}
// Batch fetch all existing issues to avoid N+1 query pattern (bd-666)
allExistingIssues, err := store.SearchIssues(ctx, "", types.IssueFilter{})
if err != nil {
fmt.Fprintf(os.Stderr, "Auto-import failed: error fetching existing issues: %v\n", err)
return
}
// Build map for O(1) lookup
existingByID := make(map[string]*types.Issue)
for _, issue := range allExistingIssues {
existingByID[issue.ID] = issue
}
// Import non-colliding issues (exact matches + new issues)
for _, issue := range allIssues {
existing, err := store.GetIssue(ctx, issue.ID)
if err != nil {
continue
}
existing := existingByID[issue.ID]
if existing != nil {
// Update existing issue