navori
navori

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.