Skip to content

detector-findings: let a producer name the remediation skill its findings need #3033

Description

@kyle-sexton

Graduated from the contract slice of #3031, pruned before merge per the topic-docs convention.

The gap

A conforming findings file reaches the review:fanout fix relay, and the relay decides how to remediate. For ai-slop:audit that decision is wrong for 14 of its 15 rules: the relay classifies its rows as cleanup-class and routes them to /simplify, a code-simplification skill that cannot apply prose rewrites and never loads plugins/ai-slop/skills/audit/reference/rewrite-guide.md, which is where that plugin's rewrite discipline actually lives.

The result is structurally true and semantically empty. A relay pass over an ai-slop findings file retires the findings while applying at most rule-utm-params — the one rule that is genuinely auto-applicable. #3031 narrowed the plugin's own claim to say exactly that, which is honest but leaves the underlying gap.

Why it is a convention change, not a plugin fix

The producer knows which skill can remediate its findings; the contract gives it nowhere to say so. Every adopter has the same shape available to it, so the fix belongs in docs/conventions/detector-findings/ rather than in any one plugin:

  • mutation-testing:audit — remediation is a covering test, already declared off-site via Action.
  • testing:audit — remediation is at Location but encodes oracle judgment.
  • ai-slop:audit — remediation is a guarded prose rewrite owned by the producer's own fix action.

Three adopters, three different remediation owners, one relay that assumes it knows.

Sketch, not a decision

Some way for a crosswalk row (or the findings file) to name the remediation skill, with the relay surfacing rather than mis-applying when the named skill is not the one it would have chosen. The existing off-site-remediation disposition (Action names the target, consumer surfaces rather than auto-applies) is the nearest precedent and may already be the answer with a wider reading.

Deliberately unscoped here. It touches a contract with three adopters and a consumer, and #3031 declined to smuggle it into an unrelated branch.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions