verify · git:20261105.582c0e7 · 2026-11-05 · sha256 eb2819db2a129c0c
verify git:20261105.582c0e7A
Immutable. This exact content never changes and is served at /api/v1/blob/eb2819db2a129c0c.
---
name: verify
description: Proves a change works before it is called done, and reports the evidence on a ladder from "said" to "ran". Use when you are about to say "done", "fixed", "works" or "ready", when asked to check or test a change, or before opening a pull request.
---
# Verify a change
## 1. Run the checks
```bash
npm run verify
```
It runs every check CI runs (about fifteen seconds) and records the pass. Fix every failure; never weaken a check to pass it. Done when it prints `Verified.`, or says only docs changed and there is nothing to check.
## 2. Prove the change itself
The checks prove nothing broke. Now prove the change does what was asked, with the proof its kind needs:
| Change | Proof |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Command behaviour (flags → API call → output) | A test next to the command that runs `program.parseAsync(['node', 'td', ...])` and fails without the change (see `src/commands/label/label.test.ts`). Undo the change once and see it fail. |
| A helper in `src/lib/` | A test next to it that calls the exported function. |
| `--json` / `--ndjson` output | `JSON.parse` the captured output and assert the whole shape with `toEqual`. Scripts and agents read it. |
| Errors, exit codes, argv handling | Assert the `CliError` code. For global flags and the JSON error envelope of the built CLI, `src/index.integration.test.ts` runs `dist/index.js`. |
| A command or flag added, renamed or removed | `SKILL_CONTENT` in `src/lib/skills/content.ts` updated and `npm run sync:skill` run; verify's skill-sync step checks the result. `node dist/index.js <command> --help` shows the change. |
| A real Todoist answer | `npm run build`, then `node dist/index.js <command>`, only on a test account. Check `node dist/index.js auth status` first. Ask before writes. |
| Terminal output (colours, spinners, a11y) | Run the command in a real terminal, with and without `--accessible`. Read it as a screen reader would: names first, ids after, no meaning carried by colour alone. |
| Agent tooling (`.agents/scripts`) | Its tests in throwaway repos, plus one real run of the hook or command. |
| Docs only | Every path and command named exists (`ls`, `npm run`). |
Check the proof can fail: undo the change and see the test fail, or run the scenario that used to break. Done when you have seen it fail and then pass. A refactor is the exception: its proof is the pinned tests passing before and after (see `refactor`).
## 3. Report the evidence
Rate every claim on this ladder:
1. **said:** stated without looking.
2. **cited:** the line that shows it (`path:line`).
3. **traced:** followed the code path through each call.
4. **ran:** a test or command executed the code and showed the result.
5. **seen:** observed in the running CLI, in a real terminal or against a real account.
Claims about behaviour ("fixed", "works", "safe", "no regressions") need **ran** or higher. A fact the code shows needs **cited**. Anything lower goes under **Not verified**, with why.
For a change to code others rely on (shared helpers in `src/lib/`, command registration and global flags in `src/index.ts`, an `@doist/cli-core` or `@doist/todoist-sdk` upgrade), name the one fact that makes it safe, and how you proved it.
Report format:
```
What changed: <one line>
Verified:
- <claim> — ran: <command or test>, <what it showed>
Not verified:
- <claim> — <why>
Safe because: <the one fact>, <how you proved it> (only for shared code)
```