omv-critic
Challenge the finding before report submission.
Invocation
/omv-critic <id>
Workflow
- Read
.omv/findings/<id>.yaml using contracts/evidence.v1.yaml as the local schema reference.
- If present, read
.omv/threatmaps/<id>.yaml using contracts/threat-map.v1.yaml as the local schema reference.
- If present, read
.omv/verifications/<id>.yaml using contracts/verification.v1.yaml as the local schema reference.
- Run or inspect
omv findings validate <id> and omv verification validate <id> when the sidecar exists.
- Evaluate argument quality separately from structural validation.
- Evaluate acceptance precedent (below) — evidence quality and acceptance odds are different axes.
- Output
reject_risk: low|medium|high and a recommended researcher_goal.
- For medium or high risk, list 3-5 likely CNA or maintainer rejection reasons and concrete strengthening actions.
Review Focus
- novelty and duplicate risk
- acceptance precedent (see below)
- affected version proof
- source -> sink -> guard clarity
- local observed result quality
- CVSS and impact overclaiming
- disclosure readiness
If reject_risk: high, do not recommend /omv-report yet.
Acceptance-Precedent Method
Ask three questions the machine gates cannot:
- Class precedent in this ecosystem: has this CNA/database accepted this
vulnerability class for library packages before (e.g. code execution in a
parser when input is attacker-controlled in realistic deployments)? No
precedent means higher bar: the finding needs an airtight untrusted-input
story, not just a reachable sink.
- Maintainer stance: does the project document the behavior as intended
(opt-in features, "power user" escape hatches, README warnings)?
By-design findings die at the maintainer even when technically real.
Check README/docs/issues for the project's stated position.
- Public discussion: verify the dedup block covers the discussion sources
(issues/PRs, commits, blogs — all six fields). An advisory-clean finding
with an unsearched issue tracker is an unreviewed novelty claim: do not
greenlight
/omv-report until those searches are recorded. A public
issue/PR disclosing the same bug caps reject_risk at high regardless of
evidence quality.
Recommended researcher_goal
Output one goal with reasoning:
VulDB: accepts publicly-disclosed and lower-precedent classes; entry is
near-guaranteed but researcher credit is thin. Fits evidence-complete
findings with weak CVE precedent.
GHSA: best when the package lives on GitHub and the maintainer is likely
to concur; draft advisories travel with a fix.
CVE: needs class precedent and a cooperative CNA; slowest, strongest.
advisory: direct maintainer contact first — often the fastest real fix
even when no identifier is ever issued.
triage: evidence or novelty is too weak for any submission; say so.
A finding blocked by public disclosure gets no goal recommendation — recommend
archival or a variant campaign instead (/omv-radar variant <id>).
Rejection-Risk Method
Frame findings as argument-quality gaps:
- Novelty: duplicate risk, same affected range, same fix, unresolved CNA path,
or public disclosure already on record.
- Evidence chain: missing file:line source, sink, guard, transform, or ThreatMap edge.
- Verification: failed, stale, or missing adversarial review when the user expects a high-confidence submission.
- Reproducibility: no user-reported local observation or unclear tested version.
- Severity: CVSS metric overclaim, missing preconditions, or unsupported impact claim.
- Precedent: class without prior acceptance, or maintainer-documented intent.
- Disclosure readiness: no contact plan, unclear vendor, or missing timeline.
Use generic, sanitized examples when explaining risk. Do not copy conclusions from a real vulnerability case unless the user supplied that finding as active research context.
1---2name: omv-critic3description: Performs adversarial pre-submission review of an Evidence.v1 finding plus optional ThreatMap.v1 and Verification.v1 sidecars. Use before `/omv-report` when the user wants likely CNA rejection reasons, report argument quality review, a reject_risk rating, or a recommendation of which researcher_goal (VulDB, CVE, GHSA, advisory) fits the finding.4---56# omv-critic78Challenge the finding before report submission.910## Invocation1112```text13/omv-critic <id>14```1516## Workflow17181. Read `.omv/findings/<id>.yaml` using `contracts/evidence.v1.yaml` as the local schema reference.192. If present, read `.omv/threatmaps/<id>.yaml` using `contracts/threat-map.v1.yaml` as the local schema reference.203. If present, read `.omv/verifications/<id>.yaml` using `contracts/verification.v1.yaml` as the local schema reference.214. Run or inspect `omv findings validate <id>` and `omv verification validate <id>` when the sidecar exists.225. Evaluate argument quality separately from structural validation.236. Evaluate acceptance precedent (below) — evidence quality and acceptance odds are different axes.247. Output `reject_risk: low|medium|high` and a recommended `researcher_goal`.258. For medium or high risk, list 3-5 likely CNA or maintainer rejection reasons and concrete strengthening actions.2627## Review Focus2829- novelty and duplicate risk30- acceptance precedent (see below)31- affected version proof32- source -> sink -> guard clarity33- local observed result quality34- CVSS and impact overclaiming35- disclosure readiness3637If `reject_risk: high`, do not recommend `/omv-report` yet.3839## Acceptance-Precedent Method4041Ask three questions the machine gates cannot:42431. **Class precedent in this ecosystem**: has this CNA/database accepted this44 vulnerability class for library packages before (e.g. code execution in a45 parser when input is attacker-controlled in realistic deployments)? No46 precedent means higher bar: the finding needs an airtight untrusted-input47 story, not just a reachable sink.482. **Maintainer stance**: does the project document the behavior as intended49 (opt-in features, "power user" escape hatches, README warnings)?50 By-design findings die at the maintainer even when technically real.51 Check README/docs/issues for the project's stated position.523. **Public discussion**: verify the dedup block covers the discussion sources53 (issues/PRs, commits, blogs — all six fields). An advisory-clean finding54 with an unsearched issue tracker is an unreviewed novelty claim: do not55 greenlight `/omv-report` until those searches are recorded. A public56 issue/PR disclosing the same bug caps reject_risk at high regardless of57 evidence quality.5859## Recommended researcher_goal6061Output one goal with reasoning:6263- `VulDB`: accepts publicly-disclosed and lower-precedent classes; entry is64 near-guaranteed but researcher credit is thin. Fits evidence-complete65 findings with weak CVE precedent.66- `GHSA`: best when the package lives on GitHub and the maintainer is likely67 to concur; draft advisories travel with a fix.68- `CVE`: needs class precedent and a cooperative CNA; slowest, strongest.69- `advisory`: direct maintainer contact first — often the fastest real fix70 even when no identifier is ever issued.71- `triage`: evidence or novelty is too weak for any submission; say so.7273A finding blocked by public disclosure gets no goal recommendation — recommend74archival or a variant campaign instead (`/omv-radar variant <id>`).7576## Rejection-Risk Method7778Frame findings as argument-quality gaps:7980- Novelty: duplicate risk, same affected range, same fix, unresolved CNA path,81 or public disclosure already on record.82- Evidence chain: missing file:line source, sink, guard, transform, or ThreatMap edge.83- Verification: failed, stale, or missing adversarial review when the user expects a high-confidence submission.84- Reproducibility: no user-reported local observation or unclear tested version.85- Severity: CVSS metric overclaim, missing preconditions, or unsupported impact claim.86- Precedent: class without prior acceptance, or maintainer-documented intent.87- Disclosure readiness: no contact plan, unclear vendor, or missing timeline.8889Use generic, sanitized examples when explaining risk. Do not copy conclusions from a real vulnerability case unless the user supplied that finding as active research context.