Skip to content

new(poc-build): POC build — design first, one approval stop, a 12-row must-have list (#729) - #743

Merged
MendixMau merged 13 commits into
masterfrom
claude/loving-gates-hauc1n-poc
Nov 12, 2026
Merged

MendixMau merged 13 commits into
masterfrom
claude/loving-gates-hauc1n-poc

Conversation

@MendixMau

@MendixMau MendixMau commented Nov 11, 2026 •

Copy link
Copy Markdown
Owner

Direct lane (changes to skills/, bug-logs/, bin/, project-bin/, project-tests/, pipelines)

What changed and why (one paragraph): Refs #729. New on-demand, experimental 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, "Which kind of build?": Full build (Recommended) or POC build, rendered per interview-protocol.md §3) and independent of the entry mode and of Pipeline mode:. It mirrors how Pipeline mode (intake Q15, #700) was added: the question lives in bin/lib/intake-template.sh, a Build type: full line is in the PROJECT.md scaffold, the Stage P row names it. No line means full; Interview mode: auto never picks poc; an existing mid-build project is not asked. Flow: after the build-type answer ONE message with the design question ("Do you have a prototype or a design?", plus three short questions on the Nothing path); design artifacts first; ONE human stop on the clickable prototype; then model work (security and theme first, wireframe-built pages one at a time, looked at on 1280 and 390); a journey that covers the happy path and every refusal; a markdown hand-over so the POC can continue through existing-app-change.md. It names what a POC build skips and says to state that in the hand-over. Size is warn-only. Second proof build fixes in this push: the skill now tells the lead to write a fixed Unverified — how to verify: not asked, POC build … under the intake questions a POC build skips (the escape form intake.md already offers), so Stage P stops reporting FAIL; the RESUME starter says to ask Q16 first; re-seed without an invented command; page pre-flight precedence (skip Step 0 and Step 3 of ui-preflight-pages.md); one-line warnings on token naming and the bottom-bar nav.tabs. No gate or script logic changed (one line of the RESUME starter text in bin/lib/resume-template.sh).

Impact

Row Answer
Process — human steps or gates added/removed; does anything new block; new stage artifacts One new kickoff question (intake Q16, asked first), plus the POC flow's one human stop. Nothing blocks existing projects. A POC build does not run the stage gates. Checked by running gate-check.sh on a scaffold with Q16 answered and Q1–Q15 carrying the Unverified line: Stage P PASS (markers present, says nothing about the answers), Stages 0–4, 6, 7 PENDING, Stage 5 MANUAL; with one question unmarked Stage P is FAIL. The skill tells the user this is expected and not to waive stages to turn it green.
Dependencies — shared files touched; order vs other open PRs; new tools/platform assumptions; new artifact reads + their producer bin/lib/intake-template.sh (Q16, appended; Q9 not renumbered), bin/init-project.sh (two PROJECT.md scaffold lines), bin/lib/resume-template.sh (step 2 of the RESUME starter), skills/conversion-runbook.md (Stage P row), skills/poc-build.md, bin/lib/skill-routing.tsv (one on-demand row) and its renders (README.md, ROUTING.md, four agent stubs), CHANGELOG.md. No ordering constraint with open PRs. Producer of Build type:: the kickoff answer (Q16). Fixtures grepping the changed lines (test-stage-p.sh, test-bug12-sync.sh T10): read, unaffected; none greps the RESUME starter text; not run.
Context cost — always-loaded words, base → head, baseline total vs 80,000 Baseline 66,014 → 66,025 (+11, the Stage P row's "Which kind of build, asked first (full or POC, intake Q16)") of 80,000, from bin/render-routing.sh --check; unchanged by the second push. poc-build.md is on demand (about 2,020 words).
Behaviour — A/B result for agent-read text, or "NOT RUN: " Two driven builds plus a blind comparison with a no-toolkit build (below); no A/B of the skill text itself.
Runtime — seconds/resources added or saved n/a: no check or gate added. Measured for the flow: about 36 min (first proof build), about 64 min (second, run in parallel with another build, so inflated).

Field evidence — fictional test apps only, Mendix 11.13, mxcli v0.28, 2026-11-10/12:

  • Six earlier test builds of one small loan-desk app (two rounds) shaped the flow: stock-look builds scored about 2.0–2.2 on visual design whatever the process; design-system-first scored 3.8 and reproducing a supplied prototype 4.0, both about 30 min.
  • First proof build driven by this text (visitor passes; 2 roles, 5 pages): about 36 min; journey 22/22; independent grade: function 26 of 29 testable, visual about 4.1 of 5 (one grader, not blind), follow-up docs 17 of 24; "nearly demo-ready".
  • Second proof build (final text, kickoff question asked first and answered POC; 6 pages): about 64 min, journey 37 of 37 on three cold runs. A blind grader compared it with the same requirements built in plain plan mode with no toolkit: function 25 of 25 against 24 of 24 testable; refusals in-page 7 of 7 against 2 of 6; must-haves 10 of 10 against 5 of 10; visual mean 3.8 against 3.6; hand-over 22 of 24 against 12 of 24; build time about 64 min against about 27 (both ran in parallel, inflated). The measured gain is in the must-have list and the hand-over, not the look, and it costs time.
  • The second builder listed 15 process-text problems; each is fixed in the skill, fixed in the RESUME starter, or left as a follow-up below.
  • Limits: one model, small apps, nothing measured above 6 pages and 2 roles; the approval was answered from a prepared file, not a person.

Follow-ups, not in this PR: (B) assemble-prototype.js hides any class starting wf-; (C) friendlier defaults in check-design-reaches-app.sh (token names that differ from the theme's) and check-page-shell.sh (a phone bottom bar nav.tabs read as a top bar); (D) the page-shell/class rules of ui-preflight-pages.md split from its StyleGallery steps; (E) session-start steps that assume a chat and a writable toolkit clone (the git pull ritual, "state in chat which commit"); (F) a hand-over block for brd-generation; (G) a few mxcli facts for the learned-rules files; (H) the project wiring lists ./bin/exec.sh <script> without --commit-first, and does not mention FINDINGS.md/brain capture for a POC build.

  • No client data anywhere in the diff
  • Size cap: one new skill, one routing row and its renders, one changelog line
  • Test tier reached: static checks (render-routing.sh --check, check-scripts.sh, check-no-private-citations.sh, mdl-rules.sh --check, check-portability.sh) plus two driven builds, an independent grade and a blind comparison
  • For a new/changed instrument: n/a, no instrument
  • For a new skill: routing row added (bin/lib/skill-routing.tsv + bin/render-routing.sh)
  • CHANGELOG.md line appended in this PR, crediting the source
  • New bug entries: n/a

Generated by Claude Code

…s, strict order, three styles, skip list, 11-row checklist

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
…load nav, phone nav, unreachable rules, no always-true checks, clean demo data, list order, forbidden options, 403 limit

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
…ign paths, approval stop)

Review: MERGE-AFTER-FIX applied

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
…hree restatements (#729)

Second review: the status block said 'no failures seen' although two
development runs failed before the last fix; it was also twice the size it
needed to be. Same facts, about 125 words. Removed a duplicated never-waive
instruction, a question-moment count that read as conflicting with the
no-prototype path, and a repeated because-clause in Precedence.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
@MendixMau

Copy link
Copy Markdown
Owner Author

Review: MERGE-AFTER-FIX: the skill asks "Normal build or POC build?" whenever PROJECT.md has no Build type: line, which is true of every existing project. Its routing row also fires on "a demo this week". Together, a full-pipeline project in the middle of its build can be steered into skipping its gates.

Value: this takes #729's light mode as triage option 2: an on-demand skill, with no hook or gate changes. It also folds in #730's measurements:

Text only, about 1,575 words, and not overbuilt. "Generic first" holds: it lives in skills/, reads no source, and every script it cites is in install-manifest.sh. Minor: :56 uses the test app's Visit_Host as its example; a placeholder would be better.

Regression risk: no script, gate, template or hook changes, so sync-project.sh brings no new FAIL, PENDING, refusal or exit-code change. Both layouts and bash 3.2 are unaffected. The four agent-stub diffs are generated on-demand rows only. The risk is in the process path:

  • :8 uses "no Build type: line" as a trigger, and no intake ever writes that line (grep finds it nowhere outside this PR).
  • :37 lets the skill override CLAUDE.local.md's "Before any page MDL" rule and the stage gates.
  • So a Stage 5 project whose user mentions a demo could switch to POC rules in the middle of its build.

Correctness:

  • (a) The CHANGELOG.md line says "follow-up BRDs", but :31 says the hand-over is markdown, not BRD JSON.
  • (b) "Done when" (:62) asks for "one deliberately broken control run fails", but step 8 (:30) never asks for one.
  • (c) "Skip intake.md" (:8) is missing from the Skipped list (:35). The precedence clause (:37) covers only Skipped items, so this skip has no authority over the runbook's intake.
  • (d) The routing row's roles leave out gate and review, the agents that will see every stage as PENDING.

The PR adds no fixtures, and none were needed.

Context cost: 66,014 → 66,014 baseline words (budget 80,000), measured with render-routing.sh --check on origin/master 03ab940 and on the head; in sync, exit 0.

Time cost: none per build row. The flow itself was reported at about 36 minutes for one build (not re-measured).

Exact fixes required:

  1. skills/poc-build.md:8: treat a missing Build type: as full in any project that already has a stage register line or a built model. Ask the question only at project birth, or when the user explicitly asks for a POC.
  2. CHANGELOG.md: replace "follow-up BRDs" with "a markdown hand-over".
  3. skills/poc-build.md:30: add the broken control run to step 8, or drop it from :62.
  4. skills/poc-build.md:35: add intake.md to the Skipped list.
  5. Optional: add gate,review to the row's roles.

No merge conflict with origin/master.


Generated by Claude Code

…ontrol step, intake skipped, gate/review roles (#729)

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
…ntities; a missing Build type is full otherwise (#729)

Review finding: every fresh scaffold already carries a Current stage line, so
'a stage line exists' could not tell a new project from one in flight, and
'model content beyond the blank scaffold' was not checkable. Birth is now the
exact scaffold register line plus SHOW ENTITIES listing none; an explicit
switch of a project past birth is confirmed once and recorded.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
@MendixMau

Copy link
Copy Markdown
Owner Author

The fixes from the review above are in 0769a5fb and c713680c:

  1. In-flight projects are safe. The lead asks "Normal build or POC build?" only when the user asks for a POC build in so many words, or at project birth (the register line is still exactly the scaffold's **Stage P — Kickoff**, in progress. and SHOW ENTITIES lists none). Otherwise a missing Build type: line means full. A project past birth whose user says "we need a demo this week" does not switch: one line of explanation and the normal build continues, optionally on Pipeline mode: high-speed. An explicit switch is confirmed once and recorded as a decision. The Precedence paragraph applies only when PROJECT.md says Build type: poc.
  2. CHANGELOG.md says "a markdown hand-over".
  3. The broken control run is in step 8, so "Done when" asks only for what a step instructs.
  4. intake.md is in the Skipped list.
  5. The routing row's roles include gate and review.

Also: the test app's identifier used as an example is replaced by a neutral description. The skill does not cite #730.

Re-review walked six cases (fresh scaffold with and without a POC ask; Stage 5 with "demo this week"; Stage 5 with an explicit switch; Build type: full with "quick pilot"; an existing app with no PROJECT.md): none skips gates, the "Before any page MDL" rule or intake without an explicit choice. Verdict at c713680c: MERGE, no findings. Baseline 66,014 → 66,014.


Generated by Claude Code

…ake Q16, Build type: full | poc) (#729)

Mirrors Pipeline mode (6f51620): question in bin/lib/intake-template.sh, scaffold line in init-project.sh's PROJECT.md, Stage P row names it. Existing projects: sync reports the new question only; no line = full. poc-build.md 'Who asks' simplified. Baseline 66014 -> 66025 words.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
…k the scaffolded Build type as a default (#729)

Review findings: Q16 is the last heading in intake.md and only its own text
said 'ask first', so a lead reading top-down would walk Q1-Q15 before it;
the scaffolded 'Build type: full' read as an answered question. The intake
preamble now names Q16 as asked first at project birth, the PROJECT.md
comment says the line is only the default until answered, and the skill's
status block lists the kickoff question as not yet run by a fresh agent.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
@MendixMau

Copy link
Copy Markdown
Owner Author

Added since the last note (head 50783168): the kickoff interview now asks the build type, so choosing a POC build no longer depends on how a request is worded.

  • Intake Q16, asked first at project birth: "Which kind of build?" with Full build (Recommended) and POC build, each with a one-line explanation. The intake preamble says it is asked before Q1. Recorded as Build type: full | poc; a missing line means full; Interview mode: auto never picks poc.
  • Scaffold: PROJECT.md starts with Build type: full, marked as the default until the question is answered.
  • Existing projects: tested by scaffolding with the previous state, then syncing with this head. intake.md and PROJECT.md are unchanged, the Stage P gate still passes with its 15 answers, and nobody is asked retroactively. --repair-intake stays opt-in.
  • Skill: "Who asks" now points to the kickoff question; a project past kickoff still does not switch on a mention of a demo. The status block lists the kickoff question as not yet run by a fresh agent.

Files beyond the skill: bin/lib/intake-template.sh, bin/init-project.sh (scaffold line and comment), one cell in skills/conversion-runbook.md. Baseline 66,014 → 66,025 (+11). Fixtures targeting the changed scripts: test-stage-p 14/0, test-bug12-sync 64/0, test-init-autocompact 15/0, test-guide-reopen 10/0.

Review at 50783168: MERGE, no findings.


Generated by Claude Code

@MendixMau

MendixMau commented Nov 12, 2026 •

Copy link
Copy Markdown
Owner Author

Duplicate of the note above: the first attempt to post it timed out and landed late, after the retry. Nothing new here.


Generated by Claude Code

…sign message, re-seed without a command, page pre-flight precedence, second proof build (#729)

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
… by explicit paths (#729)

Review findings: the question-moments line said the three design questions
are asked 'if it is answered Nothing' although they go in the same message
as the prototype question; the no-prototype path repeated the ambiguity; the
commit rule now names the working form. One restated clause removed.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
…pproval is one more stop (#729)

Review finding: 'exactly one stop, the approval' conflicted with step 1's
'ONE message, then stop'. Both lines now say the same thing: one message of
questions, wait for the reply, then one more stop for approval.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
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
@MendixMau
MendixMau merged commit 8cd6c4b into master Nov 12, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants