Skip to content

status: delivery rounds in existing-app mode, manual Studio Pro step template, final-look kept out of early NEXT - #326

Closed
MendixMau wants to merge 3 commits into
masterfrom
feat/existing-app-rounds
Closed

MendixMau wants to merge 3 commits into
masterfrom
feat/existing-app-rounds

Conversation

@MendixMau

@MendixMau MendixMau commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner

#301: existing-app-change reports the round, not only the stage

Problem. A field run delivered 11 backlog stories in 4 rounds on a 127-module app. Through all of it status.sh --brief read "Stage 1 — Analysis", and WATCH said "agent slots unfilled: 35 in 6 file(s)".

Fix.

  • Round record. A ## Rounds table in PROJECT.md: | Round | Title | Stories | State |, one row per round, appended in order. The last row is the round in flight. The heading is matched exactly (^## +Rounds *$), so a section like "## Rounds of review" is not read.
  • Why PROJECT.md and not .claude/loop/rounds.tsv:
    • every session already reads it;
    • it is tracked in git, so other sessions and machines see it;
    • the change log already lives there as a parsed table.
  • Round line. In existing-app-change mode only, status.sh prints ROUND Round N: <title> — <state> · stories: … · D of N round(s) delivered under WHERE. The full screen prints it as ROUND. Columns are found by header name, and Stories is optional. With no table, the line says none are recorded and where to add one.
  • Noise dropped. In that mode only, the "agent slots unfilled" WATCH item is dropped. The pipeline agent stubs are not used for a change stream, and the round line is the progress readout instead.
  • What stays.
    • The done- signals (done- stall, gate-passed-but-not-done-) stay, because Stages 5–6 run the build loop unchanged in this mode (existing-app-change.md).
    • The "complete the agent stubs" NEXT rule stays. It only fires at Stages 5–7.
  • Per-story detail stays where the stories live (ticket system, stories.json, change-log rows). This table only names them.
  • Question for @jopterhorst: is one row per round with a free-text Stories cell the shape you would keep? Or do you want per-story rows (story, scope, touched units, test verdict) that status aggregates, like "3 stories, 2 verified, 1 in test"? I kept it minimal on purpose and would rather extend it from your real stories.json than invent a schema.

Pipeline modes are unchanged. The fixture byte-diffs --brief and full output against the pre-change script (pinned at b9cf37c) on a real migration scaffold. It does this with and without a ## Rounds section, with the agent-slot and done- stall items present as a control.

#298: targeted manual Studio Pro steps

  • Template. New templates/manual-steps.md, with one section per edit:

    • the document by full path;
    • why mxcli cannot make the edit;
    • depends-on (the MDL script that must run first);
    • the exact clicks, with an anchor;
    • a Check a person runs in the app;
    • one - [ ] Done line naming its evidence (a commit, or a BUILD-LOG row).

    The worked example is fenced so it never counts.

  • Patch rule. A step done by patch still goes through ./bin/exec.sh --patch. Both the template and the skill say this.

  • Skill. skills/existing-app-change.md gains two sections, "Delivering in rounds" and "Edits mxcli cannot make", plus two deliverables lines. The skill is on-demand, so the baseline word count is unchanged.

  • Count. status.sh prints manual steps pending N of M (unticked Done lines of all Done lines) when docs/manual-steps.md exists, in any mode. Without the file, nothing changes.

  • Not done here: a gate-check row for pending steps. gate-check.sh is outside this PR's files, so the count is status-only for now.

From the review of #303: final-look kept out of early NEXT

Problem. next_action printed discharge: … final-look (the Stage 6 whole-app LOOK) to Stage 1–5 projects. That hid gate-check's "Next up" hint behind a pass those projects cannot do yet.

Fix. NEXT drops final-look only, and only when both of these hold:

  • the stage line is gate-check's own derived readout (contains "(derived by gate-check");
  • the first Stage N on that line is below final-look's from-stage (6).

Details:

Review

One adversarial review round on the first push (afd7482) came back MERGE-AFTER-FIX. All three findings are fixed in 2fa6883, each with a fixture case:

  1. HIGH. The first filter dropped every obligation whose from-stage was above any **Stage line. That hid owed module passes. Repro: a scaffold, .claude/loop/verify/Orders, and a derived "Stage P" line; master said discharge look/sweep/journeys, this PR dropped them. The filter now covers final-look only, under the derived readout, and reads the first Stage N.
    • Fixture cases T9a–T9d. T9b is that repro.
    • A copy of the script that reads the last Stage N instead of the first fails T9d.
  2. MEDIUM. Done- was dropped in existing-app mode, which contradicts "Stages 5–6 run the build loop unchanged". Now only the agent-slot WATCH item is dropped; T4 asserts the done- stall still shows.
  3. LOW. /^## +Rounds/ also matched "## Rounds of review". It is now anchored; fixture case T6b.

A confirmation review (MERGE-AFTER-SMALL-FIX) found that T9a failed on the integration branch, because #321 had already made final-look not pending there. Fixed in 22d6f7e by making T9a aware of NOT YET DUE.

Evidence and checks

  • Fixture. tests/wave2/test-status-existing-app.sh bin/status.sh scores 27/27. Against master's status.sh it scores 16/27, with 11 failing: T3 ×3, T4, T5, T6, T6b, T7 ×2, T8 and T9a.
  • CI checks run locally, all clean:
    • check-scripts: 109/109
    • check-portability
    • check-no-private-citations
    • render-routing --check: routing is untouched
    • leak guard: LEAKGUARD_ALLOW_NO_DENYLIST=1
    • check-pr-discipline origin/master
  • No other fixture runs status.sh.

Risks

  • The round line trusts the State cell as written. Only a state starting with delivered counts as delivered.
  • If a project still has a derived readout below 6 at Stage 6 work (gate-check's derived stage lags behind an early failing gate), NEXT does not name final-look. The obligations-pending line still does, and gate-check still reports it.

Field run

Still owed. The round line and the manual-step count have not been run on a real existing-app project. The fixture uses real scaffolds, but no field project's PROJECT.md was available.

Closes #301
Closes #298

🤖 Generated with Claude Code

https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw


Generated by Claude Code

…o above-stage obligations in NEXT

#301: in existing-app-change mode status.sh prints a ROUND line read from a
PROJECT.md "## Rounds" table (last row = round in flight) and drops the
agent-slot and done- stall items from WATCH and NEXT. Pipeline modes print
byte-identical output.

#298: templates/manual-steps.md for edits mxcli cannot round-trip (path, why,
depends-on, exact clicks, Check, one Done line); a step done by patch still
goes through exec.sh --patch. status.sh prints "manual steps pending N of M"
when docs/manual-steps.md exists.

Review of #303: NEXT drops obligations whose from-stage is above the
project's current stage (final-look was sent to Stage 1-5 projects).

Fixture tests/wave2/test-status-existing-app.sh: 23/23; 13 fail on the old script.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…heading)

- NEXT drops final-look only, and only when the stage line is gate-check's
  derived readout below its from-stage, reading the FIRST "Stage N" (mirrors
  #321's NOT YET DUE). Module passes owed under a lagging or hand-written
  line stay in NEXT.
- existing-app-change drops only the "agent slots unfilled" WATCH item;
  done- signals and the agent-stub NEXT rule stay (Stages 5-6 run the build
  loop unchanged in that mode).
- "## Rounds" heading anchored, so "## Rounds of review" is not read.

Fixture: 27/27; 11 fail on master, T9d fails on a last-Stage mutant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
@MendixMau MendixMau changed the title status: delivery rounds in existing-app mode, manual Studio Pro step template, no above-stage obligations in NEXT status: delivery rounds in existing-app mode, manual Studio Pro step template, final-look kept out of early NEXT Oct 13, 2026
When gate-check already reports final-look NOT YET DUE (#321), final-look
is no longer pending: assert it is absent from the obligations-pending line
and mark the baseline control not applicable. Pre-#321 assertions unchanged.
27/27 on this branch and on a scratch merge onto integration/2026-10-14.

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 13, 2026
…dio Pro step template, final-look kept out of early NEXT (closes #301 #298)

Review: MERGE (review + fix round + confirmation; last change fixture-only, as the reviewer specified) — NEXT filter limited to final-look under gate-check's derived readout; done- kept; pipeline output byte-identical to master; fixture 27/27 on this integration tree.
MendixMau added a commit that referenced this pull request Oct 14, 2026
)

Every constituent PR was reviewed by a fresh agent that did not write it (CLAUDE.md "Merging a PR"); only MERGE verdicts joined. CI green on each constituent head and on this head (40814fc); full suites run on the branch.

Review lines (per merged PR):
- #315 context trim — MERGE; 360/385 removed lines found verbatim in their new homes, rest read by hand; baseline 79,997 -> 76,259.
- #316 independent-review + word-budget rules — MERGE-AFTER-FIX (3 rounds), fixes applied as specified.
- #318 page-fidelity displayed text — MERGE after fix round + confirmation.
- #317 interaction-model skill (#291 part 1) — MERGE after fix round + confirmation; no client names leaked.
- #321 PROOF-OF-LOOK per section; final-look not due before derived Stage 6 — MERGE after fix round + confirmation.
- #307 graph-sweep guard; per-BRD conformance ledgers — MERGE after two fix rounds + confirmation.
- #325 extraction-quality section; token-burn fixes — MERGE after fix round + confirmation.
- #310 e2e OQL by alias, negative-span liveness, APP-DOWN, #302 credential regression fix — MERGE after fix round + 3 confirmations.
- #323 inbox promotions — MERGE after fix round + confirmation.
- #308 lint gate BLIND on reverted stock rules — MERGE (FIRST-SEEN reverted) after two fix rounds + confirmation.
- #328 pipefail + grep -q flake — MERGE; 0/30 flakes vs 15/100 on master. Follow-up: run-all resolves bin/lib/ subjects (reviewed, MERGE).
- #319 test-stack-up command-line ownership proof — MERGE after fix round + 2 confirmations.
- #327 change-intake core + on-demand detail; CRLF-safe change log — MERGE after fix round + confirmation.
- #320 follow-ups to #290/#292; Dispatching split out — MERGE after fix round + confirmation.
- #326 status delivery rounds (existing-app mode) — MERGE after fix round + confirmation.
- #312 lint batch 4: SEC014, toolkit CONV009 — MERGE after review + 2 fix rounds + confirmation; field run on mxcli 0.26.
- #324 exec.sh change classes, shared stale-lock takeover, SEC014 note echo — MERGE (joint review); follow-up owed for a takeover race after a mid-takeover crash.
- #322 MxTest after-startup guard, mxcli-run pid check — MERGE (joint review).
- #314 doctor property-set exit code; sync announces its bound — MERGE (joint review).
- #330 review follow-ups (exit 4/5 docs, pipefail, NUL strip) — MERGE-AFTER-FIX, fixes applied; takeover re-check dropped.

Field runs are still owed for most instruments in this batch (stated in each PR).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
@MendixMau

Copy link
Copy Markdown
Owner Author

Landed on master as part of the integration squash #329 (commit 31e90ae), after independent review — its Review: line is in that commit message. Closing as superseded.


Generated by Claude Code

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

Labels

None yet

Projects

None yet

2 participants