<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>review, branch HEAD</title>
<subtitle>review patchsets using your default editor</subtitle>
<entry>
<id>06f96c74e8088c48e463a2539cc02a72ed9d93fa</id>
<published>2026-09-24T12:00:28Z</published>
<updated>2026-09-24T12:00:28Z</updated>
<title type="text">readme: say what the eval set is without pointing outside the repository</title>
<link rel="alternate" type="text/html" href="commit/06f96c74e8088c48e463a2539cc02a72ed9d93fa.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 06f96c74e8088c48e463a2539cc02a72ed9d93fa
parent 863d5a9148eb9f5f8ea4f01b811fc00517ecb1bc
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Thu, 24 Sep 2026 09:00:28 -0300

readme: say what the eval set is without pointing outside the repository

A readme is for the tool&#39;s users. Where the plan for the missing eval
harness is kept is nobody&#39;s business but the people working on it, so
the paragraph says what exists and what measures a reading meanwhile.

</content>
</entry>
<entry>
<id>863d5a9148eb9f5f8ea4f01b811fc00517ecb1bc</id>
<published>2026-09-24T10:11:20Z</published>
<updated>2026-09-24T10:11:20Z</updated>
<title type="text">review: move the continuation brief out of the repository</title>
<link rel="alternate" type="text/html" href="commit/863d5a9148eb9f5f8ea4f01b811fc00517ecb1bc.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 863d5a9148eb9f5f8ea4f01b811fc00517ecb1bc
parent 3b8fd9865142638b461ec479094cf7ed9de10d38
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Thu, 24 Sep 2026 07:11:20 -0300

review: move the continuation brief out of the repository

The handover file was an agent&#39;s state — what was done, what comes next,
what to watch — and a repository holds code and the docs its users read.
It lives in the Brain now, under the repository&#39;s own folder, with the
rest of what an agent needs to pick the work up; the readme points there.

</content>
</entry>
<entry>
<id>3b8fd9865142638b461ec479094cf7ed9de10d38</id>
<published>2026-09-24T09:49:40Z</published>
<updated>2026-09-24T09:49:40Z</updated>
<title type="text">review: follow the collection&#39;s rename from jfm to jm</title>
<link rel="alternate" type="text/html" href="commit/3b8fd9865142638b461ec479094cf7ed9de10d38.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 3b8fd9865142638b461ec479094cf7ed9de10d38
parent 5db1d92aac6d0003fa071a39282d17c2d92d8d3f
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Thu, 24 Sep 2026 06:49:40 -0300

review: follow the collection&#39;s rename from jfm to jm

The Odin collection this tool builds on was renamed from jfm to jm and
its checkout moved to ~/Source/Personal/jm, so every import, the
justfile&#39;s collection flag, ols.json and the docs name it the new way.
Nothing else changes: the rename is the whole diff.

</content>
</entry>
<entry>
<id>5db1d92aac6d0003fa071a39282d17c2d92d8d3f</id>
<published>2026-09-24T09:42:25Z</published>
<updated>2026-09-24T09:42:25Z</updated>
<title type="text">review: resolve collections against the repository, and answer the first dogfood run</title>
<link rel="alternate" type="text/html" href="commit/5db1d92aac6d0003fa071a39282d17c2d92d8d3f.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 5db1d92aac6d0003fa071a39282d17c2d92d8d3f
parent 88fad333d418c28b52df26d735d97edd4fce3d06
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Thu, 24 Sep 2026 06:42:25 -0300

review: resolve collections against the repository, and answer the first dogfood run

The odin-check analyser read ols.json from the tree at the end of the
change but resolved a relative collection path against that tree, which
for a range is a scratch copy with no neighbours, so every range review
of this repository skipped odin-check. The path is resolved against the
repository now. The first run of the tool on its own last three commits
asked for two comments to claim less about other programs and for the
rules subcommand to be named for what it does; all three are answered.

</content>
</entry>
<entry>
<id>88fad333d418c28b52df26d735d97edd4fce3d06</id>
<published>2026-09-24T09:30:27Z</published>
<updated>2026-09-24T09:30:27Z</updated>
<title type="text">review: never ask a job an empty part, and try claude in the chain</title>
<link rel="alternate" type="text/html" href="commit/88fad333d418c28b52df26d735d97edd4fce3d06.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 88fad333d418c28b52df26d735d97edd4fce3d06
parent f01f78e10da35b1b9acf69574241b5ef3eaf3bd7
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Thu, 24 Sep 2026 06:30:27 -0300

review: never ask a job an empty part, and try claude in the chain

A splittable job over the packet cap grouped files by whether they held
anything at all, so the duplication job was handed a test file — whose
duplication subject is empty — as a second part, and claude -p refused
the empty stdin. Parts are grouped by what the job itself reads from each
file now, an empty part is never asked, an empty prompt is refused before
any child starts or request goes out, a failure in a split job names its
part, and --show prints each part rather than the whole. The default
chain tries the coding assistant between the API and the gateway, so a
machine with no key and no gateway still gets a reading. Found by an
agent using the tool on real work, whose report reproduced it through a
fake provider.

</content>
</entry>
<entry>
<id>f01f78e10da35b1b9acf69574241b5ef3eaf3bd7</id>
<published>2026-09-24T00:44:21Z</published>
<updated>2026-09-24T00:44:21Z</updated>
<title type="text">review: name the debug packages in every build so the release vets clean</title>
<link rel="alternate" type="text/html" href="commit/f01f78e10da35b1b9acf69574241b5ef3eaf3bd7.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit f01f78e10da35b1b9acf69574241b5ef3eaf3bd7
parent 400e65b5d8eb33098ee6004eaf1f85a38ad73c9b
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 21:44:21 -0300

review: name the debug packages in every build so the release vets clean

</content>
</entry>
<entry>
<id>400e65b5d8eb33098ee6004eaf1f85a38ad73c9b</id>
<published>2026-09-24T00:42:53Z</published>
<updated>2026-09-24T00:42:53Z</updated>
<title type="text">review: run the debug build under the debug allocator and trace</title>
<link rel="alternate" type="text/html" href="commit/400e65b5d8eb33098ee6004eaf1f85a38ad73c9b.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 400e65b5d8eb33098ee6004eaf1f85a38ad73c9b
parent 0ae800504c7e48a965970b883f640aa76c8b6d03
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 21:42:53 -0300

review: run the debug build under the debug allocator and trace

A debug build sets core:debug/trace&#39;s assertion failure proc, and with
REVIEW_DEBUG_ALLOC set runs under the collection&#39;s debug allocator,
which names the site of every overflow, double free, write after free
and size mismatch and lists the leaks at exit; a one-shot program has
plenty of those, so the report is asked for rather than printed on
every run. The debug build and the tests compile with the address
sanitizer. The first run under it found a size mismatch in
core:encoding/json&#39;s object-key handling, not in this code; every
package&#39;s tests pass under the sanitizer.

</content>
</entry>
<entry>
<id>0ae800504c7e48a965970b883f640aa76c8b6d03</id>
<published>2026-09-24T00:24:08Z</published>
<updated>2026-09-24T00:24:08Z</updated>
<title type="text">review: retire the Go implementation for the Odin one</title>
<link rel="alternate" type="text/html" href="commit/0ae800504c7e48a965970b883f640aa76c8b6d03.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 0ae800504c7e48a965970b883f640aa76c8b6d03
parent caa60952b232496abb61fc34c14a1ba583483003
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 21:24:08 -0300

review: retire the Go implementation for the Odin one

The Odin packages move from odin/ to the repository root and the Go
sources go, once the two had been run side by side with a model and the
Odin hook had gated commits. What stays in Go are the two sidecars, the
parser in sidecar/gofront and vet&#39;s multichecker in sidecar/govet, which
the tool drives as programs. The justfile builds review, review-go,
review-vet and odin-review-extract into build/ and installs them beside
each other; the readme, languages.md and handover.md describe the tool
as it now is. The eval harness went with the Go tests it was written
among, and porting it is the open item.

</content>
</entry>
<entry>
<id>caa60952b232496abb61fc34c14a1ba583483003</id>
<published>2026-09-24T00:12:34Z</published>
<updated>2026-09-24T00:12:34Z</updated>
<title type="text">odin: read the Go tool&#39;s cache as it stands and never write over it blind</title>
<link rel="alternate" type="text/html" href="commit/caa60952b232496abb61fc34c14a1ba583483003.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit caa60952b232496abb61fc34c14a1ba583483003
parent 8f323544e21085b7879909fd01c1a44cea630708
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 21:12:34 -0300

odin: read the Go tool&#39;s cache as it stands and never write over it blind

The first live run replayed nothing: the Go tool writes each answer&#39;s
time as RFC 3339 and the Odin cache read it as a number, so the whole
file failed to load and every ask missed. The time is a string now,
written the same way, so either tool reads the other&#39;s file. A file that
was there and could not be read is protected from a save, which would
have replaced every answer it held with one run&#39;s few. Both tools name
the skipped jobs in the jobs&#39; own order rather than in the order the
threads finished, and REVIEW_DEBUG_CACHE prints each ask&#39;s key.

On the synthetic repository both tools now report the same 18 findings
from the same 8 replayed answers, message for message.

</content>
</entry>
<entry>
<id>8f323544e21085b7879909fd01c1a44cea630708</id>
<published>2026-09-24T00:02:42Z</published>
<updated>2026-09-24T00:02:42Z</updated>
<title type="text">odin: read the archive and bound a run without tar or timeout programs</title>
<link rel="alternate" type="text/html" href="commit/8f323544e21085b7879909fd01c1a44cea630708.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 8f323544e21085b7879909fd01c1a44cea630708
parent cdc53fe8abd7ef32d5f46b3522875c2db7ee0ce7
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 21:02:42 -0300

odin: read the archive and bound a run without tar or timeout programs

tree unpacks a range&#39;s end with jfm:tar from git archive&#39;s output read
in memory, and the analysers and providers bound a child&#39;s run with the
collection&#39;s exec timeout, so nothing under odin/ runs the tar or timeout
programs any more and both seams close on Windows.

The first live run against the Go tool, sonnet through claude, replayed
nothing from the shared cache: the rendered subjects differed. Both tools
now order symbols, tests and comments by file then line, where the Go
tool had read its frontends in map order and so missed its own cache on
a multi-language change; and the Odin git wrapper keeps the raw diff,
stat and message as the Go tool does. The subjects both tools render are
byte for byte the same.

</content>
</entry>
<entry>
<id>cdc53fe8abd7ef32d5f46b3522875c2db7ee0ce7</id>
<published>2026-09-23T23:43:27Z</published>
<updated>2026-09-23T23:43:27Z</updated>
<title type="text">odin: gate commits, compare against a baseline, and measure the checks</title>
<link rel="alternate" type="text/html" href="commit/cdc53fe8abd7ef32d5f46b3522875c2db7ee0ce7.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit cdc53fe8abd7ef32d5f46b3522875c2db7ee0ce7
parent b19c14be45b47b618803c6ad262e6955ca320ab4
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 20:43:27 -0300

odin: gate commits, compare against a baseline, and measure the checks

hook prints or installs the commit-msg hook that reviews the staged
change with the message being committed and refuses on a must-fix, and
the stanza an agent&#39;s harness takes; agent prints what an agent&#39;s
instructions should say. --message-file reads the message a hook is
given, comment lines stripped; --baseline names each finding as new,
persisting or resolved against a previous report. bench counts what
fires over recent commits, per rule or listing one rule&#39;s commits, and
rules -dismissed counts the dismissals in the tree. The shared word and
JSON-object readings move to one package, txt, so no body is written
twice.

</content>
</entry>
<entry>
<id>b19c14be45b47b618803c6ad262e6955ca320ab4</id>
<published>2026-09-23T23:38:21Z</published>
<updated>2026-09-23T23:38:21Z</updated>
<title type="text">odin: ask the model jobs and verify what they report</title>
<link rel="alternate" type="text/html" href="commit/b19c14be45b47b618803c6ad262e6955ca320ab4.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit b19c14be45b47b618803c6ad262e6955ca320ab4
parent 27ccb4ac697098313c6620adf4a04cb5bf619736
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 20:38:21 -0300

odin: ask the model jobs and verify what they report

job is the five readings with their criteria compiled in, each rendering
the part of the change it needs, split by file past the packet cap.
provider asks claude, pi, the console API through a strict tool over
jfm:http, or any command the environment names, and probes the default
chain. cache replays answers from the file the Go tool keeps, keyed the
same way. reviewer asks the jobs at once, puts each job&#39;s findings back
to the provider once against the same evidence, retracts what the second
reading does not hold, and fails open where a verdict cannot be asked.
Every prompt is worded as the Go tool words it, so the two tools share
one cache. The driver takes the Go tool&#39;s flags, chooses the provider,
and reports through the full contract with snippets, usage and failures.

Run with a stub provider on a repository holding Python, TypeScript and
Rust, both tools report the same 16 findings, id for id, with the same
skipped and failed lists.

</content>
</entry>
<entry>
<id>27ccb4ac697098313c6620adf4a04cb5bf619736</id>
<published>2026-09-23T23:23:28Z</published>
<updated>2026-09-23T23:23:28Z</updated>
<title type="text">odin: read TypeScript, JavaScript, Python and Rust through ast-grep</title>
<link rel="alternate" type="text/html" href="commit/27ccb4ac697098313c6620adf4a04cb5bf619736.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 27ccb4ac697098313c6620adf4a04cb5bf619736
parent 55c8a0957794545579c72f1b791a5abee71eb041
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 20:23:28 -0300

odin: read TypeScript, JavaScript, Python and Rust through ast-grep

The ast-grep reading is a third kind of sidecar: the Go tool&#39;s patterns
for the TypeScript grammars and its node kinds for Python and Rust,
written as a temporary rule set per scan, with the answer in the shape
the parser sidecars give, so the change and the index read every
language one way. Comments of every language but Go are read by shape.

The Go tool ordered ast-grep matches by map iteration, which made the
unreferenced-symbol finding&#39;s anchor and id change between runs; both
tools now read matches in file and line order. On a repository holding
all three languages the two tools report the same 13 findings, id for
id, and on this repository&#39;s largest commit the same 25.

</content>
</entry>
<entry>
<id>55c8a0957794545579c72f1b791a5abee71eb041</id>
<published>2026-09-23T23:16:43Z</published>
<updated>2026-09-23T23:16:43Z</updated>
<title type="text">odin: run the compilers and analysers over the change</title>
<link rel="alternate" type="text/html" href="commit/55c8a0957794545579c72f1b791a5abee71eb041.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 55c8a0957794545579c72f1b791a5abee71eb041
parent bb1c0452c45545c3c8d4d5bf6ef4089405b2e458
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 20:16:43 -0300

odin: run the compilers and analysers over the change

analyser runs what the repository&#39;s languages already have — go build,
vet with review-vet where it is installed, staticcheck, odin check with
the ols.json collections, tsc, ruff, mypy, cargo with clippy where it is,
and semgrep — on the tree the change arrives at, each bounded by a
timeout, and keeps a fault wherever it lands and an opinion only on a
line the change added. The parsers are tested on canned output; go vet
is run live. On commit 8070974 the Odin reading reports the same 17
findings as the Go tool, id for id.

Both tools skipped go vet on this repository because the vet sidecar is
a module of its own under sidecar/govet: a package under a nested go.mod
is left out of the list now, in both.

</content>
</entry>
<entry>
<id>bb1c0452c45545c3c8d4d5bf6ef4089405b2e458</id>
<published>2026-09-23T23:11:08Z</published>
<updated>2026-09-23T23:11:08Z</updated>
<title type="text">odin: measure the change with every deterministic check</title>
<link rel="alternate" type="text/html" href="commit/bb1c0452c45545c3c8d4d5bf6ef4089405b2e458.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit bb1c0452c45545c3c8d4d5bf6ef4089405b2e458
parent 034e4d8dbf495159a775083b4411e2376dfb46c5
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 20:11:08 -0300

odin: measure the change with every deterministic check

check is the readings that need no model, ported check for check: the
message&#39;s entropy, compressibility, common words, venting, mood, body
and unknown names; the history&#39;s coupled files; the change&#39;s own
dismissals and deleted tests; names that stutter, shadow or abbreviate;
tests that assert nothing or assert a tautology; cloned bodies; long and
deep functions; comments that restate, task markers, commented-out code,
debug leftovers and swallowed errors; declarations nothing refers to and
code without tests. The rule catalogue prints from the binary.

change gains what the checks read: numstat counts, the subject history,
the temporal coupling counted from git log, the code below each comment,
the line a test skips on, and comments read by shape for the languages
no parser covers. On the 62-file commit 8070974 the Odin reading reports
the same 16 findings as the Go tool, id for id and message for message.

</content>
</entry>
<entry>
<id>034e4d8dbf495159a775083b4411e2376dfb46c5</id>
<published>2026-09-23T22:50:49Z</published>
<updated>2026-09-23T22:51:10Z</updated>
<title type="text">odin: report findings through the Go tool&#39;s contract</title>
<link rel="alternate" type="text/html" href="commit/034e4d8dbf495159a775083b4411e2376dfb46c5.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 034e4d8dbf495159a775083b4411e2376dfb46c5
parent 027eec57b4a25b7a8a2d4399ddb898094d93b609
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 19:50:49 -0300

odin: report findings through the Go tool&#39;s contract

finding is one thing a reading noticed, sorted serious first, named by
the same sha256 the Go tool names it by so both readings agree on an id,
and dismissed by the same //review:ignore comment beside the line.
report is the JSON contract key for key — status, findings, retracted,
failed, skipped, uncovered, dismissed, usage — and the rendering a
person reads. The driver reports through it, and says which files no
reader covered, with the reason each.

</content>
</entry>
<entry>
<id>027eec57b4a25b7a8a2d4399ddb898094d93b609</id>
<published>2026-09-23T22:44:40Z</published>
<updated>2026-09-23T22:44:40Z</updated>
<title type="text">review: read Go through a sidecar and begin the Odin reading</title>
<link rel="alternate" type="text/html" href="commit/027eec57b4a25b7a8a2d4399ddb898094d93b609.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 027eec57b4a25b7a8a2d4399ddb898094d93b609
parent d88d25b5e123353506e14fbbc651d4c78e02af9b
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 19:44:40 -0300

review: read Go through a sidecar and begin the Odin reading

The Go frontend ships as review-go, a stdlib-only sidecar printing the
same JSON the Odin sidecar does, so a reviewer in another language reads
Go the way this one does. Under odin/, on the jfm collection: frontend
drives both sidecars, git asks the repository, tree reads it at the end
of the change with a range unpacked once from git archive, change
gathers the diff and reads symbols, tests, comments and imports on the
added lines plus the repository&#39;s index, and review is the driver.

The odin-check analyser reads its collections from ols.json, which the
repository now carries, so the jfm imports type-check under review.

</content>
</entry>
<entry>
<id>d88d25b5e123353506e14fbbc651d4c78e02af9b</id>
<published>2026-09-23T20:58:58Z</published>
<updated>2026-09-23T20:58:58Z</updated>
<title type="text">review: move judgement-free checks out of the readings and into Go</title>
<link rel="alternate" type="text/html" href="commit/d88d25b5e123353506e14fbbc651d4c78e02af9b.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit d88d25b5e123353506e14fbbc651d4c78e02af9b
parent 3cf4697eff5c068ac7d860172dc63b27463ea046
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 17:58:58 -0300

review: move judgement-free checks out of the readings and into Go

The readings asked a model for what a program can measure: assertions
that cannot fail, names that stutter or shadow, clones, coverage gaps,
leftovers, formatting, nesting, and the compilers&#39; and linters&#39; own
diagnostics. Each is now a deterministic check or an analyser, reported
with a stable id, run before a provider is built, and survives a model
that cannot answer. Repository exploration moves from shell programs into
Go: a change&#39;s tree is materialised once through git archive and every
frontend reads through it, so the tool ports wherever git does.

Two defects in the frontends and analysers close with this. Semgrep
never ran without a repository config, because --config auto refuses to
build under --metrics off; the fallback is the registry&#39;s p/default pack.
The TypeScript frontend read only bare test() and it() calls; it now
reads Node, Bun and Deno shapes, with modifiers, tables, and Deno&#39;s
object and named-function forms, and the deleted-test check reads the
same shapes.

</content>
</entry>
<entry>
<id>3cf4697eff5c068ac7d860172dc63b27463ea046</id>
<published>2026-09-23T17:58:59Z</published>
<updated>2026-09-23T17:58:59Z</updated>
<title type="text">review: add standard justfile</title>
<link rel="alternate" type="text/html" href="commit/3cf4697eff5c068ac7d860172dc63b27463ea046.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 3cf4697eff5c068ac7d860172dc63b27463ea046
parent e38d4e87fba9f4f8c891268f89534f0f55a0d8c8
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Wed, 23 Sep 2026 14:58:59 -0300

review: add standard justfile

Same build, release, clean, test, install recipes as every other repository.
The go vet sidecar is its own module under sidecar/govet, so build and
release compile it with -C and install places review-vet beside review,
where the go-vet analysers look for it.

</content>
</entry>
<entry>
<id>e38d4e87fba9f4f8c891268f89534f0f55a0d8c8</id>
<published>2026-09-21T14:14:06Z</published>
<updated>2026-09-23T10:05:42Z</updated>
<title type="text">review: mechanistically drive code quality</title>
<link rel="alternate" type="text/html" href="commit/e38d4e87fba9f4f8c891268f89534f0f55a0d8c8.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit e38d4e87fba9f4f8c891268f89534f0f55a0d8c8
parent 809f6fdda4d0de8f71215e1bd331620d5018dee2
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Mon, 21 Sep 2026 11:14:06 -0300

review: mechanistically drive code quality

Via a combination of static analysis and cheap inference, provide
a rigid, quality forcing mechanism for AI agents to iterate against.

</content>
</entry>
<entry>
<id>809f6fdda4d0de8f71215e1bd331620d5018dee2</id>
<published>2026-09-21T14:06:49Z</published>
<updated>2026-09-21T14:06:49Z</updated>
<title type="text">review: read a change the way several narrow readers would</title>
<link rel="alternate" type="text/html" href="commit/809f6fdda4d0de8f71215e1bd331620d5018dee2.html" />
<author>
<name>Jack Mordaunt</name>
<email>jackmordaunt.dev@gmail.com</email>
</author>
<content type="text">commit 809f6fdda4d0de8f71215e1bd331620d5018dee2
Author: Jack Mordaunt &lt;jackmordaunt.dev@gmail.com&gt;
Date:   Mon, 21 Sep 2026 11:06:49 -0300

review: read a change the way several narrow readers would

The checks a repository can run deterministically do not cover names, restated
facts, tests that cannot fail, or comments asserting what nobody verified. Five
narrow readings, each given only the part of the change it needs.

</content>
</entry>
</feed>
