Repository navigation
learn(parallel-builds): worktrees and branches on one app — never a plain git merge of the model; post-merge orphan check (#741) - #742
Conversation
…del-branch merges (#741) Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
…before the merge, forbid diag --fix on ORPHAN lines, spell out the tested script-replay merge, clarify the two timing figures (#742 review) Review: MERGE-AFTER-FIX applied Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
…-readable rollback, ff-only refusal path, restore field-test cut lines (#742 round 2) Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
…gested diag --fix, and why (#741) Review finding: at the moment fix hashes prints ORPHAN lines its own output suggests the command that deletes the lost module; the step only pointed to section 6. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
|
Review: MERGE-AFTER-FIX: a sound skill backed by a field run. But its Team Server pointer ( Value: it covers #741's first ask: the parallel-build rules, including never a plain
Regression risk: low.
Correctness: the capture looks verbatim, not hand-written. The cited flags exist:
Context cost: 66,014 → 66,014 of 80,000 (measured on base 03ab940 and head). The skill is on demand, 939 words. Time cost: none. Exact fixes required:
Generated by Claude Code |
…unts per arm, own database per worktree) Review: applying MERGE-AFTER-FIX findings on #742. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
|
All three fixes from the review above are in
Also: the never- Re-review at Generated by Claude Code |
…d rules from #744 (merge command path, rerun marks, review before merge, isolation, commit discipline) Refs #744 Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
…ath safety, evidence labels, review fixes Review: MERGE-AFTER-FIX items a-i applied. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
…tant values; say the line keeps a bad merge (#741 #744) Review finding: the constants gap line recommended 'mxcli constant list', which prints resolved values and masks only machine-store ones, so it can print the same secrets 'show constants' does. Point to the audit script, which classifies without printing values, and say to run neither listing on a model whose constants may hold a credential. On the merge-command path the line keeps the bad merge until the maintainer decides; nothing is reset. Two restatements shortened. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
|
Updated for #744 (head
What changed beyond that:
Not in this PR: the wrapper that automates these rules, the post-merge guard, a replay helper, a lint delta, the Team Server push note. Review at Generated by Claude Code |
…mental tier, no stage map, no stub) Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
|
Maintainer decision applied in
Known gap: Review at Generated by Claude Code |
CHANGELOG.md, ROUTING.md and bin/lib/skill-routing.tsv: both rows kept; routing re-rendered. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
… must-have list (#743) New on-demand skill skills/poc-build.md. A POC build is a build type (`Build type: full | poc` in PROJECT.md), chosen by the kickoff interview's first question (intake Q16) and independent of entry mode and Pipeline mode. No line means full; `Interview mode: auto` never picks poc; a project already past kickoff is not asked. Flow: design artifacts first, one human stop on the prototype, then model work, a journey covering the happy path and every refusal, a 12-row must-have list and a markdown hand-over. Size is warn-only. Touches bin/lib/intake-template.sh (Q16), bin/init-project.sh (scaffold line), bin/lib/resume-template.sh (starter text), the Stage P row of skills/conversion-runbook.md, one routing row and its renders. No gate logic changed. Baseline words 66,014 -> 66,025. Refs #729. Review: MERGE — no findings; composition check with #742 MERGE (branch equals master plus exactly this PR's changes). CI: green on ac79eef (checks, authoring-audit). Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
Direct lane (changes to
skills/,bug-logs/,bin/,project-bin/,project-tests/, pipelines)What changed and why (one paragraph): Refs #741 and #744 (a field run, 2026-11, where a plain
git mergetook the model's unit index from one side and a module of 63 units vanished without any gate failing). Newskills/parallel-builds.md(about 1,560 words), an optional, opt-in reference outside the pipeline (maintainer decision: available for people who want it, not part of the process). It is routed in theexperimentaltier with stage-and rolelead: listed in README's "Under trial" table and ROUTING.md, but in no stage map, nogate-check.shstage list and no agent stub; its trigger fires only when the user explicitly asks to build in parallel worktrees or merge model branches. The skill's first line says the default stays one writer per.mpr(dispatching.md) and the pipeline does not call it. Content: set up (one worktree and branch per builder, ports and own database, rewired local-URL constants, a script number block per branch, owners for shared parts and cross-page flows), build (rerun marks, explicit-path commits), review before merge (writtenDecision), merge (never a plain git merge of the model; on every merge a rollback tag first, recovery per path), post-merge check in a fixed order because the build gate alone is blind to orphaned units, and a Never list. Text plus one captured fixture; no script changes (bin/gate-check.shis untouched).Two evidence tiers. Tier A, reproduced here (mxcli v0.28, Mendix 11.13, 2026-11-11, recaptured 2026-11-12 with neutral module names): the plain-merge failure, script replay, check order, ports and disk. Tier B, field-tested by the maintainer with mxcli v0.30+ and not reproduced here (the CLI tested in this PR is v0.28, which has only
mxcli git note): themxcli git mergepath and the outcomes of the maintainer's wrapper around it, rerun marks, review file, isolation rewiring, commit discipline, the same-name CE0081 trap. Each rule in the skill carries its tier. The merge-command path is the first choice whenmxcli git --helplistsmerge; the script-replay path stays as the second choice for v0.28, limited to branches whose scripts are all marked rerun-safe.Impact
experimentaltier, stage-, so it is in no stage map and no agent stub, and nothing blocks or gates on it. No new stage artifact.bin/lib/skill-routing.tsv(oneexperimentalrow, stage-, rolelead, trigger "the user explicitly asks") and its renders (README.md"Under trial" table,ROUTING.md).bin/gate-check.shis not touched. Points toproject-bin/idempotence-check.shfor the rerun check. Relies onmxcli fix hashesandshow modules(v0.28); the merge path relies onmxcli git merge(v0.30+) and is gated onmxcli git --helplisting it.bin/render-routing.sh --check. The skill is read only on the user's ask (about 1,560 words).Field evidence (Tier A) — LoanDesk (fictional test app, Mendix 11.13.0, mxcli v0.28.0), two worktrees on two branches from one base, each adding a module (Planner and Tickets in the committed capture; first run 2026-11-11, recaptured 2026-11-12 with the same counts) and both changing the menu and a role:
exec.shran unchanged inside a worktree; two apps ran side by side on their own ports and databases. The untrackedmxclibinary had to be copied into the fresh worktree.git merge: conflict on the.mprunit index and on the Navigation and ProjectSecurity units. Taking one side's index left 7 units of the other module on disk and unregistered (396 indexed, 403 files).mx checkand theexec.shmxbuild gate both reported 0 errors.mxcli fix hashesexited 1 and named all 7;show moduleslacked the module. Verbatim capture committed attests/wave2/fixtures/worktree-merge/.mx merge: merged the units changed on one side, left CE0137 on the units changed on both; clearing it needs Studio Pro.alter navigation insertwas not rerun-safe.Not in this PR (follow-ups from #741, #744): the wrapper that automates these rules (later, its own PR); a guard that runs
fix hashesand the module count after a merge; a replay-in-number-order helper for merge scripts; a lint delta during merges; a fixture that asserts on the committed capture; the Team Server push note (the ContentsHash step), whichteamserver-alignment.mddoes not cover yet.render-routing.sh --check,check-scripts.sh,check-no-private-citations.sh,mdl-rules.sh --check) plus the field test abovebin/lib/skill-routing.tsv+bin/render-routing.sh)CHANGELOG.mdline appended in this PR, crediting the sourceGenerated by Claude Code