Skip to content

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