v0.103.0
0.103.0 - 2026-07-13
Changed — BREAKING (the #75 window: the language tightens)
- exec semantics never fork on a YAML type again (#570 · spec#78) —
command:is argv-only (execve · per-element substitution: an
interpolated value can never break out); the NEWshell:field is
the explicit dangerous door (/bin/sh -c· pipes/redirects · the
blocklist attaches HERE). Exactly one of the two; a string
command:rejects with the migration teaching. - bare
${{ tasks.X }}is a validation error (NIKA-VAR-020) —
the task result is a record, the projection set (.output/.status/
.error/.duration_ms) is CLOSED; the envelope is not a value. - the gate algebra becomes normative (spec#78) — the when-status
pattern is a propagation CHOICE (default gate: failure cancels the
cascade · when-form: skip-once-then-continue), stated as a table. - the analyzer learns the argv world — lints 006/007 (timeout
wrapper · shard signature) read argv heads/tokens.
Added
nika/semanticDocument— the LSP's vendor-prefixed custom
request (capability-gated viaexperimental.nika): the canonical
graph_format: 1projection VERBATIM plus a span wrapper (task id →
declaring token range). One projector, every surface — the graph
moves to its own L0 membernika-graph(split from nika-schema
at the 15k cap; the CLI keeps the renderers and re-exports), so
inspect --format json, the LSP and future canvases read one truth.
What's Changed
- feat(nika-lsp): the three 557 lanes — tools whitelist · task members · schema context by @ThibautMelen in #559
- feat(pack): the vendoring lane materializes — sync-pack.sh + pack-resync heal by @ThibautMelen in #563
- feat(nika-lsp): the outline reads the whole file — vars, env, secrets join by @ThibautMelen in #561
- chore(pack): the pack follows the spec by @github-actions[bot] in #564
- fix(nika-lsp): the island speaks DAG-003 — declared edges, the carve-out, the free block by @ThibautMelen in #560
- feat(nika-lsp): the wave-2 lanes — for_each/when islands · the skills walk by @ThibautMelen in #562
- chore(pack): the pack follows the spec by @github-actions[bot] in #567
- fix(nika-lsp): the providers order answers to the spec token — and it was WRONG by @ThibautMelen in #566
- style: em dashes out, house middots in by @ThibautMelen in #568
- fix(ci): the deny leg drops the broken wrapper — binary direct, one lane by @ThibautMelen in #571
- feat!(exec): the language tightens — argv|shell by field · the envelope is not a value by @ThibautMelen in #570
- feat(lsp): nika/semanticDocument — one projector, every surface by @ThibautMelen in #565
Full Changelog: v0.102.0...v0.103.0