March 31: 4+1 Views and a Dead Code Purge
Docs day — added the 4+1 architecture view documentation and reorganized mkdocs nav around it, plus removed the dead per-channel feathering code that single-instrument composites no longer run.
Developer Journal
4+1 architecture views
The existing architecture docs were a single sprawling page that mixed deployment diagrams, domain models, request flows, and component boundaries. Good content, hard to navigate. Re-split them along Kruchten's 4+1 views:
- Logical view — domain model, service boundaries, DTO mappings
- Process view — request flows, job queue lifecycle, SignalR push paths
- Development view — repo layout, module dependencies, build pipeline
- Physical view — deployment topology, container networking, storage volumes
- Scenarios (+1) — canonical user journeys tying the other four together
Each view gets its own page with diagrams, and the scenarios page links back into the others when a flow crosses a boundary. The mkdocs nav got reorganized to match — architecture/ is now a folder with one file per view plus an index that explains how to read them together.
The point wasn't to invent new content — most of it existed somewhere — but to give readers a consistent frame so they can find "where is the job queue documented?" without having to grep the whole docs tree.
Dead per-channel feathering code
With multi-instrument composites now using color-contribution feathering and single-instrument composites skipping feathering entirely, the old per-channel feathering path was unreachable. Deleted the function, its call sites, its tests, and the config flag that toggled it. About 200 lines gone, plus a simpler mental model for anyone reading the composite pipeline fresh.
913 was the tracking issue for this cleanup, filed back when the color-contribution path shipped. Closed with #934.
Dependabot queue drain
End of month catch-up on the dependency queue: actions/deploy-pages, fastapi, rollup, ruff, requests, pytest-cov, AWSSDK.S3, Swashbuckle.AspNetCore. All green, all merged. The dependabot flow is settled enough now that a quick skim of the diff and CI status is usually enough to ship.
Background context
A friend was brain-dumping in parallel about running 12 background tasks via Copilot in autopilot mode, setting up WinDbg MCP to capture runtime "receipts" for agents to analyze, and keeping per-branch todo files to preserve context across long sessions. Interesting to compare notes on multi-agent workflows — the patterns translate even when the tools don't. One thing that stuck: the idea of treating profiler/debugger output as first-class input for agents rather than just log files.
What shipped
| PR | Title |
|---|---|
| #936 | docs: reorganize mkdocs nav with 4+1 architecture views |
| #935 | docs: add 4+1 architecture view documentation |
| #934 | chore: remove dead per-channel feathering code (#913) |
| #933 | Bump Swashbuckle.AspNetCore from 10.1.5 to 10.1.7 |
| #932 | Bump AWSSDK.S3 from 4.0.19.1 to 4.0.19.4 |
| #927 | chore(deps): Bump pytest-cov from 7.0.0 to 7.1.0 in /processing-engine |
| #926 | chore(deps): Bump requests from 2.32.5 to 2.33.0 in /processing-engine |
| #925 | chore(deps): Bump ruff from 0.15.7 to 0.15.8 in /processing-engine |
| #924 | chore(deps): Bump @rollup/rollup-linux-arm64-musl |
| #923 | chore(deps): Bump fastapi from 0.135.1 to 0.135.2 in /processing-engine |
| #922 | chore(deps): Bump actions/deploy-pages from 4 to 5 |