fabro/lib/apps/fabro-cli/src
Scott Werner 0e670e9234 Exempt ULIDs from entropy-based secret redaction
Fabro's run, session, turn, message and pair IDs are ULIDs. A ULID
occasionally has enough distinct characters to cross the secret
scanner's 4.5-bit entropy threshold, and the stream redaction then
rewrites the Web UI link to `/runs/REDACTED` and the run branch to
`fabro/run/REDACTED`. Two nightly releases in the last week failed on
`attach_replays_completed_detached_run` this way, and each fix so far
protected one field at a time.

Teach the entropy scanner the format instead: a token that is exactly
26 uppercase Crockford base32 characters and decodes to a timestamp
between 2020 and 2100 is an identifier, not a secret, and is left
alone wherever it appears. Trailing `-ULID`, `_ULID` and `=ULID`
segments are stripped before measuring, so `20261020-<id>` and
`<secret>-<id>` are handled, and the secret in the latter is still
found. The gitleaks credential patterns run on every token as before.

This mirrors detect-secrets' built-in UUID filter. A secret would have
to take exactly this shape and land in the date window to be missed,
which is about one in a hundred of the already rare tokens encoded as
26 uppercase base32 characters.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-20 14:51:14 -04:00
..
commands Exempt ULIDs from entropy-based secret redaction 2026-10-20 14:51:14 -04:00
shared Delete the checkpoint endpoint, fabro parse, and the fabro-workflow shims 2026-09-19 09:31:09 -04:00
sleep_inhibitor refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
args.rs Retry a finished run from the start 2026-10-01 11:14:45 -04:00
command_context.rs Implement the lithos CredentialProvider trait directly 2026-09-10 09:16:39 -06:00
gh.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
landing.rs Create CLI runs from immutable workflow intents 2026-09-01 16:14:34 -04:00
local_server.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
logging.rs refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
main.rs Publish a successful run from its run_finished hook 2026-10-01 13:00:26 -04:00
manifest_args.rs Simplify the CLI run-intent create path 2026-09-01 16:14:34 -04:00
mcp_servers.rs Move fabro-mcp's pebble mapping and test client into fabro-cli 2026-09-18 10:57:07 -04:00
server_client.rs Remove the [server.slatedb] settings and the SlateDB prefix probe 2026-09-18 16:00:24 -04:00
server_runs.rs Carry usage as lithos-llm's Usage and rename billing to usage 2026-09-14 12:31:34 -06:00
user_config.rs Use async reads during CLI intent preparation 2026-09-02 13:44:33 -04:00