Follow-up to the 2026-10-18 architecture audit, linked to PAR-449 and the completed architecture rebuild PAR-408. Rules are in docs/architecture.md. Audit baseline: commit 08d99ee; all 18 architecture checks passed, which does not establish full compliance.
Baseline scan found 19 explicit return null; statements in 16 Java files outside persistence; this is a lower bound, since it excludes .orElse(null), nullable fields and arguments. Examples: issues/usecase/UpdateIssue.statusName, triage/usecase/ApplyDecision.firstNonBlank, MCP parsers, webhook helpers, and platform/mcp/McpRequestContextExtractor.
Acceptance:
Implemented in stacked PR #119, based on the preceding architecture layer. Cumulative verification at 46d7c31: 1,334 backend tests, 1,230 web unit tests and 480 Chromium story tests passed; lint, typecheck, API drift and production build/CSS checks passed. The complete story suite passed on the CI-prescribed retry after the known PAR-443 iframe import flake. Diagram uploaded and PR base/head verified. Awaiting review; not merged.
Merged PR #119 into main after all eight stack PRs passed CI. Merge commits preserved dependency ancestry; every layer's retargeted diff and exact head were verified. The full stack head 46d7c31 is now an ancestor of main at b5d5ef5. Marked Done. The separate tenant-index clarification remains tracked in PAR-495.
Implementing explicit application absence above PAR-475: replace nullable lookups, event changes, triage field resolution and helper returns with Optional/Result; separate nullable HTTP/SDK/JSON interoperability contracts from application state. Add a source-aware regression check covering null returns and Optional.orElse(null), plus missing/invalid-input tests.