Findings & issues

A static-analysis sweep that surfaces TODOs, secrets, oversized files, unprotected routes, and deprecated patterns.

Where it runs

services/sec_scanner.py runs on:

  • Project load.
  • Project rescan (top-bar Refresh).
  • Manual trigger from the panel.

Findings appear in the Findings tab in the right panel, with a badge showing the count by highest severity.

Severity levels

LevelMeaning
HighLikely security issue. Investigate now.
MediumLikely bug or technical-debt risk.
LowCode-quality issue.
InfoNotable but not actionable.

Filter checkboxes at the top of the panel toggle visibility per level. State is persisted per workspace.

What gets flagged

CategoryExample
Hard-coded secretsaws_access_key = "AKIA…" in source.
TODO / FIXME / XXX# TODO: handle null
Oversized filesFiles > 1 MB.
Unprotected routesFlask routes without auth decorator.
Deprecated patternsvar in JS, print debug statements in Python prod code.
Insecure cryptoMD5, SHA1, DES.
SQL injection patternsf-strings or + in SQL.
Eval / execeval(), exec(), Function().
Path traversalUnvalidated path concatenation.

Per-finding view

Click a finding to expand:

  • File:line link (jumps the editor).
  • Code preview with the offending line highlighted.
  • Severity badge.
  • Rule that matched.
  • Suggested fix (when available).
  • Ask agent to fix button — sends the finding as a task.

Suppressing findings

Add a comment on the offending line:

secret = "abc"  # krowforge: ignore-finding

Or add a project-level rule in .krowforge/findings-ignore.yaml:

ignore:
  - rule: hard_coded_secret
    paths:
      - tests/**

Suppressed findings still appear in the panel with a strikethrough but don't count toward the badge.

Refreshing

Findings update on every project rescan. Edits in the editor don't trigger immediate re-scan — use Refresh after substantial changes if you want fresh findings.