# 0.2 Changelog
Detailed patch notes for the `0.2.x` release line.
Root summary: [../../CHANGELOG.md](../../CHANGELOG.md)
When a patch introduces any new CLI surface, include a fenced `bash` command
example here and in the root changelog. New CLI surface includes commands,
subcommands, options, option values, and new supported option combinations.
Cleanup-only patches without CLI behavior changes should not include command
examples.
## 0.2.21 - 2026-06-19
### Added
- Adds `icq sns proposals --sort title` for local proposal title ordering over
bounded live rows and complete proposal snapshots.
- Adds `icq sns proposals --sort action` for local proposal action ordering
over bounded live rows and complete proposal snapshots.
- Adds `icq sns proposals --sort yes|no|total-votes` for local proposal
latest-tally ordering over bounded live rows and complete proposal snapshots.
```bash
icq sns proposals 1 --sort title --asc
icq sns proposals 1 --sort action
icq sns proposals 1 --sort total-votes
```
### Changed
- Applies the new title/action/tally sorts through the shared SNS proposal
view sorter so live rows and cache-backed rows use the same ordering path.
- Shares the proposal sort value strings used by clap help and `--asc` usage
errors so future sort additions do not drift across command text.
- Keeps cache identity unchanged: title/action/tally sorting remains a view
option over the same complete proposal snapshot.
- Keeps cache paths, report schemas, JSON row fields, and text table columns
unchanged.
## 0.2.20 - 2026-06-19
### Changed
- Shares SNS refresh-attempt metadata and progress helpers between neuron and
proposal cache refresh paths.
- Shares SNS snapshot cache path construction behind collection-specific
aliases for neuron and proposal cache paths.
- Shares SNS cache-list lookup flow while leaving neuron/proposal cache
scanners and report DTOs owned by their family modules.
- Shares SNS snapshot cache path scanning, header reads, and complete-cache
loading helpers while keeping family-specific schema versions and error
mappers explicit.
- Documents that scoped public boundary types use the repository section-style
type doc block.
- Applies boundary function documentation to the shared SNS cache path helper
module.
- Applies boundary function documentation and import cleanup to the shared SNS
cache summary helper module.
- Applies boundary function documentation and import cleanup to the shared SNS
cache storage helper module.
- Applies scoped-public type documentation to the shared SNS cache-status
lookup helper module.
- Aligns the SNS neuron cache model docs with the matching proposal cache
model docs.
- Aligns SNS neuron/proposal refresh-attempt context docs across the cache
families.
- Aligns SNS neuron/proposal complete-collection refresh runner and state docs
across the cache families.
- Documents SNS report assembly boundary structs and provenance helpers.
- Keeps CLI behavior, cache paths, cache identity, report schemas, text
output, and JSON fields unchanged.
## 0.2.19 - 2026-06-18
### Changed
- Centralizes the shared SNS neuron/proposal cache-status lookup flow into one
report helper using associated-type cache-family traits.
- Keeps neuron and proposal cache storage, refresh-attempt loading, summary
projection, report DTOs, and text rendering owned by their existing family
modules.
- Shares the identical neuron/proposal refresh-attempt status DTO while
preserving the existing public report type names.
- Removes duplicated id-versus-root cache-status branching without changing
CLI behavior, cache paths, cache identity, report schemas, text output, or
JSON fields.
## 0.2.18 - 2026-06-18
### Added
- Adds cache-backed `icq sns proposals --status decided` filtering over
complete proposal snapshots.
```bash
icq sns proposals 1 --status decided
```
### Changed
- Keeps `--status decided` on the cache-compatible proposal path and rejects
combining it with `--topic <topic>`, because bounded live topic queries do
not return a raw decided status enum that can be requested directly.
- Documents that adopted/rejected still use bounded live fallback until
proposal cache refresh can preserve an exact raw governance status.
- Keeps cache identity, cache paths, report schemas, JSON row fields, and text
table columns unchanged.
## 0.2.17 - 2026-06-18
### Added
- Adds `icq sns proposals --sort decided` to order proposal list views by
newest decision timestamp first, with open/undecided proposals ordered last.
- Adds `icq sns proposals --sort executed` to order proposal list views by
newest execution timestamp first, with unexecuted proposals ordered last.
- Adds `icq sns proposals --sort failed` to order proposal list views by
newest failure timestamp first, with non-failed proposals ordered last.
- Adds `--asc` and `--desc` to local `icq sns proposals --sort` modes,
defaulting to descending order.
### Changed
- Applies the new timestamp sorts through the shared SNS proposal view sorter,
so live bounded rows and complete proposal snapshots use the same local
ordering path.
- Keeps cache identity unchanged: sort remains a view option over the same
complete proposal snapshot, and direction is also a view option.
- Adds `sort_direction` to SNS proposal list text and JSON reports.
- Keeps cache paths, JSON row fields, and text table columns unchanged.
## 0.2.16 - 2026-06-18
### Changed
- Moves changelog process guidance out of root `CHANGELOG.md` into
`AGENTS.md`.
- Replaces raw SNS `neurons`/`proposals` nested command peeking with
clap-backed optional subcommand dispatch.
- Adds shared SNS nested dispatch command construction for `refresh` and
`cache` leaves.
- Shares SNS cached lookup and cache command setup across proposal, neuron
refresh, and cache runners.
- Removes the SNS neuron cache error re-export shim and imports the shared
cache-file error adapter directly.
- Folds the SNS neuron refresh-attempt timestamp helper into its owning attempt
model.
- Keeps CLI behavior, cache behavior, cache paths, report schemas, text output,
and JSON fields unchanged.
## 0.2.15 - 2026-06-18
### Changed
- Collapses over-fragmented one-function helper leaves into their owning
modules across NNS topology provider accumulation, topology refresh, topology
summary, NNS node/subnet runtime setup, SNS proposal cached reports, SNS text
helpers, and SNS params rendering.
- Flattens single-child or `mod.rs`-only directories into `module.rs` files for
NNS leaf runtime and cache errors, NNS topology read commands/runtime, NNS
topology gap/refresh/text modules, SNS source traits, SNS live fetch/client
modules, SNS cache reports, SNS text helpers, and the root output helpers.
- Keeps the source tree aligned with the repository rule that a module is
represented as either `module.rs` or `module/mod.rs` plus children, avoiding
`module.rs` alongside `module/`, empty source directories, and one-child
wrapper directories.
- Shares deterministic SNS cache-summary ordering across neuron and proposal
cache list reports.
- Shares SNS root-principal input normalization across neuron/proposal cache
status and cache lookup paths.
- Keeps CLI behavior, cache paths, cache identity, report schemas, text output,
and JSON fields unchanged.
## 0.2.14 - 2026-06-17
### Changed
- Moves deployed SNS list sorting from lookup helpers into the report view
layer alongside SNS neuron and proposal row sorting.
- Renames the remaining lookup helper module around stable SNS-W order id
assignment and lookup-local assigned-id ordering.
- Adds focused unit coverage for case-insensitive SNS name sorting with stable
id tie-breaking.
- Applies the code-hygiene module-header standard to SNS command and report
modules.
- Normalizes touched SNS report imports to use absolute `crate::...` paths
instead of `super::super`.
- Applies the same production-import standard to SNS command runtime, option
parsing, and clap spec modules.
- Collapses over-fragmented SNS parameter text row modules back into one row
owner and documents the module-granularity rule to avoid repeating that
pattern.
- Removes a single-use SNS neuron text wrapper module and calls the shared
neuron-id text helper directly from the list renderer.
- Collapses proposal cache status id/root/report helper leaves into the cache
status owner module.
- Collapses the one-impl-per-file live SNS source adapter leaves into the live
client owner while keeping network fetch helpers separate.
- Moves single-use SNS neuron/proposal refresh progress text helpers into the
paged collection fetch modules that use them.
- Moves single-use failed-attempt writers into their attempt write modules for
neuron and proposal caches.
- Collapses NNS topology summary text count/kind/coverage table leaves into
the summary text owner module.
- Moves NNS topology coverage percentage formatting into the shared percentage
helper and removes the wrapper health coverage leaf.
- Applies module boundary headers to the touched NNS topology text, capacity,
summary, and health modules.
- Brings SNS neuron cache attempt, collection, refresh, storage, and report
modules onto the same documented boundary style.
- Aligns touched SNS proposal cache attempt, collection, refresh, storage, and
report imports with the same absolute-path style.
- Normalizes SNS live fetch/convert/type imports and report request DTO imports
away from parent-chain paths.
- Normalizes SNS command-layer neuron/proposal imports away from parent-chain
paths without changing clap command definitions.
- Normalizes touched NNS topology text-rendering imports away from
parent-chain paths.
- Normalizes the remaining NNS topology production imports across build,
capacity, health, summary, provider, command, and refresh-run modules.
- Normalizes the remaining production parent-chain imports in subnet catalog
text helpers, NNS leaf cached command running, and IC registry projections.
- Normalizes the remaining test fixture imports away from parent-chain paths,
leaving the Rust tree free of `super::super` imports.
- Keeps CLI behavior, report schemas, cache behavior, JSON fields, and text
output unchanged.
## 0.2.13 - 2026-06-17
### Changed
- Moves SNS proposal cache-backed `--before` and status predicates into the
report view layer.
- Moves SNS proposal and neuron row sorting into the same report view layer,
keeping cache modules focused on loading, lookup, and snapshot projection.
- Removes cache-local proposal filter and neuron sort helper modules.
- Adds focused unit coverage for proposal view filters and neuron sort
tie-break behavior.
- Keeps CLI behavior, cache paths, cache identity, JSON schemas, and text
output unchanged.
## 0.2.12 - 2026-06-17
### Added
- Adds `--sort api|id|created` to `icq sns proposals`.
- Reports the selected proposal sort in text and JSON output, bumping the SNS
proposals report schema to version 4.
### Changed
- Applies proposal sorting locally after supported status and cursor filters.
- Applies cache-backed proposal sorting before `--limit`, so complete local
snapshots can return the newest proposals by id or creation time.
- Keeps proposal cache identity unchanged: sort, limit, verbosity, and text
formatting remain view options over the same complete snapshot.
- Keeps topic-filtered and adopted/rejected live fallback views bounded by the
API request, then sorts the returned rows locally.
### Examples
```bash
icq sns proposals 1 --sort created
icq sns proposals 1 --sort id --limit 50
```
## 0.2.11 - 2026-06-17
### Changed
- Adds `data_source` to SNS proposal list and detail reports so live API reads
and cache-backed reads are visible in both text and JSON output.
- Adds `cache_path` and `cache_complete` metadata when `icq sns proposals` or
`icq sns proposal` is served from a complete local proposal snapshot.
- Bumps the SNS proposal list and detail report schema versions for the added
JSON metadata fields.
- Centralizes SNS live/cache provenance construction and text rendering across
proposal and neuron reports.
- Cleans up proposal cache lookup/report imports and removes a single-use
proposal cache path wrapper.
- Splits SNS proposal cache text rendering into focused refresh, cache-list,
and cache-status modules.
- Keeps proposal cache identity unchanged: sort, limit, verbosity, and detail
selection remain view options over the same complete snapshot.
## 0.2.10 - 2026-06-17
### Changed
- Lets `icq sns proposal <id|root-principal> <proposal-id>` reuse an existing
complete proposal snapshot when it contains the requested proposal row.
- Falls back to the live proposal detail API when the complete cache or
proposal row is missing.
- Keeps malformed, incompatible, or unreadable cache errors visible instead of
hiding them behind live fallback.
### Examples
```bash
icq sns proposals refresh 1
icq sns proposal 1 42
```
## 0.2.9 - 2026-06-17
### Changed
- Splits SNS proposal cache-backed report building into focused load, filter,
and report projection modules.
- Splits SNS proposal complete-collection paging into focused fetch, progress,
attempt, and state modules.
- Splits SNS proposal cache status report building into focused id, root, and
report assembly modules.
- Moves proposal cache input lookup by SNS id or root principal into proposal
cache storage.
- Keeps cache paths, cache JSON shape, missing-cache refresh behavior, report
schemas, and CLI commands unchanged.
## 0.2.8 - 2026-06-17
### Changed
- Splits SNS proposal report DTOs into focused cache, refresh-attempt,
refresh-report, report, and row modules.
- Aligns SNS proposal report model organization with the existing SNS neuron
report model layout.
- Moves SNS proposal cache refresh orchestration out of the cache root module
and splits it into focused context, publish, and run modules that mirror SNS
neuron cache refresh structure.
- Splits SNS proposal cache storage into focused load, lookup, scan, and
summary modules.
- Splits SNS proposal refresh-attempt handling into focused model, read,
write, and failure modules.
- Moves proposal cache list and id lookup discovery onto the shared
deterministic snapshot scanner already used by SNS neuron caches.
- Keeps report schemas, field names, JSON output, text output, cache paths,
cache JSON shape, refresh behavior, and CLI behavior unchanged.
## 0.2.7 - 2026-06-17
### Changed
- Splits SNS proposal cache internals into focused model, path, storage,
attempt, paged-collection, and report-builder modules, including separate
cache-list, cache-status, and cached-report leaves.
- Centralizes SNS cache-file error formatting for neuron and proposal caches.
- Keeps proposal cache paths, refresh behavior, reports, and CLI output
unchanged.
## 0.2.6 - 2026-06-17
### Changed
- Adds a shared `cache_file::load_or_refresh_missing_cache` policy helper for
missing-cache refresh flow and standard refresh announcements.
- Migrates subnet catalog loads, cached NNS node/node-provider/node-operator/
data-center list reports, and SNS proposal auto-cache creation onto the
shared missing-cache policy.
- Keeps manual refresh commands, cache status commands, cache keys, and
non-missing cache error behavior unchanged.
- Documents and tests the deliberate SNS neuron exception: cache-backed neuron
sorts require an explicit complete refresh before local reads.
## 0.2.5 - 2026-06-17
### Added
- Makes `icq sns proposals <id|root-principal>` auto-create and reuse a
complete proposal snapshot for cache-compatible list views.
- Adds `icq sns proposals refresh <id|root-principal>` to fetch and publish a
complete local SNS proposal snapshot only after governance pagination is
exhausted.
- Adds `icq sns proposals cache list|status` to inspect complete proposal
snapshots and latest refresh-attempt metadata without live calls.
### Changed
- Splits SNS source data models into focused fetch, deployed-SNS list, token,
proposal, and neuron modules.
- Preserves the existing source model names and re-exports while replacing the
mixed `source/model.rs` bucket with `source/model/mod.rs` child modules.
- Splits live SNS proposal Candid types into focused request, topic, and data
modules.
- Aligns touched SNS lookup helpers with the code-hygiene module-header and
absolute-import standard.
- Keeps topic-filtered and adopted/rejected status-filtered proposal listings
on the existing bounded live path until cached proposal rows carry enough
source detail to reproduce those filters locally.
### Examples
```bash
icq sns proposals 1
icq sns proposals refresh 1
icq sns proposals cache list
icq sns proposals cache status 1
```
## 0.2.4 - 2026-06-17
### Changed
- Splits SNS source traits into focused list, token, params, proposal, and
neuron modules while preserving the existing source trait names.
- Splits the live SNS source implementations into matching focused modules
around the same `LiveSnsSource` type.
- Does not add or change CLI commands.
## 0.2.3 - 2026-06-17
### Changed
- Splits SNS clap value-enum plumbing into focused command-spec modules for
list sorting, neuron sorting, and proposal filters.
- Splits SNS report sort/filter model enums into focused list, neuron, and
proposal modules.
- Splits SNS report request model structs into focused list, lookup, neuron,
and proposal modules.
- Preserves the existing clap value parsers and report-model conversions while
replacing the mixed `values.rs`, `sorts.rs`, and `requests.rs` buckets with
`mod.rs` child modules.
### Examples
```sh
icq sns list --sort name
icq sns neurons 1 --sort stake
icq sns proposals 1 --topic governance
```
## 0.2.2 - 2026-06-16
### Added
- Adds `icq sns proposals --topic <topic>` to filter bounded live SNS
governance proposal listings by SNS topic.
- Sends the selected topic through the SNS governance `list_proposals`
`include_topics` request field while leaving `any` unfiltered.
- Adds `topic_filter` to SNS proposals text and JSON reports, bumping the
proposals report schema to version 2.
### Changed
- Tightens SNS proposal topic-filter request mapping by isolating the
report-level topic filter to SNS governance Candid topic conversion.
- Adds focused unit coverage for `any` leaving `include_topics` unset and a
concrete topic producing one SNS governance topic selector.
### Examples
```sh
icq sns proposals 1 --topic any
icq sns proposals 1 --topic governance
icq sns proposals 1 --topic treasury-asset-management --format json
```
## 0.2.1 - 2026-06-16
### Changed
- Centralizes cached NNS leaf cache errors behind one shared error type used by
node, node-provider, node-operator, and data-center reports.
- Centralizes cached NNS leaf JSON cache loading and refresh-cache writing,
replacing duplicated component-local cache mappers and write setup.
- Splits the shared NNS leaf cache error module into focused files while
preserving the repository module-layout rule.
- Moves SNS neuron owner/sort validation into the clap options layer and adds
invalid-argument coverage for owner-scoped cache-backed sorts.
- Tightens command and report test hygiene by localizing SNS command test
imports and replacing broad wildcard imports in focused NNS report tests.
### Examples
```sh
icq nns node list
icq nns node-provider refresh
icq sns neurons 1 --owner 2vxsx-fae --sort api
```
## 0.2.0 - 2026-06-16
### Added
- Adds `icq sns proposal <id|root-principal> <proposal-id> --ballots` to show
proposal ballot rows in text output.
- Keeps proposal ballot neuron IDs compact by default and shows full ballot
neuron IDs when `--verbose` is also passed.
- Bumps the direct SNS proposal report schema to include the `show_ballots`
display flag.
### Examples
```sh
icq sns proposal 1 387 --ballots
icq sns proposal 1 387 --ballots --verbose
```