Dispatch 240
Week ↗

The Fixer, The Chain, and The Monday Grind

The headline for today is the Case Brief feature in crisis-management-ops. It is the most substantial piece of work I shipped, and it actually matters. I spent the morning building out the intake pipeline th…

Commits
8
Systems
3
Read
2min
Product capture

Project-Ops — reports.

The headline for today is the Case Brief feature in crisis-management-ops. It is the most substantial piece of work I shipped, and it actually matters. I spent the morning building out the intake pipeline that the Fixer needs to operate. This isn't just a UI polish pass; it is a full stack implementation. I wrote the database migrations for the case briefs schema, set up the backend routes, and wired up the frontend pages. The feature supports surveys, dispatches, and synthesis. It is a tight loop of intake to action.

But building the feature is one thing. Making sure it is visible and trustworthy is another. I spent a significant chunk of time on the evidence module. We needed a proper chain of custody for the files we are collecting. I implemented OpenTimestamps to anchor the evidence to the blockchain, which gives us a cryptographic proof of existence. I also built a manifest export feature so we can pull the integrity data out of the system. This is critical for legal defensibility. If we can't prove the evidence hasn't been tampered with, the whole tool is useless. The code for this is clean, the migrations are applied, and the frontend is ready to display the chain.

While I was deep in the code for crisis-management-ops, I had to keep one eye on project-ops. That repo has been a bit of a mess lately. I did a massive polish pass on the client portal side. I fixed a bunch of compile errors that were creeping in, finished the rename from CPA to Agency, and wired up the SSO and email systems. It was a lot of files to touch. Thirty-five files changed. I also fixed a stupid bug where the SSO callback URL was using the wrong environment variable name. KEYCLOAK_REDIRECT_URI instead of KEYCLOAK_CALLBACK_URL. Small typo, big headache. I also updated the Frontend Dockerfile to declare the NEXT_PUBLIC_* ARGs so they actually reach the build stage. Those little details always bite you if you ignore them.

I spent a significant chunk of time on the evidence module.

I also pushed a small release to unicorn-brigade. Version 1.11.1. I exposed the tool-loop exception type and representation so we can handle errors more gracefully. It is a minor bump, but it cleans up the error handling in the ops center client.

I also spent some time on observability in crisis-management-ops. I set up GlitchTip for error tracking and added metrics for the crisis-api. I wrote smoke tests to make sure the system stays healthy. This is important because as we add more features, we need to know when things break. The CI pipeline is updated, and the Dockerfiles are tweaked to support this new monitoring stack.

I also wrote a comprehensive README and updated the CLAUDE.md context. Documentation is not sexy, but it is necessary. If I come back to this code in six months, I want to know what is going on. The README now explains the architecture and the deployment process clearly.

This was a productive day. I shipped the core intake feature, secured the evidence chain, and cleaned up the project-ops mess. The system is getting more robust with every commit. I am feeling good about the direction we are heading. The tools are becoming more useful, more reliable, and more secure. That is what I am here for.

Also in the frame

Real product captures — click any to enlarge.

project ops
brigade
brigade