3.1 KiB
3.1 KiB
Architecture Hardening Backlog
Date: 2026-03-30 Purpose: Keep the remaining cleanup work for the current quality/security scope in a single prioritized list, so small hardening slices can be completed before larger redesign work.
Recently Completed
- SSE audience model narrowed to canonical
user:*,permission:*, andresource:*scopes only - CI architecture guardrail added for SSE audience scoping
- import boundaries hardened for server dispo workbooks and browser spreadsheet uploads
- AI and SMTP runtime diagnostics sanitized before they reach logs or admin-facing error messages
- transitive audit hotspots for
flattedandpicomatchpinned through rootpnpm.overrides apps/webexport paths migrated from directxlsxusage to a sharedexceljsworkbook export helperpackages/applicationworkbook reading andpackages/engineXLSX export serialization migrated fromxlsxtoexceljspnpm audit --audit-level=highno longer reports high-severity dependency findingsapps/webnow has focused Vitest coverage for browser spreadsheet parsing and skill-matrix workbook parsing- cron routes, Redis helpers, reminder scheduling, webhook dispatching, and SSE fallback paths now use structured logger calls instead of raw
console.* packages/apinow has focused Vitest coverage for reminder scheduler and webhook dispatcher logging failuresapps/webtypecheck is now decoupled from generated.next-e2eartifacts via a dedicatedtsconfig.typecheck.json- comment entity support is now centralized across shared constants, API registry policy, assistant tool metadata, and the web comment target API without pretending a second consumer exists
resourceis now onboarded as the second real comment entity, reusing the same ownership and staff-visibility rules as the resource detail route- comment mention autocomplete now uses a dedicated entity-scoped API route instead of inheriting the narrower
user.listAssignableaudience - runtime secret handling is now environment-first end to end: admin updates no longer persist new operational secrets, runtime status is surfaced explicitly, and legacy database secret copies can be cleared through a dedicated cleanup path
apps/websystem settings UI is now decomposed into section components with shared secret/runtime helpers, bringing all files in that slice back under the file-size guardrail
Next Up
Pin the next structural cleanup on the API side:
split packages/api/src/router/assistant-tools.ts into domain-oriented tool modules without changing the public tool contract.
Remaining Major Themes
The small hardening slices are effectively exhausted. The remaining work is now structural rather than another quick batch:
- secrets and runtime configuration policy
- oversized router decomposition
- production-grade rate limiting
- canonical image-based production delivery
- performance hotspot reduction
Working Rule
For the next batches, prefer work in this order:
- remove or isolate known-risk runtime dependencies
- add guardrails and tests around already-hardened code
- only then expand architecture surface area