What it does
Given a brief (idea, users, constraints), it produces:
- PRD — problem, goals/non-goals, numbered requirements with MoSCoW
priority and testable acceptance criteria, success metrics, scope phasing,
risks, and honest open questions.
- Technical Design — C4 overview, a requirements-traceability table
linking every design element to an
R#, data model, APIs, key flows,
non-functionals, alternatives considered, rollout and observability.
- ADRs — one per significant choice, each with Context / Decision /
Alternatives / Consequences.
- Task Breakdown — epics and tasks
T1..Tn with estimates, dependencies
and requirement coverage.
- Agent Orchestration — the piece that makes this executable by other
coding agents: one ready-to-paste work assignment per task (goal,
R#s,
interfaces allowed/forbidden, inputs to read), plus coordination protocol
and acceptance gates.
Why it exists
General models with a good prompt are strong at prose but leaky on the
contract: they write tasks without pairing them to work assignments, invent
metrics instead of asking, and size the design for a team the brief never
mentioned. This model is fine-tuned to hold the contract and to ask when it
does not know.
Usage
from transformers import AutoModelForCausalLM, AutoTokenizerimport torch name = "{repo}"tok = AutoTokenizer.from_pretrained(name, trust_remote_code=True)model = AutoModelForCausalLM.from_pretrained( name, torch_dtype=torch.bfloat16, device_map="auto", trust_remote_code=True) messages = [ {{"role": "system", "content": "You are a staff product manager and staff software architect."}}, {{"role": "user", "content": brief_yaml}},]inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)out = model.generate(inputs, max_new_tokens=8000, do_sample=True, temperature=0.2)print(tok.decode(out[0][inputs.shape[1]:], skip_special_tokens=True))
On a Mac (MLX)
This repo ships an MLX 4-bit copy under mlx/. With mlx-lm:
mlx_lm.generate --model {repo}/mlx --prompt "..."
Or merge the adapter yourself:
python phase2_finetune/export_mlx.sh checkpoints/sft/full/adapter checkpoints/mlx
Contract
The output is one markdown document with five H1 sections in order:
# PRD, # Technical Design, # ADRs, # Task Breakdown, # Agent Orchestration.
wrightproduct.contract.validate() checks it mechanically.
Training data provenance
Table with columns: Source, Kind, Licence| Source | Kind | Licence |
|---|
| Kubernetes KEPs, Python PEPs, Rust RFCs, Kafka KIPs, public ADRs | real design docs, rewritten | Apache-2.0 / MIT / CC0 / public-domain (per item, recorded) |
| Synthetic scenarios | generated by Qwen/Qwen3-30B-A3B-Instruct-2507 (Apache-2.0) | generated |
No commercial-API outputs are in the training set. Evaluation baselines used
a frontier model and are recorded separately under evals/results/, never in
data/.
Evaluation
Scored against a frozen 155-scenario brief set with a 13-criterion rubric
(PRD quality, design, traceability, calibration, honesty, agent orchestration).
Baseline (Qwen3-30B-A3B + strong prompt): 4.45 / 5 with 2,159
TASK_NO_ASSIGNMENT contract violations across 155 documents.
See evals/reports/ for the full numbers.
Limitations
- Trained for software / SaaS products. Other domains are out of scope for v0.
- The model asks when facts are missing; it does not retrieve current
technology facts. Pair it with retrieval if you need up-to-date stack advice.
- 30B total / 3B active MoE: requires ~18 GB for 4-bit, ~60 GB for bf16.
Licence
Weights are Apache-2.0 (same as the base model). Training code is in the
wrightproduct repository.