Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
2bdb224
feat(policy)!: retire six shell gates onto the engine and give `exec`…
wenzowski Sep 9, 2026
f554943
fix(test): drop the tracker key from the awk-regex inline fixture
wenzowski Sep 9, 2026
4d4659c
feat(policy): retire batten-glob-check onto glob-containment
wenzowski Sep 9, 2026
616237f
feat(policy): retire mise-action-floor onto the engine
wenzowski Sep 9, 2026
69d7e5e
feat(policy): retire hook-pin-check onto the engine
wenzowski Sep 9, 2026
ce5ebab
feat(policy): retire msrv-pin-agreement onto the engine
wenzowski Sep 9, 2026
a52c676
feat(policy): retire rust-paths-check onto the engine
wenzowski Sep 9, 2026
0faf837
fix(policy): give the five ported rules verdicts that mean what they …
wenzowski Sep 9, 2026
49dd330
fix(policy): give the first six ported rules verdicts that mean what …
wenzowski Sep 9, 2026
d654206
fix(test): fold the fixture builders instead of collecting a format! …
wenzowski Sep 9, 2026
e8ffde1
feat(policy): retire digest-major-agreement onto the engine
wenzowski Sep 9, 2026
1ee98f7
feat(policy): retire cap-drift onto the engine
wenzowski Sep 9, 2026
ac44f55
feat(policy): retire coderabbit-config-check onto the engine
wenzowski Sep 9, 2026
00cce94
feat(policy): retire publish-credential-check onto the engine
wenzowski Sep 9, 2026
2da9a88
feat(policy): retire timeout-check onto the engine
wenzowski Sep 9, 2026
562ab5a
feat(policy): retire ci-tools-check onto the engine
wenzowski Sep 9, 2026
84ce63b
chore(prune): move both target-prune bases 256 -> 268 for the next tw…
wenzowski Sep 9, 2026
7cc5ab8
fix(test): qualify the four ledger arms whose case titles collide
wenzowski Sep 9, 2026
f05694f
feat(exit): one authority folds findings and blind spots into an exit…
wenzowski Sep 9, 2026
44bae66
feat(perf): generalise the declared-arm harness both instances now use
wenzowski Sep 9, 2026
7f501e2
test(land): drive a real conflict through the writer the module reads
wenzowski Sep 9, 2026
32b1e17
feat(policy): retire stop-posture-check against the module it was alr…
wenzowski Sep 9, 2026
e7d0d9b
fix(gate): place `arm`, and make its rank arithmetic need no lint escape
wenzowski Sep 10, 2026
dd2e7e2
fix(spec): the `verdict` verb takes its two ledger rows
wenzowski Sep 10, 2026
2ee0261
test(pointer-only): the `verdict` verb takes its census row
wenzowski Sep 10, 2026
7706dd0
feat(doctor): retire the egress pair onto the verb that already outra…
wenzowski Sep 10, 2026
291175d
feat(mcp): retire the MCP launcher shim onto a verb that cannot becom…
wenzowski Sep 10, 2026
f98992c
feat(receipt): the tree-clean precondition moves inside the verb that…
wenzowski Sep 10, 2026
d80e4f1
feat(record): the per-suite cost corpus splits into a producer and a …
wenzowski Sep 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .mcp.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
{
"mcpServers": {
"serena": {
"command": "mise-tasks/serena-mcp.sh",
"command": "batten",
"args": [
"mcp",
"spawn",
"serena",
"--",
"mise",
"exec",
"pipx:serena-agent@1.7.0",
"--",
Expand Down
32 changes: 32 additions & 0 deletions .serena/memories/core.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,22 @@ err)` takes **both** channels and the resolved `Mode`, so a verb can write a
(CLOUD-208; it closed CLOUD-42's G10, "nothing emits at `Verbose` or above
yet"). `out` is the answer, `err` the messaging — `batten exec` reports its
output matches through `err` for that reason.
- `suites.rs` — the per-suite cost corpus (CLOUD-352), derived from the report
the bats runner already wrote. **IT RUNS NOTHING**: re-executing a
multi-thousand-case suite to measure it would cost more than the waste it
reports and would be a second authority over a run that already happened, so
this opens one file and writes one file and reaches
`policy/spawn-adapters.rego` not at all. The corpus path is a CONTRACT with
`policy/suite-cost-corpus.rego`, which reads the same bytes as a declared
`lines` source — the producer decides cost, the gate decides MEMBERSHIP, and
neither half can see the other. That division is the design: wall clock is a
clock and belongs in a drift job, membership is deterministic and belongs in a
gate. THREE STATES ARE COULD-NOT-LOOK, never an empty corpus — an absent
report (the ordinary state after a receipt-gated no-op lap), a report carrying
no readable `<testsuite>`, and a report naming a suite the tree no longer
tracks. The last one is what makes the gate's remedy reachable: a suite retired
while the report still named it once produced a corpus carrying a cost attached
to nothing, so the gate refused the very file its own remedy had just written.
- `surface.rs` — house-style §11, CLOUD-27: the command tree declared **once**,
as data (`ROOT` + `SURFACE`) — path, summary, effect, and flags (with each
flag's env equivalent, so §8 precedence is inspectable data). `command()`
Expand Down Expand Up @@ -384,6 +400,22 @@ budget` and **enforced on `check`**. `[budget.<name>]` is a MAP, not a struct wi
whole-set reading let one dead glob contribute nothing while the rest counted
and still reported green (CLOUD-298). A config declaring no budget is exit 1
too — a budget verb that measured nothing must not report `0`.
- `arm.rs` — the declared-arm harness (CLOUD-1714): run N declared things,
reduce each to a named `Observable`, hand back one `Outcome` per arm. The
primitive `perf.rs` and `mutate.rs` were each one instance of, plus the two the
bash corpus held. **`percentile` is owned here** — four copies existed between
the four instances, and `perf::summarise` now calls this one, so CLOUD-1712's
fetched-duration percentiles have no fifth. It takes the quantile as a RATIO OF
INTEGERS and ranks with `div_ceil`, which is why the rank arithmetic carries no
lint escape: the `f64` form needed three, and `spawn-widening` counts an added
escape as inventory growth whatever the reasoning behind it. `Isolation::at`
sets `HOME`, `XDG_DATA_HOME`, `APPDATA` and `LOCALAPPDATA` together, because an
arm inheriting one of them measures the ambient toolchain instead of the
subject. **A FAILED ARM IS `NotObserved`, NEVER A ZERO**: a zero measurement is
the could-not-look collapse CLOUD-251 names, and it reads as the fastest arm in
the table. Stability is checked BEFORE a byte count is reduced, so a run set
that disagrees is reported `Unstable` with its distinct count rather than
averaged into one plausible number.
- `attribution.rs` — what produced commits may carry about the tooling that made
them (CLOUD-274), the mechanism for the attribution decision record
(CLOUD-268). Judges author/committer identity, every trailer and the message
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,8 @@ half**: declared work dies too, so **"unsaved?" is `batten doctor session`**.
never a model verdict. _(house-style §5.)_
4. **Output is a pointer, never the payload** — a count, `path:line`, or boolean,
never the content. _(house-style §6.)_
5. **Exit codes and output follow the one contract** — byte-stable output, the
`0/1/2/3` table, no per-verb exception. _(house-style §6–§7.)_
5. **Exit codes and output follow one contract** — byte-stable, `0/1/2/3`, no
per-verb exception (§6–§7). The corpus INVERTS `1`/`2`: fold `batten verdict`.
6. **Keep configuration narrow.** One committed authority plus raise-only
overrides, no directory walk, no `conf.d` merge (house-style §8). Don't widen it.
7. **Research goes to Linear, not a repo `docs/` tree.** Evidence notes and literature
Expand Down
Loading