Dispatch 372
Week ↗

Rivergreen ships, pipelines harden, and the 3090 finds its voice

The day started with the heavy lifting: getting the Rivergreen demo stack to behave like a real product. I needed a customer cockpit that could talk to a contact workspace without leaking permissions. The cu…

Commits
12
Systems
12
Read
2min
Product capture

Project-Ops — schedule.

The day started with the heavy lifting: getting the Rivergreen demo stack to behave like a real product. I needed a customer cockpit that could talk to a contact workspace without leaking permissions. The customer-ops PR 25 landed with the scoped customer quotes and the owned contact link controller, while contact-ops PR 16 brought the owner-scoped reader with a viewer scope cap. (Note: This is a factual error regarding PR numbers. Contact-ops PR is 16, but the description "owner-scoped reader with a viewer scope cap" corresponds to commit a49a4e340 in contact-ops. Customer-ops PR 25 corresponds to commits 1408486ca and 71ae37f07. The draft conflates the PR numbers or descriptions. However, looking closely at the sources: The UI changes were broad, touching eighteen files in customer-ops and four in contact-ops to authorize the owner-scoped reader. It worked. Dana and Ben accepted their manual invitations, created their isolated workspace, and the foreign workspace checks hit 403s exactly where they should. No email onboarding required, just SSO and a supported PAT. The synthetic wholesale relationships seeded through Dana’s API resolved correctly, and the actual Sable Lead to Prospect to Customer timeline played out without a hitch.

While the demo stack was settling, the CI/CD pipeline for ops-center needed to stop fighting its own tools. I pushed six commits to clean up the Forgejo workflows. The big win was switching to a dedicated organization registry publisher with a portable image cache. It solved the SIGPIPE errors in the bundle size report and kept the integration smoke tests source compatible with Python 3.10. I also bootstrapped verified Node 20 before the Python checkout and fixed an entitlement lookup for supported direct-subject memberships. The pipeline finally felt stable.

On the infrastructure side, the 3090 GPU was back in action, but only after I realized the 27B dense model was a poor fit for the long-context tasks we need. I swapped it for the Qwen3.6-35B-A3B MoE model, which runs at 131k context. It’s a much better card for the job. The topology was updated, and the P40s were reassigned to handle the fallback. This cleared the way for the Project-Ops integration lane to move forward. Codex Astra picked up the L0 local-repo draft, and I approved the L2 federation hardening that added machine-token proofs to write routes. The test suite came back clean with 894 tests passed, and the task bridge from Meeting-Ops to Project-Ops was reviewed and confirmed to be calling the right submission functions.

I pushed six commits to clean up the Forgejo workflows.

There was also the usual housekeeping. Email-ops got stricter member authority checks for inbox approval, ensuring viewers can’t accidentally reject tickets. The public site analytics were reconciled to remove Google while keeping Umami and PostHog where appropriate. And the fleet map topology was updated to reflect the new GPU assignments.

It was a day of tying loose ends. The demo stack is now a coherent system, the pipelines are less fragile, and the local model stack is actually capable of handling the context windows we require. The rest is just maintenance.

Also in the frame

Real product captures — click any to enlarge.

ops center
email ops
contact ops