The dogfood run: Clerk auth, D1 persistence and Cloudflare deploy, composed cold from the blueprint shelf to a live production Worker.
Stravica
AI software, properly.
Stravica is where I work out how to build software with AI, and where what gets built lives. RCF, the Requirements Confidence Framework, is the method. RCF Lite is the tooling, on npm today. A Digital Operator practises both, and the writing tracks what held up.
Receipts
Built with RCF Lite.
Watchpost, a self-hosted uptime monitor built end to end through the framework, here watching real Stravica surfaces.
$ rcf define blueprint add @stock/security-auth-magic-link
[rcf] blueprint add refused: 1 conflict(s) detected.
conflict on topic (authModel):
incoming blueprint security-auth-magic-link:
Passwordless magic-link sign-in with server-issued
opaque cookie sessions as the project's
authentication model ...
existing blueprint security-auth-clerk:
Clerk-hosted identity with server-verified session
cookies as the project's authentication model ...
refs: ADR-501-security-auth-magic-link-model
ADR-1001-security-auth-clerk-auth-model
resolutions (pick one, honest options only):
1. Adopt the incoming blueprint. ...
2. Keep the existing blueprint. ...
3. Author a project-level ADR that supersedes both. ...
4. Declare the resolution on the add itself:
rcf define blueprint add @stock/security-auth-magic-link
--resolve authModel=project:<ADR-id>
Two auth blueprints on one project. The compose gate refuses, names the conflict and lists the honest ways out.
rcf audit view, the live review surface over the same project's tree.
- Auth + persistence + deploy security-auth-clerk · persistence-data-d1 · deploy-cloudflare-workers
- API with CI gates from hour one application-api-rest · ci-pipeline
- Self-hosted auth with Keycloak security-auth-keycloak
Three recipes off the shelf; fourteen blueprints on it. More in the build queue.
Methodology
RCF
The Requirements Confidence Framework. A working method for closing the gap between “the AI built something” and “the AI built what you asked for.” Requirements at the apex, acceptance criteria as the contract, traceability built into the data model. The full methodology, end to end, and the lineage that landed it.
Tooling
RCF Lite
The method, runnable. One npm package, plain JSON files that live in your own repository, and an MCP server your coding agent drives. Wire it once and your agent keeps a live chain from what you asked for, through requirements and acceptance criteria, into the tests that prove it. It’s 0.x and partly built, and the docs carry a status page that says which pieces are how far along, plainly.
Practice
Digital Operator
A digital counterpart to a human operator role. It does the work, records how I would have done it while doing it, and feeds what it learned into a shared library the rest of my Operators draw from. Two running today. The first one built this site.
Reports
When the writing makes a claim about models, there’s a report behind it. Five real engineering tasks, the same harness each time, verdicts published whether the local model wins or loses.
-
Qwen3.8-Flash-Next vs Claude Opus 4.7
The local mixture-of-experts wins test-strategy outright, holds the structured tools, and loses log-triage and prose to the frontier.
-
Qwen 3.8-27B vs Claude Opus 4.7
Local is adoptable for structured and mechanical work; the frontier earns its keep where judgement depth matters.
-
Qwen 3.8-27B vs Claude Opus 4.6
The head-to-head from Qwen’s own release benchmarks. The vendor positioning holds on three of five tasks.
Latest from the blog
New writing most weeks.
-
Harness without a spec is a loop without a target.
Harness engineering has the loop close to solved. Plan, act, verify, repeat, with humans steering rather than typing. But almost every harness points the verify step at proxies, tests the agent wrote, lint, a second model's opinion of the diff, and a loop aimed at a proxy converges on the proxy. A guard job in my own CI sat green for five weeks while blind to the one thing it existed to check. The missing half of the discipline is the target, a spec layer the loop can verify against.
-
The local model won one of my five tools.
A 122GiB open-weight checkpoint on a desktop box beat Claude Opus 4.7 outright on one of the five production CLI tools in my benchmark, at electricity prices, two days after release. It also lost to everything on another one. The pair of results matters more than either half, because together they say the unit of model choice is now the tool, not the estate.
-
Your tests passed. Your suite lied.
An unattended AI build shipped an email channel with an integration suite at twelve of twelve green, marked approved, and no API key had ever existed in the build. A human caught it by hand, days later, and a sharper reviewer would not have done better, because the lie lived in what the record could not say. The fix is evidence the record can check, not reviewers who happen to notice.
Follow the writing
The writing runs in three places. The blog is the canonical home; everything lands here first, and there’s an RSS feed if that’s how you read. AI Software, Properly is the LinkedIn newsletter, same name as the line at the top of this page because it’s the same argument; issues are written for the newsletter rather than pasted from the blog, and the RCF walkthrough series lives there. The site’s articles are also republished on Medium for people who read there; canonical links point back here.
Stravica is a body of work in public. The bar is software that holds up under real use, not software that looks good in a demo.