Commit graph

613 commits

Author SHA1 Message Date
ca9cb53e79
docs(changelog): the third review remediation, decision 41's door line and the findings decision 42 defers
Review findings of S153; operator decisions 37 to 43.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:32:04 +02:00
829da487ec
fix(execute): below 1.8 a plan that names no test file gets the files the helper wrote
Operator decision 41 (14.10); review finding 7b3b59ed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:17:24 +02:00
e142556543
fix(tests): the control-run test leaves headroom over a slow start
Review finding 703d87e1 (BLOCKER); the timeout and hang live in tests/helpers/timing.mjs as CONTROL_RUN.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:07:12 +02:00
4d5c927c5d
refactor(simplify): drop a dead branch and repeated fixtures from the round-2 remediation
/simplify over bcf3adb..HEAD. Pass 3's last else could never run (RULE_KEYS is checked first); entryPaths tracks an open entry the way testFirstFileEntries does; wrapLine drops normalisations its callers already made. Tests: one payload builder, one BLOCKER fixture, one unreleasedBody helper, one 1.9-block loop, one plan-unreadable loop, and make_repo in the e2e script. No behaviour change; suite 2515 (2513/0/2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:43:24 +02:00
2cca61170a
docs(changelog): the second review remediation, decisions 27 to 31, with door lines
Review findings of S147; operator decisions 26 to 31.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:55:03 +02:00
f746f27788
docs(plan): Handover 4, the planner and the template follow decisions 29 to 31
Operator decisions 28 to 31 (13.10 and 14.10).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:43:01 +02:00
a70f082f6e
fix(execute): the helper and the executor give red proof no list
Operator decisions 30 and 31 (14.10); review findings 11ee78c5 and d01df508.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:32:29 +02:00
73e53f3134
fix(verification): red proof prints the list it ran and refuses a plan it cannot read
Operator decision 30 (14.10); review findings 793fc1aa, 09ae46d8, d01df508, 11ee78c5 and 289e59cd.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 11:50:37 +02:00
25856f2e9c
fix(review): the workflow review fails closed when its coordinator returns nothing
Review finding edf2ec56; every reviewer that did not run is named in allow_blocked_by.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 11:20:28 +02:00
9529df7665
fix(review): original_severity names what the kept finding asserted
Review finding 08deae68.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 11:09:01 +02:00
8e6229b01d
fix(plan): below 1.9 a test file after a note, and, plus or + is read
Operator decisions 28 (13.10) and 31 (14.10); review finding bd2520b0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 10:44:47 +02:00
b70f242e53
fix(plan): a 1.9 wrapped line keeps its paths only after a comma or in an empty entry
Operator decision 29 (14.10); review findings d21ff81e and eaeb398e.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 10:29:35 +02:00
1786df999e
refactor(plan): K6 keeps its own normaliser and LIST_ITEM is a literal again
Operator decision 27 (13.10); review finding 7961a700.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 10:19:56 +02:00
bcf3adbba7
refactor(simplify): one plan read in red proof, one list marker, one put-back rule [skip-docs]
/simplify over ed6699d..HEAD (closing review of the remediation):
- red-proof reads and parses the step once (planStep) for the test list and
  tests_only; normTest goes, plan-schema exports normPlanPath, also used by
  plan-scope-sweep.
- plan-schema builds LIST_ITEM and the 1.9 File: line from one LIST_MARKER;
  the below-1.9 File: regex ends in a lookahead instead of slicing back one.
- the workflow script hoists tripletOf and puts back through dedupByTriplet.
- coordinator-contract keeps the rank in its JSDoc only; engine-findings
  drops a redundant String().
- tests: reuse knownIssues, trekplan19Block, step1Fields, one red-proof cli
  helper with childEnv, one payload-pair builder; drop a test the decision-20
  definition test covers.

No behaviour change. Suite 2462 (2460/0/2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:47:08 +02:00
d7db590c26
docs(changelog): the review remediation, decisions 20, 22 and 23, with door lines
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:28:58 +02:00
5b94952be9
fix(docs): the trekbrief pass branch names no Brief Quality, and the stats rows span their blocks
Operator decision 21 (12.10).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:16:51 +02:00
5fa956b974
docs(plan): Handover 4, the planner and the template follow the 1.9 fixes
Operator decisions 20 and 22.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:10:37 +02:00
0142034979
fix(execute): one definition of the step's test files, read as decision 20 sets it
Review finding cf241526.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:00:09 +02:00
734b4a23ae
fix(verification): red proof checks the test list against the plan
Review finding cf241526; the list is read as operator decision 20 sets it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 18:43:44 +02:00
045191f51d
refactor(plan): the plan validator parses each step once
Review finding 93382464.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 14:47:33 +02:00
1621352e67
fix(approval): a trailer with a blank or padded name is refused
Review finding 8420915b.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 14:40:10 +02:00
05f6b67be9
fix(review): the workflow review ranks by tier and puts back every engine finding
Operator decision 23 (13.10); review findings ab1b5d9f and bc7f4e23 (workflow side).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 14:32:59 +02:00
f04fecea7f
fix(review): Pass 1 ranks by catalogue tier, and a duplicate never lowers its group
Review finding bc7f4e23 (library side).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 14:24:33 +02:00
d492abb5e9
fix(review): the engine of a payload is read from an own property
Review finding 3799ea6c; the same lookup in engine-findings.mjs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 14:17:07 +02:00
48b57284fe
fix(plan): a 1.9 plan refuses placeholders and mixed-case bare names as files
Operator decision 22 (13.10); review finding 33f37f53.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 12:50:20 +02:00
fddd0a078c
fix(plan): a 1.9 entry keeps its wrapped paths, and a numbered File line names its test
Review findings b4fa1927 and 4b6460e5.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 12:43:26 +02:00
1320e3a4d5
fix(plan): below 1.9 the step's test files are the paths right after File:
Operator decision 20 (12.10); review finding 6c31212c.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 12:34:13 +02:00
6b8b0e3f2a
fix(plan): a list joiner no longer ends the read of a plain path below 1.9
Review finding 182ceb93.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 12:26:07 +02:00
ed6699da58
refactor(simplify): one source per rule, shared test helpers, a faster isolation test [skip-docs]
/simplify over a97efb6..HEAD (the plan_version 1.9 / trial-4 delivery).

- coordinator-contract: engine names come from engine-findings ENGINES;
  one markedMajorCodeReview predicate under both lowering checks;
  isEngineFinding everywhere; the unreachable branch (c) of
  illegalBriefLowering folded into (e).
- armB workflow: RULE_KEYS = Object.keys(RULE_TIERS); the engine map is a
  literal pinned equal to ENGINES by the workflow test.
- plan-schema: usesFilesGrammar() is the one 1.9 check (validator, sweep,
  testFirstFiles, stepTestsOnlyFromFields); opensEntry built on opensChunk.
- plan-validator: one issue builder for the Files and Test first grammar.
- plan-scope-sweep: the 1.9 and the 6.2.0 reader are one if/else.
- artifact-commit: TRAILER_RE/trailerProblem no longer exported (no
  importer); the order comment says the CLI finds the repo root first.
- tests: the lock drivers in session-id-isolation (d) run side by side per
  mode (~100 s -> ~30 s); a shared artifact-repo helper; severityRank and
  extractFindingsBlock reused; childEnv(env) without a spread; one copy of
  the PLAN_VERSION_CURRENT check.

Plan readers: validator errors/warnings, plannedPaths, fieldPaths,
testFirstFiles and stepTestsOnlyFromFields compared byte for byte against
HEAD over 510 plans / 1692 steps plus 210 synthetic 1.7-1.9 cases: same.
Suite 2384 (2382/0/2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 21:06:47 +02:00
acfd2eb9b6
docs(changelog): plan_version 1.9 and the trial-4 findings, with door lines
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:40:33 +02:00
acd0e3dd47
fix(approval): approval commits carry the caller's Co-Authored-By trailer
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:17:22 +02:00
94de23ca3b
fix(trekbrief): the review stamp covers only text the reviewer saw
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 20:03:26 +02:00
e6755bd886
fix(trekplan): explorers and reviewers read only in the repo and get the brief
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 19:45:40 +02:00
305ac9284f
fix(review): the payload decides the engine, and a tie keeps the reviewer finding
An engine's brief-conflict mark could lower a reviewer agent's MAJOR: ingest kept an engine field a reviewer wrote on its own finding, and on a severity tie the survivor depended on payload order (engine first gave ALLOW, reviewer first WARN). ingest now takes engine from the payload source; Pass 1 and the workflow dedup keep the reviewer-agent finding on a tie. Prose (coordinator Pass 1, Handover 6) follows. Decision 13, operator 12.10.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:50:56 +02:00
11315d04eb
fix(review): the coordinator gets the brief's choices and writes the brief-conflict mark
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:28:54 +02:00
8cc6ba0181
fix(review): the workflow review floors an illegally lowered brief-conflict finding
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:16:07 +02:00
ce7700b71b
fix(review): a code-review finding against a brief Non-Goal may drop to MINOR, never a BLOCKER
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 18:04:36 +02:00
3009c5eddb
fix(plan): a 1.9 Test first names its test only on a line that opens with File:
The step check read File: anywhere on the Test first lines, so a 1.9 plan whose only File: stood mid-line validated while the executor, K6 and the red proof read no test file. From 1.9 checkSteps reads the test the way testFirstFiles does; below 1.9 it reads as before (decision 16). Found by the step 5 controller in /trekexecute --session 2; fixed on the operator's decision.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 17:44:23 +02:00
64e6771c8b
feat(plan): plan_version 1.9 is the current target, the file first on every line [skip-docs]
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:42:28 +02:00
d14a49b92d
feat(verification): K6 and the red proof read a 1.9 plan by its grammar [skip-docs]
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:29:58 +02:00
fc157c3ad5
feat(plan): the Test first File line follows the 1.9 grammar [skip-docs]
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:18:53 +02:00
3e1a811c60
feat(plan): read Files by the 1.9 grammar, warn on unticked paths below it [skip-docs]
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 16:09:25 +02:00
8bf97cc834
fix(execute): every test file on the Test first line is read, locked and copied
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 14:42:12 +02:00
6f342a2cdc
fix(plan): the Files reader gives 6.3.0's answer in the three known regressions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 14:21:56 +02:00
d8527976ef
fix(tests): the suite no longer hands the session id to the lock CLI
npm test now preloads tests/helpers/no-session-id.mjs, which deletes CLAUDE_CODE_SESSION_ID before any test file loads, and the 18 files that spread process.env into a child use childEnv() instead (23 sites). A live session's stop guard is no longer pointed at a temp-repo lock (S133).

engines stays >=18: --import exists from Node 18.18/20.6, and the quoted test glob already needs Node 21 (criteria-runner NODE_GLOB_MAJOR), so the real floor does not move.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 14:09:14 +02:00
a97efb6989
merge: release 6.3.1 (rounds 7-10 of the release review and the release commit) v6.3.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 18:02:06 +02:00
724a7045eb
chore(release): 6.3.1 — Fixes from the release review of 6.3.0, and two verdict-gate holes closed
Version 6.3.1 in plugin.json, package.json, package-lock.json and the
README badge; the 6.3.1 CHANGELOG section with its Doors list (all
two-way) and the Known issues from round 11 of the release review (WARN:
0 BLOCKER, 10 MAJOR; the operator chose to release with it on
2026-10-11).

Measured against 6.3.0 for the Doors list: the plan validator reports the
same errors and warnings for 233 plan files, the verdict gate gives the
same exit for 123 review files, and tests-only reads the same for 1408
plan steps, over the marketplace and the test repo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 17:55:36 +02:00
10ac9c5231
fix(review): round 10 of the release review of 6.3.0, for 6.3.1
Round 10 (0f400d3..a1e0e50, WARN: 0 BLOCKER, 11 MAJOR): six findings, by
operator choice. Each began with a test that failed on a1e0e50 on its
assertion, every case on its own; suite 2236 (2234/0/2).

- Files: a new line inside a description opens a new entry when it opens
  with a plain file with a slash, or with one alone on the line or followed
  by a colon or a dash ("src/cli.mjs", "package.json", "Makefile - a
  target"); "child_process.spawnSync, path.join", "Node.js 22 only" and
  "index.js and the CLI" stay description (ecd9da6f).
- Files: a numbered list item (`1.` or `1)`) is an entry, its marker
  dropped like `-` (b4215783).
- Files: a backticked capitalised name is a file only alone in its entry
  before any description; `Parser` inside one is not (39a57fee).
- Files: a backticked span that is no path (`x()`:) starts no description
  with its colon (882cc82a); a plain file with a colon starts it wherever it
  stands ("the entry cli.mjs: wires parse", a6bd9c8c).
- Measured over all 939 Files: fields in the .md files under the
  marketplace and the test repo (560 of them in the 48 plan.md files outside
  worktrees): 0 read differently from a1e0e50, tests-only changed in 0.
- The trailing-json fence reader is built on plan-schema's fenceTracker:
  a ~~~ fence is a fence, so a ```json line inside one no longer swallows
  the review's own block or hides its BLOCKER ids (0d94c5fe). This also
  closes a gate hole in 6.3.0 and a1e0e50: a last block written as ~~~json
  holding a BLOCKER, after a clean ```json block, passed with exit 0; now 2.
- Kept on purpose: a fence line indented four spaces or more still counts
  in that reader (fenceTracker's new anyIndent). Markdown's three-space
  rule made a BLOCKER block inside a list item, four spaces in, invisible,
  and the gate passed it with exit 0 (seen while fixing, before commit); a
  ```json line in a code block indented four spaces fails the gate closed.
  Both are pinned in the 0d94c5fe test.
- The fieldPaths doc names rounds 1-10 (it said 1-7).

Not in this round (operator 2026-10-11): F8 754723c1 (an info string
" json" fails closed, as in 6.3.0), F9 88de9e6b, F10 164c5bd0, F11
e70b28b7 (dc3a467e). F1 878e3960: this title carries a scope; the three
earlier commits are left as they are.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 13:36:17 +02:00
a1e0e50451
fix: round 9 of the release review of 6.3.0, for 6.3.1
Round 9 (0f400d3..a10018f, WARN: 0 BLOCKER, 12 MAJOR): seven findings and
three brief notes, by operator choice. Each finding began with a test that
failed on a10018f on its assertion; suite 2230 (2228/0/2).

- A check refused for its comment (a quote, $, backtick or backslash) keeps
  its command and its reason, and every reader refuses it out loud: a nested
  ## Verification bullet stays a criterion (PLAN_VERIFICATION_NOT_RUNNABLE)
  and a brief SC warns (BRIEF_SC_NOT_RUNNABLE). It was folded into a
  sub-point or read as prose, a regression from a10018f. Readers that took a
  command as runnable (the end-to-end lists) skip a refused one.
- The verdict gate reads the last fenced block's info string and body from
  one reading, and exits 2 unless the info string is exactly json: a last
  block opened as ```json {x} held a BLOCKER the gate passed with exit 0
  (also in 6.3.0). A last block never closed is exit 2 too.
- One fence reader (findings-schema fencedBlocks) for the gate and every
  trailing-json reader: a fence closes only on a run at least as long as its
  opener, as in Markdown, so a four-backtick example of a json block is one
  block; CRLF and an indented fence read alike in the gate and the readers.
- Files: a description runs on past a comma and onto the next line until a
  new entry starts (a list item on a new line, or a backticked path), and a
  plain path followed by a colon starts its description. Measured over all
  939 Files: fields in the .md files under the marketplace and the test repo
  (560 of them in the 48 plan.md files outside worktrees): 0 read
  differently, tests-only changed in 0.
- The test lock compares --cmd by its words, so other blanks between the
  same words are the step's command.
- release-check decides "two files" on real paths: one review.md reached
  through a symlinked --repo is one file.
- Brief notes: red proof's stopped control run has its own test (green at
  once, red with the branch deleted); the two tests that assumed jest is not
  installed run with a PATH that finds only git (red on a10018f with a jest
  on PATH, green now); the Files: reader's doc states the measured counts
  (520 fields in 48 plan files at rounds 7-8, not "182 plans"; 560 now).

Not in this round (operator 2026-10-11): a144e9ce, 1dc2e785, dc3a467e,
2fa88853, 26873fa5.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 12:49:01 +02:00
a10018f9d3
fix: round 8 of the release review of 6.3.0, for 6.3.1
Round 8 (0f400d3..29b4ac9, BLOCK: 1 BLOCKER, 12 MAJOR, 1 MINOR). Each fix
began with a test that failed on 29b4ac9 (13 tests, all red there); suite
2221 (2219/0/2).

- BLOCKER: a backticked check whose trailing comment holds a quote, $,
  backtick or backslash is refused, not dropped. The comment was never
  screened, while the executor hands the Verify span as written to red
  proof, the test lock and the done line inside --cmd "...", where a $(...)
  runs and a quote ends the argument. trekplan's text and the reviewer's
  NOT RUN table say so.
- A span that is only a comment is not-a-command, not a placeholder. The
  dropComment text says the allowlist still refuses a word with a # in it.
- The criteria runner, comparison-gate and end-state-gate use isMain: they
  did nothing and exited 0 under a symlinked path. The test now refuses any
  process.argv[1] comparison outside lib/util/is-main.mjs.
- Files: in a field with backticked paths, a plain word counts only before
  the entry's description (a dash, or a colon after the path); a name with
  no slash only first in its entry or after and/or/+/&. "mocks
  fs.readFileSync", "runs on Node.js 22.x" or "no change to package.json"
  no longer make a tests-only step look like it builds something.
  Lowercase makefile, rakefile and justfile are build files. Measured on the
  520 Files: fields in 48 plans of the marketplace and the test repo:
  3 fields read differently (two notes no longer read as files, one
  duplicate name dropped), tests-only changed in 0.
- The test lock compares --cmd without its trailing comment, and the test
  lock and the done line read a stop with stoppedBy, the one reading.
  red-proof drops its second reading, spawnError.
- release-check reads a relative --review in --repo or, when only that one
  exists, from the current directory as 6.3.0 did; two different files are
  exit 2, never guessed. The runbook says so.
- One trailing-json reader: a closing fence may be longer than three
  backticks, in the block reader and the verdict gate alike, and the review
  validator and the synthesis digest use it, so three backticks inside a
  JSON string no longer hide a BLOCKER from the remediation-step check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 10:43:56 +02:00