sigil: interface and scanner fixes
2026-06-10
https://tinksoft.com/log/sigil-masks-and-wards/
----------------------------------

Sigil grew from about 770 lines to 1,900. Most of the work was in the interface
and scanner behavior.

## interface

The new terminal interface has four screens:

- scan progress
- editable search paths
- findings with a detail panel
- review and transfer to [Locket](/projects/locket/)

The previous review flow removed a finding from the screen without calling
Locket. That path was deleted. The current flow performs the transfer.

## masking

All findings now pass through one `Masked()` function before reaching the
terminal, interface, JSON report, or markdown report. Raw secret values are not
printed.

## scanner changes

- `.gitignore` rules are applied using a parser built on the Go standard library
- binary files, lockfiles, and `_test.go` files are skipped
- the scanner uses a 1 MB line buffer for minified files
- AWS-key detection now requires AWS context and ignores `go.sum` hashes

## fixes

The `--exit-code` flag parsed correctly but did not affect the process exit
status. This prevented the pre-commit hook from blocking commits. It now exits
non-zero when findings are present.

The Locket command path also had a quote-injection bug. Arguments are now passed
without shell interpolation.

Tests cover the Locket client, report formats, gitignore parser, and terminal
interface. Generated binaries and stale reports were removed from the repo.
