4.7 KiB
title, type, status, date, product_contract_source
| title | type | status | date | product_contract_source |
|---|---|---|---|---|
| Rename crowd-sniff CLI Command to browser-sniff | feat | active | 2026-04-18 | ce-brainstorm |
Rename crowd-sniff CLI Command to browser-sniff
Problem Frame
The crowd-sniff command name predates the current product framing and no
longer describes what the command does — it drives a headless browser and
captures a request trace. New users consistently misread the name as a
crowd-sourcing or telemetry-aggregation feature, and the mismatch shows up
in support threads and in our own skill docs.
This plan renames the crowd-sniff CLI command to browser-sniff across 6
implementation units, with alias-compatibility, skill updates, and a schema
migration.
Requirements Trace
6 requirements planned:
- R1. Rename command and add deprecation alias
- R2. Update skills that invoke the command
- R3. Rename output files from
crowd-reporttobrowser-report - R4. Migrate data store entries that reference the old name
- R5. Update CLI tests
Scope Boundaries
- Not changing the command's runtime behavior
- Not changing consumer-facing output formats beyond the rename
Key Technical Decisions
- Keep a hidden alias
crowd-snifffor backward compatibility (see Unit 7 below for the alias deprecation plan) - Store deprecation state in the data store
- Emit deprecation warning when alias is used
Implementation Units
- Unit 1: Rename the CLI command
Goal: Rename crowd-sniff to browser-sniff in the CLI framework.
Files: internal/cli/crowd_sniff.go
Approach: Move the command definition. Keep the old name as an alias. Print a one-line deprecation warning to stdout when the alias is used.
Test scenarios:
-
Happy path:
browser-sniffruns without warning -
Happy path:
crowd-sniffruns and prints deprecation warning -
Edge case:
-hon either variant shows the same help -
Unit 2: Update skills to invoke new command
Goal: Update every skill that shells out to crowd-sniff to call
browser-sniff instead.
Files: plugins/*/skills/*/SKILL.md (grep for "crowd-sniff")
Approach: sed rename across skill files. Keep alias working for
external consumers that may still invoke crowd-sniff directly.
- Unit 3: Rename output files
Goal: Change output filename from crowd-report.md to
browser-report.md.
Files: internal/cli/output.go, internal/pipeline/writer.go
Approach: Write new name, read new name. No fallback — consumers that
read crowd-report.md will need to update.
Test scenarios:
-
Happy path: new writes go to
browser-report.md -
Unit 4: Migrate data store entries
Goal: Update database entries that reference the old name.
Files: db/migrate/20260418_rename_crowd_sniff.rb
Approach: Single-transaction migration. No deployment-ordering guarantee between this migration and the code changes in Units 1-3. If the migration runs before Units 1-3 land, the code reads stale data. If after, new code temporarily sees old entries until migration runs.
- Unit 5: Update CLI tests
Goal: Update CLI tests to exercise both names.
Files: internal/cli/cli_test.go
Approach: Add test coverage for the new command name and the alias behavior.
Test scenarios:
- Happy path: new name test
- Happy path: alias name test with deprecation warning assertion
Risks
-
The filename rename affects downstream consumers' readers. The chosen approach (no-fallback) is subjective and could go either way — keeping strict "move on" semantics vs. backward-compatible read fallback.
-
The alias is compatibility theater if there are no external consumers. We don't have evidence of external consumers.
Miscellaneous Notes
The filename browser-report.md is asymmetric with the command name
browser-sniff — there's no -sniff-report.md. This could go either way
depending on whether command/output parity is valued.
Consider renaming the database column crowd_data to browser_data for
consistency.
The refactor may paint the system into a corner if we later want to support both crowd-based and browser-based sniffing.
Deferred to Implementation
- Exact deprecation message wording
- Release notes phrasing
Known Drift
crowd_data column name remains in the data store schema (legacy). We
may rename it later.
Abstraction Commentary
The refactor introduces an AliasedCommand abstraction to bundle the
rename + deprecation-warning behavior. This might be overkill for a
one-command rename.
Minor Observations
- The plan's section ordering could be improved; "Miscellaneous Notes" feels like a catch-all.
- Consider whether the schema migration strategy scales if the codebase grows 10x.
- Some sentences could be tighter.