Releases: supernovae-st/nika-vscode
Release list
0.103.0 — lockstep on the language-tightens wave
Lockstep on engine v0.103.0 (BREAKING: the language tightens — command: argv-only · shell: the explicit door · bare ${{ tasks.X }} an error · the gate algebra normative). Editor-side: the double voice dies (#105 — capability-yield: the server's capabilities silence their client twins, crash restores them) · the 0.103 starters/authoring re-projection (#108) · the lens-path law.
Install: VS Marketplace · Open VSX
0.102.0 — the doors and their one source
Lockstep on the engine's 0.102 wave (the editor speaks the language — the LSP arc lands server-side). Extension-side: the guided-edit doors arc (#89 contract · #91 flow · #93 armor · #94 agent tools) and the SSOT consolidation (#96 — guided-edit registers project from nika-spec, the 25 hand-written snippets die, SSOT.md becomes a gated ledger). README language map (#95); two spec-parity CI gates (#90/#92).
Install: VS Marketplace · Open VSX
0.101.0 — lockstep on the sovereign-lane wave
Lockstep on the engine's 0.101 wave — the sovereign lane ships whole: every engine release binary now carries local-infer (nika model pull → serve → workflow infer, no cloud, no build wall). Rides: the doors-speak pass (#86 — lens titles become calls, one vocabulary module).
Install: VS Marketplace · Open VSX
0.100.2 — the run door heals on 0.100 engines
Worth the immediate patch: the ▶ Run door and the infer-permits CTA passed --no-color — a clap error on every 0.100 engine (#84). --color never everywhere now (it was always the umbrella, 0.99 included). Real-engine suites re-proven: 590 green against the 0.100.0 Cellar. README learns the lens doors.
Install: VS Marketplace · Open VSX
0.100.1 — the verb doors ship
The verb line becomes a door
- One lens above every bare
<verb>:key (#82) —◆ tooloninvoke:(spec starters + every builtin THIS binary carries, args skeleton from the tool's own schema);◇ ▷ ✦ startersoninfer:/exec:/agent:. Picking replaces the verb block — one surgical edit, one undo. - Starters are spec-truth — projected from nika-spec
stdlib/verb-starters-v0.1.yaml; the projector refuses starters the conformance oracle rejects. Builtins stay engine-truth (catalog --tools --json).
Install: VS Marketplace · Open VSX
0.100.0 — the version line joins the engine's wave
The 0.100/0.101/… line starts here: engine · extension · client-sdk · agents kit ship the same number per wave.
The envelope reads top-to-bottom
- Every lens on the line it serves (#80) — the GitHub door above
nika:, Check · DAG · Run aboveworkflow:, Explain abovedescription:; the status row stays abovetasks:. One pure placement law (core/lensAnchors, 10 tests). - The model line is a door (#79) —
⇄ modelopens the embedded catalog picker (local-first) and surgically rewrites exactly that line.
Install: VS Marketplace · Open VSX
v0.97.4 · 2026-07-07
Evidence reaches the editor — reviewed, then released
Engine 0.97.0 shipped « the run becomes evidence »; this release turns
it on in the editor — after the adversarial pass the trust arc had
never had (two HIGHs died pre-ship, the law pays again):
- Verify Journal — one click asks the engine itself (
nika trace verify): intact with its head, BROKEN at its exact line, or
unchained (pre-0.96 — nothing to verify, nothing to distrust). - Reproduce Run — the determinism taxonomy in the Runs view:
reproduced·NONDETERMINISTIC(the flaky task, named) ·
authored·environment. Reads two journals; never re-runs,
never spends. - One head everywhere — the run's verdict banner, the tooltip and
the run report carry the engine's printed chain head. - The drift badge tells a re-encode from an edit — the Runs view
foldsworkflow_sha256_lf(engine #247's client twin): a CRLF↔LF
save no longer cries « definition drifted ».
Fixed (the adversarial pass)
-
A stopped run no longer wears the previous run's chain head —
the anchor only prints at run END, so Stop/crash/older-engine runs
inherited the last run's head on their banner; the anchor now clears
at spawn (HIGH). -
A one-line torn journal is UNREADABLE, never a green — the
client walk returned « torn » with the constant genesis head on a
file the engine rejects; torn now requires a verified prefix,
mirroring the engine's exact hardening (HIGH). -
The client chain walk matches the engine on CRLF journals — a
re-encoded journal verified INTACT by the engine read BROKEN in the
tooltip (\rhashed into the line); and broken line numbers are
FILE lines, blanks counted — client and engine name the same line. -
Banner/tooltip carry the engine's full 32-hex anchor (16 was the
forgeable width the engine's own review rejected) · a nameless
recorded journal says so in the Reproduce picker instead of listing
the whole workspace as siblings · the « Prove it ran » walkthrough
step owns its media page. -
Verify Journal (nika ≥ 0.97) — one click on any recorded run asks
the engine (nika trace verify) for its authoritative chain verdict:
OK with the full head for the anchor comparison, or the broken line
as a warning. The tooltip's instant client walk and the engine's own
word are now both one gesture away. -
Reproduce Run (determinism check) (nika ≥ 0.97) — right-click any
recorded run, pick another journal of the same workflow, and the
engine's taxonomy answers WHY they diverge: reproduced ·
NONDETERMINISTIC (same def+inputs, different output) · authored ·
environment · status-changed — with the engine/platform attestation
compared. The verdict opens as a markdown preview. -
The anchor closes in the tooltip — an intact run now shows its
chain head ($(verified-filled) chain intact — head …) in the Runs
view: compare it against the one the run printed to close the anchor
loop by eye. Torn tails say "crash, not tampering".
📦 VS Marketplace · Open VSX · CHANGELOG · engine: docs.nika.sh/changelog/releases
v0.97.3 · 2026-07-07
The second adversarial pass — the review reviews the reviewers
Two more agents attacked the never-reviewed halves of the F5/OTel/rates
arc (client) and the nika dap server itself. The server's protocol
layer came back hardened (~30 hostile inputs, zero panics); the client
side pays its findings now:
- Preflight rates were dead on the wire —
parseCheckReportnever
copiedpricing: the exact class that hitrequirementsone review
earlier, recurred one field later. Fixed — and a full-wire
round-trip ratchet now types the fixtureRequired<CheckReport>,
so any future field the parser forgets fails at compile time AND at
test time. The class is structurally dead. - The generated launch.json no longer hijacks F5.
workflow: "${file}"reached the resolver before variable substitution, read as
a literal path, missed the name, and silently replayed the newest run
of ANY workflow. Resolution now runs in the substituted hook — and
the newest-overall fallback is gone when the workflow's name is
known: F5 says « no recorded run ofname» instead of silently
debugging a foreign journal (fork's never-silent-runs law, applied
to the other direction). - Quoted workflow names match their journals —
workflow: "deploy #7"was truncated at the#by the line-scan extractor
(the real parser handled it), so such workflows could never
exact-match in the F5 direction. - OTel export trusts the engine's own answer — the exported path
is parsed from the engine'sexported → …line instead of assumed
from a suffix rule (a custom.jsonltraces glob made the assumed
path point at the raw journal); a timed-out export no longer shows
an empty error. - Rates guard hardened (
typeof, an omitted key renders nothing —
never$undefined) · journal scan cap raised 100 → 500 stat-first.
📦 VS Marketplace · Open VSX · CHANGELOG · engine: docs.nika.sh/changelog/releases
v0.97.2 · 2026-07-06
The backlog paid — the review's remaining five
- Fork resolves by NAME, asks on ambiguity. The journal stamps its
workflow name; fork now requires the exact match when present — an
active sibling sharing task ids can no longer hijack the fork, several
declaring files QuickPick instead of first-wins, and a no-match refusal
names the workflow it looked for. The overlap heuristic survives only
for nameless (truncated/foreign) journals. - The cross-run grid stops mixing siblings — membership is the exact
workflow name too, and the window is honest: stat-first newest-first,
folding lazily until 12 members (the old shape folded an arbitrary
100-file window eagerly — the « last 12 » could omit the actual newest
runs, and 88 folds were thrown away). - Answering warns before killing a live run — the notification click
superseded any in-flight run silently; it now asks first. - Unknown pause modes degrade to the input box — never the Yes/No
picker (a boolean fails a choice gate every time); a future engine
mode gets a string the gate validates against its own contract.
Riding the same train
- Preflight rates (nika ≥ 0.96) — every model row in the flight plan
shows what it will pay per token ($2/$10 per 1M, from the engine's
vendored 602-model catalog) beside its key verdict. An UNKNOWN price
renders nothing — never $0. - The AI authoring prompt teaches proof — agents are now told to
quote trace evidence (trace outputs·trace peek --raw· replay
undernika dap·trace exportto OTel), not vibes. - Runs view: the time-travel action rides inline — the ▷ debug icon
sits on every recorded run beside diff. - Fix: F5 via the generated launch.json snippet — the snippet's
replay: ""beat the trace the provider had just resolved (first F5
died oncannot read journal ''). Resolved paths now win over
empty/missing ones; user config keeps the cosmetics. (Landed minutes
after 0.97.1 was cut — rides this train.)
📦 VS Marketplace · Open VSX · CHANGELOG · engine: docs.nika.sh/changelog/releases
v0.97.1 · 2026-07-06
The adversarial review pays — nine fixes in the day's own release
An end-of-day adversarial review of everything 0.97.0 shipped found
real edges in the untested seams; all confirmed on the code, fixed and
pinned the same day:
- Housekeeping can no longer strand an answerable run. The trace
pruner was blind to what a journal IS: it could delete a PAUSED run's
journal (the resume substrate) — including the very--resumetarget
the click was about to consume, since it pruned BEFORE the spawn.
Paused journals now survive any ranking (tail check), and the
imminent spawn's resume target is explicitly protected. - An answer now targets its own pause. The paused notification
re-derived the journal at click time from a live map that EVERY run
overwrites — a mock preview run between pause and answer could
swallow a real human approval into a mock journal. The paused record
now carries its journal path, captured at pause time; answering the
same pause twice warns before re-running gated side effects. - Typed answers survive. The engine JSON-parses answer values —
answering123to an input gate arrived as a Number and failed the
gate's string contract; numeric-looking choices could never match.
Input and choice answers are JSON-encoded (text stays text). - Preflight's engine contract is alive.
parseCheckReportnever
copied therequirementssection — the whole engine-stated-contract
adapter was dead code on the wire. One copy, one wire-level test. - Diff v2 names the culprit, not a victim. First-divergence ranked
by clocks mixed across the two runs — a cascade-cancelled task (no
compare clock) fell back to the OLDER run's epoch and always outranked
the actual failure. Compare-run clocks only now. - Drift truth only speaks about its own workflow (the sha check now
requires the trace to match the active document), the runs-tree cache
keys on mtime+size (same-tick appends on coarse filesystems), the
.gitignore nudge re-reads before writing (a stale snapshot could
revert edits made while the toast waited), and terminal runs (run
fallback · golden test) honor the spawn-cwd law so their journals
land beside the workflow.
Time travel, for real
- F5 time-travel debugger (nika ≥ 0.96) — breakpoints in your
.nika.yaml, F5 replays the newest recorded run of that workflow under
the real VS Code debugger: step forward AND backward through task
settles, recorded outputs in the Variables pane,continueruns to the
next breakpointed task. Replay never re-executes — stepping back is
free. Every run in the Runs view gains "Debug This Run (Replay · Time
Travel)" (journal→source matched by workflow name; QuickPick on
ambiguity). A walkthrough step teaches it. - Export to OpenTelemetry (nika ≥ 0.96) — a context action on any
recorded run projects its journal to OTLP/JSON lines: drag into Jaeger
UI, or POST to Aspire/Grafana/Langfuse (cost ridesgen_ai.usage.cost).
Local file, zero collector. An engine older than the verb is told to
upgrade instead of a clap parrot. - Runs view discoverability — Run History and Diff join the view
title bar; Preflight and Run History join the welcome capabilities grid.
📦 VS Marketplace · Open VSX · CHANGELOG · engine: docs.nika.sh/changelog/releases