Repository navigation
Conversation
… fail (#159) --positive-control proves the harness can fail, not that a journey's claim can. Port named-controls.js: a control file (control.of / control.mustFail) is PROVEN only when the runner exits 1, every check named by mustFail is FAIL (at least one), and nothing else is FAIL or INVALID; a persona other than the run user is a FAULT and is not run. journey-runner.js gains --out=<file> and a warn-only "WARN named control:" line for a journey with no claim or no control file. journey-proof.md gains the rule. Fixture tests/wave2/test-named-controls.sh, 19 cases over the captured card-disbursement walk. No field run of this port. Closes #159. Source: MendixMau, card-disbursement requirements-driven build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
… its directory (#368 review) A control saved as *.journey.json would be walked, normalized and seeded as a real journey, because verify-module, report-normalize and fixture-manifest discover journeys by that suffix. The runner's gap check and named-controls.js now accept only *.control.json (beside the journey or in controls/); named-controls.js FAULTs any other name without running it. journey-runner.js creates the parent directory of an --out= path. journey-proof.md names the suffix and why. Fixture test-named-controls.sh 19 -> 24 cases: misnamed controls do not count, a *.control.json is not discovered as a journey, and --out= into a new nested directory. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
MendixMau
pushed a commit
that referenced
this pull request
Oct 14, 2026
…wn claim can fail (#159) Review: independent review MERGE-AFTER-FIX — control-file suffix unspecified (a *.journey.json copy would run as a real journey); --out= did not create its parent dir → controls must be *.control.json (skill, runner findControls, named-controls.js FAULT otherwise), --out= mkdir -p, in c7c4fd6; confirmation MERGE: real journeys cannot be swallowed as controls, existing *.journey.json discovery unaffected. CHANGELOG credit wording checked: generic, already used on master. Fixtures: named-controls 24/0, control-exit 7/0, persona 4/0, preflight 75/0, liveness 36/0. Warn-only gap check; no field run. Closes #159. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
Merged
5 of 7 tasks
MendixMau
added a commit
that referenced
this pull request
Oct 15, 2026
…journey controls, fixes) (#385) Lands #340 #363 #362 #355 #370 #368 #364 #365 #366 #372 #367 #371 #376 #369 #373 #377 #378 #380. Review: each constituent PR independently reviewed by a fresh agent that did not write it; merged into integration/2026-10-15 only on a MERGE verdict with green CI (per-PR Review lines in the integration merge commits). After-fix rounds: #373 (env-var cap, rename/skip-loops freshness), #377 (inline URI fallback), #378 (full-pack double count, slice content). Stub diet (#369/#378/#380) behaviour A/B, 5 reps x 2 drafting tasks + 5 retrieval probes x 3 reps: trimmed context no worse than master on every scored metric (planted STOP refused 20/20, parse failures page 2/5 vs 3/5, probes 15/15); mdl Stage 5 56,236 -> 30,647 words, baseline 75,028 -> 73,233. Full suites on c9bc073: run-tests 33/0, wave2 111 fixtures 0 failing. Field evidence: none yet for the instruments (#355 warn-only, #373/#377 read-only). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
Owner
Author
|
Landed on master in #385 (squash Generated by Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #159.
Direct lane
What changed and why (one paragraph):
--positive-controlproves the harness can fail. It does not prove that the claim a journey exists for can fail. In the issue's field case, a journey passed every rung, its positive control proved 7 of 7, and its claim held only by accident. This PR addsproject-tests/e2e/named-controls.js(58 lines), ported from the behaviour the issue specifies and added toMXTK_PROJECT_TESTSsoinstall-tests.shships it. It runs control files named*.control.json, each declaring"control": {"of", "mustFail"}, through the runner with--out=<artifacts>/control-<id>.json. A control reads PROVEN only when all three hold: the runner exits 1; every check whose name containsmustFailis FAIL, with at least one; and nothing else is FAIL or INVALID. Two cases are a FAULT and do not run: apersonaother than the run user, and a file not named*.control.json. A stale findings file is deleted before each run. The suffix is required because verify-module,report-normalize.jsandfixture-manifest.shall discover journeys as*.journey.json. A control saved under that name would be walked, normalized and seeded as a real journey.journey-runner.jsgains--out=<file>, which creates its parent directory. The issue depends on this flag from #148, which is not yet on master, so this PR adds only that flag. The runner also prints a warn-onlyWARN named control:line for a journey with noclaim, or with no*.control.jsonbeside it or incontrols/. The same list is written asnamedControlGaps. It adds no row and does not change the exit code; it stays warn-only until a field run.skills/journey-proof.mdgains the rule "every journey names its claim and ships a control", the naming rule, a one-line failure example and a checklist line.Field evidence: none yet for this port. The behaviour comes from the issue author's card-disbursement requirements-driven build. There, the project's own
named-controls.jsfound a claim that held by accident, and after the fix it read 5 of 5 PROVEN. The toolkit copy has not been run against a live app.bash tests/wave2/test-named-controls.sh project-tests/e2e/named-controls.js: 24/24. Its cases are built from the captured walkfixtures/journey-control/walk-run.json.--out=handoff and the stale-file guard.*.journey.jsonor as a bare.jsonincontrols/does not count.*.control.jsonis not discovered as a journey by the patterns verify-module, report-normalize and fixture-manifest use.--out=path whose directories did not exist, and prints the WARN lines.--out=/WARN removed gives 3 FAIL; suffix filter and mkdir removed gives 6 FAIL.config.js/path.resolve, with no new path roots.spawnSync(process.execPath, …)uses no bare wrapper name.CHANGELOG.mdline appended, credited to MendixMau (card-disbursement requirements-driven build)Not done: the issue's optional
obligations.tsvdenominator ("journeys with a PROVEN named control") and thetesting-shape.md§6 mention.render-routing --checkis clean. The baseline is 75,028 words before and after, becausejourney-proof.mdis on-demand and not counted in it.🤖 Generated with Claude Code
https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw