AGPL-3.0-or-later · forever.

showcase · tier 2 · builders

Release radar

Reads your dependencies’ release feeds and diffs against last run, so only new ships reach you.

No ping, nothing shipped. A ping, something worth a look. You stop checking tabs. · conformance-gated in nika-spec ↗ · re-proven at every push

The whole file

6 tasks · 3 waves · the plan falls out of the bindings, nothing is scheduled by hand.

t2-release-radar.nika.yamlsource
nika: v1workflow:  id: release-radar  description: "dependency release feed → diff vs last run → only the NEW ships"model: ollama/qwen3.5:4b   # local · zero key · swap for any provider in the catalogvars:  releases_feed: "https://github.com/tokio-rs/tokio/releases.atom"  state_path: "./state/release-radar.json"tasks:  # First run has no state file · recover to an empty list.  no_state:    invoke:      tool: "nika:jq"      args: { input: [], expression: "." }  previous:    invoke:      tool: "nika:read"      args: { path: "${{ vars.state_path }}" }    on_error:      on_codes: [NIKA-BUILTIN-READ-001]   # not-found ONLY · a permission error still fails loudly      recover: ${{ tasks.no_state.output }}  feed:    invoke:      tool: "nika:fetch"      args:        url: "${{ vars.releases_feed }}"        mode: feed    output:      entries: "[.items[] | {title, url, published}]"  fresh:    with:      previous: ${{ tasks.previous.output }}      entries: ${{ tasks.feed.entries }}    invoke:      tool: "nika:json_diff"      args:        before: "${{ with.previous }}"        after: "${{ with.entries }}"  digest:    with:      fresh: ${{ tasks.fresh.output }}      entries: ${{ tasks.feed.entries }}    when: ${{ size(with.fresh) > 0 }}    infer:      prompt: |        New releases appeared on our dependency radar (RFC 6902 patch        against last run) ·        ${{ with.fresh }}        Full current feed · ${{ with.entries }}        Write 3 bullets · what shipped · whether it looks breaking ·        what to check in our code.  save_state:    with:      entries: ${{ tasks.feed.entries }}    invoke:      tool: "nika:write"      args:        path: "${{ vars.state_path }}"        content: "${{ with.entries }}"        create_dirs: true        overwrite: trueoutputs:  new_entries:    value: ${{ tasks.fresh.output }}    description: "RFC 6902 ops · empty = nothing new since last run"

nika inspect · engine 0.105.0 · vendored graph, never re-derived

6 declared edges · 3 waves · the plan falls out of the bindings