1---2name: research-paper-review3description: Run academic paper review with OCR extraction, ChatGPT-native multi-agent critique, local visualization, and section-level review workflows integrated into the research skill suite. Use when Codex needs an initial or first-pass review of one paper artifact or arXiv URL, including OCR, extraction, default Claude-style or multi-agent review, contextualized critique, or viz JSON generation. Prefer `research-review-loop` once a tracked review state or revised artifact already exists, `research-novelty-review` for prior-art and positioning questions, `research-rebuttal` when concrete reviewer comments already exist, and `adversarial-doc-review` for non-paper documents.4---56# Research Paper Review78## Quick start9101. Decide whether the user needs:11 - extraction only12 - a local viz server for existing result JSON13 - the default multi-agent / Claude-style paper-review pass14 - contextualized review that also assesses novelty, impact, and related-work coverage152. Inside ChatGPT/Codex, default LLM review to the active chat model. Do not require external LLM API keys for normal review.163. Default to Claude-style / multi-agent orchestration for paper review. Build the full-paper summary first, then spawn one worker per planned review pass when the runtime supports subagents.174. Use serial single-agent execution only as a fallback when subagents are unavailable, disabled, or clearly impractical for the paper size or runtime.185. Bootstrap the upstream engine with `python3 scripts/install_engine.py` only when deterministic helpers are needed for extraction, workspace preparation, viz output, or explicit upstream provider-backed review.196. Use the `/openaireview` workspace convention as the canonical stage root: `./review_results/<slug>_review/`. Record any non-canonical output paths in `artifact-index.md`.207. Use `references/chatgpt-native-review.md`, `references/rating-rubric.md`, and the 1-5 issue/output scales.218. When review quality depends on novelty, impact, or literature context, route through `research-systematic-literature-review` and `research-novelty-review` instead of limiting the critique to internal paper consistency.229. When reusing an existing review workspace, infer its provenance from `metadata.json`, `artifact-index.md`, `final_issues.json`, `review_summary.json`, and any `round-N/` folders before moving files or declaring artifacts missing.2310. Treat `research-systematic-literature-review` as an independent literature-review skill that can either run on its own or attach to this review workspace through `<review_dir>/context/`.2411. If the user asks for project-level sequencing, current-state inspection, or coordination across multiple research stages, invoke `research-pipeline-planner` first instead of treating paper review as the whole task.2526## Upstream Claude Skill Compatibility2728- The upstream OpenAIReview Claude Code skill lives in `src/reviewer/skill/` and is installed by `openaireview install-skill` into `~/.claude/commands/openaireview`. That install path, the `/openaireview` slash command, and references to Claude's Agent/task tools are Claude-specific and are not directly usable as a native Codex skill.29- The underlying workflow is portable: prepare a review workspace, collect section-review JSON, consolidate comments, and emit viz-compatible JSON.30- The upstream Claude/OpenAIReview workspace convention is `./review_results/<slug>_review/`, with `summary.md`, `final_issues.json`, `overall_assessment.txt`, `metadata.json`, `full_text.md`, `comments/`, `sections/`, and severity-tiered issues. It may not contain `review_summary.json` or 1-5 rating fields unless a Codex-adapted pass added them.31- Treat Claude-style review and multi-agent review as the default paper-review execution style in this skill, not as special opt-in modes. Translate upstream Claude sub-agent instructions into Codex/ChatGPT subagents whenever available.32- If a runtime does not expose subagents, explicitly state that limitation and run the same pass plan serially in the current agent. Preserve the worker-style output contract even in fallback mode by writing one JSON file per planned pass under `comments/`.33- The upstream viz helper accepts `severity`. This skill's canonical handoff uses `impact_rating` and `confidence_rating`; `scripts/save_viz_json.py --derive-severity` can temporarily derive severity values for visualization when that compatibility layer is explicitly requested.3435## Provenance and layout harmonization3637- Treat these as compatible paper-review provenance families:38 - `openaireview_claude`: `review_results/<slug>_review/`, severity-tiered `final_issues.json`, no required root `review_summary.json`.39 - `codex_native`: `review_results/<slug>_review/`, 1-5 `impact_rating`/`confidence_rating`, and root `review_summary.json`.40 - `review_loop_hybrid`: a first-pass paper-review bundle at the workspace root plus iterative `round-N/` folders from `research-review-loop`.41- Infer provenance from available evidence, not directory name alone. Check `metadata.json` fields such as `review_mode`, `review_loop`, `canonical_handoff_files`, and `round_summaries`; inspect whether `final_issues.json` uses `severity` or 1-5 ratings; and check for `round-N/REVIEW_STATE.json`.42- When importing or continuing an existing OpenAIReview-style workspace, do not move files just to satisfy the Codex-native path preference. Record the actual path in `artifact-index.md` and preserve existing relative paths.43- When downstream skills need numeric routing, prefer a root `review_summary.json` if present; otherwise, in a review-loop hybrid, use the latest existing `round-N/review_summary.json` and record that provenance in `artifact-index.md`.44- If converting an upstream OpenAIReview bundle to Codex-native form, add missing 1-5 ratings and a root `review_summary.json` as a deliberate normalization step. Do not silently reinterpret `severity` as a numeric rating without documenting the mapping.4546## Modes4748### ChatGPT-native review mode4950- Use this as the default for paper-review requests inside ChatGPT/Codex.51- The active chat model performs the LLM critique directly. Scripts may prepare files, validate bundles, or render visualization artifacts, but scripts cannot call the hidden ChatGPT conversation model on their own.52- Follow `references/chatgpt-native-review.md` for the native artifact contract.53- Do not run `python3 scripts/run_openaireview.py review ...` by default. That upstream provider-backed path is only for explicit external-provider review.5455### CLI mirror mode5657- Preserve the upstream OpenAIReview CLI surface through `scripts/run_openaireview.py`.58- Use this for:59 - `extract`: OCR or parse a paper into Markdown with metadata60 - `serve`: browse saved result JSON in a local UI61 - `review`: only when the user explicitly asks for upstream provider-backed OpenAIReview scoring and has configured the required provider credentials62- Do not confuse the upstream `review` command with the ChatGPT-native default review path.6364### Default multi-agent / Claude-style deep review mode6566- Use this for normal paper-review tasks unless the user explicitly asks for a quick single-pass response or the runtime cannot support workers.67- Prepare a review workspace.68- Read and understand the full paper.69- Write `summary.md` before launching detailed review passes.70- Build a pass plan with section-level and cross-cutting checks.71- Spawn one worker per planned review pass when subagents are available.72- Consolidate, tier, and save issues into the canonical bundle.73- Prefer this mode when the paper-review stage will feed `research-review-loop`, `research-paper-plan`, or `research-rebuttal`.7475### Serial single-agent fallback mode7677- Use this only when subagents are unavailable, disabled, blocked by the runtime, or clearly disproportionate for a very short paper or explicitly quick review.78- State the fallback reason before or in the final report.79- Execute the same planned review passes serially in the current agent.80- Keep outputs separate under `comments/` using the same `owned_output_file` paths that workers would have used.81- Do not reduce the number of passes merely because execution is serial; reduce only when the paper is short, incomplete, or the user requested a fast review.8283### Contextualized paper review mode8485- Use this when the user asks for novelty, significance, impact, related-work adequacy, SOTA/context positioning, venue-grade critique, or a review that should be stronger than internal paper consistency checks.86- After the full-paper summary, extract the paper's:87 - one-sentence contribution claim88 - field/domain and target community89 - claimed novelty dimensions90 - cited closest prior work91 - benchmark/evaluation context92 - impact or significance claims93- Run a bounded `research-systematic-literature-review` paper-context evidence map when the review needs external literature grounding. This is not automatically a full PRISMA review; use the literature skill's paper-context mode unless the user explicitly asks for a full systematic review.94- Run `research-novelty-review` after the literature-context map when the paper makes novelty, contribution, or impact claims. The novelty review should consume both `summary.md` and the literature-context artifacts.95- Fold context outputs back into paper-review findings:96 - related-work omissions become `missing_information` or `claim_accuracy` issues97 - overstated novelty or significance becomes `claim_accuracy`98 - weak impact framing becomes `presentation` unless it affects a core claim99 - benchmark-context gaps become `methodology` or `missing_information`100- Preserve provenance by recording literature and novelty artifact paths in `review_summary.json` and, in orchestrated mode, in `artifact-index.md`.101102### SLR interface mode103104- Use this when `research-paper-review` and `research-systematic-literature-review` are invoked semi-autonomously in the same project.105- Preserve independence: the SLR skill owns source discovery, screening, evidence extraction, synthesis, confidence limits, and full PRISMA mode. Paper-review must not rewrite literature-search decisions or treat a bounded evidence map as a full systematic review.106- Preserve synergy: when a paper-review workspace exists, use `<review_dir>/context/` as the shared exchange point for paper-context artifacts. The SLR skill may write there directly or produce an independent literature pack and record its directory in `review_summary.json.context_artifacts`.107- The negotiated paper-context bundle is:108 - `<review_dir>/context/literature-context.md`109 - `<review_dir>/context/literature-context-search-log.md`110 - `<review_dir>/context/literature-context-evidence-table.md`111 - `<review_dir>/context/literature-context-decision.json`112- Paper-review consumes the decision JSON, not just prose. Map `impact_evidence_rating` to `review_summary.json.impact_context_rating`, preserve `contextualization_rating` and `coverage_confidence_rating` under `review_summary.json.context_artifacts`, and convert `related_work_omissions` / `benchmark_context_gaps` into raw comment JSON before consolidation when they affect the paper review.113- If SLR runs first without a paper-review workspace, do not move its artifacts. When paper-review starts later, record the SLR artifact directory in `artifact-index.md` and either copy the four paper-context files into `<review_dir>/context/` or reference them explicitly in `review_summary.json.context_artifacts`.114115## Relationship to sibling skills116117- `research-paper-review` owns paper ingestion, OCR, first-pass critique, and viz output for a single paper.118- `research-systematic-literature-review` owns external evidence mapping. It remains useful as a standalone full systematic-review workflow; within paper review, use its paper-context mode for bounded related-work, benchmark-context, and impact-evidence checks, and reserve full PRISMA mode for explicit systematic-review requests or broad evidence-coverage decisions.119- `research-review-loop` owns iterative tracked review after there is already a first-pass critique, revision cycle, or explicit issue ledger.120- `research-novelty-review` owns prior-art pressure testing and positioning. Within contextualized paper review, run it after the paper summary and literature-context map exist so novelty judgments are evidence-grounded.121- `research-rebuttal` owns responses to external reviewer comments, not initial manuscript diagnosis.122- `adversarial-doc-review` owns broad document red-teaming outside the paper-review workflow, especially non-paper Markdown or policy/spec documents.123124## Research-suite handoff125126- Keep the `/openaireview` workspace layout, but write Codex research-suite handoff artifacts into that same review directory.127- `summary.md`, `final_issues.json`, `review_summary.json`, and `overall_assessment.txt` are the stable handoff bundle for `research-review-loop`, `research-paper-plan`, and `research-rebuttal`.128- `review_summary.json` is required for Codex-native runs because sibling skills use it for numeric routing, currentness, top blockers, execution mode, and context provenance.129- Contextual paper-review outputs should live under `<review_dir>/context/` and be listed in `review_summary.json.context_artifacts` so `research-novelty-review` and `research-systematic-literature-review` outputs remain traceable.130- If a project-level `artifact-index.md` exists, record the review directory, viz JSON path, and any sibling-skill context artifact paths there.131132## Input contract133134- Minimum:135 - one concrete paper artifact or URL136- Supported inputs:137 - local `.pdf`, `.docx`, `.tex`, `.txt`, `.md`138 - arXiv `abs` or `html` URLs139 - extracted Markdown or existing `full_text.md`140- Prefer:141 - venue or audience142 - whether the user wants quick scoring, issue discovery, rebuttal-grade critique, or contextualized critique143 - OCR engine and token/cost constraints when extraction is needed144- Environment:145 - no external provider key is required for ChatGPT-native review146 - optional upstream engine and optional OCR backends may require separate setup147148## Hard stops149150- Stop if there is no concrete paper artifact, URL, or readable paper text.151- Stop if the task would require invented evidence, fabricated quotes, or guessed paper contents.152- Stop before deep review when the paper is too incomplete to support meaningful section-level scrutiny.153- If the upstream engine is missing and a helper is needed, install it with `scripts/install_engine.py` instead of recreating the package inline. If only ChatGPT-native critique is needed, do not install the upstream engine just to perform LLM review.154155## Output contract156157- Preserve the active review workspace under `./review_results/<slug>_review/` unless a different path is explicitly recorded in `artifact-index.md`.158- Required handoff files for downstream stages:159 - `<review_dir>/summary.md`160 - `<review_dir>/final_issues.json`161 - `<review_dir>/review_summary.json`162 - `<review_dir>/overall_assessment.txt`163- Required support files:164 - `<review_dir>/metadata.json`165 - `<review_dir>/full_text.md`166 - `<review_dir>/sections/index.json`167- Required for multi-agent and serial fallback reviews:168 - `<review_dir>/comments/PASS_PLAN.md`169 - one `<review_dir>/comments/*.json` file per planned pass170 - `<review_dir>/comments/all_comments.json` when consolidation is complete171- Optional but strongly preferred:172 - `<review_dir>/context/context-plan.md`173 - `<review_dir>/context/literature-context.md`174 - `<review_dir>/context/literature-context-search-log.md`175 - `<review_dir>/context/literature-context-evidence-table.md`176 - `<review_dir>/context/literature-context-decision.json`177 - `<review_dir>/context/novelty-context.md`178 - `./review_results/<slug>_skill.json`179- Record the exact active review workspace path and any viz JSON path in `artifact-index.md` so later skills do not guess.180- For imported Claude/OpenAIReview or review-loop hybrid workspaces, `review_summary.json` may be satisfied by a recorded latest `round-N/review_summary.json`; keep this exception explicit in `artifact-index.md` or `metadata.json`.181- `review_summary.json` is the numeric summary artifact for downstream routing. It should include:182 - `overall_paper_rating` (1-5)183 - `decision_relevance_rating` (1-5)184 - `rating_confidence` (1-5)185 - `execution_mode` (`multi_agent`, `serial_fallback`, or `quick_single_pass`)186 - `fallback_reason` when not using multi-agent execution187 - `top_blockers`188 - `context_artifacts` when literature or novelty context was used189 - `contextualization_rating`, `coverage_confidence_rating`, and `impact_context_rating` when literature context was used190 - `novelty_decision_rating` and `impact_positioning_rating` when novelty context was used191192## Workflow193194### 0) Track the review explicitly195196- If a task tracker is available, create tasks for:197 - prepare workspace198 - understand the paper199 - build pass plan200 - spawn/run review passes201 - consolidate and tier findings202 - write handoff artifacts203 - save viz output204- Add one tracked subtask per worker using the worker's `pass_id` and owned output file. In serial fallback, keep the same subtasks and mark them as serially executed.205- Mark progress as you move. A deep paper review should not become an opaque one-shot blob of reasoning.206207### 1) Prepare or extract the paper text208209- If a readable artifact or extracted text is already available, use it directly.210- If extraction is needed and the upstream engine is available, use:211212```bash213python3 scripts/run_openaireview.py extract <paper> [flags]214```215216- If the upstream engine is unavailable but the runtime has another reliable extraction path, use that path and write `full_text.md` yourself.217- Do not use `scripts/run_openaireview.py review ...` for normal ChatGPT-native review.218219### 2) Prepare the review workspace220221- Prefer `./review_results/` as both the review workspace root and the viz JSON output root, matching `/openaireview`.222- If the upstream workspace helper is available, run:223224```bash225python3 scripts/prepare_workspace.py "<input>" \226 --criteria references/criteria.md \227 --output-dir ./review_results228```229230- The workspace must contain:231 - `metadata.json`232 - `full_text.md`233 - `criteria.md`234 - `sections/index.json`235 - `comments/`236- Record the review directory and slug immediately, and write the resolved review directory into `artifact-index.md` if you are in a suite pack.237238### 3) Build a full-paper model before criticizing details239240- Read `full_text.md` completely, including appendices, tables, and formal sections.241- Write `summary.md` in the review directory using this structure:242243```markdown244# Paper Summary: [Title]245246## Research Question247[One sentence]248249## Core Hypothesis / Thesis250[What the paper claims to show]251252## Methodology Overview253[2-3 sentences]254255## Key Definitions & Notation256- [Term/symbol]: [definition]257258## Key Numerical Parameters259- [Parameter]: [value and context]260261## Main Claims (with evidence location)2621. "[Claim]" — [Section X, Table Y]263264## Section Map265- [Section N] ([Title]): [one-line summary]266267## Notable Cross-References268- [Section X] references [Section Y] for [what]269```270271- Do not launch detailed review passes until the summary is good enough that another agent could use it as global context.272273### 4) Build the pass plan274275- Read `sections/index.json` and write a concrete pass plan in `comments/PASS_PLAN.md` before spawning or running detailed checks.276- Aim for 7-10 total passes for a deep review unless the paper is unusually short or narrow:277 - 4-7 section-focused passes covering each major section or logical cluster, or one per major section when the paper is short278 - 3-5 cross-cutting passes for claims vs evidence, evaluation fairness, statistical consistency, notation coherence, related-work adequacy, or paper-specific risks279- Group small or tightly coupled sections rather than creating trivial one-section passes.280- Choose cross-cutting passes from the paper's actual risk profile.281- Each pass plan entry must include:282 - `pass_id`283 - `kind` (`section` or `cross_cutting`)284 - `owned_output_file`285 - primary and related section files286 - one-sentence focus287 - likely failure modes to check288 - expected evidence locations289290### 5) Execute review passes with multi-agent default291292- Default action: spawn all planned review workers in parallel after `summary.md` is complete.293- Use one worker per pass. Do not batch unrelated passes into one worker unless there are more planned passes than the runtime can reasonably launch.294- Worker ownership must be disjoint: each worker writes exactly one JSON array to its assigned `owned_output_file` under `<review_dir>/comments/`.295- Worker prompt requirements:296 - state that the worker is not alone in the workspace297 - state the worker's owned output file298 - state that the worker must not edit shared files or other workers' comment files299 - include the section-focused or cross-cutting template from `references/subagent_templates.md`300 - require valid JSON output even when no issues are found (`[]`)301 - require the final response to list the file path changed and the issue titles302- While workers run, the parent should do non-overlapping work only: inspect `summary.md`, check section coverage, prepare consolidation criteria, or draft the final bundle skeleton. Do not redo a worker's assigned pass.303- Wait for all workers before consolidation. If a worker returns JSON in chat rather than materializing its file, the parent must write that JSON to the worker's owned output file before running consolidation.304- If subagents are unavailable, execute the same pass plan serially in the current agent and record `execution_mode: "serial_fallback"` plus a concrete `fallback_reason` in `review_summary.json`.305306### 6) Pass quality bar307308- Use `references/codex-agent-orchestration.md` for spawning/ownership rules, `references/subagent_templates.md` for prompt structure, and `references/criteria.md` for issue format.309- Favor deep, merged root-cause arguments over surface-level issue spam, but do not collapse distinct issues that require different fixes or threaten different paper-level conclusions.310- Each pass must write a JSON array into `comments/`. Empty arrays are valid; missing output files are not.311- After all passes, compare `PASS_PLAN.md` against the files in `comments/`; fill or rerun any missing pass before consolidation.312313### 7) Add literature and novelty context when needed314315- Before consolidation, decide whether external context is necessary. It is necessary when the paper makes novelty, SOTA, related-work sufficiency, benchmark representativeness, impact, or significance claims that cannot be judged from the paper alone.316- Create `<review_dir>/context/context-plan.md` with:317 - extracted contribution claim318 - domain and target community319 - novelty dimensions to test320 - impact/significance claims to contextualize321 - cited closest prior work322 - proposed literature-context scope323 - whether full systematic review is needed or paper-context mode is enough324- If only bounded context is needed, invoke `research-systematic-literature-review` in paper-context mode with the paper summary, extracted contribution, domain, cited prior work, and 3-8 targeted search questions. Write or copy the resulting summary to `<review_dir>/context/literature-context.md`.325- The paper-context SLR exchange must produce or reference all four paper-context artifacts under `<review_dir>/context/`: `literature-context.md`, `literature-context-search-log.md`, `literature-context-evidence-table.md`, and `literature-context-decision.json`. Use the SLR helper `scripts/paper_context_artifacts.py init --review-dir <review_dir> ...` when a deterministic scaffold is useful.326- If the user explicitly asks for a full systematic review, or if a venue-critical claim depends on broad evidence coverage, run the full `research-systematic-literature-review` workflow and record its artifact directory as `systematic_review_artifact_dir` in `review_summary.json.context_artifacts`.327- Invoke `research-novelty-review` when novelty or impact positioning matters. It should consume `summary.md`, `<review_dir>/context/literature-context.md` when present, and any recorded `systematic_review_artifact_dir`. Write or copy its bottom-line decision to `<review_dir>/context/novelty-context.md`.328- Add any context-derived findings to the raw comments set before consolidation, preferably in `comments/cross_literature_context.json` and `comments/cross_novelty_positioning.json`.329- Do not invent literature evidence. If search/corpus access is unavailable, mark context-dependent claims as externally unverified and state what evidence would resolve them.330331### 8) Consolidate and tier findings332333- Run the packaged consolidation helper when available:334335```bash336python3 scripts/consolidate_comments.py <review_dir>337```338339- If the helper is unavailable, consolidate manually in the active agent and still write `comments/all_comments.json` and `final_issues.json`.340- Deduplicate by root cause, not wording alone. If one fix would resolve multiple comments, merge them into the strongest single issue; if comments share a design choice but affect different claims or require different fixes, keep them separate.341- For any singleton finding that appears in only one pass, read the full explanation before dropping it. Singleton comments are often the best signals, not the weakest.342- Verify that every kept quote appears in the paper text.343- Remove false positives resolved by later context, standard conventions, or leniency rules in `criteria.md`.344- Reclassify comment types into:345 - `methodology`346 - `claim_accuracy`347 - `presentation`348 - `missing_information`349- Assign:350 - `impact_rating` on a 1-5 scale351 - `confidence_rating` on a 1-5 scale352- Use `references/rating-rubric.md`.353- Keep singleton findings unless a concrete check disproves them.354- Do not drop issues only because they are minor; a low-impact issue should usually remain as `impact_rating` 1 or 2 if it is real.355- As a calibration check, a thorough deep review of a publishable paper usually yields 15-30 total issues across impact levels. A typical publishable paper may have several impact-4 issues, but impact-5 should be reserved for paper-level blockers.356357### 9) Save final results for browsing and downstream use358359- Write `final_issues.json` in the review directory. Each issue needs:360 - `title`361 - `quote`362 - `explanation`363 - `comment_type`364 - `impact_rating`365 - `confidence_rating`366- Do not hand-write a separate `severity` field unless another tool specifically needs it. If a downstream OpenAIReview visualization/export path needs severity tiers, call `scripts/save_viz_json.py` with `--derive-severity` and document that compatibility export.367- Write `review_summary.json` in the review directory with:368 - `overall_paper_rating`369 - `decision_relevance_rating`370 - `rating_confidence`371 - `execution_mode`372 - `fallback_reason` when relevant373 - `top_blockers`374 - `context_artifacts`375 - `contextualization_rating`, `coverage_confidence_rating`, and `impact_context_rating` when available from `literature-context-decision.json`376 - `novelty_decision_rating` when available377 - `impact_positioning_rating` when available from novelty context378- Write `overall_assessment.txt` as one short paragraph.379- Build viz JSON when useful and the upstream engine is installed:380381```bash382python3 scripts/save_viz_json.py <review_dir> --slug-suffix _skill383```384385- The output lands in `./review_results/` unless overridden. Add `--derive-severity` only when the visualization/export should explicitly map 1-5 impact ratings to OpenAIReview severity tiers.386- Use `python3 scripts/run_openaireview.py serve` to browse results locally.387- Run `python3 scripts/validate_review_bundle.py --review-dir <review_dir>` before treating the bundle as stable.388- Treat `summary.md`, `final_issues.json`, `review_summary.json`, and `overall_assessment.txt` as the canonical handoff bundle for `research-review-loop`, `research-paper-plan`, and `research-rebuttal`.389390## References391392- `references/chatgpt-native-review.md`393- `references/engine-usage.md`394- `references/criteria.md`395- `references/codex-agent-orchestration.md`396- `references/rating-rubric.md`397- `references/subagent_templates.md`398- `../research-pipeline-planner/references/review-stage-contract.md`399400## Scripts401402- `scripts/install_engine.py`: create or update a virtualenv with the upstream OpenAIReview engine403- `scripts/run_openaireview.py`: mirror the upstream `openaireview` CLI, with provider-backed `review` opt-in only404- `scripts/prepare_workspace.py`: delegate to the packaged deep-review workspace preparer405- `scripts/validate_review_bundle.py`: validate required handoff files and 1-5 rating fields for downstream use406- `scripts/consolidate_comments.py`: delegate to the packaged consolidation helper407- `scripts/save_viz_json.py`: delegate to the packaged viz JSON helper