[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DC9ATB40K7V517CXA36TAJ":3,"skill-same:01M6DC9ATB40K7V517CXA36TAJ":69},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":14,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":54,"install":55,"resources":68},"01M6DC9ATB40K7V517CXA36TAJ","rubric-verifier",null,"Use when rubric verifier is needed. Use AFTER N candidate patches exist (from codex council \u002F \u002Fmulti-execute \u002F external-tools Codex+Gemini fan-out) and BEFORE running tests, to select the best candidate execution-free. A fresh-context reviewer builds a repo-grounded rubric — a weighted checklist.","Prekzursil\u002Fagent-skills-toolchain","Prekzursil","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F54636077?v=4","01M6DACZ1PCQHD99SCR1YXG28B","Andrei Mihai Visalon","01M6DACZ670WZF535V3WYYSS4Z",0,"MIT","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Fci\u002Fskills-allowlist\u002Frubric-verifier\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"rubric verifier","verifier","rubric","cursor","fresh","free","tests","arxiv","opencode","use","cli","repo","reviewer","select","execution","https","running tests","code","codex","gemini","2026-11-10 10:12:30",false,"---\nname: rubric-verifier\ndescription: \"Use when rubric verifier is needed. Use AFTER N candidate patches exist (from codex council \u002F \u002Fmulti-execute \u002F external-tools Codex+Gemini fan-out) and BEFORE running tests, to select the best candidate execution-free. A fresh-context reviewer builds a repo-grounded rubric — a weighted checklist.\"\nmetadata:\n  version: 0.1.0\n  compatibility: claude-code codex cursor gemini-cli opencode\n  source: https:\u002F\u002Farxiv.org\u002Fabs\u002F2601.04171\n  upstream_authors: Scale AI\n---\n\n# Rubric Verifier — execution-free candidate selector\n\nSelect the best among N candidate patches **without running any tests**, by having a\nfresh-context reviewer build a repo-grounded rubric and score each candidate against\nit.  The output is a ranked advisory list; the coverage gate remains the hard blocker.\n\n## Why this exists\n\nAfter `\u002Fmulti-execute`, `codex council`, or an external-tools (Codex + Gemini) fan-out\nyou have N candidate diffs for the same task.  The current pipeline has no principled\nexecution-free SELECT step:\n\n| Existing skill | What it does | Gap |\n|---|---|---|\n| `fresh-context-verify` | re-derives one load-bearing value | single-value, not N-candidate ranking |\n| VALIDATE (metaswarm) | runs tests | execution required; expensive to run N times |\n| `code-review` | hunts for bugs in one diff | not a multi-candidate rubric scorer |\n\nThis skill fills the SELECT point: pick the best candidate before spending test-runner\ncycles on all N.\n\n## Trigger\n\nRun this skill **after** N ≥ 2 candidate diffs exist and **before** VALIDATE, when:\n- A `\u002Fmulti-execute` or `codex council` run has produced N patches in a manifest file\n  (default: `.multi-execute\u002Fcandidates\u002F` or `.council\u002Fcandidates\u002F`), **or**\n- External-tools (Codex CLI + Gemini CLI) have each produced a patch and you need to\n  pick one before committing to the VALIDATE loop.\n\nSkip when:\n- Only one candidate exists (nothing to rank).\n- The issue is trivially localised (one-liner typo fix) — any diff that compiles is fine.\n- The task is greenfield (no repo context to ground a rubric against).\n\n## Composition with existing gates\n\n```\n[multi-execute \u002F codex council \u002F external-tools]\n        |\n        v\n  rubric-verifier  ← THIS SKILL (advisory SELECT)\n        |\n        v\n  VALIDATE (tests)  ← blocking gate\n        |\n        v\n  ADVERSARIAL REVIEW\n        |\n        v\n  COMMIT\n```\n\nThe skill is **advisory**: it outputs a ranked pick + rationale.  If the top-ranked\ncandidate later fails VALIDATE, promote the runner-up (already flagged in the output)\nand re-run VALIDATE.  The coverage gate in `.coverage-thresholds.json` is never\nweakened by this skill.\n\n---\n\n## Phase 1 — Rubric Construction (FRESH context)\n\n**This phase MUST run in a `Task()` subagent spawned with no prior context from the\nmain session.**  The anti-placebo requirement: a reviewer that already saw candidate\ndiffs will unconsciously anchor to them.  The fresh agent gets only the raw inputs.\n\n### Inputs to pass to the fresh-context Task\n\n```\nTASK: Build a repo-grounded rubric for issue \u003CISSUE_ID \u002F ISSUE_TITLE>.\n\nRepo root: \u003CABS_PATH>\nIssue description:\n---\n\u003CISSUE_TEXT>\n---\n\nDo NOT read any candidate diffs.  Do NOT look at any solution.\nYour only job: explore the repo to understand what a CORRECT patch must do,\nthen emit a weighted rubric checklist.\n```\n\n### Fresh-agent exploration protocol\n\nThe fresh agent MUST use at least two of the following before writing the rubric:\n\n1. **serena** (`get_symbols_overview`, `find_symbol`, `search_for_pattern`,\n   `find_referencing_symbols`) — locate the symbols, classes, and call-sites the\n   issue touches.\n2. **repomix** (`pack_codebase` + `grep_repomix_output`) — get a compressed view of\n   the affected module when the symbol graph is insufficient.\n3. **Read** — read the specific files identified by steps 1\u002F2 (entry point, callers,\n   tests for the affected area).\n\nThe agent MUST NOT speculate about solutions.  It reads existing code to understand\ninvariants, patterns, and the expected shape of a fix.\n\n### Rubric format (agent output)\n\nThe fresh agent emits a JSON rubric block, wrapped in fences:\n\n```json\n{\n  \"issue\": \"\u003CISSUE_ID>\",\n  \"criteria\": [\n    {\n      \"id\": \"C1\",\n      \"description\": \"Modifies \u003CSymbolName> in \u003Cfile>:\u003Cline-range> (the entry point named in the issue)\",\n      \"weight\": 3,\n      \"rationale\": \"The issue report and call-graph confirm this is the sole entry point for the broken path\"\n    },\n    {\n      \"id\": \"C2\",\n      \"description\": \"Preserves the existing public API signature of \u003CMethodName>\",\n      \"weight\": 3,\n      \"rationale\": \"Three callers in tests\u002F and two in src\u002F rely on the current signature\"\n    },\n    {\n      \"id\": \"C3\",\n      \"description\": \"Handles the edge case where \u003Cinput> is None \u002F empty \u002F negative (stated in issue body)\",\n      \"weight\": 2,\n      \"rationale\": \"Issue body explicitly lists this as a failing input\"\n    },\n    {\n      \"id\": \"C4\",\n      \"description\": \"Does not introduce new imports outside the existing dependency set\",\n      \"weight\": 1,\n      \"rationale\": \"Repo coding standards (found in CONTRIBUTING.md \u002F existing patterns) avoid adding deps for small fixes\"\n    },\n    {\n      \"id\": \"C5\",\n      \"description\": \"Matches the error-handling pattern used in sibling methods (return None vs raise)\",\n      \"weight\": 1,\n      \"rationale\": \"Three sibling methods in same file use return-None; a raise would break callers\"\n    }\n  ],\n  \"total_weight\": 10\n}\n```\n\nRules for criteria:\n- **Concrete, falsifiable** — every criterion must be checkable by reading a diff, no\n  test execution allowed.\n- **Repo-grounded** — each criterion must cite the specific symbol, file, or pattern\n  it was inferred from.\n- **Weighted 1–3** — weight 3 = must-have (wrong symbol, wrong invariant), weight 2 =\n  should-have (stated edge case), weight 1 = nice-to-have (style\u002Fpattern match).\n- **5–9 criteria** — fewer misses nuance; more dilutes signal.\n\n---\n\n## Phase 2 — Scoring (same or new Task per candidate)\n\nFor each candidate diff `C_1 … C_N`, the scorer (may be the same fresh agent, or a\nseparate Task per candidate for parallelism) reads the rubric from Phase 1 and the\ndiff, then produces a score sheet.\n\n### Scorer prompt template\n\n```\nTASK: Score candidate patch \u003CK> against the rubric below.\n\nRubric:\n---\n\u003CRUBRIC JSON FROM PHASE 1>\n---\n\nCandidate diff (unified diff format):\n---\n\u003CDIFF TEXT>\n---\n\nFor each criterion C_i:\n  - Score: FULL (earns weight_i points) | PARTIAL (earns weight_i \u002F 2, round down) | MISS (0 points)\n  - One-line justification citing a specific hunk or the absence of one.\n\nThen compute:\n  total_score = sum of earned points\n  max_score   = rubric.total_weight\n\nFlag the candidate as SPEC_MISALIGNED if:\n  - It scores MISS on ANY criterion with weight == 3, OR\n  - It modifies files outside the scope implied by the rubric criteria.\n\nOutput a JSON score sheet:\n{\n  \"candidate_id\": \"C_K\",\n  \"scores\": [\n    {\"criterion\": \"C1\", \"score\": \"FULL|PARTIAL|MISS\", \"earned\": \u003Cint>, \"justification\": \"...\"},\n    ...\n  ],\n  \"total_score\": \u003Cint>,\n  \"max_score\": \u003Cint>,\n  \"pct\": \u003Cfloat, 0-100>,\n  \"spec_misaligned\": \u003Cbool>,\n  \"misalignment_reason\": \"\u003Cnull or string>\"\n}\n```\n\n### Parallelism option\n\nIf N ≥ 3, spawn N scorer Tasks simultaneously (one per candidate) rather than\nrunning them sequentially.  Pass the same rubric JSON to each.  Wait for all to\ncomplete before Phase 3.\n\n---\n\n## Phase 3 — Aggregate and Report\n\nCollect all score sheets.  Produce the final advisory ranking:\n\n```\n## Rubric Verifier — Advisory Ranking\n\nIssue: \u003CISSUE_ID>\nRubric criteria: \u003Ccount> (total weight \u003CW>)\nCandidates scored: \u003CN>\n\n### Ranking\n\n| Rank | Candidate | Score | % | Spec-misaligned | Notes |\n|------|-----------|-------|---|-----------------|-------|\n| 1    | C_K       | 8\u002F10  | 80% | No  | Hits C1-C3 fully; partial C5 |\n| 2    | C_J       | 6\u002F10  | 60% | No  | Misses C3 (no None-guard) |\n| 3    | C_M       | 4\u002F10  | 40% | YES | Modifies wrong symbol (C1 MISS) |\n\n### Recommendation\n\nBEST: C_K — passes all must-haves (weight-3 criteria), highest overall score.\nRUNNER-UP: C_J — promote if C_K fails VALIDATE (missing None-guard is testable).\nREJECT: C_M — spec-misaligned; do not promote even if C_K and C_J both fail.\n\n### Per-candidate rationale (brief)\n\n**C_K (rank 1):** [one short paragraph]\n**C_J (rank 2):** [one short paragraph]\n**C_M (rank 3, REJECT):** [one short paragraph — why it is spec-misaligned]\n\n---\nADVISORY — this ranking is not a gate.  Run VALIDATE on C_K next.\nIf C_K fails VALIDATE, promote C_J and re-run VALIDATE.\nThe 100%-coverage threshold in .coverage-thresholds.json remains the blocking authority.\n```\n\n---\n\n## Caveats and honest limitations\n\n- **Absolute numbers come from a specific experimental setting.** The +3.5 pp\n  selection-quality improvement over baseline selectors (reported in arXiv:2601.04171)\n  was measured on SWE-Bench Verified with Qwen-based candidates.  Your repo, model\n  mix, and issue distribution will differ; treat the rubric rank as a strong prior,\n  not a guarantee.\n- **Execution-free means no runtime surprise coverage.** A candidate may pass all\n  rubric criteria and still fail a test that exercises an untouched invariant.  The\n  coverage gate exists precisely for this.\n- **Rubric quality depends on repo exploration quality.** If serena\u002Frepomix cannot\n  resolve the affected symbols (e.g. generated code, heavy metaprogramming), the\n  criteria will be shallower.  Surface this in the rubric's `rationale` fields so the\n  orchestrator can decide whether to trust the ranking.\n- **SPEC_MISALIGNED is conservative.** A weight-3 MISS flags the candidate regardless\n  of its total score.  This is intentional: a candidate that touches the wrong symbol\n  is structurally wrong, not just incomplete.\n\n---\n\n## Worked example — rubric for a real-shaped issue\n\n**Issue:** \"TypeError: `process_batch` returns None when input list is empty (should\nreturn an empty list).  Affects `DataPipeline.run()` callers.\"\n\n**Phase 1 fresh-agent exploration finds:**\n- `process_batch(items: list) -> list` in `src\u002Fpipeline\u002Fbatch.py:L42`\n- Called by `DataPipeline.run()` at `src\u002Fpipeline\u002Fcore.py:L88` — result is iterated\n  directly (a `None` return crashes the loop)\n- `tests\u002Ftest_batch.py` has no test for empty input\n- Sibling method `process_single` returns `[]` for empty input (line 61)\n\n**Rubric emitted:**\n\n```json\n{\n  \"issue\": \"GH-412\",\n  \"criteria\": [\n    {\n      \"id\": \"C1\",\n      \"description\": \"Modifies process_batch in src\u002Fpipeline\u002Fbatch.py (the reported function)\",\n      \"weight\": 3,\n      \"rationale\": \"Issue names this function explicitly; it is the only definition\"\n    },\n    {\n      \"id\": \"C2\",\n      \"description\": \"Preserves signature process_batch(items: list) -> list\",\n      \"weight\": 3,\n      \"rationale\": \"core.py:L88 iterates the return value; a type change breaks it\"\n    },\n    {\n      \"id\": \"C3\",\n      \"description\": \"Returns [] (not None) when items is empty\",\n      \"weight\": 3,\n      \"rationale\": \"This is the exact reported bug; issue body gives this as the failing input\"\n    },\n    {\n      \"id\": \"C4\",\n      \"description\": \"Does not add new imports to batch.py\",\n      \"weight\": 1,\n      \"rationale\": \"Fix should be a single guard; new imports signal over-engineering\"\n    },\n    {\n      \"id\": \"C5\",\n      \"description\": \"Uses return [] style consistent with process_single (batch.py:L61)\",\n      \"weight\": 1,\n      \"rationale\": \"Sibling method establishes the pattern; diverging introduces inconsistency\"\n    }\n  ],\n  \"total_weight\": 11\n}\n```\n\n**Two candidate diffs arrive:**\n\n- **C_A:** adds `if not items: return []` at the top of `process_batch`.\n  Scores: C1 FULL(3) C2 FULL(3) C3 FULL(3) C4 FULL(1) C5 FULL(1) = 11\u002F11 (100%).\n\n- **C_B:** refactors `DataPipeline.run()` to guard against `None` returns.\n  Scores: C1 MISS(0) — wrong symbol — SPEC_MISALIGNED; overall score irrelevant.\n\n**Output:** C_A ranked #1, C_B REJECTED (spec-misaligned).\nRecommendation: run VALIDATE on C_A; do not promote C_B.\n\n---\n\n## Helper script\n\nA small helper, `score_candidates.py` (co-located in this skill directory), can be\nused to parse a candidates manifest and emit the scorer prompt for each diff as a\nready-to-paste block.  Run it from the repo root:\n\n```\npython path\u002Fto\u002Fskills\u002Frubric-verifier\u002Fscore_candidates.py \\\n    --rubric rubric.json \\\n    --manifest .multi-execute\u002Fcandidates\u002Fmanifest.json \\\n    [--out scoring-prompts\u002F]\n```\n\nSee `score_candidates.py` for the manifest format expected (one JSON entry per\ncandidate with `id` and `diff_path` keys).\n","# Rubric Verifier — execution-free candidate selector\n\nSelect the best among N candidate patches **without running any tests**, by having a\nfresh-context reviewer build a repo-grounded rubric and score each candidate against\nit.  The output is a ranked advisory list; the coverage gate remains the hard blocker.\n\n## Why this exists\n\nAfter `\u002Fmulti-execute`, `codex council`, or an external-tools (Codex + Gemini) fan-out\nyou have N candidate diffs for the same task.  The current pipeline has no principled\nexecution-free SELECT step:\n\n| Existing skill | What it does | Gap |\n|---|---|---|\n| `fresh-context-verify` | re-derives one load-bearing value | single-value, not N-candidate ranking |\n| VALIDATE (metaswarm) | runs tests | execution required; expensive to run N times |\n| `code-review` | hunts for bugs in one diff | not a multi-candidate rubric scorer |\n\nThis skill fills the SELECT point: pick the best candidate before spending test-runner\ncycles on all N.\n\n## Trigger\n\nRun this skill **after** N ≥ 2 candidate diffs exist and **before** VALIDATE, when:\n- A `\u002Fmulti-execute` or `codex council` run has produced N patches in a manifest file\n  (default: `.multi-execute\u002Fcandidates\u002F` or `.council\u002Fcandidates\u002F`), **or**\n- External-tools (Codex CLI + Gemini CLI) have each produced a patch and you need to\n  pick one before committing to the VALIDATE loop.\n\nSkip when:\n- Only one candidate exists (nothing to rank).\n- The issue is trivially localised (one-liner typo fix) — any diff that compiles is fine.\n- The task is greenfield (no repo context to ground a rubric against).\n\n## Composition with existing gates\n\n```\n[multi-execute \u002F codex council \u002F external-tools]\n        |\n        v\n  rubric-verifier  ← THIS SKILL (advisory SELECT)\n        |\n        v\n  VALIDATE (tests)  ← blocking gate\n        |\n        v\n  ADVERSARIAL REVIEW\n        |\n        v\n  COMMIT\n```\n\nThe skill is **advisory**: it outputs a ranked pick + rationale.  If the top-ranked\ncandidate later fails VALIDATE, promote the runner-up (already flagged in the output)\nand re-run VALIDATE.  The coverage gate in `.coverage-thresholds.json` is never\nweakened by this skill.\n\n---\n\n## Phase 1 — Rubric Construction (FRESH context)\n\n**This phase MUST run in a `Task()` subagent spawned with no prior context from the\nmain session.**  The anti-placebo requirement: a reviewer that already saw candidate\ndiffs will unconsciously anchor to them.  The fresh agent gets only the raw inputs.\n\n### Inputs to pass to the fresh-context Task\n\n```\nTASK: Build a repo-grounded rubric for issue \u003CISSUE_ID \u002F ISSUE_TITLE>.\n\nRepo root: \u003CABS_PATH>\nIssue description:\n---\n\u003CISSUE_TEXT>\n---\n\nDo NOT read any candidate diffs.  Do NOT look at any solution.\nYour only job: explore the repo to understand what a CORRECT patch must do,\nthen emit a weighted rubric checklist.\n```\n\n### Fresh-agent exploration protocol\n\nThe fresh agent MUST use at least two of the following before writing the rubric:\n\n1. **serena** (`get_symbols_overview`, `find_symbol`, `search_for_pattern`,\n   `find_referencing_symbols`) — locate the symbols, classes, and call-sites the\n   issue touches.\n2. **repomix** (`pack_codebase` + `grep_repomix_output`) — get a compressed view of\n   the affected module when the symbol graph is insufficient.\n3. **Read** — read the specific files identified by steps 1\u002F2 (entry point, callers,\n   tests for the affected area).\n\nThe agent MUST NOT speculate about solutions.  It reads existing code to understand\ninvariants, patterns, and the expected shape of a fix.\n\n### Rubric format (agent output)\n\nThe fresh agent emits a JSON rubric block, wrapped in fences:\n\n```json\n{\n  \"issue\": \"\u003CISSUE_ID>\",\n  \"criteria\": [\n    {\n      \"id\": \"C1\",\n      \"description\": \"Modifies \u003CSymbolName> in \u003Cfile>:\u003Cline-range> (the entry point named in the issue)\",\n      \"weight\": 3,\n      \"rationale\": \"The issue report and call-graph confirm this is the sole entry point for the broken path\"\n    },\n    {\n      \"id\": \"C2\",\n      \"description\": \"Preserves the existing public API signature of \u003CMethodName>\",\n      \"weight\": 3,\n      \"rationale\": \"Three callers in tests\u002F and two in src\u002F rely on the current signature\"\n    },\n    {\n      \"id\": \"C3\",\n      \"description\": \"Handles the edge case where \u003Cinput> is None \u002F empty \u002F negative (stated in issue body)\",\n      \"weight\": 2,\n      \"rationale\": \"Issue body explicitly lists this as a failing input\"\n    },\n    {\n      \"id\": \"C4\",\n      \"description\": \"Does not introduce new imports outside the existing dependency set\",\n      \"weight\": 1,\n      \"rationale\": \"Repo coding standards (found in CONTRIBUTING.md \u002F existing patterns) avoid adding deps for small fixes\"\n    },\n    {\n      \"id\": \"C5\",\n      \"description\": \"Matches the error-handling pattern used in sibling methods (return None vs raise)\",\n      \"weight\": 1,\n      \"rationale\": \"Three sibling methods in same file use return-None; a raise would break callers\"\n    }\n  ],\n  \"total_weight\": 10\n}\n```\n\nRules for criteria:\n- **Concrete, falsifiable** — every criterion must be checkable by reading a diff, no\n  test execution allowed.\n- **Repo-grounded** — each criterion must cite the specific symbol, file, or pattern\n  it was inferred from.\n- **Weighted 1–3** — weight 3 = must-have (wrong symbol, wrong invariant), weight 2 =\n  should-have (stated edge case), weight 1 = nice-to-have (style\u002Fpattern match).\n- **5–9 criteria** — fewer misses nuance; more dilutes signal.\n\n---\n\n## Phase 2 — Scoring (same or new Task per candidate)\n\nFor each candidate diff `C_1 … C_N`, the scorer (may be the same fresh agent, or a\nseparate Task per candidate for parallelism) reads the rubric from Phase 1 and the\ndiff, then produces a score sheet.\n\n### Scorer prompt template\n\n```\nTASK: Score candidate patch \u003CK> against the rubric below.\n\nRubric:\n---\n\u003CRUBRIC JSON FROM PHASE 1>\n---\n\nCandidate diff (unified diff format):\n---\n\u003CDIFF TEXT>\n---\n\nFor each criterion C_i:\n  - Score: FULL (earns weight_i points) | PARTIAL (earns weight_i \u002F 2, round down) | MISS (0 points)\n  - One-line justification citing a specific hunk or the absence of one.\n\nThen compute:\n  total_score = sum of earned points\n  max_score   = rubric.total_weight\n\nFlag the candidate as SPEC_MISALIGNED if:\n  - It scores MISS on ANY criterion with weight == 3, OR\n  - It modifies files outside the scope implied by the rubric criteria.\n\nOutput a JSON score sheet:\n{\n  \"candidate_id\": \"C_K\",\n  \"scores\": [\n    {\"criterion\": \"C1\", \"score\": \"FULL|PARTIAL|MISS\", \"earned\": \u003Cint>, \"justification\": \"...\"},\n    ...\n  ],\n  \"total_score\": \u003Cint>,\n  \"max_score\": \u003Cint>,\n  \"pct\": \u003Cfloat, 0-100>,\n  \"spec_misaligned\": \u003Cbool>,\n  \"misalignment_reason\": \"\u003Cnull or string>\"\n}\n```\n\n### Parallelism option\n\nIf N ≥ 3, spawn N scorer Tasks simultaneously (one per candidate) rather than\nrunning them sequentially.  Pass the same rubric JSON to each.  Wait for all to\ncomplete before Phase 3.\n\n---\n\n## Phase 3 — Aggregate and Report\n\nCollect all score sheets.  Produce the final advisory ranking:\n\n```\n## Rubric Verifier — Advisory Ranking\n\nIssue: \u003CISSUE_ID>\nRubric criteria: \u003Ccount> (total weight \u003CW>)\nCandidates scored: \u003CN>\n\n### Ranking\n\n| Rank | Candidate | Score | % | Spec-misaligned | Notes |\n|------|-----------|-------|---|-----------------|-------|\n| 1    | C_K       | 8\u002F10  | 80% | No  | Hits C1-C3 fully; partial C5 |\n| 2    | C_J       | 6\u002F10  | 60% | No  | Misses C3 (no None-guard) |\n| 3    | C_M       | 4\u002F10  | 40% | YES | Modifies wrong symbol (C1 MISS) |\n\n### Recommendation\n\nBEST: C_K — passes all must-haves (weight-3 criteria), highest overall score.\nRUNNER-UP: C_J — promote if C_K fails VALIDATE (missing None-guard is testable).\nREJECT: C_M — spec-misaligned; do not promote even if C_K and C_J both fail.\n\n### Per-candidate rationale (brief)\n\n**C_K (rank 1):** [one short paragraph]\n**C_J (rank 2):** [one short paragraph]\n**C_M (rank 3, REJECT):** [one short paragraph — why it is spec-misaligned]\n\n---\nADVISORY — this ranking is not a gate.  Run VALIDATE on C_K next.\nIf C_K fails VALIDATE, promote C_J and re-run VALIDATE.\nThe 100%-coverage threshold in .coverage-thresholds.json remains the blocking authority.\n```\n\n---\n\n## Caveats and honest limitations\n\n- **Absolute numbers come from a specific experimental setting.** The +3.5 pp\n  selection-quality improvement over baseline selectors (reported in arXiv:2601.04171)\n  was measured on SWE-Bench Verified with Qwen-based candidates.  Your repo, model\n  mix, and issue distribution will differ; treat the rubric rank as a strong prior,\n  not a guarantee.\n- **Execution-free means no runtime surprise coverage.** A candidate may pass all\n  rubric criteria and still fail a test that exercises an untouched invariant.  The\n  coverage gate exists precisely for this.\n- **Rubric quality depends on repo exploration quality.** If serena\u002Frepomix cannot\n  resolve the affected symbols (e.g. generated code, heavy metaprogramming), the\n  criteria will be shallower.  Surface this in the rubric's `rationale` fields so the\n  orchestrator can decide whether to trust the ranking.\n- **SPEC_MISALIGNED is conservative.** A weight-3 MISS flags the candidate regardless\n  of its total score.  This is intentional: a candidate that touches the wrong symbol\n  is structurally wrong, not just incomplete.\n\n---\n\n## Worked example — rubric for a real-shaped issue\n\n**Issue:** \"TypeError: `process_batch` returns None when input list is empty (should\nreturn an empty list).  Affects `DataPipeline.run()` callers.\"\n\n**Phase 1 fresh-agent exploration finds:**\n- `process_batch(items: list) -> list` in `src\u002Fpipeline\u002Fbatch.py:L42`\n- Called by `DataPipeline.run()` at `src\u002Fpipeline\u002Fcore.py:L88` — result is iterated\n  directly (a `None` return crashes the loop)\n- `tests\u002Ftest_batch.py` has no test for empty input\n- Sibling method `process_single` returns `[]` for empty input (line 61)\n\n**Rubric emitted:**\n\n```json\n{\n  \"issue\": \"GH-412\",\n  \"criteria\": [\n    {\n      \"id\": \"C1\",\n      \"description\": \"Modifies process_batch in src\u002Fpipeline\u002Fbatch.py (the reported function)\",\n      \"weight\": 3,\n      \"rationale\": \"Issue names this function explicitly; it is the only definition\"\n    },\n    {\n      \"id\": \"C2\",\n      \"description\": \"Preserves signature process_batch(items: list) -> list\",\n      \"weight\": 3,\n      \"rationale\": \"core.py:L88 iterates the return value; a type change breaks it\"\n    },\n    {\n      \"id\": \"C3\",\n      \"description\": \"Returns [] (not None) when items is empty\",\n      \"weight\": 3,\n      \"rationale\": \"This is the exact reported bug; issue body gives this as the failing input\"\n    },\n    {\n      \"id\": \"C4\",\n      \"description\": \"Does not add new imports to batch.py\",\n      \"weight\": 1,\n      \"rationale\": \"Fix should be a single guard; new imports signal over-engineering\"\n    },\n    {\n      \"id\": \"C5\",\n      \"description\": \"Uses return [] style consistent with process_single (batch.py:L61)\",\n      \"weight\": 1,\n      \"rationale\": \"Sibling method establishes the pattern; diverging introduces inconsistency\"\n    }\n  ],\n  \"total_weight\": 11\n}\n```\n\n**Two candidate diffs arrive:**\n\n- **C_A:** adds `if not items: return []` at the top of `process_batch`.\n  Scores: C1 FULL(3) C2 FULL(3) C3 FULL(3) C4 FULL(1) C5 FULL(1) = 11\u002F11 (100%).\n\n- **C_B:** refactors `DataPipeline.run()` to guard against `None` returns.\n  Scores: C1 MISS(0) — wrong symbol — SPEC_MISALIGNED; overall score irrelevant.\n\n**Output:** C_A ranked #1, C_B REJECTED (spec-misaligned).\nRecommendation: run VALIDATE on C_A; do not promote C_B.\n\n---\n\n## Helper script\n\nA small helper, `score_candidates.py` (co-located in this skill directory), can be\nused to parse a candidates manifest and emit the scorer prompt for each diff as a\nready-to-paste block.  Run it from the repo root:\n\n```\npython path\u002Fto\u002Fskills\u002Frubric-verifier\u002Fscore_candidates.py \\\n    --rubric rubric.json \\\n    --manifest .multi-execute\u002Fcandidates\u002Fmanifest.json \\\n    [--out scoring-prompts\u002F]\n```\n\nSee `score_candidates.py` for the manifest format expected (one JSON entry per\ncandidate with `id` and `diff_path` keys).\n",{"name":5,"metadata":44,"description":7},{"source":45,"version":46,"compatibility":47,"upstream_authors":48},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2601.04171","0.1.0","claude-code codex cursor gemini-cli opencode","Scale AI","main","a298c929b6cbd662e1fce54302ce520d5ceea1a5","ci\u002Fskills-allowlist\u002Frubric-verifier","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain","https:\u002F\u002Fgithub.com\u002FPrekzursil","2026-11-02 14:30:57",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add Prekzursil\u002Fagent-skills-toolchain --skill rubric-verifier",{"tool":61,"command":62},"bunx","bunx skills add Prekzursil\u002Fagent-skills-toolchain --skill rubric-verifier",{"tool":64,"command":65},"pnpm","pnpm dlx skills add Prekzursil\u002Fagent-skills-toolchain --skill rubric-verifier","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Fci\u002Fskills-allowlist\u002Frubric-verifier\u002FSKILL.md",true,[],[70,89,119,146,160,176],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":39},"01M6DF7D7478R55P46REYH4QAC","clarify-requirements","Resolve genuine pre-execution ambiguity by scanning repo context, generating 1-6 grounded options, and asking 1-3 focused questions via AskUserQuestion. NOT for mid-task use (injection risk); NOT when the goal is already unambiguous; use to disambiguate vague prompts before any file edits.","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Fworkspace-hooks\u002Fskills\u002Fclarify-requirements\u002FSKILL.md",[],[77,78,79,80,81,82,83,84,85,28,86,30,87,33,88],"clarify requirements","clarify","requirements","risk","options","task","prompts","goal","scanning","context","injection","file",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":100,"publishedAt":39},"01M6DF79CA4BHJS66J8EZDBPWJ","openmm-md","Run FREE, open-source, Windows-native GPU molecular dynamics via the openmm-md MCP (OpenMM + CUDA on the local NVIDIA GPU). Use for protein \u002F protein-ligand MD when you want a free stack or are on Windows without a Schrodinger license. Covers the full workflow (prepare, solvate, minimize, equilibrate, production, analyze, mmgbsa) AND an honest decision guide vs Schrodinger Desmond, including how to run Desmond legitimately on Linux or a cloud GPU with a real license. This is a deliberately LESSER free alternative and does NOT replace the schrodinger MCP tools. Do NOT use it to pick a free tool when a validated FEP+, WaterMap, IFD-MD, or Prime MM-GBSA result is actually required.","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Fmcp\u002Fopenmm-md-mcp\u002Fskill\u002Fopenmm-md\u002FSKILL.md",[95],{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[101,102,103,104,105,106,107,108,109,110,111,112,113,114,28,24,115,116,117,118],"openmm md","how","decision","pick","linux","analyze","tool","stack","open","NVIDIA","gpu","license","workflow","windows","molecular dynamics","local","do","MCP",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":131,"publishedAt":39},"01M6DF76C1MG85VEWP8VZCBNMN","visual-review","Take screenshots of web pages and UI using Playwright for visual review and iteration","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fvisual-review\u002FSKILL.md",[125,128],{"categoryNo":126,"categoryName":127,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":129,"categoryName":130,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000008","测试与质量",[132,133,134,135,136,137,138,139,140,141,102,142,143,144,145],"review","visual","visual review","pages","web","false","iteration","take","check","slides","ui","screenshot","playwright","screenshots",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":39},"01M6DF73AQVCBZKEN0YXEX9FXP","status","Diagnostic status report — shows metaswarm installation state, project setup, and potential issues","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fstatus\u002FSKILL.md",[],[148,153,154,155,156,157,158,159],"setup","report","project","installation","project setup","issues","state",{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":167,"publishedAt":39},"01M6DF6X6C2XB0P6GX76P7TTYV","start","Use when starting work on any task, when the user mentions metaswarm, or when the user wants to begin tracked development work","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fstart\u002FSKILL.md",[166],{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},[162,168,82,169,170,171,28,172,173,174,175],"start issue","issue","ready","work on issue","user","work","work on","development",{"skillNo":177,"name":153,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":181,"publishedAt":39},"01M6DF6QMJ9AJKFKHHKRT005PQ","Interactive project setup — detects your project, configures metaswarm, writes project-local files","https:\u002F\u002Fgithub.com\u002FPrekzursil\u002Fagent-skills-toolchain\u002Fblob\u002Fmain\u002Ftools\u002Feditor\u002Fmetaswarm\u002Fskills\u002Fsetup\u002FSKILL.md",[],[153,155,116,182,157,183],"files","interactive"]