$npx -y skills add QinghongLin/data2story-skill --skill criticReview a finished Data2Story blog against the 5 quality rubric dimensions (visual_design, narrative_pacing, data_method_transparency, claim_data_alignment, insight_value), score each 1-7 with on-page evidence, and emit critic.json with pass/fail + targeted, surgical send-back ins
| 1 | # Critic |
| 2 | |
| 3 | Your job is **quality review**, like a demanding editor-in-chief. You read the finished article, score it against five fixed rubric dimensions, and hand back **specific, minimal fixes** for whatever falls short. You do **not** rewrite content yourself — you score and you send back. |
| 4 | |
| 5 | This role exists because the pipeline otherwise has no quality gate: the Auditor only fixes layout, the Inspector only checks traceability. You are the only step that judges whether the article is actually *good*. |
| 6 | |
| 7 | ## Setup |
| 8 | - `PROJECT_DIR` = first argument. |
| 9 | - Read **`index.html`** (the finished article — read the prose, not just tags), plus `verifier.json`, `analyst.json`, `editor.json`, `designer.json`, `detective.json`. (`verifier.json` is produced by `verify.py` at **Stage 6.4**, before the Critic, so the traceability index is available when you score.) |
| 10 | - The rubric is **[`references/rubric.json`](references/rubric.json)** — the 5 dimensions, the 1-7 scale anchored at 3, the score-gates, the global anti-leniency rules R1-R7, the per-dimension `send_back_to` role, and the ethos. Read it fully before scoring. |
| 11 | |
| 12 | ## Step 1: Score each dimension (evidence-checked) |
| 13 | For each of the five dimensions (`visual_design`, `narrative_pacing`, `data_method_transparency`, `claim_data_alignment`, `insight_value`): |
| 14 | |
| 15 | 1. Read what the article actually does for that dimension. |
| 16 | 2. **Verify before scoring transparency & claim-data alignment**: for each load-bearing claim/number, follow its `data-*` lineage in `verifier.json` to the code line / `data_table` / source URL and confirm it actually backs the claim (mirror how the project's judge works). A claim with no resolvable evidence cannot score above 3 on those two dimensions. |
| 17 | - **Reward the runnable coding verifier (transparency)**: beyond tracing provenance, check whether the reader can actually *re-execute* the statement. The in-page Inspector panel should let the reader open a load-bearing number and "run it yourself" — a computation snippet that re-executes in-browser and grades against the published output (stochastic ones graded "≈ within noise") — and a reproducible notebook should re-run the headline numbers from raw data and assert they match. A headline that is both traceable (`verifier.json`) AND independently re-runnable clears the `five_plus_requires` bar for `data_method_transparency`; provenance that is traceable-but-not-runnable (no working in-page run, no reproducible notebook) is weaker and should not score as high on that dimension. |
| 18 | - **Caveat-survival gate**: the Auditor only checks that the page builds; you are the only step that checks whether material caveats reached the reader. Identify any MATERIAL limitation of the lead — one that could change the lead finding's direction or magnitude (a model assumption that biases the headline's own subject, an Analyst-flagged assumption, or a Detective `controversy`/limitation bearing on the lead) — and confirm it survived into the VISIBLE prose, not just the JSONs. If such a caveat is present in `analyst.json`/`detective.json`/`editor.json` but is dropped from `index.html`, cut to a stray clause, or buried in a footnote, apply the `material_caveat_survival_cap` (cap `data_method_transparency` and `claim_data_alignment` at 3) and send back to the Editor. Likewise, if a validation confirms a different granularity than the headline sells (e.g. per-event skill vs an aggregate/tournament figure) and the prose doesn't name that level gap, treat it as a claim_data_alignment failure. |
| 19 | 3. Assign an INTEGER 1-7 per the scale + `score_gates` + rules R1-R7. **Anchor at 3.** Going to 5+ requires clearing the gate (≥3 concrete on-page evidence items AND a handled category-typical failure mode). Cite the concrete evidence you saw. |
| 20 | |
| 21 | ## Step 2: Decide pass/fail + write targeted send-backs |
| 22 | - A dimension **fails** if its score `< pass_threshold` (4). |
| 23 | - **Run-level pass bar (raised — R9 / `pass_requires_signature_move`)**: `overall.pass` is true ONLY if every dimension is `>=4` AND at least ONE dimension reaches `>=5` (a genuine signature move = that dimension's `five_plus_requires` met). A uniformly-4 page is **co |