Skip to content

Add the assisted false-positive feedback flow - #8

Merged
MHohlios merged 4 commits into
mainfrom
feature/review-feedback
Aug 6, 2026
Merged

Add the assisted false-positive feedback flow#8
MHohlios merged 4 commits into
mainfrom
feature/review-feedback

Conversation

@MHohlios

@MHohlios MHohlios commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

What and why

False-positive reports are the metric Reviso is tuned against, but filing one
means talking about your own code — high friction, and a real disclosure risk
if a tool automates it carelessly. This PR ships the assisted flow under a
written privacy contract:

  • docs/feedback.md — the contract. Never automatic; one outbound
    channel (this repo's issue tracker); the model never composes an outbound
    payload; code context only through a user-authored browser form. SECURITY.md
    now lists any outbound write beyond it as an in-scope vulnerability.
  • skills/reviso/feedback/build-payload.sh — the deterministic builder.
    Tier-1 fields are enums or strictly patterned tokens (no free text
    possible); backstops veto secrets, high-entropy tokens, code fences, diff
    markers, path-shaped fields, and oversize payloads. --send posts the
    exact printed payload, pinned to Vyttle-LLC/reviso. Tier 2 never posts —
    it prints a prefilled false-positive-form URL for the browser.
  • Step 6 / Stage 7 in both commands: offered only after a report, run
    only when the user names a finding, payload shown verbatim before any
    send, gh deliberately not pre-approved so the permission prompt is the
    last gate.
  • eval/corpus/README.md documents eval-candidate issues as the
    corpus intake queue; the false-positive form's lens dropdown now matches
    the shipped dimension set.
  • Version 0.2.0 — the plugin.json version field gates client updates,
    so the bump is what makes this merge reach installed plugins. README now
    tells users how to update.

Repo-side (already done, not in the diff): created the false-positive,
missed-finding, and eval-candidate labels — the issue templates
referenced them but they didn't exist, so template labels were silently
dropped.

Tested: 24-case battery over the builder — every enum rejection, every
backstop, determinism of reruns, and the long-path-doesn't-false-veto case.
All markdown lint-clean; detectors clean.

Does this change what Reviso says to people?

  • No, this doesn't affect review output

(The one-line feedback offer after a report is new wording, but no lens,
exclusion list, rubric, or detector changed — findings are identical.)

Checklist

  • Commits are signed off (git commit -s)
  • One concern per PR
  • Docs updated if behaviour changed

docs/feedback.md is the contract the assisted false-positive flow must
implement: never automatic, one outbound channel, deterministic
allowlist-built payloads, code context only through a user-authored
browser form. README links it, SECURITY.md makes any outbound write
beyond it an in-scope vulnerability, and the false-positive form's lens
dropdown now matches the shipped dimension set.

Signed-off-by: Michael Hohlios <michael@vyttle.com>
Implements the docs/feedback.md contract:

- skills/reviso/feedback/build-payload.sh — deterministic payload builder.
  Tier-1 fields are enums or strictly patterned tokens; free text cannot
  enter the payload. Backstops veto secrets, high-entropy tokens, code
  fences, diff markers, path-shaped fields, and oversize payloads. --send
  posts the exact printed payload, pinned to Vyttle-LLC/reviso. Tier 2
  never posts: it prints a prefilled false-positive form URL.
- Step 6 / Stage 7 in the commands: feedback only when the user names a
  finding, payload shown before any send, gh deliberately not pre-approved.
- eval/corpus/README.md documents eval-candidate issues as the intake queue.
- docs/feedback.md and README updated from "planned" to shipped; CHANGELOG.

Also created the false-positive / missed-finding / eval-candidate labels on
the GitHub repo — the issue templates referenced them, but they didn't
exist, so template labels were silently not applied.

Signed-off-by: Michael Hohlios <michael@vyttle.com>
The plugin.json version field gates client updates: installed plugins
only see a new version when it changes, no matter what lands on main.
CHANGELOG's Unreleased section becomes the 0.2.0 release notes.

Signed-off-by: Michael Hohlios <michael@vyttle.com>
Signed-off-by: Michael Hohlios <michael@vyttle.com>
@MHohlios
MHohlios merged commit e0435da into main Aug 6, 2026
2 checks passed
@MHohlios
MHohlios deleted the feature/review-feedback branch August 6, 2026 00:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant