Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build auditable peer-review revision and author-response packages for Light stage 13. Use after receiving reviewer comments, a decision or meta-review; when drafting a rebuttal or response letter; when triaging major/minor revisions; when simulating a pre-submission review; or when a rejection may require a user-chosen 13→3 novelty, 13→5 experiment, or 13→8 writing back-edge. Consumes the selected venue/context and real PDF facts, preserves reviewer wording, atomizes issues, binds claims/evidenc
.claude/skills/light0305-light-review-rebuttal/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 101% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 123% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 208% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 171% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 175% | 0% |
Build a source-preserving review registry, issue matrix, revision plan, evidence/change map, response draft, commitment ledger, unknown/failure record, and delivery package. Treat prose generation as the last layer, not the first.
Read review-rebuttal-resource-map.md before a real run. Read references/workflow_contract.md before creating or consuming canonical JSON. Read references.md when selecting review/rule sources. The competitor evidence is ../../docs/competitors/review-rebuttal.md.
identity, selected_at timezone, selection_basis, user/delegated authorization, chosen candidate ID, fit/risk row, unmodified rule envelopes, source evidence path/as-of/source IDs, manuscript profile, and PDF path/hash/pages/page size/profile/compliance. Never switch venue, reorder tiers, or turn venue UNKNOWN into a fact.
canonical registry. Atom labels, root causes, strategies, and generated prose are interpretation layers; they never replace source text.
AVAILABLE|UNKNOWN|UNAVAILABLE|STALE. A 401/403/429/5xx, timeout, login, private invitation or network failure is UNAVAILABLE, not “no review.”
reviewer identity, venue rule or result. PLANNED and IN_PROGRESS may not be phrased as completed. DONE requires a real change locator; completed experiment/analysis additionally requires verifiable run provenance with a matching SHA-256, not merely a local path. Before marking a response package ready, run the atom/action contract gate so source spans, reconstruction hashes, policy/ethics authorization and perspective-specific self-review are machine-checked rather than trusted.
evidence strength. Citation owns new-reference identity and claim support. Figure owns visual honesty. Typesetting owns PDF rebuild/compliance. This skill records and routes work; it does not impersonate those producers.
(novelty|experiment|writing) explicitly marked rejection_driving=true with a complete decision/meta-review/reviewer evidence envelope may become critical. Major labels or an overall Reject alone do not make every comment critical.
reviewer_classify and reroute produce advice only. Stop after presentingevidence and alternatives. Run passport add-back-edge only after the user chooses the root cause/back-edge. Never mutate the passport automatically.
Require:
light.selected_venue_handoff.v1;light.review_rebuttal_venue_context.v1;light.paper_claims.v1;light.evidence_strength.v1;Run:
bashpython scripts/review_workflow.py \ --spec review-input.json \ --outdir review-delivery
If venue identity, rule envelopes, PDF hash, compliance, claims or evidence IDs do not agree, stop and repair the producer artifact. Do not “normalize” a conflict away.
The selected handoff must also retain A32's audit fields: timezone-bearing selected_at that is not in the future, non-empty selection_basis, decision_authority=user, coherent selected_by/status, delegated user_authorization when applicable, unchanged fit_risk, and a readable source_evidence.path whose SHA-256 matches the selected handoff and whose as_of/source_ids cover every sourced venue rule.
For user-provided/private material, copy the text into reviews[].raw_text without correction and record reviews[].raw_sha256 plus a timezone-aware captured_at; the workflow re-computes the hash and blocks future/naive capture times. For a public OpenReview forum:
bashpython scripts/fetch_openreview.py \ --forum <forum-id> \ --out openreview-capture.json
If the live API is unavailable but a fixed public PeerRead/OpenReview snapshot is the declared evidence source, capture that exact commit-pinned JSON instead:
bashpython scripts/fetch_openreview.py \ --peerread-url <raw-fixed-commit-json-url> \ --out peerread-capture.json
The capture is calibration/source evidence. Do not redistribute restricted reviews. If capture is unavailable, continue only with material the user provided and retain the failure record.
Create one atom for each distinct request, claim, question, misunderstanding, or editorial item. Each atom must contain an exact contiguous source span copied from raw_text, with start/end offsets, span text and SHA-256. Also create addressable coverage units and a reconstruction hash for the reviewer units that require a response.
Assign one root cause such as novelty, experiment, writing, clarification, citation, ethics, scope, or editorial. Add a separate interpretation explaining the inferred concern. If a sentence contains two independent asks, create two atoms pointing to the same or overlapping source span; do not paraphrase the reviewer into a new source quote.
Run the stricter losslessness/response-action gate before drafting:
bashpython scripts/review_response_contract.py \ --input templates/review-response-contract.example.json
Replace the template with the real contract. The example is intentionally non-passing until current venue policy, ethics state and user authorization are verified. This gate catches missing reviewer units, duplicate atom/action coverage, fake DONE wording, incomplete evidence kinds, policy-forbidden reviewer requests, missing reviewer competence/conflict cards, and missing domain|method|statistics|ethics|cold_reader self-review perspectives.
For every atom:
claim_id values or leave the list empty;acknowledge_and_fix, rebut_with_evidence, clarify, downgrade_claim, or request_editor_ruling;
PLANNED|IN_PROGRESS|DONE|DECLINED|NOT_APPLICABLE;DONE experiment/analysis the artifact path must exist and match run_provenance.sha256;
CONFIRMED.Reviewer error is not permission to ignore a comment. Clarify with manuscript locator and evidence, or request editor ruling when the disagreement is material.
When a reviewer request itself conflicts with venue policy, ethics approval, data rights, consent, budget authorization or editor instructions, do not silently comply. Mark the action as DECLINED or REQUEST_RULING, bind the policy/ethics evidence, and keep the reviewer wording intact.
Run:
bashpython scripts/rebuttal_budget.py \ review-delivery/response-draft.md \ --context review-rebuttal-context.json
An AVAILABLE current authoritative rule can yield PASS/FAIL. UNKNOWN, UNAVAILABLE, STALE, or a page-only rule stays non-passing and explicit. Never apply an ICLR/CVPR/other venue preset to JORS or vice versa.
For every reviewer request for new numbers/experiments, classify it before any run as reanalysis/minimal/adapted/new-data plus feasibility and intended action:
bashpython scripts/experiment_request_gate.py \ --input templates/experiment_request.example.json
The template is intentionally UNKNOWN and non-passing until current official rules and a real user authorization replace its placeholders. RUN requires a VERIFIED current venue rule with source_type=OFFICIAL, a real source and ISO check date that allows new results, plus feasible scope, protocol, budget and user authorization. Tier-D new data/human study/ large sweep needs separate authorization. This gate only permits a run; DONE still requires run manifest + result artifact hash, and only then may the response use completed tense.
Run:
bashpython scripts/check_commitments.py \ --ledger review-delivery/commitment-ledger.json \ --issues review-delivery/issue-matrix.json \ --change-map review-delivery/evidence-change-map.json
Repair every critical finding. A valid locator proves only that a claimed change is traceable, not that the scientific response is adequate; perform a human re-review against the actual revised artifact.
Run:
bashpython scripts/reviewer_classify.py \ --issues review-delivery/issue-matrix.json \ --out reviewer-findings.json python ../light-orchestrator/scripts/run_checkpoint.py \ --file .light/passport.yaml --stage 13 \ --findings reviewer-findings.json --ts <ISO-8601> --write python ../light-orchestrator/scripts/reroute.py \ --findings reviewer-findings.json --stage 13 \ --passport .light/passport.yaml
If the gate fails, present each evidenced option:
Stop for the user's choice. Only then run:
bashpython ../light-orchestrator/scripts/passport.py add-back-edge \ --to <3|5|8> --from 13 --root-cause "<user-approved reason>" \ --evidence-ptr <issue/evidence locator> --file .light/passport.yaml
| Resource | Responsibility | |---|---| | review-rebuttal-resource-map.md | execution order, source/access layers, cross-skill routing | | references/workflow_contract.md | schemas, statuses, invariants and artifact semantics | | references.md | live source policy, OpenReview/JORS caveats, verification guidance | | templates/* | blank author inputs and human-readable response/re-review shapes | | scripts/review_workflow.py | canonical validation and package emission | | scripts/review_response_contract.py | source-span/reconstruction, atom coverage, response-action evidence, policy/ethics, reviewer-card and self-review gate | | scripts/fetch_openreview.py | live API or fixed public snapshot capture; honest unavailable state and duplicate accounting | | scripts/reviewer_classify.py | only evidenced rejection-driving stage-13 findings | | scripts/check_commitments.py | coverage and PLANNED/DONE/provenance gate | | scripts/rebuttal_budget.py | selected-context budget assessment; no venue presets | | scripts/experiment_request_gate.py | venue-policy/feasibility/tier/authorization gate; never runs experiments |
to an exact source span with offset and hash.
captured_at andraw_sha256; the registry hash matches the exact raw_text.
omitted or duplicated unless explicitly justified.
DONE rows have reallocators; completed scientific actions have run provenance path + SHA-256 match; proposed citations are citation-confirmed.
comments without editor ruling.
have unresolved blockers surfaced before package-ready.
UNKNOWN.the user's choice.
Atomization, triage, point-by-point drafting, tone guidance, reviewer priority, budgeting, change locators, promise tracking and venue adaptation are common in peer skills; do not claim them as unique. Light's narrower machine contribution is verified consumption of upstream venue/PDF/claim/evidence/citation contracts, immutable source versus interpretation layers, strict PLANNED/DONE/run-provenance checks, and evidence-gated stage-13 routing that cannot execute without a user decision. Classification and response quality still require expert judgment.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 19,656 | 22,972 | +17% | 1 | 1 | 0% | 3,219 | 6,461 | +101% | 0 | 0 | — |
case-02 | fail→fail | 22,733 | 7,074 | -69% | 1 | 1 | 0% | 3,454 | 3,655 | +6% | 0 | 0 | — |
case-03 | fail→fail | 13,595 | 18,726 | +38% | 1 | 1 | 0% | 1,829 | 6,415 | +251% | 0 | 0 | — |
case-04 | fail→pass | 14,094 | 6,706 | -52% | 1 | 1 | 0% | 1,951 | 4,359 | +123% | 0 | 0 | — |
case-05 | fail→pass | 9,523 | 5,953 | -37% | 1 | 1 | 0% | 1,363 | 4,196 | +208% | 0 | 0 | — |
case-06 | fail→fail | 10,719 | 5,566 | -48% | 1 | 1 | 0% | 1,594 | 4,110 | +158% | 0 | 0 | — |
case-07 | fail→pass | 11,159 | 6,872 | -38% | 1 | 1 | 0% | 1,612 | 4,376 | +171% | 0 | 0 | — |
case-08 | pass→pass | 7,554 | 5,594 | -26% | 1 | 1 | 0% | 1,114 | 4,212 | +278% | 0 | 0 | — |
case-09 | fail→pass | 10,448 | 5,936 | -43% | 1 | 1 | 0% | 1,553 | 4,266 | +175% | 0 | 0 | — |
case-10 | fail→pass | 15,869 | 9,463 | -40% | 1 | 1 | 0% | 2,202 | 4,731 | +115% | 0 | 0 | — |
case-11 | pass→pass | 11,686 | 7,348 | -37% | 1 | 1 | 0% | 1,606 | 4,475 | +179% | 0 | 0 | — |
case-12 | fail→pass | 12,559 | 4,755 | -62% | 1 | 1 | 0% | 1,865 | 4,158 | +123% | 0 | 0 | — |
case-13 | fail→pass | 12,511 | 9,386 | -25% | 1 | 1 | 0% | 1,733 | 4,656 | +169% | 0 | 0 | — |
case-14 | fail→pass | 6,010 | 5,720 | -5% | 1 | 1 | 0% | 747 | 4,166 | +458% | 0 | 0 | — |
case-15 | fail→pass | 9,373 | 5,004 | -47% | 1 | 1 | 0% | 1,377 | 4,031 | +193% | 0 | 0 | — |
case-16 | fail→pass | 12,864 | 5,751 | -55% | 1 | 1 | 0% | 1,811 | 4,162 | +130% | 0 | 0 | — |
case-17 | pass→pass | 11,897 | 6,896 | -42% | 1 | 1 | 0% | 1,573 | 4,368 | +178% | 0 | 0 | — |
case-18 | fail→pass | 10,334 | 4,562 | -56% | 1 | 1 | 0% | 1,520 | 4,036 | +166% | 0 | 0 | — |
case-19 | fail→fail | 14,011 | 3,646 | -74% | 1 | 1 | 0% | 2,744 | 3,993 | +46% | 0 | 0 | — |
case-20 | fail→pass | 2,765 | 9,816 | +255% | 1 | 1 | 0% | 495 | 5,060 | +922% | 0 | 0 | — |
case-21 | fail→pass | 8,296 | 12,925 | +56% | 1 | 1 | 0% | 1,595 | 5,446 | +241% | 0 | 0 | — |
case-22 | fail→pass | 26,531 | 16,170 | -39% | 1 | 1 | 0% | 6,181 | 6,972 | +13% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +68 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.