Triage Finding
Objective
Triage existing security findings against the current repository using static code evidence.
Return one evidence-backed verdict per supplied finding: confirmed, not_actionable, or needs_review.
For confirmed and needs_review findings, also assign a discrete exploitability stack rank inside that verdict's own queue.
This skill is for backlog burn-down.
It starts from findings the user already has, such as SARIF results, CVEs, advisories, scanner tickets, bug bounty reports, or security-scan finding artifacts.
It is not a repository-wide scan, dynamic validation run, fix implementation, dashboard, or queue manager.
Backlog Burn-Down Scope
Treat multiple supplied findings as one backlog-reduction problem, not as a set of unrelated one-off triages.
The goal is to turn noisy existing finding sources into a ranked, evidence-backed action queue while preserving one result per input for auditability and reporting.
For now, run the workflow inline in the current thread, but structure the work like a backlog pipeline:
- Build the normalized triage item list for the whole supplied or imported collection before assigning verdicts.
Here, normalize means: assign
triage_item_id, preserve source ids and references, extract the fields in the Inputs section below, and record missing fields as proof gaps without inventing scanner, severity, remediation, or generated scan fields.
- Triage each normalized item using static evidence and keep one output result per supplied finding.
- Rank the
confirmed and needs_review results as an action queue for backlog burn-down.
- Do not perform deduplication in this skill.
If duplicate-looking inputs are present, keep one result per supplied finding; deduplication belongs in a separate workflow.
- Do not spawn subagents, use a subagent queue, or use deep triage mode until a future implementation explicitly adds those mechanics.
Finding Schema Decision
Do not use the completed-scan findings.json schema as the canonical data shape for input normalization.
That schema describes completed security-scan output.
It requires generated fields such as scanId, findingId, occurrenceId, fingerprints, severity, remediation, provenance, and at least one location.
Most triage inputs are incomplete external claims, and forcing them into that schema before investigation would require inventing stable IDs, severity, remediation, or locations.
Use the schema only as an optional compatibility source when the user supplies an existing security-scan findings.json artifact.
In that case, extract the available fields into the triage normalization record and preserve the original IDs as source identifiers.
The triage result contract is defined in references/triage-result-contract.md.
Static Assessment Guidance
Use the shared static finding assessment reference in references/static-finding-assessment.md for the reusable evidence work: source/control/sink tracing, smallest useful evidence search, reachability, boundary inputs, counterevidence, proof gaps, and static confidence.
This skill still owns external finding intake, the backlog triage verdicts, the first-pass no-runtime constraint, and the output contract.
Missing Input
If no finding is supplied, do not inspect the repository, do not classify a verdict, and do not emit the security-triage-finding/v0 JSON contract.
Ask the user to provide a finding to triage.
Name the supported formats: SARIF results, CVE/GHSA or advisory descriptions, scanner tickets, bug bounty report snippets, security-scan finding artifacts, or a freeform vulnerability claim.
If useful, ask for the repository path or affected file/component at the same time.
Inputs
Start by extracting:
- repository path or current working repository
- input id, scanner id, SARIF rule/result id, CVE/GHSA id, ticket id, or security-scan
findingId/occurrenceId when present
- title or short claim
- source type:
sarif, cve, advisory, scanner_ticket,
bug_bounty, security_scan_finding, freeform, or unknown
- vulnerable component, package, API, file, route, class, function, or service
- claimed attacker-controlled source
- claimed sink or broken security control
- affected version, path, configuration, or deployment surface
- required preconditions and claimed impact
- existing code references, evidence, and counterevidence supplied by the user
Ask a follow-up question only when the repository path or finding claim is too vague to inspect.
Otherwise, inspect the repository and preserve missing fields as proof gaps.
Repository Security Policy Gate
Before static evidence analysis, check whether the target repository has a SECURITY.md file at or above the repository root.
If present, read the repository's SECURITY.md before tracing source, control, sink, reachability, or assigning a verdict.
Treat SECURITY.md as the primary local source for supported security boundaries, trusted inputs, supported versions, disclosure scope, hardening controls, and out-of-scope surfaces.
Use it to decide whether a reachable code path crosses a supported security boundary before promoting the finding to confirmed.
If no SECURITY.md is present, record that absence as a proof gap and continue with the next-best local policy evidence.
Workflow
- Normalize each supplied finding into a triage item.
- Assign
triage_item_id values such as triage-001.
- Preserve external source ids in
input_id.
- Do not invent scanner fields, generated scan ids, severity, or
remediation just to satisfy another schema.
- Resolve the repository path and git revision when available.
- Apply the Repository Security Policy Gate.
- Look for
SECURITY.md in the target repository before source/control/sink
tracing or reachability analysis.
- If present, read it and record the relevant policy basis for supported
security boundaries, trusted inputs, supported versions, hardening
controls, and out-of-scope surfaces.
- If absent, record the absence as a proof gap and continue with available
product docs, threat models, disclosure policy, and local comments.
- If
SECURITY.md and available local product evidence do not establish the
intended product surface, untrusted input boundary, or trusted
operator/developer inputs, ask targeted operator-context questions before
assigning a verdict when the answer would materially affect the result.
- Follow
references/static-finding-assessment.md to inspect the smallest relevant static evidence set and record source, control, sink,
reachability, boundary inputs, counterevidence, proof gaps, and static confidence.
- Classify the product surface and trust boundary.
- Identify whether the path is a CLI, library API, hosted service, local
developer UI, MCP/tooling surface, example/demo, test/fixture, docs,
generated code, vendored code, or unknown surface.
- Check package manifests, exports, binary entrypoints, deployment files,
product docs,
SECURITY.md, disclosure policy, threat models, and nearby
comments when they are standard or local to the claim.
- Record whether the claimed source is untrusted input in the intended
product model, or trusted operator/developer configuration.
- Trace the claimed source, control, sink, and reachable path.
- Treat scanner/advisory prose as a claim, not as proof.
- Start from the cited code, manifest, version range, or supplied evidence.
confirmed already requires reachability.
When claiming reachability, record reachability anchor evidence: the concrete caller, entrypoint, route, command, package export, deployment path, dependency edge, or other repo fact that proves the vulnerable condition is connected to the product surface.
- Record supporting evidence.
- Record counterevidence that weakens or defeats the claim.
- Record unresolved proof gaps instead of smoothing them over.
- Apply the verdict rules.
- Assign exploitability stack ranks for
confirmed and needs_review
findings.
- For
confirmed findings, add owner hints after verdicting when local ownership evidence is easy to derive.
- Build one valid
security-triage-finding/v0 result using the contract in references/triage-result-contract.md.
- Present a concise Markdown summary of the triage results as the final response.
Include the full
security-triage-finding/v0 JSON contract in a fenced block when the user asks for the raw result or wants to copy it.
Surface and Boundary Gate
Before assigning confirmed, classify the finding's intended product surface and trust boundary.
Inspect the smallest available evidence for:
- shipped or runtime surfaces, such as package manifests, exports, binary entrypoints, server routes, deploy configs, container/build files, public API docs, or product docs
- non-product or trusted surfaces, such as examples, tests, fixtures, docs snippets, local-only developer tools, generated/vendor code, internal harnesses, CLI configs, plugin/test utilities, or deliberately code-executing extension points
- repository security policy or threat model, such as
SECURITY.md,
docs/security, supported-versions docs, disclosure policy, threat models, or comments that define trusted inputs and supported boundaries
A reachable dataflow is not enough. confirmed requires both:
- the vulnerable condition is statically reachable under stated preconditions
- the source crosses a security boundary that the project appears to support
If the code is reachable only through trusted configuration, local developer interfaces, examples, tests, fixtures, or demo applications, do not mark confirmed unless static evidence shows that surface is shipped, deployed, documented for untrusted users, or bypasses a documented hardening/auth boundary.
When the boundary classification is policy-dependent or unclear, prefer needs_review and put the ambiguity in proof gaps.
Verdict Rules
Use confirmed only when static evidence connects the vulnerable condition to reachable code under stated preconditions and the source crosses an intended security boundary for a shipped, deployed, or documented product surface.
Dependency or component presence by itself is not enough.
Use not_actionable only when static evidence positively defeats the finding, for example:
- the vulnerable package or feature is absent
- the locked version is outside the affected range
- the claimed code path is unreachable in the repository's configuration
- the dangerous sink is protected by a relevant guard, validator, sanitizer, or authorization control
- the scanner claim points at dead, test-only, generated, vendored, or unused code and repository evidence supports that conclusion
- the relevant code is example-only, fixture-only, docs-only, local-only, or not shipped in the affected artifact
- the source is trusted configuration, a CLI argument, a local-only tool input,
or an intentionally code-executing extension point under the repository's documented security model
Use needs_review when evidence is insufficient, ambiguous, runtime-only, policy-dependent, environment-dependent, or blocked by missing repository context.
Prefer needs_review over speculative confirmed or not_actionable verdicts.
Exploitability Stack Ranking
After verdicting, assign discrete exploitability stack ranks separately for confirmed and needs_review findings.
confirmed findings use the confirmed rank queue and rank labels P0,
P1, P2, etc. P0 is the most exploitable confirmed finding in this result set.
needs_review findings use the needs_review rank queue and the same P0, P1, P2, etc. labels. P0 is the highest-exploitability unresolved finding to review first.
- Rank labels intentionally do not encode the verdict queue.
Use
rank_queue to distinguish confirmed priorities from needs-review priorities.
not_actionable findings are not stack-ranked; set their rank queue and rank to null.
Rank by exploitability, not by scanner severity alone.
Prioritize findings with clearer attacker reachability, lower required privileges, fewer preconditions, more direct source-to-sink control, weaker or absent guards, and more reliable static evidence that the exploit path can be exercised.
Use claimed impact or scanner severity only as a final tiebreaker when exploitability is otherwise equal.
Keep findings in input order in the JSON result.
Use the stack-rank fields to show review/remediation priority instead of reordering the results.
Owner Hints
For confirmed findings only, add a concise owner hint after assigning the verdict and exploitability stack rank when local ownership evidence is easy to derive.
Prefer CODEOWNERS or OWNERS evidence when available.
If ownership is not clear, omit the owner hint rather than guessing.
Owner hints are routing metadata only: do not use ownership to influence verdict, confidence, boundary assessment, or exploitability rank.
The security-triage-finding/v0 contract does not define a dedicated owner field.
Do not add undocumented fields to the security-triage-finding/v0 payload.
Put owner-hint text in existing Markdown output, evidence, or recommended-next-step text when it is useful.
Output Contract
The Markdown result should include:
- finding title or input id
- verdict and confidence
- short rationale
- affected locations, if any
- reachable path, if established
- boundary assessment: product surface, source trust level, policy basis, and whether a supported security boundary is crossed
- exploitability stack rank for
confirmed and needs_review findings
- evidence
- counterevidence
- proof gaps
- owner hint for
confirmed findings, when available
- recommended next step
security-fix-finding handoff when verdict is confirmed
The security-triage-finding/v0 JSON payload must include:
schema_version: "security-triage-finding/v0"
- repository path and revision when available
- one result object per input finding, in input order
source_type on every finding result, using one of the input source types listed above
boundary_assessment on every finding result, even when fields are unknown
exploitability_stack_rank on every finding result
Default to a concise Markdown summary.
The intended default UX is:
- generate the valid
security-triage-finding/v0 result internally
- respond with the concise Markdown summary
Include the fenced JSON block when the user explicitly asks to see or copy the raw result contract.
Fix-Finding Handoff
For confirmed findings, include a concise prompt-ready handoff for security-fix-finding with:
- vulnerable source, sink, or broken control
- attacker-controlled input and preconditions
- exact code references
- required security invariant
- recommended fix boundary
- proof gaps that
security-fix-finding should preserve or validate
Do not invoke security-fix-finding unless the user explicitly asks to continue into fixing.
Hard Rules
- Do not run tests, builds, applications, PoCs, exploit checks, or dynamic validation.
- Do not edit repository files while triaging.
- Do not search for unrelated vulnerabilities.
- Do not claim exhaustive repository coverage.
- Do not claim runtime validation happened.
- Do not mark
confirmed solely because attacker-influenced data reaches a dangerous sink; first establish the relevant product surface and supported security boundary.
- Do not use deep triage mode unless a future implementation explicitly adds it.
- Do not deduplicate, group, canonicalize, or drop duplicate-looking inputs in this skill; keep one result per supplied finding.
- Do not hide proof gaps or turn missing evidence into confidence.
1---2name: security-triage-finding3description: Use when the user supplies existing security findings or vulnerability reports — SARIF results, CVE/GHSA or advisory text, scanner tickets, bug bounty reports, or finding artifacts — and wants static repo-impact triage. Do not use for discovery, duplicate-bug triage, validation, or fixes.4---56# Triage Finding78## Objective910Triage existing security findings against the current repository using static code evidence.11Return one evidence-backed verdict per supplied finding: `confirmed`, `not_actionable`, or `needs_review`.12For `confirmed` and `needs_review` findings, also assign a discrete exploitability stack rank inside that verdict's own queue.1314This skill is for backlog burn-down.15It starts from findings the user already has, such as SARIF results, CVEs, advisories, scanner tickets, bug bounty reports, or security-scan finding artifacts.16It is not a repository-wide scan, dynamic validation run, fix implementation, dashboard, or queue manager.1718## Backlog Burn-Down Scope1920Treat multiple supplied findings as one backlog-reduction problem, not as a set of unrelated one-off triages.21The goal is to turn noisy existing finding sources into a ranked, evidence-backed action queue while preserving one result per input for auditability and reporting.2223For now, run the workflow inline in the current thread, but structure the work like a backlog pipeline:2425- Build the normalized triage item list for the whole supplied or imported collection before assigning verdicts.26 Here, normalize means: assign `triage_item_id`, preserve source ids and references, extract the fields in the Inputs section below, and record missing fields as proof gaps without inventing scanner, severity, remediation, or generated scan fields.27- Triage each normalized item using static evidence and keep one output result per supplied finding.28- Rank the `confirmed` and `needs_review` results as an action queue for backlog burn-down.29- Do not perform deduplication in this skill.30 If duplicate-looking inputs are present, keep one result per supplied finding; deduplication belongs in a separate workflow.31- Do not spawn subagents, use a subagent queue, or use deep triage mode until a future implementation explicitly adds those mechanics.3233## Finding Schema Decision3435Do not use the completed-scan `findings.json` schema as the canonical data shape for input normalization.3637That schema describes completed security-scan output.38It requires generated fields such as `scanId`, `findingId`, `occurrenceId`, fingerprints, severity, remediation, provenance, and at least one location.39Most triage inputs are incomplete external claims, and forcing them into that schema before investigation would require inventing stable IDs, severity, remediation, or locations.4041Use the schema only as an optional compatibility source when the user supplies an existing security-scan `findings.json` artifact.42In that case, extract the available fields into the triage normalization record and preserve the original IDs as source identifiers.43The triage result contract is defined in `references/triage-result-contract.md`.4445## Static Assessment Guidance4647Use the shared static finding assessment reference in `references/static-finding-assessment.md` for the reusable evidence work: source/control/sink tracing, smallest useful evidence search, reachability, boundary inputs, counterevidence, proof gaps, and static confidence.4849This skill still owns external finding intake, the backlog triage verdicts, the first-pass no-runtime constraint, and the output contract.5051## Missing Input5253If no finding is supplied, do not inspect the repository, do not classify a verdict, and do not emit the `security-triage-finding/v0` JSON contract.5455Ask the user to provide a finding to triage.56Name the supported formats: SARIF results, CVE/GHSA or advisory descriptions, scanner tickets, bug bounty report snippets, security-scan finding artifacts, or a freeform vulnerability claim.57If useful, ask for the repository path or affected file/component at the same time.5859## Inputs6061Start by extracting:6263- repository path or current working repository64- input id, scanner id, SARIF rule/result id, CVE/GHSA id, ticket id, or security-scan `findingId`/`occurrenceId` when present65- title or short claim66- source type: `sarif`, `cve`, `advisory`, `scanner_ticket`,67 `bug_bounty`, `security_scan_finding`, `freeform`, or `unknown`68- vulnerable component, package, API, file, route, class, function, or service69- claimed attacker-controlled source70- claimed sink or broken security control71- affected version, path, configuration, or deployment surface72- required preconditions and claimed impact73- existing code references, evidence, and counterevidence supplied by the user7475Ask a follow-up question only when the repository path or finding claim is too vague to inspect.76Otherwise, inspect the repository and preserve missing fields as proof gaps.7778## Repository Security Policy Gate7980Before static evidence analysis, check whether the target repository has a `SECURITY.md` file at or above the repository root.81If present, read the repository's `SECURITY.md` before tracing source, control, sink, reachability, or assigning a verdict.8283Treat `SECURITY.md` as the primary local source for supported security boundaries, trusted inputs, supported versions, disclosure scope, hardening controls, and out-of-scope surfaces.84Use it to decide whether a reachable code path crosses a supported security boundary before promoting the finding to `confirmed`.85If no `SECURITY.md` is present, record that absence as a proof gap and continue with the next-best local policy evidence.8687## Workflow888901. Normalize each supplied finding into a triage item.90 - Assign `triage_item_id` values such as `triage-001`.91 - Preserve external source ids in `input_id`.92 - Do not invent scanner fields, generated scan ids, severity, or93 remediation just to satisfy another schema.9402. Resolve the repository path and git revision when available.9503. Apply the Repository Security Policy Gate.96 - Look for `SECURITY.md` in the target repository before source/control/sink97 tracing or reachability analysis.98 - If present, read it and record the relevant policy basis for supported99 security boundaries, trusted inputs, supported versions, hardening100 controls, and out-of-scope surfaces.101 - If absent, record the absence as a proof gap and continue with available102 product docs, threat models, disclosure policy, and local comments.103 - If `SECURITY.md` and available local product evidence do not establish the104 intended product surface, untrusted input boundary, or trusted105 operator/developer inputs, ask targeted operator-context questions before106 assigning a verdict when the answer would materially affect the result.10704. Follow `references/static-finding-assessment.md` to inspect the smallest relevant static evidence set and record source, control, sink,108 reachability, boundary inputs, counterevidence, proof gaps, and static confidence.10905. Classify the product surface and trust boundary.110 - Identify whether the path is a CLI, library API, hosted service, local111 developer UI, MCP/tooling surface, example/demo, test/fixture, docs,112 generated code, vendored code, or unknown surface.113 - Check package manifests, exports, binary entrypoints, deployment files,114 product docs, `SECURITY.md`, disclosure policy, threat models, and nearby115 comments when they are standard or local to the claim.116 - Record whether the claimed source is untrusted input in the intended117 product model, or trusted operator/developer configuration.11806. Trace the claimed source, control, sink, and reachable path.119 - Treat scanner/advisory prose as a claim, not as proof.120 - Start from the cited code, manifest, version range, or supplied evidence.121 - `confirmed` already requires reachability.122 When claiming reachability, record reachability anchor evidence: the concrete caller, entrypoint, route, command, package export, deployment path, dependency edge, or other repo fact that proves the vulnerable condition is connected to the product surface.123 - Record supporting evidence.124 - Record counterevidence that weakens or defeats the claim.125 - Record unresolved proof gaps instead of smoothing them over.12607. Apply the verdict rules.12708. Assign exploitability stack ranks for `confirmed` and `needs_review`128 findings.12909. For `confirmed` findings, add owner hints after verdicting when local ownership evidence is easy to derive.13010. Build one valid `security-triage-finding/v0` result using the contract in `references/triage-result-contract.md`.13111. Present a concise Markdown summary of the triage results as the final response.132 Include the full `security-triage-finding/v0` JSON contract in a fenced block when the user asks for the raw result or wants to copy it.133134## Surface and Boundary Gate135136Before assigning `confirmed`, classify the finding's intended product surface and trust boundary.137138Inspect the smallest available evidence for:139140- shipped or runtime surfaces, such as package manifests, exports, binary entrypoints, server routes, deploy configs, container/build files, public API docs, or product docs141- non-product or trusted surfaces, such as examples, tests, fixtures, docs snippets, local-only developer tools, generated/vendor code, internal harnesses, CLI configs, plugin/test utilities, or deliberately code-executing extension points142- repository security policy or threat model, such as `SECURITY.md`,143 docs/security, supported-versions docs, disclosure policy, threat models, or comments that define trusted inputs and supported boundaries144145A reachable dataflow is not enough. `confirmed` requires both:1461471. the vulnerable condition is statically reachable under stated preconditions1482. the source crosses a security boundary that the project appears to support149150If the code is reachable only through trusted configuration, local developer interfaces, examples, tests, fixtures, or demo applications, do not mark `confirmed` unless static evidence shows that surface is shipped, deployed, documented for untrusted users, or bypasses a documented hardening/auth boundary.151152When the boundary classification is policy-dependent or unclear, prefer `needs_review` and put the ambiguity in proof gaps.153154## Verdict Rules155156Use `confirmed` only when static evidence connects the vulnerable condition to reachable code under stated preconditions and the source crosses an intended security boundary for a shipped, deployed, or documented product surface.157Dependency or component presence by itself is not enough.158159Use `not_actionable` only when static evidence positively defeats the finding, for example:160161- the vulnerable package or feature is absent162- the locked version is outside the affected range163- the claimed code path is unreachable in the repository's configuration164- the dangerous sink is protected by a relevant guard, validator, sanitizer, or authorization control165- the scanner claim points at dead, test-only, generated, vendored, or unused code and repository evidence supports that conclusion166- the relevant code is example-only, fixture-only, docs-only, local-only, or not shipped in the affected artifact167- the source is trusted configuration, a CLI argument, a local-only tool input,168 or an intentionally code-executing extension point under the repository's documented security model169170Use `needs_review` when evidence is insufficient, ambiguous, runtime-only, policy-dependent, environment-dependent, or blocked by missing repository context.171Prefer `needs_review` over speculative `confirmed` or `not_actionable` verdicts.172173## Exploitability Stack Ranking174175After verdicting, assign discrete exploitability stack ranks separately for `confirmed` and `needs_review` findings.176177- `confirmed` findings use the `confirmed` rank queue and rank labels `P0`,178 `P1`, `P2`, etc. `P0` is the most exploitable confirmed finding in this result set.179- `needs_review` findings use the `needs_review` rank queue and the same `P0`, `P1`, `P2`, etc. labels. `P0` is the highest-exploitability unresolved finding to review first.180- Rank labels intentionally do not encode the verdict queue.181 Use `rank_queue` to distinguish confirmed priorities from needs-review priorities.182- `not_actionable` findings are not stack-ranked; set their rank queue and rank to `null`.183184Rank by exploitability, not by scanner severity alone.185Prioritize findings with clearer attacker reachability, lower required privileges, fewer preconditions, more direct source-to-sink control, weaker or absent guards, and more reliable static evidence that the exploit path can be exercised.186Use claimed impact or scanner severity only as a final tiebreaker when exploitability is otherwise equal.187188Keep findings in input order in the JSON result.189Use the stack-rank fields to show review/remediation priority instead of reordering the results.190191## Owner Hints192193For `confirmed` findings only, add a concise owner hint after assigning the verdict and exploitability stack rank when local ownership evidence is easy to derive.194195Prefer CODEOWNERS or OWNERS evidence when available.196If ownership is not clear, omit the owner hint rather than guessing.197Owner hints are routing metadata only: do not use ownership to influence verdict, confidence, boundary assessment, or exploitability rank.198199The `security-triage-finding/v0` contract does not define a dedicated owner field.200Do not add undocumented fields to the `security-triage-finding/v0` payload.201Put owner-hint text in existing Markdown output, evidence, or recommended-next-step text when it is useful.202203## Output Contract204205The Markdown result should include:206207- finding title or input id208- verdict and confidence209- short rationale210- affected locations, if any211- reachable path, if established212- boundary assessment: product surface, source trust level, policy basis, and whether a supported security boundary is crossed213- exploitability stack rank for `confirmed` and `needs_review` findings214- evidence215- counterevidence216- proof gaps217- owner hint for `confirmed` findings, when available218- recommended next step219- `security-fix-finding` handoff when verdict is `confirmed`220221The `security-triage-finding/v0` JSON payload must include:222223- `schema_version: "security-triage-finding/v0"`224- repository path and revision when available225- one result object per input finding, in input order226- `source_type` on every finding result, using one of the input source types listed above227- `boundary_assessment` on every finding result, even when fields are unknown228- `exploitability_stack_rank` on every finding result229230Default to a concise Markdown summary.231The intended default UX is:2322331. generate the valid `security-triage-finding/v0` result internally2342. respond with the concise Markdown summary235236Include the fenced JSON block when the user explicitly asks to see or copy the raw result contract.237238## Fix-Finding Handoff239240For `confirmed` findings, include a concise prompt-ready handoff for `security-fix-finding` with:241242- vulnerable source, sink, or broken control243- attacker-controlled input and preconditions244- exact code references245- required security invariant246- recommended fix boundary247- proof gaps that `security-fix-finding` should preserve or validate248249Do not invoke `security-fix-finding` unless the user explicitly asks to continue into fixing.250251## Hard Rules252253- Do not run tests, builds, applications, PoCs, exploit checks, or dynamic validation.254- Do not edit repository files while triaging.255- Do not search for unrelated vulnerabilities.256- Do not claim exhaustive repository coverage.257- Do not claim runtime validation happened.258- Do not mark `confirmed` solely because attacker-influenced data reaches a dangerous sink; first establish the relevant product surface and supported security boundary.259- Do not use deep triage mode unless a future implementation explicitly adds it.260- Do not deduplicate, group, canonicalize, or drop duplicate-looking inputs in this skill; keep one result per supplied finding.261- Do not hide proof gaps or turn missing evidence into confidence.