# Suggestions

`jadpo suggest` finds code that could use a standard type or a standard
operation, such as money held as a whole number of pence, or a loop that
adds up a list. It never edits: the edits stay with your agent, and, for
type clashes only, with `jadpo fix`. An agent runs it after writing code,
to catch hand-rolled money, durations, points and loops. It is also how
Jadpo learns which of its signals are right.

It formats first, as `jadpo fmt` does; a file with syntax errors stops it,
as it stops every command that writes source. Then it scans the program
graph: every type, field and entity, and every function, action and
constant body. Tests, fixtures and seeds are left out, since they follow
the code they test.

| Page | What it covers |
|---|---|
| [Signals](/docs/signals.md) | A signal is a pattern `jadpo suggest` looks for. |
| [Snippets and their canonical form](/docs/snippets-and-their-canonical-form.md) | A finding is about a snippet: the smallest expression, or member of a declaration, that holds the signal. |
| [The suggestions report](/docs/suggestions-report.md) | Findings are numbered S1, S2… in file order, each with its place, what it suggests, the signal and the snippet. |
| [Ignoring a suggestion](/docs/ignoring-a-suggestion.md) | When a finding is wrong for your code, keep it quiet with a reason. |
| [Teaching a miss](/docs/teaching-a-miss.md) | When the scan missed something, record it before you change the code. |
| [What is kept, and where](/docs/what-is-kept-and-where.md) | Every entry to share goes to `.jadpo/suggest_pending` with its kind: `found`, `accepted` or `ignored`. |
| [Sharing with Jadpo HQ](/docs/sharing-with-jadpo-hq.md) | Sharing is how Jadpo learns which signals are right: which findings people take, which they ignore and why, and what the scan missed. |
