All posts
The StrayMark chronicle — how the framework emerged, decision by decision.
2026
What a million assertions can't settle
2026-07-10
Bun's Rust rewrite ran AI adversarial review on one model family, judged by 1,386,826 test assertions. StrayMark's audits diversify across model families instead — because the target is a judgment no test can settle. Twenty-five audit cycles of real Sentinel data show what that catches that green tests miss, and, as a curiosity, how seven model families actually behaved — including one that had to be demoted for going quietly blind.
Who the audit thought it was
2026-07-08
StrayMark's audit is only worth anything if independent model families converge on a finding by themselves — agreement is the signal. A run of releases hardened that guarantee against three ways to fake it. The freshest is the sharpest: a router CLI injects its own product name, so an auditor stamped its report "qwen-code" even after the operator had switched the backend model.
What the author already knew
2026-06-28
The dry run proved that signal coverage — not granularity — kept 57% of the routing on low-confidence guesses. The fix was almost free: the person creating a unit of work already knows whether it's design, implementation, an audit, or mechanical labor. So Baton discontinued title-scanning entirely, made a declared verb the single authoritative signal, and graduated it to the framework.
What the dry run would have spent
2026-06-26
Baton's second phase finally looked at money — but it routed nothing. It classified the 762 work units StrayMark had already recorded in Sentinel and printed what a routing policy would have spent versus all-frontier. The headline was a ~93% ceiling. The honest reading inverted the experiment's own hypothesis: granularity was never the lever. Signal coverage was.
What the spec path only proved existed
2026-06-25
A fourth experiment started with an economic problem — when the subscription subsidies end, all-frontier-all-the-time stops being affordable — and immediately ran into a structural one. A cheaper router over forgotten intent only automates the drift faster. So Baton's first move touches no models at all. It reads the plan StrayMark had only ever proved existed.
What the open format left to the producer
2026-06-17
Google published the Open Knowledge Format — markdown, YAML frontmatter, a graph of links, an agent that maintains them. StrayMark reached the same primitives independently. The convergence is real; so is the divergence — OKF builds cognition for the AI, StrayMark builds it for the AI and the human engineer together.
Where the debt actually was
2026-06-16
The operator's real daily question isn't "show me the documents," it's "where are we?" Loom grew a second surface — the architecture as a building you can walk, in 2D and in 3D — and its technical-debt overlay was empty. Not because there was no debt. Because it didn't know where to put it.
What the graph couldn't draw yet
2026-06-14
Loom's first release rendered the document graph live in the browser in under a second. It also drew 330 edges to nowhere. The visible feature was the easy part — making the references actually resolve was the work, and it taught us when a dangling edge is a bug and when it's a signal.
What the second reader demanded
2026-06-12
Before Loom could draw anything, StrayMark's document model had to stop being the CLI's private property. The refactor that shipped zero user-facing change was the precondition for everything visual that followed — and a small lesson the framework had been preaching to adopters all along.
What the bash script said was in sync
2026-06-04
Follow-ups became StrayMark's second first-class entity — and within a day, two external migrations stress-tested the design. The reference adopter's deprecated bash script had been reporting "in sync" while 29 entries sat invisible to it.
What the feature flag compiled away
2026-05-31
A second adopter, in a different language, validated the "surface declaration without wiring" anti-pattern — and the CLI helper we deferred on purpose finally shipped
What the binary couldn't hide
2026-05-23
Ten latent gaps surfaced in a single polish Charter, and the anti-pattern that earned a name
Pattern 1 and Pattern 2 — chain evolution
2026-05-16
When discipline stops being habit and becomes name
The day the agent saw something nobody asked it to see
2026-05-16
Naming a design property that was already silently doing its job
Opening the framework
2026-05-15
Seventy-two hours of gestures that only make sense together
AGENTS.md as a universal standard
2026-05-15
Four months between the intuition and the open standard
Manual discipline before the pattern
2026-05-14
Twelve learnings in an Issue, three gates in a PR, and a Charter that closed cleanly before the name existed
The audit-prompt was the outlier
2026-05-13
The only file in the framework that lived in another language
TDE and transversal debt
2026-05-12
The type existed. The trigger didn't. And the stacked-PR lesson that came along for the ride.
Validate and the schemas as a formal layer
2026-05-11
Phase 2: when the framework starts to verify what it had been promising
The rebrand to StrayMark
2026-05-09
The fourth rename — this time with a public ADR and a disciplined arc
Charters invisible to the agents
2026-05-09
Issue #113 — the gap between having an artifact and the agent seeing it
Charters as a first-class entity, and the external audit cycle
2026-05-06
From manual ritual in Sentinel to canonized CLI command
Six Plans for one thesis (and the rename to Charter)
2026-04-30
The first systematic experiment, and the day Plan became Charter
Exploring the framework
2026-04-27
The TUI that produced visibility without meaning to
Four names in four months
2026-04-05
Looking for the concept by trying out names