A brief success criterion and a plan's Verify, Regression, End-to-end and
Verification lines are each one command the criteria runner accepts, written
as the line's first backticked span; anything more is bash tests/<name>.sh,
and each must be able to go red (the runner reads the exit code only).
- skills/writing-criteria/SKILL.md (S1 form), with Runs:/Refused:/Never red:
examples that a pin runs through the criteria runner
- brief-reviewer and plan-critic preload writing-criteria and
reviewing-adversarially (S3 + S4); the copied runner rules leave them, the
two templates and /trekplan, which names the skill where the plan is written
and where its three reviewers start
- eval cases 3 fire / 2 quiet / 1 effect; tests/lib/skills-criteria-prose-pins
- review-630 @~1 pin follows the text into the skill; trekplan-stats line_ref
re-measured
Baseline without the skill: 24 of 27 written checks refused by the runner,
and 0 of 3 reviewers saw that git status/git log can never go red. With it:
0 of 27 refused, 3 of 3 reviewers flagged both.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A new skill, voyage:reviewing-adversarially (contract S4): no praise, no
finding without a source (file:line or a quoted line), no downgrade without
a reason, summary-only said and not judged, a Declined to Judge list, claims
checked against the diff rather than the report, axes kept separate.
Red baseline first: six review runs by helpers without the skill (two
invented fixtures) had no separate Declined to Judge list in 6 of 6, an
unsourced finding in 6 of 6, praise in 2 of 6 and a verdict on something
unmeasured in 4 of 6. With the skill: 6 of 6, 0, 0 and 0.
- brief-conformance-reviewer, code-correctness-reviewer, review-coordinator
and scope-guardian preload it through skills:; the 21-line "Interaction
Awareness - MANDATORY OVERRIDE" block copied into three of them is gone.
Each agent keeps its own role.
- The two reviewers and scope-guardian end with their own Declined to Judge
list; /trekreview names the skill at spawn and passes the reviewers'
lines to the coordinator, which copies them into review.md as prose
(the JSON declined_to_judge array and the verdict are unchanged).
- Eval cases 3 / 2 / 1; pins in tests/lib/skills-review-prose-pins.test.mjs.
- tests/fixtures/jsonl-schemas.md: the trekreview-stats line_ref moves with
Phase 8 (636-686).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Operator decision 56 (2026-10-17): the product shows English.
- Annotation HTML: the intent buttons, sidebar badges and the copied
prompt read Fix / Change / Question. The stored keys stay
fiks / endre / spørsmål, so annotations saved earlier still load.
- /trekreview project-memory approval: "Add the line" / "Not now".
- README, CLAUDE.md, docs/architecture.md, package.json and plugin.json
describe what the product shows; README's hollow-answer line and the
"anslag" in the profile section are English; a Norwegian code comment
in profile-validator.mjs translated.
The Norwegian hollow-answer list in approval-log.mjs and trekbrief.md
stays: it matches what a user types. Both new tests failed on the code
before the change. Suite 2606 (2604/0/2).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two docs tests located this delivery's CHANGELOG section by the literal
heading `## Unreleased` (one also required it to be the first section).
The release commit renames it to `## v6.4.0 — <date> — <title>`
(docs/release-runbook.md § 1.4), so all 16 content pins failed on the
release commit while the content was the same.
One shared helper, tests/helpers/changelog-section.mjs, now finds the
section by its title under either heading, wherever it stands (a later
delivery's section above it does not move the pins), with a trailing \r or
spaces tolerated, and only when it stands exactly once. Every content
assertion is unchanged; their messages no longer say "Unreleased". New
tests pin the accepted headings and seven near misses (version, date,
title, the literal dot in 1.9), and the helper on a later section, a \r,
a duplicate and a missing section.
Measured: 46/46 pass against main's CHANGELOG and against the release
commit's CHANGELOG; before the change, 16 failed on the release commit.
Three mutants of the helper (a looser date, no escaping, no trim) are
each failed by one test.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Decision 41's rerun is scoped to below plan_version 1.8 in the executor and Handover 4 (as the helper and the exit-2 row already say), the decision-30 sentence names the one exception, and the Fixed and Known-issues slicers share one subsection helper.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
/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>
/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>
/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>