Skip to content

verify-module.sh journeys rung reads only journeys/<Module>.journey.json; a module that keeps one journey per file under journeys/<Module>/ gets FAULT "no journeys/<Module>.journey.json" #542

Closed

Description

@AlvinnYeo

File: project-bin/verify-module.sh lines 647-672 (JOURNEY="$JOURNEY_DIR/$MODULE.journey.json", the fault "journeys" "no …" branch, and the two _exec … node "$JOURNEY_RUNNER" "$JOURNEY" calls) · Toolkit: 393d253 · mxcli: v0.27.0 · Mendix: 11.14.0

Summary

journey-runner.js and validate-journeys.js read one journey per file, and the runner already takes several files
(node journey-runner.js journeys/*.journey.json, its own header line 6). A module with more than one journey
naturally ends up as:

journeys/<Module>/<J-01>.journey.json
journeys/<Module>/<J-02>.journey.json
journeys/<Module>/controls/<J-01>.control.json

verify-module.sh looks only for journeys/<Module>.journey.json. With the folder form and no top-level file the
rung is:

journeys   FAULT   2   -   (no journeys/<Module>.journey.json)

and its note says the golden path is "UNTESTED end-to-end", while eight journeys for that module sit one level down.
The only way through today is to copy one of them to the top-level name, which then has to be kept in sync by hand,
and the rung still proves just that one journey.

Expected

The folder form is recognised. A journey that exists is never reported as missing.

Suggested fix (ranked)

  1. If journeys/<Module>.journey.json is absent and journeys/<Module>/*.journey.json exists, walk those files.
    Precedence: the single file when both exist (keeps today's behaviour), else the folder.
  2. Group by persona. Since journey-runner.js: a journey's persona is only printed, so a role journey run under a different TEST_USER passes for the wrong reason #149 the runner marks a journey INVALID when its persona differs from the signed-in
    user ("one file, one run per role"). So one runner call with every file fails all but one role's journeys. Run
    once per distinct persona with TEST_USER set to it (the password lookup the project already uses), or once per
    file. Journeys with no persona run as TEST_USER, as now.
  3. Positive control: run --positive-control per file that has a named control, or at least on one per persona.
    Say in the row which files were controlled.
  4. Report the denominator: journeys: 6 of 8 PASS (journeys/<Module>/, 2 personas) rather than one verdict that
    reads like the whole module.
  5. Same lookup in artifact-check / obligation-check if they also hard-code the single file.

How to retest

A module with only journeys/<Module>/A.journey.json and B.journey.json (different personas): before, FAULT "no
journeys/.journey.json"; after, two runs, one per persona, both reported.

Activity

  1. MendixMau commented on Oct 23, 2026

    @MendixMau
    Owner

    Triage: DISCUSS track. It adds a new on-disk journey layout to a gate rung (FAULT to PASS), changes the Stage-5 artifact glob, and makes the runner run once per persona (more runner calls, longer runs). Verified.
    Problem: The journeys rung in project-bin/verify-module.sh only looks for journeys/<Module>.journey.json. That's :674, the FAULT at :684, and the runner calls at :693 and :698. The issue cites :647-672; the lines have moved since 393d253. Five skills document only the single-file contract (journey-proof.md:318, module-brief.md:171 and others). The artifact row bin/lib/artifact-manifest.tsv:99 (${JOURNEY_DIR}/*.journey.json) is not recursive. Passing every file in one runner call fails all but one persona with INVALID (journey-runner.js:983-987). verify-module.sh has no lookup that maps a persona to its password.
    Value: Med. Modules with more than one journey get a false FAULT, or have to keep a hand-synced copy at the top level.
    Options:

    1. Folder fallback, single persona. Use the folder only when there is no top-level file and every journey in it has the same persona; otherwise FAULT and name the mix. Update the manifest glob and the skills. Risk: low. Cost: S-M.
    2. Option 1, plus one runner call per persona (and per-persona positive controls), reporting "N of M PASS, K personas". This needs a new TEST_PASS_<persona> convention. Risk: med. Cost: M. Runtime grows with the number of personas.
    3. Document "one journey file per module" and point to the existing hint mechanism OTHER_SHAPE (:609-613).

    Recommendation: Option 1 now. Option 2 once there is a credential convention for each persona.
    Decision needed from you: Do you accept journeys/<Module>/*.journey.json as a second official layout, and should one verify run cover more than one persona? Reply "go option N" to build it.


    Generated by Claude Code

  2. MendixMau commented on Oct 26, 2026

    @MendixMau
    Owner

    Fixed in #578 (squash a088b4e) for the reported FAULT: verify-module walks journeys/<Module>/*.journey.json in one run when the single file is absent (the single file still wins). Running once per persona folder is on the roadmap: #579.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions