handoff
Validates the implementer's handoff before the orchestrator dispatches the next role.
Usage
navori handoff <check|log-review> <feature> [--for scribe] [--dir <path>] [--cwd <checkout>] [--json]
Flags
--for scribe Beyond exists/parse/feature, also requires --cwd to match the handoff's worktree and branch, and validates every markdownRequests[].path. Without this flag it only checks what the orchestrator needs (exists, parses, belongs to the requested feature). --dir <path> Progress directory; defaults to .claude/progress. --cwd <checkout> Checkout to validate; defaults to the current directory. --json Emit the machine-readable contract. Examples
Before dispatching the scribe or the reviewer
navori handoff check checkout --json
The scribe's preflight before writing or committing
navori handoff check checkout --for scribe --cwd <checkout> --json
Notes
- The JSON carries `status` (ok/findings/error), `failures` and `warnings` with a `check` named after the rule (exists/parse/feature/worktree/branch/path for failures; head/legacy-md for warnings), and the `worktree`/`branch` the handoff registered.
- Exit codes match `receipt`: 0 ok, 2 findings (a check failed), 1 error (git or I/O, never a validation failure).
- `log-review <feature>` validates review_<feature>.json and appends findings with score >= 50 to findings.jsonl, skipping ones already recorded. It accepts --dir, --cwd and --json; it exits 1 when the sidecar is invalid.
- A missing `head` in the handoff still returns `ok`, only with a warning — it never blocks.
- With `harness.scribeOwnsMarkdown: false` it validates `impl_<feature>.md` instead (exists, not empty, has a `Status:` line), tied to the feature only by the file name.