Repository navigation
Nen v0.15.1
v0.15.1 — 2026-09-28
Release unit for v0.15.0..v0.15.1: #267 (the delivery) and #268 (the release proposal).
Fixed
- parse — the futon advance-go gate fails closed. When the target's
nen/workflow.jsonhas nofuton.advanceGo, or declares it empty, a built-in default policy applies:mugetsu→process/library;kagutsuchi,getsuga→ any kind. Eachgategainssource: "declared" | "default", rendered as[declared]/[default]. A declared non-empty map replaces the default wholesale. Before, a repository without the key got no gate at all. - parse —
nen parse futonchecks the selector before anythen-clause refusal, and never fills one in. An empty selector is refused withcorrectedLine: null, so no corrected line can carry a publishing chain on the maintainer's behalf. - parse — a chain naming the same skill with the same target twice is refused. Targets are compared case-insensitively, and the corrected line drops every later repeat. Different targets stay allowed, and there is no step-order rule.
- release —
release.unitPathsentries may be{path, keys}: that exact JSON file may change only at those keys, written as dotted paths or RFC 6901 pointers. The file is read at the merge base and the head, with the path percent-encoded;#,?and%are refused in a keyed path. Both copies are parsed strictly (control characters, leading-zero numbers and invalid base64 read as unreadable) into a number-preserving tree, then diffed by segment path with container types and key sets. That catches added or removed keys, type changes (including at an ancestor of an allowed key) and precision loss. Unreadable content, or a keyed file with no content context, fails closed. Used byrelease unit-checkandpr merge --release-unit.release unit-check --jsonkeepsunitPathsas strings and addskeyedPathsandkeyScopedViolations.
Breaking / consumer notes
- No repin: the compatibility floor stays
0.7.gate.source,keyedPathsandkeyScopedViolationsare additive, and no contract version is bumped. Threenen parse futonbehaviours change in place, each toward refusal:- a repository with no
futon.advanceGonow gets gated steps under the default policy; - a duplicated chain step exits
2where it exited0; - an empty selector's
correctedLineisnullwhere it was a string namingcritical.
- a repository with no