Design Spec: re suggest — Signal-Name Suggestions¶
Document Control¶
| Field | Value |
|---|---|
| Status | Implemented |
| Command surface | canarchy re suggest |
| Primary area | Analysis, CLI |
| Related specs | docs/design/reverse-engineering-helpers.md, docs/design/active-transmit-safety.md |
Goal¶
After re signals ranks changing bit-fields as signal candidates, an analyst
still has to name them. re suggest proposes names for those candidates using
offline heuristics by default, with an optional, off-by-default external-LLM
enrichment. It turns "here are 30 candidate fields" into "here are 30 candidate
fields with proposed names and where each name came from".
User-Facing Motivation¶
Naming is the slow, manual step of reverse engineering. Cross-referencing a known DBC, the J1939 SPN/PGN catalog, and the candidate's value behaviour automates the obvious cases and gives the analyst a ranked starting point for the rest — without sending anything off the machine unless they explicitly opt in.
Requirements¶
| ID | Type | Requirement |
|---|---|---|
REQ-SUG-01 |
Ubiquitous | The system shall provide re suggest <file> that ranks signal candidates (reusing re signals) and attaches one or more name suggestions to each, fully offline. |
REQ-SUG-02 |
Ubiquitous | Each suggestion shall carry a source (dbc / spn / pgn / heuristic / llm) and a confidence; the highest-confidence suggestion shall be reported as suggested_name / suggested_source. |
REQ-SUG-03 |
Optional feature | Where --reference-dbc <ref> is supplied, the system shall cross-reference the candidate's message id against that database's signals and rank them by bit-length match and observed-range plausibility. |
REQ-SUG-04 |
Ubiquitous | For J1939 candidates, the system shall name fields by bit-range overlap with the bundled decodable SPN catalog, falling back to the PGN name when no SPN overlaps. |
REQ-SUG-05 |
Optional feature | Where --llm <provider> is specified, the system shall enrich names via an external LLM, but only after explicit confirmation, and shall record an external_enrichment note plus an EXTERNAL_SERVICE_CALLED warning in the envelope. |
REQ-SUG-06 |
Unwanted behaviour | If --llm enrichment is not confirmed (no --yes, no CANARCHY_LLM_NONINTERACTIVE=1, and a non-YES reply), the system shall return LLM_CONFIRMATION_DECLINED and exit code 1, having sent nothing. |
REQ-SUG-07 |
Unwanted behaviour | If the --llm provider is unknown or unavailable, the system shall return LLM_PROVIDER_UNSUPPORTED (exit 1) or LLM_PROVIDER_UNAVAILABLE (exit 2). |
REQ-SUG-08 |
Ubiquitous | Only candidate metadata (arbitration ids, bit ranges, observed value ranges, change rate, and heuristic names) shall be sent to an LLM provider — never raw payload bytes. |
REQ-SUG-09 |
Ubiquitous | re suggest shall be exposed as the MCP tool re_suggest for the heuristic path only; the external --llm enrichment shall be CLI-only. |
Command Surface¶
canarchy re suggest (<file> | --file <file>) [--reference-dbc <ref>] [--limit <n>]
[--llm <provider> [--llm-model <model>] [--yes]] [--json|--jsonl|--text]
Suggestion Sources And Ranking¶
| Source | Basis | Confidence |
|---|---|---|
llm |
External provider proposal (opt-in) | 0.98 |
spn |
Bit-range overlap with a bundled decodable SPN | 0.70–0.95 (overlap fraction) |
dbc |
Signal on the candidate's message id, ranked by length/range fit | 0.50–0.90 |
pgn |
PGN name (coarse, when no SPN overlaps) | 0.40 |
heuristic |
Plain-English template from change behaviour | 0.20 |
SPN start/length are byte-based in the bundled catalog and converted to a
0-based bit range (start*8, length*8), which matches the little-endian bit
numbering the candidate extractor uses, so overlap is well defined.
Output Contracts¶
--json returns the envelope with candidates, each carrying suggestions,
suggested_name, and suggested_source; --jsonl streams the same; --text
renders a per-candidate suggestion table. When --llm is used, data also
carries external_enrichment and the warnings list includes
EXTERNAL_SERVICE_CALLED.
Error Contracts¶
| Code | Trigger | Exit code |
|---|---|---|
LLM_CONFIRMATION_DECLINED |
--llm not confirmed |
1 |
LLM_PROVIDER_UNSUPPORTED |
unknown --llm provider |
1 |
LLM_PROVIDER_UNAVAILABLE |
provider configured but missing credentials | 2 |
LLM_REQUEST_FAILED |
the external request failed | 2 |
DBC_LOAD_FAILED |
--reference-dbc could not be parsed |
3 |
Privacy And Boundaries¶
In scope: an offline heuristic naming engine and a confirmed, metadata-only LLM enrichment. Out of scope (v1): training/embedding-based matching, writing names back into a DBC, and any LLM use without explicit per-invocation confirmation.
Deferred Decisions¶
- Additional LLM providers beyond
anthropic. - Emitting a draft DBC from accepted suggestions.