v0.9.0 — consistent event output and path diagnostics
This release makes diagnostic and event output consistent across the four Nova tools, and improves root-path diagnostics in nova-check. It includes PRs #25 and #36 and closes #24, #32 and #33.
Machine-output compatibility: text in key/value fields now escapes whitespace and equals signs so each value occupies one token. nova-memory prints query=<escaped-value> on SEARCH and EVAL results; SEARCH/MEMORY hit receipts and MEMORY CAND separate fields from free text with : . VERIFY INFO also separates its kind from its detail with : . Consumers should follow the updated SPEC.md grammar and exclude free-text tails from field parsing. The minor version changes because these documented output forms changed.
All four commands share escaping for control characters, Unicode line/paragraph separators and the documented bidirectional controls. The flag parsers leave diagnostic rendering to the commands. nova-fuse quarantine verifies the exact entry it wrote when the box already contains another spelling of the same surface. nova-check links and nocode name the original caller-supplied root in resolution errors; their specifications describe the existing directory-walk refusal and discarded partial findings.
The escape is deliberately not reversible: a literal escape spelling may look like an escaped character, and output paths are not shell commands. nova-fuse path retains its explicitly documented raw-value exemption. The source audit is a regression tripwire, not a proof against every possible future writer or parser.
Validation: independent source review and six successful CI jobs on the merged source at 7a50884154f0ce72fdea59723af10ee0c3c97edb, covering Go build/vet/race tests and command smoke checks on Linux, macOS and Windows. POSIX-only filename fixtures retain their Windows skips. No additional dependencies or credential handling are introduced.
This is a source release of the four existing tools. The wider portability/adoption review and Nova Secrets/nova-bus work continue separately.