Validate clinical/medical content for patient safety — correct visual hierarchy, no truncated safety information, proper tier assignment. Use this skill whenever touching clinical content in PANaCEa: reference configs, drug information, lab values, scoring systems, procedure details, clinical calculators, or any component that displays medical information a PA student might act on. Also trigger when the user mentions safety review, clinical audit, content review, or patient safety.
PANaCEa is a medical education platform used by PA students during clinical rotations and PANCE preparation. Content displayed in this app may directly inform clinical decisions. This skill ensures every piece of safety-critical information is visually distinct, never truncated, and correctly categorized.
A PA student reviewing a drug reference card during a rotation might glance at it for 3 seconds. If "contraindicated in pregnancy" is rendered with the same visual weight as "commonly tested on PANCE," that's not a styling preference — it's a patient safety failure. The three-tier visual hierarchy exists specifically to prevent this.
When reviewing or creating clinical content, classify every field into one of these categories:
detailSectionCritical() or detailListCritical()Content where missing it could lead to patient harm:
Visual signature: red left-border (#ef4444), AlertTriangle icon, tinted background.
detailSection() / detailList()Factual clinical information that's important but not immediately dangerous if missed:
studyPanel() accordionBoard-prep material that helps learning but isn't clinical reference:
When reviewing any file that renders clinical content, check each of these:
For every field rendered in a detailRenderer, verify the correct tier:
contraindic, critical, emergency, acute, decompensation, red.flag, when.not, black.box, complication, interactiondetailSectionCritical() or detailListCritical(), NOT detailSection() or detailList()No expanded clinical content should ever be clipped:
overflow: hidden, textOverflow, ellipsis, max-height, line-clamp in detail renderers!expanded conditionals)detailRenderer, detailSection, detailSectionCritical, detailList — content must be unboundedSafety fields that exist in the data type but aren't rendered:
detailRenderer actually displayscontraindications?: string[] might exist but never get rendered if the config was written before the data was populatedWithin each detail view, content should follow this order:
If critical sections are buried below 5+ clinical sections, flag it. Students scanning quickly should see safety information without scrolling past routine content.
New entity config copies from existing one but drops safety fields — when a developer copies procedureConfig to create a new config, they may remove fields they think are irrelevant, accidentally dropping safety sections.
Pluralization confusion — contraindication (singular) vs contraindications (plural) vs absoluteContraindications + relativeContraindications. Make sure the grep catches all variants.
JSON-stringified safety data — some fields arrive as string | string[] or even nested objects. If the renderer does JSON.stringify(field) for a safety field, flag it — raw JSON is not a safe way to display clinical warnings.
Conditional rendering hides safety content — {data.contraindications && detailSectionCritical(...)} is correct, but {showAdvanced && data.contraindications && ...} behind a toggle is dangerous — safety content should never be behind an extra click.
This skill stacks with: