Severity and verification are independent
This is the single most important thing to understand about a Myrqen report.verified
verified
Deterministic local or authorized evidence demonstrates the issue. Something was
requested, and something came back that proves it.
strong_evidence
strong_evidence
The root cause and a reachable path are strongly supported, but full proof is
unavailable or could not be obtained safely. This is the correct label when the only
remaining proof would have required a prohibited action.
needs_review
needs_review
Plausible, with insufficient validation. A static candidate nobody exercised stays
here, and the report says so rather than implying more.
What the CLI owns
Findings arrive from the host agent as untrusted-shaped data, so intake — not the agent — owns every decision that a report’s integrity depends on.1
Identity
The CLI assigns the id, in the form
MYR-001. A submission containing an id is
rejected.2
Redaction
Secret-shaped material is redacted on the way in. A finding that still contains a
live-looking credential after redaction is rejected, not stored. The result
reports how many redactions were applied.
3
Category normalization
Lowercased, whitespace and hyphens folded to underscores, non-alphanumerics stripped,
truncated to 120 characters.
4
Fingerprint and deduplication
The fingerprint is category + normalized location + root-cause identity. Concrete
identifiers are collapsed, so
/orders/12 and /orders/13 are one location, and
hex digests and bare numbers in the summary are normalized away.Submit the same root cause again with new evidence and it is merged as
corroboration rather than filed as a duplicate. The result says
action: "merged_as_corroboration" with deduplicatedInto naming the original.5
Severity capping
Two rules, both of which produce a warning rather than a silent change — see below.
Severity capping rules
Rule 1 — unvalidated criticals are leads.severity: "critical" with
verification: "needs_review" is reduced to high:
Severity critical with verification needs_review was reduced to high. Validate the issue to restore critical.Rule 2 — commonly over-rated categories need runtime evidence. These three categories are capped at
medium unless at least one piece of evidence has kind runtime or
identity_differential:
missing_security_headerverbose_error_messageoutdated_dependency_no_known_exploit_path
Severity for category ”…” was reduced to medium because no runtime or differential evidence was supplied.
Evidence kinds
Settling a static candidate
The static pass files candidates before the agent starts. Each one is a claim.Finding status and the fix history
Once remediation starts, a finding also carries a status:open · fix_suggested · fix_applied · fixed_verified · accepted_risk ·
false_positive
Each step appends to fixHistory with an action (suggested, applied, verified,
verification_failed, reverted), whether verification actually passed, the changed
files, and an optional note. A finding reaches fixed_verified only when a passing
verification was recorded. See Fix and retest.
What the static pass looks for
packages/scan ships rules across these categories. They are the starting point, not the
ceiling — the agent is expected to find root causes the static pass could not reach.
Reporting quality
The Agent Skill holds the agent to these:- Explain the root cause, not the category name.
- Say why you believe the finding, and label the evidence kind.
- Give the smallest durable fix, prefer the framework’s own safeguard, and name a regression test.
- Do not inflate severity because a category sounds serious.
- If you found nothing, say what you covered and what you could not reach.
Related
Finding schema
Every field, every rejection rule, and a worked example.
Reports
How findings are rendered, and what a share projection removes.