Skip to main content

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