# 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.39 - 2026-06-20
### Added
- Adds `icq nns proposal list --sort reward-status` for local NNS proposal
reward-status label ordering.
- Adds `icq nns proposal list --sort deadline` for local NNS proposal voting
deadline ordering.
- Adds `icq nns proposal list --sort voting-power` for local NNS proposal
total potential voting power ordering.
- Defaults reward-status sorting to ascending, matching status/topic/text sort
direction behavior.
- Keeps deadline and voting-power on the existing descending default used by
timestamp and numeric proposal sorts.
- Reuses the existing NNS proposal view sorter for live rows and complete
proposal snapshots without changing cache identity, cache paths, report
schemas, or JSON row fields.
- Updates README and command help to include the new sort values.
```bash
icq nns proposal list --sort reward-status
icq nns proposal list --sort deadline
icq nns proposal list --sort voting-power
```
## 0.2.38 - 2026-06-20
### Added
- Adds `icq sns proposals --sort topic` for local proposal topic-label
ordering over complete SNS proposal snapshots.
- Defaults topic sorting to ascending, matching other text-like SNS proposal
sort keys.
- Applies topic sorting before `--limit`, keeping cache identity, cache paths,
report schemas, and JSON row fields unchanged.
- Updates README and the SNS proposal cache design note to include the
cache-compatible topic sort.
```bash
icq sns proposals 1 --sort topic
```
## 0.2.37 - 2026-06-20
### Changed
- Preserves SNS governance proposal topic labels as optional `topic` fields on
proposal rows.
- Uses complete local proposal snapshots for `icq sns proposals --topic <topic>`
list views.
- Allows decided-status SNS proposal filters to combine with topic filters
through the complete cache path.
- Refreshes legacy complete proposal snapshots that lack topic fields before
applying topic cache filters.
- Bumps SNS proposal list/detail JSON report schemas for the additive row
field while leaving proposal cache paths and cache schema compatibility
unchanged.
```bash
icq sns proposals 1 --status decided --topic governance
```
## 0.2.36 - 2026-06-20
### Changed
- Preserves the raw SNS governance proposal status code as an optional
`status` field on proposal rows.
- Uses complete local proposal snapshots for topic-free
`icq sns proposals --status adopted|rejected` list views.
- Refreshes legacy complete proposal snapshots that lack raw status fields
before applying adopted/rejected cache filters, avoiding misleading empty
filtered views from old cache files.
- Keeps topic-filtered SNS proposal views on the bounded live query path.
- Bumps SNS proposal list/detail JSON report schemas for the additive row
field while leaving proposal cache paths and cache schema compatibility
unchanged.
## 0.2.35 - 2026-06-20
### Changed
- Shares SNS invalid-cache summary field construction between neuron and
proposal cache inspection reports.
- Shares valid cache-id lookup filtering across SNS cache status builders.
- Shares cache-error text rendering for SNS cache list reports.
- Keeps CLI behavior, cache paths, report schemas, JSON fields, and text output
semantics unchanged.
## 0.2.34 - 2026-06-20
### Changed
- Adds cache inspection status fields to NNS proposal, SNS proposal, and SNS
neuron complete-snapshot cache summaries.
- Makes cache list/status reports surface malformed JSON, unsupported schema
versions, and snapshot identity mismatches as invalid local cache rows rather
than aborting cache inspection.
- Keeps normal cache-backed report reads strict: invalid snapshots still fail
when a command needs the cached data.
- Keeps cache status/list commands local-only and live-call-free.
## 0.2.33 - 2026-06-20
### Changed
- Excludes internal GitHub workflow metadata, agent instructions, governance
code-hygiene examples, local toolchain overrides, and dev-only scripts from
the crate package.
- Adds a package-contents check to the local and CI gates so internal files do
not drift back into the published tarball.
- Keeps CLI behavior, cache paths, report schemas, and text output unchanged.
## 0.2.32 - 2026-06-20
### Changed
- Validates complete snapshot cache identity fields when present, rejecting
caches whose recorded `domain`, `entity`, `collection`, or `scope` does not
match the logical cache key being loaded.
- Keeps older local snapshot cache files readable when they do not yet contain
identity fields.
- Adds NNS and SNS family-level tests proving mismatched snapshot identity is
surfaced as typed cache identity errors.
- Adds a local and CI-gated GitHub Actions pinning check that rejects tag-pinned
external actions.
- Standardizes README command fences on `bash`.
- Removes stale global clippy allow-list entries and fixes the remaining
`option_if_let_else` warning in node filtering.
- Keeps CLI behavior, cache paths, report schemas, and text output unchanged.
## 0.2.31 - 2026-06-20
### Changed
- Fixes release-note drift so the root and detailed changelogs include the
current package version.
- Clarifies README status wording for NNS proposal list/detail cache behavior:
complete snapshots are reused when they can satisfy the request, with
bounded or direct live governance fallback where applicable.
- Documents the shared corrupted refresh-lock policy: malformed lock files are
reported as parse errors and require manual cleanup after verifying no
refresh is running.
- Adds a changelog/version consistency check to the local and CI gate.
- Pins GitHub Actions workflow dependencies to exact revisions while retaining
comments with their source tag names for maintainability.
- Documents the panic invariant on shared clap required-value helpers.
- Adds logical `domain`, `entity`, `collection`, and `scope` fields to newly
written complete snapshot caches while keeping older local cache files
readable.
- Keeps CLI behavior, cache paths, report schemas, and text output unchanged.
## 0.2.30 - 2026-06-20
### Changed
- Splits NNS proposal report construction into focused assembly, label, and
source modules while preserving proposal list/detail behavior.
- Moves shared cache missing-cache policy coverage under the cache-file module
and tightens parser/helper tests around shared clap dispatch behavior.
- Applies the repository module-header and section-style type-doc conventions
across touched cache, CLI, snapshot, progress, NNS leaf, NNS proposal, and
SNS cache modules.
- Keeps CLI behavior, cache paths, report schemas, JSON fields, and text output
unchanged.
## 0.2.29 - 2026-06-20
### Changed
- Centralizes shared cache-file error rendering by deriving `thiserror` on
the shared `CacheFileError` type, removing duplicated SNS and NNS cache-file
error match blocks.
- Preserves source errors for command clock failures and current-thread Tokio
runtime creation failures through typed `thiserror` wrappers instead of
storing formatted strings.
- Splits NNS proposal snapshot refresh into separate orchestration,
page-collection, and publish modules, matching the cleaner SNS cache refresh
structure.
- Deduplicates NNS proposal cache list/status option parsing behind one
command-local options type while keeping subcommand-specific usage handling.
- Applies the repository section-style type docs to shared cache, snapshot,
table, and duration helper types.
- Keeps CLI behavior, cache paths, report schemas, JSON fields, and text
output unchanged.
## 0.2.28 - 2026-06-20
### Added
- Adds `icq nns proposal refresh` to force-refresh and cache a complete
mainnet NNS governance proposal snapshot.
- Adds `icq nns proposal cache list` to inspect local complete NNS proposal
snapshots without live calls.
- Adds `icq nns proposal cache status` to show the expected cache path, local
snapshot metadata, and latest refresh-attempt state.
- Adds `--page-size <count>` and `--max-pages <count>` to the NNS proposal
refresh command.
```bash
icq nns proposal refresh
icq nns proposal refresh --max-pages 5
icq nns proposal cache status
```
### Changed
- Reuses the shared snapshot cache primitives for NNS proposal refresh locks,
same-line terminal progress, refresh-attempt sidecars, complete-only
snapshot publication, and JSON cache loading.
- Stores complete NNS proposal snapshots at
`.icq/nns/ic/governance/proposals/full.json`, with failed or capped refresh
attempts recorded separately from the last complete cache.
- Keeps `icq nns proposal list` as a bounded live query; complete NNS proposal
crawls remain explicit refresh operations.
- Renames internal NNS proposal list request/report/sort symbols to match the
public grouped `icq nns proposal list` command shape without changing list
or detail behavior.
## 0.2.27 - 2026-06-19
### Added
- Adds `icq nns proposal list` as the grouped NNS proposal list command.
- Adds `icq nns proposal info <proposal-id>` as the grouped NNS proposal
detail command.
```bash
icq nns proposal list --reward-status settled
icq nns proposal info 132411 --ballots
icq nns proposal info 132411 --verbose
```
### Changed
- Routes NNS proposal list/detail parsing through required grouped subcommands.
- Removes the ungrouped `icq nns proposals` and
`icq nns proposal <proposal-id>` command forms.
- Updates README examples and help-smoke coverage to use the grouped command
surface.
- Adds parser tests proving the removed ungrouped command forms are rejected.
## 0.2.26 - 2026-06-19
### Added
- Adds `icq nns proposal <proposal-id> --ballots` to show NNS proposal ballot
rows in text output.
- Adds `icq nns proposal <proposal-id> --verbose` to show full proposal
summary text in detail output.
- Adds `icq nns proposals --reward-status any|accept-votes|ready-to-settle|settled|ineligible`
to filter bounded live NNS proposal listings by voting reward status.
- Adds deterministic NNS proposal ballot rows to proposal detail JSON, keeping
raw vote codes and voting power plus stable vote labels.
```bash
icq nns proposal 132411 --ballots
icq nns proposal 132411 --verbose
icq nns proposals --reward-status settled
```
### Changed
- Sends concrete NNS reward-status filters into `list_proposals` as
`include_reward_status`.
- Sorts NNS proposal ballot rows by neuron id before reporting them so output
does not depend on governance response ordering.
- Truncates long NNS proposal summaries in default text output while keeping
full summaries available through `--verbose` and raw JSON fields.
- Keeps ballot rendering owned by the NNS proposal report text module, separate
from SNS proposal ballot rendering.
## 0.2.25 - 2026-06-19
### Added
- Adds `icq nns proposals` for bounded live NNS governance proposal listings
from the mainnet NNS governance canister.
- Adds `icq nns proposal <proposal-id>` for direct live NNS governance
proposal detail lookups.
- Adds NNS proposal list filters: `--status any|open|rejected|adopted|executed|failed`
and `--topic <topic>`.
- Adds NNS proposal list sorting:
`--sort api|id|status|topic|proposer|title|action|yes|no|total-votes|ballots|reject-cost|reward-round|proposed|decided|executed|failed`.
- Adds `--asc`, `--desc`, and `--verbose` to NNS proposal list views.
```bash
icq nns proposals --status open
icq nns proposals --topic governance
icq nns proposals --sort title --asc
icq nns proposal 132411 --format json
```
### Changed
- Keeps NNS proposal code separate under `src/nns/proposals/` while mirroring
the SNS proposal command split: clap specs, parsed options, report model,
live source, view sorting, text rendering, and offline tests.
- Sends concrete NNS status filters into `list_proposals` as `include_status`
and applies NNS topic filters locally over the returned bounded rows because
the NNS governance API exposes topic exclusion rather than a direct include
filter.
- Reuses the SNS proposal sort-direction policy: API order is directionless,
text-like local sorts default ascending, and numeric/timestamp local sorts
default descending.
## 0.2.24 - 2026-06-19
### Added
- Adds `icq sns proposals --sort proposer` for local proposal proposer-neuron
ordering over bounded live rows and complete proposal snapshots.
- Adds `icq sns proposals --sort reward-round` for local proposal reward
event round ordering over bounded live rows and complete proposal snapshots.
```bash
icq sns proposals 1 --sort proposer
icq sns proposals 1 --sort reward-round
```
### Changed
- Reuses the existing proposal view sorter for proposer and reward-round
ordering, keeping cache identity unchanged and applying cache-backed sorts
before `--limit`.
- Consolidates repeated cache-backed proposal sort test setup behind one
helper so future sort additions stay smaller.
- Renames the proposal sort parser test to describe the full local sort
default/direction behavior it covers.
## 0.2.23 - 2026-06-19
### Added
- Adds `icq sns proposals --sort status` for local proposal lifecycle-status
ordering over bounded live rows and complete proposal snapshots.
- Adds `icq sns proposals --sort ballots` for local proposal ballot-count
ordering over bounded live rows and complete proposal snapshots.
- Adds `icq sns proposals --sort reject-cost` for local proposal reject-cost
ordering over bounded live rows and complete proposal snapshots.
```bash
icq sns proposals 1 --sort status
icq sns proposals 1 --sort ballots
icq sns proposals 1 --sort reject-cost
```
### Changed
- Centralizes proposal sort direction policy in the report sort model.
- Orders `--sort status` by proposal lifecycle state: open, decided,
executed, failed, then unknown states.
- Reuses that model policy from clap direction validation and report
`sort_direction` labeling, keeping API-order views directionless and local
sorts direction-aware.
- Moves proposal view sorting/filtering tests into `sns::report::view::tests`
so the production proposal view module stays focused.
- Keeps cache identity, report schemas, text output fields, and JSON fields
unchanged.
## 0.2.22 - 2026-06-19
### Changed
- Makes proposal title/action sorts default to ascending order.
- Keeps id, tally, and timestamp proposal sorts defaulting to descending
order.
- Rejects explicit `--asc` or `--desc` with `--sort api`, because API order is
source order and does not apply a local direction.
- Keeps the natural default-direction rule in the report sort model, with clap
parsing only resolving explicit or implicit direction choices.
- Reports `sort_direction: none` for API-order proposal views, because no
local direction is applied.
```bash
icq sns proposals 1 --sort title
icq sns proposals 1 --sort title --desc
icq sns proposals 1 --sort total-votes
```
## 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
```bash
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
```bash
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
```bash
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
```bash
icq sns proposal 1 387 --ballots
icq sns proposal 1 387 --ballots --verbose
```