ic-query 0.2.39

Internet Computer query CLI for NNS, SNS, and related public network metadata
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
# 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
```