Use when authoring or reviewing MyOpenMath questions and you need the repository's house style for voice, rubric design, randomization, default question types, formatting, naming, and prohibited patterns.
This is the design-philosophy companion for MyOpenMath question writing. It preserves the WHY behind O.G.R.E.'s MOM conventions: voice, rubric design, randomization, layout, naming, and safety rules. It is not a syntax reference, not a workflow guide, not a macro lookup, and not a browser workflow.
mom-frqmom-page-mapmom-matrix-inverse⚠️ Must NOT:
- Turn this guide into a syntax reference or substitute it for
mom-frq- Default to essay/FRQ unless the user explicitly asks for open-ended written response
- Hardcode scenario text, numerical values, dataset values, or answers that appear in the question
- Reveal the correct answer inside the student rubric or student-facing checklist
- Invent MOM functions or use standard PHP tags/functions in MOM pseudo-PHP
- Use em dashes, stiff academic prose, or obvious AI filler language
- Add features, abstractions, or files that the task did not request
- Ignore the established template for the question type being written
mom-frq for the HOW.| Companion | Role | Use it for |
|---|---|---|
mom-frq reference material | Reference | Syntax, answer types, libraries, macros, templates, randomizer signatures, rubric HTML implementation |
mom-frq workflow | Workflow | Authoring process, output structure, and question-production steps |
mom-matrix-inverse | Workflow | Matrix question template and solution guide |
mom-page-map | Navigation | Browser automation, DOM selectors, MOM URLs |
mom-style-guide | Philosophy | Voice, rubric design, randomization strategy, layout, naming, guardrails |
This guide sets the WHY. Companion skills set the HOW.
Core principle: write like a friendly, warm, concise instructor talking to students they respect. Think conversational, not textbook. Students are people, not assessment subjects.
Explain in your own words..., not Students should explain...Describe the method, Identify the population, not outcome-spoiling directions<b>bold</b> for key concepts inside model narrativesIt is important to note that...; just say the thingthis question asks students to... over the pedagogical objective of this assessment item is...describe, identify, compare, justify, and explain$variables instead of hardcoding prose$r_ prefix, one per rubric category, then combine into $sample_narrativeDoes NOT cover the exact rubric HTML implementation pattern. Use mom-frq for the HOW.
Choose the pattern that matches the question type.
$contexts array and pick one with a random indexDoes NOT cover randomizer function signatures. Use mom-frq reference material for exact syntax.
Always default to auto-graded question types. Use essay/FRQ only when explicitly requested.
| Scenario | Default type |
|---|---|
| Numeric answer (exact value) | number or calculated in a multipart |
| Choose from options | choices with $displayformat[n] = "select" |
| Multiple distinct sub-questions | multipart combining number + choices |
| Open-ended written response | essay, only when the user explicitly asks for FRQ |
Why: O.G.R.E. uses these questions to assess understanding, not to collect essays by default. Auto-graded types give fast feedback, reduce ambiguity, and avoid unnecessary AI grading.
Multipart implication: Mixed multipart items should declare the answer-type mix with $anstypes = array(...) and use $displayformat[n] = "select" for dropdown rendering. Use mom-frq for the exact syntax scaffold.
font-family:Arialfont-size:medium; line-height:1.6<b>bold</b> only for key conceptsSourced from Khan Academy (Perseus design system), Brilliant.org, and Desmos.
| Color | Purpose |
|---|---|
#1865f2 | Primary accent, badge background, callout border, interactive elements |
#21242c | Body text |
#374151 | Secondary text |
#f7f9fa | Table header background |
#dee1e3 | Table header bottom border (2px), row separator |
#e5e7eb | Card border, column separators |
#f0f7ff | Instruction callout background |
#f0f4ff | Collapsible summary background |
#fafafa | Content area background inside collapsibles |
#e8f5e9 | Correct answer highlight, model response area |
#4CAF50 | Accent bar border, highlight border |
#fff9ea | Alternating row tint in rubric tables |
#ccc | General borders, separators |
#2E7D32 | Model Narrative Response label text |
<p> tags with bold a. labelsfont-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serif; font-size:16px; line-height:1.6; color:#21242c; max-width:688px — 688px matches the reading width used by Khan Academy<div style="border-radius:12px;overflow:hidden;box-shadow:0 4px 6px -1px rgba(0,0,0,0.08),0 2px 4px -2px rgba(0,0,0,0.05);border:1px solid #e5e7eb;display:inline-block;">background:#f7f9fa; font-weight:600; color:#21242c; border-bottom:2px solid #dee1e3border-left:1px solid #e5e7ebborder="1" table attributeInclude an instruction hint? (default: no)background:#f0f7ff; border-left:4px solid #1865f2; padding:10px 16px; border-radius:0 8px 8px 0background:#fff; border:1px solid #e5e7eb; border-radius:12px; padding:20px; margin:10px 0; box-shadow:0 4px 6px -1px rgba(0,0,0,0.07),0 2px 4px -2px rgba(0,0,0,0.04) — dual-layer shadow gives depth without heavinessdisplay:inline-block; background:#e8f0fe; color:#1865f2; border-radius:6px; padding:3px 10px; font-size:13px; font-weight:700; margin-right:10px; vertical-align:middleborder-radius:50%$answerbox[n] as <div style="margin-top:12px;text-align:center;">$answerbox[n]</div><br> before the answer boxborder-radius:8px and border-collapse:separate$css_block; use mom-frq for the full implementation pattern$css_block$css_block<?php ?>, echo, print, function, or classq{N}-{kebab-slug}.php, where N matches the manifest entry numbermatrix-{2x2|3x3}-{rref|equation|inverse-equation}.php{kebab-description}.php$r_ prefix for narrative model-answer components, one per rubric category$sample_narrative for the composed model response string$contexts or $topic for randomized scenario arrays$i for the scenario index: rand(0, count($contexts)-1)$populations or $claimed_values// === SECTION NAME ===/* ---------- N. Subsection Name ---------- */// === NAME - DESCRIPTION: Title - Short description. ===It's worth noting that..., Leveraging the concept of..., or This approach ensures that...mom-frq before using itarray_rand, number_format, or shuffle; use MOM equivalents| Problem | Action |
|---|---|
| Need exact syntax, macro signatures, or rubric HTML | Keep this guide loaded, then consult mom-frq instead of improvising |
| Unsure whether a MOM function exists | Check mom-frq before writing it; never invent a function |
| User asks for a written-response topic without specifying type | Default to auto-graded unless they explicitly request essay/FRQ |
| Draft feels generic, stiff, or AI-written | Rewrite using the Question Style and Vocabulary Conventions sections |
| Randomization only changes numbers | Redesign contexts so the scenarios are meaningfully different |
| Unsure whether a layout convention applies | Choose the stricter convention or ask the user rather than guessing |
| Mistake | Fix |
|---|---|
| Writing student rubric items as answer keys | Rewrite them as neutral prompts such as Describe... or Identify... |
| Using essay by default for any open-ended prompt | Use number, calculated, choices, or multipart unless essay is explicitly requested |
| Hardcoding values into the question text | Replace them with MOM randomization and shared indices for parallel arrays |
Using bare <p> labels or bare <br> before $answerbox[n] | Use the card-per-part layout and centered answer-box wrapper |
| Making every rubric category structurally identical | Let conceptual complexity determine category size and point weight |
| Using standard PHP habits in MOM code | Stay within MOM pseudo-PHP and MOM-specific function patterns |