4b. Read the weight class from the seed: parse seed.md's leading
frontmatter block for weight-class (via
python3 "$TP_ROOT"/skills/_shared/weight_class.py; protocol:
skills/_shared/weight-class.md). If present and valid, carry it to
Step 7's draft. If absent, fold one class question into Step 5's
batched confirm — rubric-assisted: present the four axes (risk, blast
radius, reversibility, novelty) with the weight_class.py recommend
output as the inferred default the operator can accept or override.
-
Derive the batched confirm: parse seed.md for ## Open questions (and
any explicit judgment calls in ## Sketch or ## Problem). Map each open
question to one numbered confirm line. Where the seed already states a
preference or answer, present the drafter's inferred default so the operator
can accept it wholesale. Include the Step 4b weight-class question when the
seed lacks a class. Produce a single numbered prompt block — the entire
set of questions at once, not one at a time.
Example layout (adapt to the actual questions):
Batched confirm for <slug>:
1. [Q from seed — inferred default: X] Accept default, or override:
2. [Q from seed — no clear default] Your answer:
...
-
Present the whole block at once and STOP (one human touch / single
batched confirm). Wait for the operator's answers before proceeding. Do NOT
ask individual follow-up questions — collect the full block in one round.
HTML briefing (when a display is available): the confirm block is
rendered as a self-contained HTML page (no CDN / no external resources)
and opened via xdg-open. The page's "Assemble answers" button produces
a compact answer string for the operator to paste back.
Canonical compact paste grammar (HTML page output and terminal fallback
both accept this format):
Headless / SSH fallback: when DISPLAY is not set or xdg-open is
absent, the HTML file is still written beside decisions.md (auditable
artifact) and the path is printed; the operator answers the terminal
confirm using the same grammar above.
-
Draft design.md from seed.md + operator answers. Stamp the Step 4b
class as the file's leading frontmatter block (weight-class: <class>) —
the seed-time declaration carries to the promoted design. Populate every
section that validate_design_floor.py marks REQUIRED:
## Problem — what the design solves (from seed ## Problem + answers)
## Vision alignment — how it fits the project vision
## Scope with ### In scope (non-empty bullet list)
## Behaviors — concrete observable behaviors
## Constraints — hard limits and non-goals
Optional but recommended: ## Dependencies, ## Entities, ## Open Questions.
The drafted design.md must be substantive enough to pass the floor.
Do NOT commit a thin stub — if you cannot draft a passing design from
the seed + answers, surface the gaps and ask the operator to flesh them out
before proceeding.
-
Validate the floor: run:
python3 "$TP_ROOT"/skills/_shared/validate_design_floor.py three-pillars-docs/tp-designs/<slug>
- Exit 0 (PASS): proceed to commit.
- Exit 1 (BLOCKED): surface the JSON verdict on stderr, do NOT commit.
Tell the operator which sections are missing/empty and ask them to fill
the named sections. Only retry after the operator updates
design.md.
- Any other exit or failure to launch → BLOCKED with Cause: floor-validator-crash, Details: captured stderr (truncated to 500 chars). Never treat a non-0/1 exit as PASS.
-
Log to decisions.md (append, using the [tp-promote] prefix per
skills/_shared/auto-mode.md decisions.md format):
### [tp-promote] <slug> — batched confirm + answers
**Prompt presented:**
<paste the numbered confirm block from Step 6>
**Operator answers:**
<paste the operator's answers verbatim>
**Floor validation:** PASS (exit 0)
-
Commit on tp/<slug> (or the current branch if already on it):
Stage only:
three-pillars-docs/tp-designs/<slug>/design.md
three-pillars-docs/tp-designs/<slug>/lock.json
three-pillars-docs/tp-designs/<slug>/decisions.md
Commit message: Design: <slug> high-level
(This message is byte-compatible with what /tp-design would produce, so
downstream tools — fleet-precheck-designready's design-only verdict and
Mode B's design-floor gate — treat a promoted design identically to a
hand-authored one.)
-
Hand off: tell the operator:
design.md committed. Next step:
/tp-run-full-design <slug> --skip-design
This runs Mode B: skips the design step and begins from tp-design-detail.
You can also re-stage the slug as design-ready in your fleet backlog for
a zero-touch run.