Expand description
Fallow Impact: a local, opt-in value report.
Impact answers “what did fallow do for you?” rather than “what is wrong now?”. v1 is deliberately thin and honest. It renders three things:
- Surfacing: how many issues fallow is currently showing you.
- Trend: whether the issue count is moving the right way between recorded runs.
- Containment: how many times a pre-commit gate run blocked then cleared.
Everything lives locally in a single rolling file at .fallow/impact.json
(gitignored). Writes are best-effort and NEVER affect the exit code of any
command: a corrupt or unwritable store degrades to “no history”, never an
error.
v1.5 adds per-finding attribution on top: it credits genuinely RESOLVED
findings (code removed or refactored) and never counts a fallow-ignore
suppression as a win. It tells the two apart by capturing the present
suppression state each run and diffing a per-file frontier against the files
audit re-analyzed; a finding that merely moved (within a file, or to another
file even across separate commits) is not counted as resolved. Attribution is
a local-developer signal: it accrues where .fallow/impact.json persists
across runs, not in ephemeral CI runners.
Structs§
- Attribution
Input - Clone
Input - One clone group’s identity for a run: its content fingerprint plus the
absolute paths of its instances. Built by
collect_clone_findings. - Containment
Event - A blocked-then-cleared containment: fallow stopped a commit until it was fixed.
- File
Frontier - The last-known per-finding state of one file: the findings it carried and the suppression kinds present in it, captured the last time audit re-analyzed it.
- Finding
Input - One finding’s identity inputs for a run, in absolute-path form. Built by the
collect_dead_code_findings/collect_complexity_findingshelpers from the typed audit results, or by tests directly. - Frontier
Finding - One recorded finding’s line-independent identity inside a
FileFrontier. - Impact
Counts - Per-category issue counts captured at a recorded run.
- Impact
Record - One recorded audit run.
- Impact
Report - The rendered impact report, derived purely from the store (no analysis run).
- Impact
Store - The rolling impact store, persisted to
.fallow/impact.json. - Pending
Containment - A pre-commit gate run that blocked (verdict fail) and is awaiting a clean run.
- Resolution
Event - A genuinely-resolved finding, recorded for the recent-resolutions display.
- Trend
Summary - A computed trend between the two most recent records.
Enums§
- Impact
Report Schema Version - Wire-version discriminator for
ImpactReport. Independent from the globalSchemaVersion(the impact report versions on its own cadence) and from the on-diskSTORE_SCHEMA_VERSION(the persisted store shape versions separately). Serializes as a stringconstso JSON consumers can switch on it, matching the other independently-versioned envelopes (e.g.CoverageAnalyzeSchemaVersion). - Impact
Trend Direction - Direction of a count trend between two recorded runs.
- Scope
- Everything the per-finding attribution pass needs for one recorded run.
Functions§
- build_
report - collect_
clone_ findings - Collect clone-group identities
(fingerprint, instance paths)from a duplication report. The fingerprint is content-derived (dup:<hash>), so it is stable across pure relocation. - collect_
complexity_ findings - Collect line-independent complexity finding identities
(path, function name)from a health report. The function name is line-independent, so a function moving within its file keeps the same identity. - collect_
dead_ code_ findings - Collect line-independent dead-code finding identities from an analysis result.
- disable
- Disable Impact tracking. Retains existing history. Returns whether it was newly disabled (false if already off).
- enable
- Enable Impact tracking. Returns whether it was newly enabled (false if already on).
- load
- Load the store. A missing file is the normal “not enabled yet” case and
returns a default silently. A present-but-unparsable file is surfaced with
a one-line warning (rather than silently disabling tracking) and then
degrades to a default; the corrupt file is left on disk untouched, and
because
record_audit_runno-ops on a disabled store it is never overwritten, so re-runningfallow impact enableis a deliberate reset. - record_
audit_ run - Record an audit run into the rolling store. No-op when tracking is disabled or the store cannot be read. Best-effort throughout; never returns an error.
- record_
combined_ run - Record a whole-project combined run into the project track. No-op when tracking is disabled or the store cannot be read. Best-effort throughout; never returns an error and never affects the command’s exit code or output.
- render_
human - Render the report as human-readable text.
- render_
json - Render the report as JSON.
- render_
markdown - Render the report as Markdown (paste-ready for a PR description or standup).