feat(config): modes - a mode is an artifact kind, the lenses it runs and its effort
The config defines the modes (modes.<name>): the kind of artifact the mode reviews - reply, series or commits, the three shipped partitions; a kind is a mode of its own name - the lenses it runs, in its kind's gate order, and the effort it runs at, else the kind's default (max for a reply or a series, xhigh for a commit range). `run --mode` names any of them, the dump records mode and kind, and everything that decided by the mode's name - the partition and hash, the prompts, the schemas, the disposition and reuse-key rules, what the CLI requires - decides by the kind. Every lens stays off until a mode lists it; lenses.<name>.run is retired with a warning that says so, and a lens of another kind, a name that is no lens, a lens listed twice and an unknown effort are config problems. The defaults run no lens; the template ships the three kinds as modes with every lens of their kind at the kind's effort, to trim (the owner's ruling of 2026-11-01), and init says so as it writes it - a kept config is the repository's own, and only one that lists no lens gets a step. The readers of the retired key follow: the CI smoke config, the shipped skill, the procedure (its description of the config as well as its mechanics), the manifest template, the run's messages and the comments that named the three modes. The run lock, the run numbers and the dump names are the kind's, so one full run per hash holds across the modes of a kind and their rounds count on together; the dump says which mode ran. The database broker starts for a lens the mode runs, as every other reader of the lenses off reads them. A named mode runs through the CLI in the kernel-modes test.
This commit is contained in:
parent
6cf15919db
commit
d5e54ffeb3
25 changed files with 1277 additions and 711 deletions
|
|
@ -139,15 +139,22 @@ rebased, never a merge of the integration branch), `authors` (the emails the
|
|||
freeze accepts; null = `git config user.email`), `aiTrailers` (`forbid` or
|
||||
`allow`), `requireSigned`, `allowDirty` (tracked
|
||||
files the local stack rewrites in place while the lenses run), `gate0` (the
|
||||
commands Gate 0 runs by hand, for the skill), `lenses` (per lens, by its
|
||||
name: `run` — every lens is off until it is `true` here (opt-in only,
|
||||
2026-10-31); a lens the config does not turn on is out of every run of this
|
||||
repository:
|
||||
its gate disappears, the units only it reads are listed as not reviewed,
|
||||
never as holes, and the run stays a full run; the ruling of record for a
|
||||
repository with nothing to exercise, where `--without` is a per-run ruling
|
||||
that leaves a hole — and `environment`, what its processes get beyond the
|
||||
read-only tools: `none`; `browser` = a Playwright MCP server per pass,
|
||||
commands Gate 0 runs by hand, for the skill), `modes` (`modes.<name>`: the
|
||||
kind of artifact the mode reviews — `reply`, `series` or `commits`, the
|
||||
three shipped partitions, a kind being a mode of its own name — the
|
||||
`lenses` it runs, in its kind's gate order (the table below for
|
||||
`commits`, the README's kernel modes for a `series` or a `reply`), and
|
||||
its `effort`, else the kind's default; every lens is off until a mode
|
||||
lists it (opt-in only,
|
||||
2026-10-31; `lenses.<name>.run` is retired, 2026-11-01); a lens no mode
|
||||
lists is out of every run of this repository: its passes leave its gate,
|
||||
which disappears when none of its lenses runs; in a commit range the units
|
||||
only it reads are listed as not reviewed, never as holes, and the run stays
|
||||
a full run (the ruling of record for a repository with nothing to
|
||||
exercise, where `--without` is a per-run ruling that leaves a hole), while
|
||||
the `reply` and `series` kinds excuse no unit),
|
||||
`lenses` (per lens, by its name: `environment`, what its processes get
|
||||
beyond the read-only tools: `none`; `browser` = a Playwright MCP server per pass,
|
||||
the browser tools and `curl`, the APPLICATION UNDER TEST block, the probe
|
||||
before its gate, a stack of its own per pass and the fail-closed server
|
||||
check; `supabase` = the database under test: the `sql` helper as its
|
||||
|
|
@ -256,7 +263,9 @@ therefore the hash: re-freeze with `--replace` into the same dir
|
|||
| 4 Commit truth | `repo-facts` (message blocks, documentation blocks and the `whole:order` / `whole:absent` slots, static) | every claim in every commit message, and in the documentation the range adds or changes, proven or gone |
|
||||
| 5 | the owner | approves this exact hash, then the push happens |
|
||||
|
||||
Every lens runs on Opus 5.5 at effort `xhigh` (`--effort` overrides).
|
||||
Every lens runs on Opus 5.5 at the mode's effort (`modes.<name>.effort` in
|
||||
the config, else `xhigh` for a commit range); `--effort` overrides it for one
|
||||
run.
|
||||
There is no width of the machine by default (2026-10-31, Jorijn: "there is
|
||||
no need to do a global cap anymore, the cap should be 128 per available
|
||||
account"): every OAuth account takes at most 128 passes at once, every
|
||||
|
|
@ -321,7 +330,9 @@ diffstats — and the units of documentation files (`*.md`), each
|
|||
heading-delimited part of a hunk on its own, and it asks `whole:order` and
|
||||
`whole:absent` in slot passes of its own; a documentation file's diff header
|
||||
and a part the commit writes nothing in are a mechanical `n/a`. A lens the
|
||||
config leaves off (every lens is off until `lenses.<name>.run = true`) reads
|
||||
run's mode does not list (in `modes.<mode>.lenses` of the mode `--mode`
|
||||
names: every lens is off until it does, and another mode's list turns
|
||||
nothing on in this run) reads
|
||||
nothing: the units only it would have read (its whole slot —
|
||||
`whole:behaviour` for the functional lens; the prose for the commit-truth
|
||||
lens) are listed under `coverage.notReviewed`, never as holes, and the
|
||||
|
|
@ -630,3 +641,16 @@ repository.
|
|||
turns on no lens is a problem `config` names and `freeze` and `run` stop
|
||||
on; `init` says to turn lenses on; the owner's gate is 5. The commit-truth
|
||||
lens's firing proof in this pipeline is owed (the owner's go).
|
||||
- 2026-11-01 — **a mode is an artifact kind plus the lenses it runs and
|
||||
its effort** (Jorijn: "instead of defining lenses in the config you
|
||||
define the mode and each mode enables the lenses"; "make effort
|
||||
configurable per mode"): `modes.<name>` in the config, the three kinds as
|
||||
modes of their own name, `lenses.<name>.run` retired with a warning,
|
||||
`--mode` naming any configured mode. `Config::Defaults()` runs no lens;
|
||||
the template lists every lens of each kind at the kind's effort, to trim
|
||||
(Jorijn, 2026-11-01, on the populated template as the example: "looks
|
||||
good"; `init` says to trim). The first self-review - this
|
||||
pipeline on its own range - found the retirement not carried to the CI
|
||||
smoke config, this file, the shipped skill and the manifest template:
|
||||
every reader of a setting must agree (2026-10-12), and the run lock still
|
||||
keyed on the mode's name where the gate-state is the kind's.
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ of running it:
|
|||
(`git log --oneline @{u}..HEAD`, or `$(git merge-base HEAD <config base>)..HEAD`
|
||||
for a branch that tracks nothing yet), the slug (the branch or release
|
||||
name), and the config: `flatpak run net.catcrafts.CrafterReview config`
|
||||
must print no problem (every lens is off until `lenses.<name>.run = true`
|
||||
turns it on: turn on the ones this repository runs).
|
||||
must print no problem (every lens is off until a mode lists it:
|
||||
`modes.<mode>.lenses` names what this repository runs, `effort` how hard).
|
||||
2. **Gate 0**: run the config's `gate0` commands on that HEAD and keep their
|
||||
output. Then freeze:
|
||||
|
||||
|
|
|
|||
|
|
@ -6,83 +6,108 @@
|
|||
],
|
||||
"aiTrailers": "forbid",
|
||||
"requireSigned": false,
|
||||
"modes": {
|
||||
"reply": {
|
||||
"kind": "reply",
|
||||
"lenses": [
|
||||
"facts",
|
||||
"etiquette",
|
||||
"consistency",
|
||||
"conciseness",
|
||||
"maintainer-persona"
|
||||
],
|
||||
"effort": "max"
|
||||
},
|
||||
"series": {
|
||||
"kind": "series",
|
||||
"lenses": [
|
||||
"better-solution",
|
||||
"code-quality",
|
||||
"minimalism",
|
||||
"bug-prover",
|
||||
"facts",
|
||||
"consistency",
|
||||
"process-docs",
|
||||
"etiquette",
|
||||
"conciseness",
|
||||
"maintainer-persona"
|
||||
],
|
||||
"effort": "max"
|
||||
},
|
||||
"commits": {
|
||||
"kind": "commits",
|
||||
"lenses": [
|
||||
"repo-better-solution",
|
||||
"repo-functional",
|
||||
"repo-bug-prover",
|
||||
"repo-security",
|
||||
"repo-facts"
|
||||
],
|
||||
"effort": "xhigh"
|
||||
}
|
||||
},
|
||||
"allowDirty": [],
|
||||
"gate0": [
|
||||
"make check"
|
||||
],
|
||||
"lenses": {
|
||||
"repo-better-solution": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
},
|
||||
"repo-functional": {
|
||||
"run": false,
|
||||
"environment": "browser",
|
||||
"section": null
|
||||
},
|
||||
"repo-bug-prover": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
},
|
||||
"repo-security": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
},
|
||||
"repo-facts": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
},
|
||||
"better-solution": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
},
|
||||
"code-quality": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
},
|
||||
"minimalism": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
},
|
||||
"bug-prover": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
},
|
||||
"facts": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
},
|
||||
"consistency": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
},
|
||||
"process-docs": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
},
|
||||
"etiquette": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
},
|
||||
"conciseness": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
},
|
||||
"maintainer-persona": {
|
||||
"run": false,
|
||||
"environment": "none",
|
||||
"section": null
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@ run line: `run-line.txt` (built from freeze.json)
|
|||
INCOMPLETE runs (a lens did not return) are rows marked INCOMPLETE, never a
|
||||
pass; test runs with `--only` / `--units` are never rows. A round without the
|
||||
functional lens says so in its row: `--without repo-functional.md` (a per-run
|
||||
ruling) or `lenses.repo-functional.run = false` in the config (the
|
||||
repository's rule).
|
||||
ruling) or a mode's list without it, `modes.<mode>.lenses`, in the config
|
||||
(the repository's rule).
|
||||
|
||||
## Push-time checks (banked from `send-time-check` and `unverified` notes)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue