Technical Debt Registry
Aggregated technical debt across all projects. Updated daily from ops-core.
Summary
- Total Items: 143
- High Priority: 18
- Medium Priority: 46
- Low Priority: 55
- Estimated Hours: 486
By Project
Aloysius-Productions-Knowledge-Vault
| Item | Priority | Notes |
|---|---|---|
| 2 orphaned pages (daily notes only) | low | Only daily notes remain orphaned (acceptable) |
| 0% wikilink non-compliance (100% compliant) | low | Fully remediated 2026-03-13 via Wave 7 |
| ~20 files awaiting integration | low | 5 deferred (PDF/binary) + 15 low-priority P3 remaining |
| No pre-commit link checking | low | CI gates now validate on deploy |
| No test runner configured | low | 4 test files exist but cannot be run |
| Previous audit TODOs open | medium | 4/5 long-term recommendations still unaddressed |
Chess
| Item | Priority | Notes |
|---|---|---|
| localStorage/IndexedDB dual storage | medium | Game state saved in both; unclear source of truth |
| App.tsx monolith (340+ lines) | low | Should extract SyncPanel, useGameState hook |
| Mixed directory structure (Components/ vs src/) | low | Legacy vs new structure coexist |
| Unused encryption/storage utilities from CCP fork | low | src/utils/storage.ts, src/utils/types.ts still present |
| No tests for App.tsx or Board.tsx | medium | Core game logic untested |
as any type cast in Board.tsx FEN parser | low | Line 30: bypasses type safety |
Dice
| Item | Priority | Notes |
|---|---|---|
| Gesture interactions not yet implemented | medium | Phase 9 (swipe, long-press, drag) planned but not started |
| Layout refresh pending | medium | Phase 10 (improved responsiveness) planned but not started |
| No unit tests | low | Simple MVP; tests optional per status, but growing codebase may benefit |
| Legacy color aliases in AloysiusTheme | low | Deprecated static aliases still present for backward compatibility |
Eliza
| Item | Priority | Notes |
|---|---|---|
| Rule file sync loading | low | Could use async loading for better performance |
Some any types in persona collections | low | Could tighten type definitions |
| Dogfooding insights not yet fully actioned | medium | Some empathy improvements deferred |
| Fire-and-forget persistence calls | low | addMessage() errors silently swallowed in server.ts |
| Console statement lint warnings | low | ~38 warnings in CLI are expected, ~3 any types in loaders |
FortuneTeller
| Item | Priority | Notes |
|---|---|---|
| Empty test suite (FortuneTellerTests/) | high | No automated tests; AlgorithmicProvider is high-priority target |
| Silent JSON encoding errors (try?) | medium | DailyFortuneViewModel persistence uses try? with no error handling |
| Hardcoded cookie colors outside theme system | low | D4A574, C4956A, B8855A, FFF8E7 in FortuneCookieView.swift |
| Undocumented magic numbers in AlgorithmicProvider | low | humorChance = 0.17 — why 17%? No comment explaining rationale |
| No export/backup for fortune history | low | Data lost on app deletion; no Files app export |
| Timezone fragility in daily fortune key pattern | medium | dailyFortune_yyyy-MM-dd could duplicate on timezone change |
| No logging or analytics implemented | low | No console logging or crash reporting |
| TestFlight distribution not yet completed | medium | Phase 4 planned but not executed |
GTD
| Item | Priority | Notes |
|---|---|---|
| PeppermintIntegration.connect() is a stub | low | TODO: Implement real connection test |
| localStorage 5MB size limit | medium | No migration strategy for large inboxes |
| iOS app feature parity gap | medium | Web has features iOS lacks (Eliza, filters, integrations) |
| No cloud sync between devices | medium | Requested feature, complex to implement correctly |
| No batch processing mode | low | Process multiple items at once with keyboard shortcuts |
| iOS error handling uses print() only | low | No user-facing error feedback on iOS |
| Empty XCTest target for iOS | low | Test directory exists but no tests written |
| Settings.tsx 6-way if-else chains | low | Candidate for integration config map refactor |
| Task extraction sensitivity too low | medium | ”I need to do X tomorrow” doesn’t always trigger extraction — shouldExtractTask guard may be too aggressive or task extraction regex patterns need broadening |
| Chat UX feels clunky | medium | Needs polish pass — response latency feel, visual transitions, empty state, conversation starters/prompts |
MadLibs
| Item | Priority | Notes |
|---|---|---|
| Classic Mode input flow needs smoothing | medium | Keyboard behavior and field interactions not yet polished |
| Creative Mode word collection UX | medium | Template matching clarity needs improvement |
| Template Editor blank positioning | medium | Insert position not always intuitive |
| No iCloud sync | low | Data is device-local only; UserDefaults doesn’t sync |
| No sharing features | low | Explicitly out of scope but commonly requested |
Playground
| Item | Priority | Notes |
|---|---|---|
| Git history bloat | low | 195MB of reference repos remain in git history. A future git filter-repo could clean this but is not urgent |
Poker
| Item | Priority | Notes |
|---|---|---|
| SoundManager uses AudioToolbox (no volume control) | medium | Should migrate to AVAudioPlayer |
| Volume slider in settings is non-functional | low | Noted in code comment as future upgrade |
SoundBoard
| Item | Priority | Notes |
|---|---|---|
| No persistence for custom sounds | medium | Board data is in-memory only |
| Dual type files (types.ts and types/index.ts) | low | Should consolidate to one |
| SoundManager volume slider is UI-only for SystemSounds | low | AudioToolbox ignores app volume; noted for AVAudioPlayer migration |
Walkie-Talkie
| Item | Priority | Notes |
|---|---|---|
| Floor control (PTT) not implemented | high | Phase 6 planned but not started |
| Mode switcher UI pending | high | Cloud vs LAN/PTT mode selection not built |
| REACT_APP_ env vars in constants.js | low | Legacy CRA env var prefix; should be VITE_ |
| No TypeScript | low | Project uses plain JavaScript; TS would improve maintainability |
| PeerServer hardcoded to localhost:9000 | medium | Needs configuration for LAN deployment |
| No end-to-end encryption | medium | Planned for future version |
aloysius-dashboard
| Item | Priority | Notes |
|---|---|---|
| No tests | medium | Add unit tests for components |
aloysius-event-horizon
| Item | Priority | Notes |
|---|---|---|
calendar_client.py | RESOLVED 2026-02-01 - 82% coverage via test_calendar_client.py | |
integrations.py | RESOLVED 2026-02-01 - 87% coverage via test_integrations.py | |
session_scheduler.py | RESOLVED 2026-02-01 - 99% coverage via test_session_scheduler.py | |
cli/schedule.py | RESOLVED 2026-02-01 - 74% coverage via test_cli.py | |
cli/sync_calendar.py | RESOLVED 2026-02-02 - 95% coverage via test_sync_calendar.py (20 tests, Google API mocked) | |
| RESOLVED - Fully operational in security.yml lines 190-205; scans p/security-audit + p/secrets; SARIF uploaded to GitHub Security tab | ||
| RESOLVED 2026-02-01 - Health indicators updated | ||
RESOLVED - .pre-commit-config.yaml operational | ||
RESOLVED - pyproject.toml created and all tools configured | ||
| Test coverage below 75% threshold | critical | Coverage regressed to 73.21% (2026-03-10 audit); worst: windows.py 57%, storage.py 58%, compliance/scheduler.py 60% |
| Silent exception handlers (19 bare except/pass) | high | Count grew from 12→19; locations: aggregation/collector.py, knowledge/capture.py, compliance/scheduler.py, knowledge/review.py, rhythms/* — add logger.error() before pass |
Replace print() with logging (96 instances, was 47) | high | Count doubled from 47 to 96 as subpackages were added; library modules should use logging, CLI can retain print() |
integrations.py is 1204 lines | low | Stable; refactor if adding new integrations |
| No upper bounds on dependency versions | low | All deps use >= floor only; breaking changes will slip in silently |
| Security calibration ends 2026-03-17 | medium | Auto-transitions to enforcing; only secret_scan blocks by default; consider enabling sast_blocking=true |
aloysius-research-lab
| Item | Priority | Notes |
|---|---|---|
| No tests in 4 of 6 POCs | high | angular-yellicode, yellicode (complete POCs with zero tests), scaffolding-tools, dr-zero-local |
| jp-sdk is pure stub | medium | Every method returns hardcoded data; needs real implementation or removal |
| No branching strategy | medium | 52 commits on main, zero feature branches, PR template never used for human PRs |
| Security calibration deadline Feb 15 | high | Dependency and SAST gates switch to blocking; run scans and resolve findings before then |
| dr-zero-local @types/node still at 20.0.0 | low | Cosmetic mismatch: jp-sdk now at @types/node 25.2.1 while dr-zero-local remains at 20.0.0 |
aloysius-resource-grid
| Item | Priority | Notes |
|---|---|---|
| Content directories empty | high | Placeholders ready for population — this is the #1 gap |
| CI/CD tools unpinned | medium | TruffleHog, Trivy, lychee all pull latest — pin to specific versions |
| Missing Inventory subdirectories | low | Templates/ and Configs/ referenced in Inventory/README.md but not created |
| Self-hosted runner single point of failure | low | All workflows depend on self-hosted runner with no fallback |
aura
| Item | Priority | Notes |
|---|---|---|
| Monolithic App.tsx | ||
| No error boundaries | ||
CSV import uses any types | ||
| localStorage unencrypted | ||
| Low test coverage |
cipher
| Item | Priority | Notes |
|---|---|---|
| Jest → Vitest migration for haven tests | medium | Tests copied but use Jest APIs, need conversion |
| Storage module excluded from build | low | Haven excluded src/storage from tsconfig due to browser APIs |
toBase64 stack overflow on large inputs | high | String.fromCharCode(...bytes) spread blows call stack >100KB |
| Non-constant-time identity comparison | high | Timing attack vector in SignalProtocolStore.arrayBufferEqual |
| Haven-specific hardcoded references | medium | HavenKeyDB, haven_ prefixes, haven-settings-v1 salt |
| Missing ESLint configuration | medium | eslint installed but no config file exists |
| Duplicate test case in protocol.test.ts | low | ”rejects invalid prekey signature” appears twice |
| Dead code in session.ts | low | uint8ArrayToBase64 defined but never called |
| Settings module has zero test coverage | high | deriveSettingsKey, encryptSettings, decryptSettings all untested |
| X3DH respondX3DH shared secret untested | high | No test verifies initiator and responder derive same secret |
djg
| Item | Priority | Notes |
|---|---|---|
| No actual joke generation functionality | high | Core feature not yet implemented |
| Replace placeholder GA tracking ID (G-XXXXXXXXXX) | high | Must be replaced before production deployment |
| Update README.md from Vite boilerplate | medium | Current README explains Vite, not the app |
| Sync USER_TESTING.md with actual features | medium | References removed counter feature |
| No React-specific ESLint rules | medium | Only typescript-eslint configured |
| Feedback labeled “Report a Bug” but tracks as “Feedback” | low | Semantic mismatch between UI and analytics |
gloriously-awesome-system
| Item | Priority | Notes |
|---|---|---|
| GSD to GAS branding migration incomplete | low | Some internal references still use GSD naming |
gw
| Item | Priority | Notes |
|---|---|---|
| Low test coverage (~5%) | high | Only IdeaCatcher has basic tests |
| No error boundaries in React tree | medium | Unhandled errors crash the entire app |
| Auto-save uses clear+bulkInsert | low | Not incremental; acceptable at current data scale |
| Deprecated onKeyPress usage | low | Should use onKeyDown |
haven
| Item | Priority | Notes |
|---|---|---|
| Image attachment support deferred | medium | Rich messaging phase scoped text/reactions/voice only; image pipeline deferred |
| CLI has 0 tests | medium | All other packages have tests; CLI is untested |
| react@18 → react@19 migration needed | medium | react-dom stays at 18; coordinated upgrade of react + react-dom + @types/react + @types/react-dom required |
| settings-routes tests missing JWT_SECRET | low | 8 test failures because test setup calls initializeDatabase() without setting JWT_SECRET env var |
| getRoomMembers API mismatch | low | Service returns displayName but test expects username field |
| Pre-1.0 crypto dependency | medium | @privacyresearch/libsignal-protocol-typescript@0.0.16 is pre-release; evaluate alternatives |
jp
| Item | Priority | Notes |
|---|---|---|
| Phase 3 LLM Integration | high | Blocked on hardware (3-6 months) |
| CI Runner Infrastructure | Self-hosted runner (runner-jp) operational. Labels restored 2026-02-19 after merge regression. |
meridian
| Item | Priority | Notes |
|---|---|---|
| Stub encryption (base64, not AES-256-GCM) | critical | See .planning/codebase/CONCERNS.md |
| No transport layer | critical | Messages exist only in React state |
| UI claims false encryption | high | UI says “AES-256-GCM” but uses btoa() |
| Math.random() for key material | critical | Replace with crypto.getRandomValues() |
pseudogen
| Item | Priority | Notes |
|---|---|---|
| Legacy fallback parser | low | Kept in flowchart-converter.ts for error recovery, but nesting parser handles all cases (effectively dead code) |
| Limited type safety in store actions | medium | Many functions use Partial |
| No server-side persistence | low | Fully client-side, data only in browser IndexedDB, no cloud backup/sync |
| No code size limits enforced | medium | Input validation added (50KB limit) but not enforced in all entry points |
| Algorithm visualizer not wired | medium | Algorithm definitions exist, but step-by-step visualization UI incomplete |
| QuickJS sandbox unused | low | Dependency added for future interpreter features, not yet integrated |
| Deprecated adventure TypeScript files | low | Old create-function.ts, build-loop.ts, create-conditional.ts kept for reference after YAML migration |
quest-forge
| Item | Priority | Notes |
|---|---|---|
| No automated test suite | high | SwiftUI previews used for visual verification only |
| Singleton managers limit testability | medium | PersistenceManager, AchievementManager, AudioManager all use .shared |
| Character-specific content only in Cursed Temple | medium | Other scenarios lack character-gated choices |
| Narrative pattern duplication across scenarios | medium | Some branching structures could be abstracted |
| Scene transition performance on older devices | low | Complex scenes with many choices show slight lag |
| Silent error handling in persistence (print-only) | medium | Save failures logged to console, no user feedback |
| Procedural audio placeholder quality | low | Noise bursts for all SFX; needs real audio assets |
| No export/backup for world state | low | Data lost on app deletion |
stock-art-collector
| Item | Priority | Notes |
|---|---|---|
| Download-to-catalog gap | high | sac download saves file but doesn’t insert Asset record. Pipeline resolver depends on catalog. |
| Serve test hangs | medium | TestServeCommand blocks pytest. Needs pytest-timeout or mock. |
| Video metadata requires FFmpeg | medium | External dependency, should gracefully degrade |
| No persistent rate limit state | low | Rate limits reset on restart, could persist to DB |
| Export hardcodes limit=1000 | low | Made configurable via —limit in Phase 1 tech debt |
Last synced: 2026-03-13