# CertPrep content standards

The rubric every question, flashcard, and lesson must pass. This file is public
on purpose: it is the quality bar we invite users to hold us to, and it states
our originality policy plainly.

## Originality (non-negotiable)

Every item on this site is **original**. Nothing is copied, paraphrased, or
"reconstructed from memory" from real CompTIA, ISACA, or PMI exams, official
practice materials, or braindump sites. Items teach the same *concepts* the
official exam objectives name — the scenarios, wording, options, and numbers
are ours. Contributors who can't establish an item's provenance don't submit it.

## Question rubric (all of these, every item)

1. **One defensible answer.** A domain expert should agree the keyed answer is
   the best of the four with no reasonable dispute. "BEST/FIRST/MOST" judgment
   items must cite (in the explanation) the framework principle the key rests
   on — e.g. the ISACA governance-before-operations posture, or the PMP
   collaborate-first conflict ladder.
2. **Plausible distractors.** Every wrong option must be something a
   half-prepared candidate would genuinely consider — real terms used
   correctly-but-inappositely beat made-up terms. No joke options, no
   obviously-wrong throwaways, no "all of the above."
3. **Explanations teach.** The explanation states *why* the key is right, *why
   each distractor fails*, and ends with an exam tip where one exists. Target
   ≥200 characters; a bare restatement of the key fails review.
4. **Accurate tags.** `domainKey`/`objective` map to the current official
   outline; `difficulty` reflects reality (easy = definition recall, medium =
   applied scenario, hard = multi-step judgment or easily-confused pair).
5. **No giveaways.** Longest-option-is-correct, grammatical mismatches with the
   stem, absolute words ("always", "never") only in wrong options — all fail.
   `validate.py` checks answer-position balance per file.
6. **Exam-realistic style.** Sec+ items mirror SY0-701's scenario style; CISM
   items take the manager's view (governance/risk first, technology second);
   PMP items are situational with ~40/60 predictive/agile-hybrid mix per the
   2026 ECO.
7. **Independent review.** New items are reviewed in a separate session from
   the one that authored them, prompted to *refute* the answer key. Disputed
   items are killed or rewritten, never argued into the bank.

## Interactive (PBQ-style) items

Live in separate `assets/data/<cert>-pbq*.json` files wired into
`CONFIG.pbqFiles` — **never** into `CONFIG.files` (array-answer consumers crash
on object answer shapes). Types: `"order"` (arrange steps; `answer` = array of
correct index sequence) and `"match"` (pair terms; `answer` = object mapping
left→right indices). All-or-nothing scoring, stated in the item's explanation.
Interaction is click-to-place (keyboard- and touch-first); no drag requirement.

## Flashcards

Ids are permanent: expansion may only **add** ids — renaming or deleting an id
orphans users' spaced-repetition state. One concept per card; the back teaches
in ≤3 sentences; cloze cards quote exact key phrases worth memorizing (port
numbers, formulas, band names).

## Facts and claims

- Exam logistics (fees, question counts, durations, passing scores) are
  verified against the freely published official outlines and stamped
  "verified <month year>" in each cert hub's footer. Re-verify before editing.
- Marketing numbers (bank size, exam-form counts) come from `stats.json`
  (checked against the real bank by `validate.py`) — never hardcode counts in
  page copy.
- Videos are embedded/linked, never rehosted; every embed is oembed-verified
  and re-checked periodically.

## Authoring loop (zero to first validated question)

1. Add your item(s) to the right file: extend an existing
   `assets/data/<cert>-extra*.json` or create a new one and add its path to
   `CONFIG.files` in the engine core.
2. Schema: `{ id, domainKey, domain, objective, difficulty, type
   ("single"|"multi"), question, options[], answer[<indices>], explanation }`.
   Ids are `<cert>-<file-tag>-NNN` and never reused.
3. Run `./scripts/check.sh` — validates schema, duplicate ids/stems, option
   counts (4 for Sec+/CISM single; PMP may vary), answer-position balance.
4. Branch → PR. CI runs the same gate and auto-merges on green; Cloudflare
   Pages deploys `main` automatically.
