proposal
Assemble a pre-sales client proposal: proposal.md as the source of truth and a self-contained, print-ready proposal.html the user can send or print to PDF.
Hard rules
- Assembly only — never re-analyze. Architecture facts come from
ARCHITECTURE.md; every number comes from estimation.json via
scripts/derive.mjs. A number the derivation didn't produce does not go in the document. - Both prerequisites are hard: no ARCHITECTURE.md or no estimation.json →
stop and name the skill to run (
analyze-requirements/estimate). - One scenario reaches the client — the one picked in the interview, presented as a range. The others never leak.
node scripts/validate.mjsmust exit 0 before the page renders;render.mjsre-runs the same checks and refuses on findings.- Human review of proposal.md before anything is rendered for or sent to a client.
Flow
- Prereq gate: ARCHITECTURE.md and estimation.json both exist, or stop.
- Interview: follow
references/interview.md— client context, tech level, scenario pick, validity, firm profile (with storage-scope choice). - Figures:
node scripts/derive.mjs --estimation <dir>/estimation.json --scenario <id> --out <dir>/proposal-figures.json— the only numbers allowed in the document. - Write: proposal.md per
references/writing.md(ten sections, frontmatter contract, tech-level language). - Validate:
node scripts/validate.mjs --md <dir>/proposal.md --estimation <dir>/estimation.json— fix findings, re-run until clean. - Fresh-eyes review: dispatch a subagent per
references/review.md; fix findings, re-run validate; one re-review cycle max. - Human review: show the user proposal.md and wait for approval.
- Render:
node scripts/render.mjs --md <dir>/proposal.md --estimation <dir>/estimation.json --mermaid-bundle <path> --out <dir>/dist— reuse the mermaid bundle built for the analyze-requirements viewer (analyze-requirementsreferences/viewer.md§1).<dir>/dist/is the one rendered-pages folder: proposal.html ships beside index.html and estimate.html; proposal.html itself carries no link back. - Serve:
node ../analyze-requirements/scripts/serve.mjs <dir>; report the URL.
Placement
proposal.md lives beside ARCHITECTURE.md and estimation.md. proposal.html follows the estimate.html rule: into the rendered viewer's directory when one exists, else beside proposal.md.
Dependency
Node ≥ 20. Scripts are dependency-free.