# 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.42 - 2026-06-24

### Added

- Adds `icq nns proposal list --query <text>` and
  `icq sns proposals <id-or-root> --query <text>` for case-insensitive proposal
  text filtering.
- Applies NNS query filters to complete-cache rows when a complete local
  snapshot is available, otherwise to the bounded live rows returned by NNS
  governance.
- Applies SNS query filters through the cache-compatible complete snapshot
  proposal view path before local sorting and `--limit`.
- Adds `query_filter` to NNS/SNS proposal list text and JSON reports, adds
  `result_scope` to NNS proposal list reports, and bumps affected list report
  schema versions.
- Shares NNS/SNS proposal query text matching through an allocation-free
  helper, and splits the large NNS/SNS proposal report test files into focused
  modules.
- Adds binary smoke coverage proving local NNS/SNS cache inspection commands
  emit JSON without live calls.

```bash
icq nns proposal list --query subnet
icq sns proposals 1 --query treasury
```

## 0.2.41 - 2026-06-20

### Added

- Adds `icq sns proposals --eligible any|yes|no` for SNS proposal
  reward-eligibility filtering.
- Adds `icq nns proposal list --proposer <neuron-id>` for exact NNS proposer
  filtering.
- Adds `icq sns proposals --proposer <neuron-id-prefix>` for SNS proposer
  prefix filtering.
- Applies the filters through the same live and complete-cache proposal view
  paths as status and topic filters, before local sorting and `--limit`.
- Adds `eligibility_filter` and `proposer_filter` to SNS proposal list text
  and JSON reports, adds `proposer_filter` to NNS proposal list reports, and
  bumps the affected list report schema versions without changing cache
  identity, cache paths, or cached row fields.
- Updates README, command help, and the SNS proposal cache design note for the
  new cache-compatible filters.

```bash
icq nns proposal list --proposer 123456789
icq sns proposals 1 --eligible yes
icq sns proposals 1 --proposer 00010203
```

## 0.2.40 - 2026-06-20

### Added

- Adds `icq nns proposal list --sort tally-time` for local NNS proposal
  latest-tally timestamp ordering.
- Adds `icq sns proposals --sort action-id` for local SNS proposal action-code
  ordering.
- Adds `icq sns proposals --sort tally-time` for local SNS proposal
  latest-tally timestamp ordering.
- Adds `icq sns proposals --sort eligible` for local SNS proposal reward
  eligibility ordering.
- Adds `icq sns proposals --sort reward-end` for local SNS proposal
  reward-event end timestamp ordering.
- Keeps these sort values on the descending default used by numeric and
  timestamp proposal sorts, so the latest tally times, largest action codes,
  eligible proposals, and latest reward-end times are shown first unless
  `--asc` is requested.
- Reuses the existing NNS and SNS proposal view sorters for live rows and
  complete proposal snapshots without changing cache identity, cache paths,
  report schemas, or JSON row fields.
- Updates README, command help, and the SNS proposal cache design note for the
  new cache-compatible sort values.

```bash
icq nns proposal list --sort tally-time
icq sns proposals 1 --sort action-id
icq sns proposals 1 --sort tally-time
icq sns proposals 1 --sort eligible
icq sns proposals 1 --sort reward-end
```

## 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
```
