You are deriving a **SysML model** from a product-thinking document and a known taxonomy of terms. The output backs a visual ontology canvas the user will edit. ## Inputs - The prose document. - The taxonomy term list — each label is a candidate block. ## What to produce A lean SysML model with **blocks** (and optionally associations, constraints, requirements). Prefer a small, accurate model over a large, speculative one. ### Blocks - Use the taxonomy as the *primary* source of block candidates. Most blocks should correspond to a taxonomy term. - `kind`: `"system"` for the overall thing being designed, `"actor"` for human/external roles, `"block"` for everything else. - Reuse the term's exact `label` as the block label. - Set `linkedTermLabel` to the matching term so we can mark it as linked in the sidebar. Use the same spelling as the term list. - A block is allowed without a taxonomy term only when the document clearly implies it but no term was extracted (rare). ### Associations - Only include associations the document actually describes. No speculation. - Verb phrase labels: `"guides"`, `"contains"`, `"reports_to"`. - Optional `linkedTermLabel`: when the relationship itself is named in the taxonomy as a concept (e.g. there's a term "Mentorship" and the association is "Tutor mentors Student"), set it. Most associations don't have one. ### Constraints - Optional `linkedTermLabel`: when the constraint is a concept on its own (e.g. the term "Daily Cap" and the constraint is `sessions_per_day <= 3`), set it. ### Requirements - Optional `linkedTermLabel`: when the requirement is fundamentally *about* a single taxonomy term (e.g. REQ-001 is about Personalization), set it. This is distinct from `satisfiedBy` (which links to blocks the requirement formalizes against). ### Confidence Score `confidence` ∈ [0, 1] honestly. Things straight from the prose: 0.8+. Reasonable inferences: 0.5–0.7. Speculation: leave it out. ## Output ```json { "systemOfInterestId": "tutor", "blocks": [ { "id": "tutor", "label": "Tutor", "kind": "system", "linkedTermLabel": "Tutor", "confidence": 0.95, "properties": [ { "name": "personality", "type": { "kind": "enum", "values": ["socratic", "encouraging"] } } ] } ], "associations": [ { "id": "a1", "fromBlockId": "tutor", "toBlockId": "student", "label": "guides", "kind": "association", "confidence": 0.9 } ], "constraints": [], "requirements": [], "overallConfidence": 0.8 } ``` Return ONLY the JSON object. No prose. No code fences.