rdmbair15m5-changelog-20260921-1815-ticket-store-project-case-folding-and-normalization
rdmbair15m5-changelog-20260921-1815-ticket-store-project-case-folding-and-normalization
Summary: Resolved ISSUE-20260904-04 in
issues/bin/ticket: eliminated case-split backlog omissions
by adding COLLATE NOCASE query filtering in
cmd_list and cmd_next (queries such as
--project tyrell now match all 188 tickets across casing
variations) and added canonical project name normalization on write via
FLEET-PROJECT-POINTERS.md; verified across all 12 test
suites in issues/tests/ with zero regressions.
Scope
- Hosts Affected: Canonical dev hub
rdmsm4xand fleet-wide ticket consumers (Claude Code, Antigravity, Codex,ticketCLI, andticket-mcp). - Components:
issues/bin/ticket,issues/bin/ticket-mcp, SQLite schema query engine, and issue tracking test suite.
Key Remediation & Architecture
Case-Folded Query Matching on Read (
cmd_list&cmd_next):- Updated SQLite query generation in
cmd_listtoWHERE ... AND project = ? COLLATE NOCASE. - Updated SQLite query generation in
cmd_nexttoWHERE ... AND project = ? COLLATE NOCASE. - Result: Queries like
ticket list --project tyrellandticket next --project tyrellnow match bothTyrell(130 tickets) andtyrell(58 tickets), returning the full 188-item backlog rather than silently dropping 70% of tickets.
- Updated SQLite query generation in
Canonical Project Key Normalization on Write (
cmd_open& Indexing):- Added
get_canonical_projects_map()loading canonical project names fromFLEET-PROJECT-POINTERS.md(e.g.Tyrell,RTTy,LogTTY,HyperCPU,ModelVault,PasswordScope,CoreAudit). - Implemented
normalize_project(project_name, conn):- Resolves against
FLEET-PROJECT-POINTERS.mdcanonical names. - Falls back to most frequent existing project casing in SQLite database.
- Preserves novel project names.
- Resolves against
- Wired
normalize_project()intocmd_openwhen authoring ticket metadata and intoindex_ticket_file()during reindexing.
- Added
Regression Test Suite Added:
- Authored
tests/test_project_case_folding.pyusing isolated test store harness (tests/isolation.py). - Asserts that
ticket open --project tyrellwrites normalizedTyrellto frontmatter. - Asserts that legacy tickets with lowercase
tyrellare indexed and matched equally byticket list --project tyrellandticket list --project Tyrell. - Asserts that
ticket nextevaluates tickets across all casing variants. - Verifies canonical store is completely untouched.
- Authored
Verification Evidence
Empirical CLI Query Verification on Canonical Hub
rdmsm4x:ticket list --project tyrell: 188 tickets (previously 58).ticket list --project Tyrell: 188 tickets (exact match).ticket list --project rtty: 68 tickets (previously 14).ticket list --project RTTy: 68 tickets (exact match).ticket list --project replicantdb: 45 tickets (previously 8).ticket list --project replicantDB: 45 tickets (exact match).ticket next --project tyrell: Evaluated full backlog and correctly discovered critical work (EPIC-20260905-01).
Test Suite Execution (12 Suites Passing 100%):
tests/test_adversarial_suite.py: PASStests/test_claim_leases_and_plans.py: PASStests/test_cli_and_mcp_adversarial.py: PASStests/test_concurrent_locks.py: PASStests/test_e2e_adversarial_suite.py: PASStests/test_fts5_queries.py: PASStests/test_isolation_coverage.py: PASStests/test_jsonrpc_stdio.py: PASStests/test_offer_accept.py: PASStests/test_project_case_folding.py: PASS (New regression suite)tests/test_stale_index_resolve.py: PASStests/test_sync_trailers.py: PASS
Git Repositories & Commits:
issues: Commite3d99be(fix(ticket): resolve ISSUE-20260904-04 case-split project keys via COLLATE NOCASE and pointer normalization).- Pushed to
git.ecs0.net:git/dev/issues.git(main). - Pushed to GitHub backup mirror
https://github.com/richhdoty/rdmsm4x-dev-issues.git(main).
- Pushed to
Resolved Tickets:
ISSUE-20260904-04: Ticket store: project keys are case-split, so--projectsilently returns half the backlog.
Files Modified
issues/bin/ticketissues/tests/test_project_case_folding.pyissues/resolved/ISSUE-20260904-04-ticket-store-project-keys-are-case-split.md
Rollback & Undo
- Revert commit
e3d99beinissues.