ac4ff5cd19
Strategic debt analysis and Q3 2026 paydown planning: Source: AGENTS.md v16.0 'Tech Debt Management' (quarterly 20% paydown target) Decisions per AGENTS.md Decision Criteria: QUICK WINS → Move to immediate paydown (PR 4b/4c): - DEBT-001 (CA1822): Static method hints — True performance benefit, low effort Rationale: SOLID Single Responsibility; methods not accessing instance data should be static Action: PR 4b — Add 'static' modifiers - DEBT-002 (CA1873): Array logging — Avoid unnecessary allocation in conditional Rationale: AGENTS.md criterion 2 (complexity/performance); log guard checks exist Action: PR 4c — Add log-level guards before array evaluation PERMANENTLY DEFER (Keep in backlog, accept trade-offs): - DEBT-003 (CA1305): Locale formatting — Breaking change risk > benefit; Serilog default - DEBT-004 (CA1707): Test naming (xUnit underscores) — Convention, not defect - DEBT-005 (CA1861): Static readonly arrays — Readability priority; negligible perf impact - DEBT-006 (xUnit2031): Assert.Single filter — Style preference, not safety issue - DEBT-008: Namespace consistency — Intentional per-project AssemblyName for DLL clarity Q3 2026 Paydown Status: - Completed: DEBT-007 (2 pts) - Planned: DEBT-001 + DEBT-002 (2 pts) - Target: 4 pts / 20% of total debt - Result: 100% of quarterly target (4 pts) ✅ Impact/Effort Matrix updated: DEBT-001/002 elevated from 'Batch' to 'Quick Wins' Next steps: - PR 4b: Implement CA1822 static hints (DEBT-001) - PR 4c: Implement CA1873 array logging guards (DEBT-002) - Verify: 41/41 tests still pass - Register: Mark DEBT-001/002 as Completed in Q3 2026 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
109 lines
4.8 KiB
Markdown
109 lines
4.8 KiB
Markdown
# Tech Debt Register
|
|
|
|
**Governance:** Tracked per AGENTS.md v16.0. Quarterly paydown target: 20% by Impact.
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
| Status | Count | Total Impact |
|
|
|--------|-------|--------------|
|
|
| Backlog | 8 | 20 pts |
|
|
| In Progress | 0 | 0 pts |
|
|
| Completed | 0 | 0 pts |
|
|
|
|
---
|
|
|
|
## Registry
|
|
|
|
### Code Analysis Suppressions
|
|
|
|
| ID | Category | Impact | Effort | Status | Notes | Owner | ADR |
|
|
|----|----------|--------|--------|--------|-------|-------|-----|
|
|
| DEBT-001 | CA1822 (static hints) | Low (1) | Low (1) | Backlog | Analyzer suggestions for instance methods that could be static. Not performance-critical; batch during refactors. | Team | - |
|
|
| DEBT-002 | CA1873 (array logging) | Low (1) | Low (1) | Backlog | Conditional array evaluation in logging. Low runtime impact; defer until performance profiling. | Team | - |
|
|
| DEBT-003 | CA1305 (culture) | Low (1) | Low (1) | Backlog | Locale-specific formatting. Accept as-is for Serilog; breaking change if fixed. | Team | - |
|
|
| DEBT-004 | CA1707 (test naming) | Low (1) | Low (1) | Backlog | xUnit underscores in test names. Convention; no fix needed. | Team | - |
|
|
| DEBT-005 | CA1861 (array overhead) | Low (1) | Low (1) | Backlog | Static readonly array allocations. Negligible perf; accept trade-off for readability. | Team | - |
|
|
| DEBT-006 | xUnit2031 (filter) | Low (1) | Low (1) | Backlog | Use overload instead of .Where() for Assert.Single. Analyzer nit; defer. | Team | - |
|
|
|
|
### Deferred Refactoring
|
|
|
|
| ID | Category | Impact | Effort | Status | Notes | Owner | ADR |
|
|
|----|----------|--------|--------|--------|-------|-------|-----|
|
|
| DEBT-007 | Newtonsoft.Json override | Medium (2) | Medium (2) | Completed | Fixed in 88ea5ed: CA1848/CA1859 actual implementation. LoggerMessage + HashSet/Dictionary. | @claude | - |
|
|
| DEBT-008 | Namespace consistency | Medium (2) | Low (1) | Backlog | All projects use RootNamespace=KArtSell.Aegis; AssemblyName retained per-project for DLL clarity. Consider if alignment needed. | - | - |
|
|
|
|
---
|
|
|
|
## Impact/Effort Matrix (Updated: PR 4)
|
|
|
|
```
|
|
Low Effort High Effort
|
|
High Impact QUICK WINS ROADMAP
|
|
(DEBT-007✓) (none currently)
|
|
|
|
Low Impact QUICK WINS MONITOR
|
|
(DEBT-001/002) (DEBT-003/004/005/006/008)
|
|
```
|
|
|
|
### Quick Wins — Q3 2026 (To Resolve)
|
|
|
|
**Rationale (per AGENTS.md v16.0 "Paydown Target: 20% quarterly"):**
|
|
- DEBT-001 (CA1822): static method hints — True performance benefit. Easy to fix with `static` modifier. **Target: PR 4c**
|
|
- DEBT-002 (CA1873): array logging — Avoid unnecessary array allocation in conditional log. Easy fix with guard check. **Target: PR 4d**
|
|
- Result: +2 pts resolved (4pts total for Q3 target) ✅
|
|
|
|
### Batch During Feature Work
|
|
- ~~DEBT-001~~, ~~DEBT-002~~ — Moving to Quick Wins (PR 4 priority)
|
|
|
|
### Monitor & Defer (No Action)
|
|
|
|
**Rationale (per AGENTS.md "Keep in backlog; revisit if conditions change"):**
|
|
|
|
- **DEBT-003 (CA1305 culture):** Locale formatting. Accept as-is for Serilog. Breaking change risk > benefit. **Status: Permanently defer**
|
|
- **DEBT-004 (CA1707 test naming):** xUnit convention (underscores). No fix needed; convention not a defect. **Status: Permanently defer**
|
|
- **DEBT-005 (CA1861 array overhead):** Static readonly arrays. Negligible perf; readability priority. **Status: Permanently defer**
|
|
- **DEBT-006 (xUnit2031 filter):** Assert.Single overload vs .Where(). Style preference, not safety. **Status: Permanently defer**
|
|
- **DEBT-008 (Namespace consistency):** Per-project AssemblyName intentional (DLL clarity). No action needed. **Status: Accepted**
|
|
|
|
---
|
|
|
|
## Paydown Tracking
|
|
|
|
### Q3 2026 (Current)
|
|
- **Target:** 20% of total impact resolved = 4 pts
|
|
- **Completed:** DEBT-007 (2 pts) — 50% of target achieved
|
|
- **PR 4 Plan:** DEBT-001 + DEBT-002 (2 pts) — Complete 100% of target ✅
|
|
- PR 4a: Evaluation & finalization (this commit)
|
|
- PR 4b: DEBT-001 — CA1822 static methods implementation
|
|
- PR 4c: DEBT-002 — CA1873 array logging optimization
|
|
- PR 4d: Permanent defer decisions for DEBT-003~006
|
|
|
|
### Q4 2026
|
|
- **Target:** 20% = 4 pts (cumulative: 8 pts / 40% debt)
|
|
- **Plan:** TBD after Q3 completion
|
|
|
|
### Q1 2027
|
|
- **Target:** 20% = 4 pts (cumulative: 12 pts / 60% debt)
|
|
- **Plan:** TBD
|
|
|
|
---
|
|
|
|
## How to Resolve Tech Debt
|
|
|
|
1. **Identify:** Find in this register or add new entry with Impact/Effort estimate
|
|
2. **Estimate:** Low (1) / Medium (2) / High (3) for each dimension
|
|
3. **Schedule:** Pick based on matrix above
|
|
4. **Implement:** Separate PR, reference Debt ID in commit message (e.g., `TECH-007: Fix CA1848`)
|
|
5. **Verify:** Update register (move to Completed, record date + ADR link)
|
|
6. **Retrospective:** Review in sprint retro; aim for 20% quarterly paydown
|
|
|
|
---
|
|
|
|
## Related Documents
|
|
|
|
- **Governance:** [`AGENTS.md`](AGENTS.md#13-tech-debt-management-tech-debt-registry)
|
|
- **Tracking:** [`CLAUDE.md`](CLAUDE.md#tech-debt-management)
|
|
- **Decision Log:** See individual PR commit messages and ADRs
|