Skip to content

fix: 12 operator-inconvenience bugs + 1.0.11 release prep#28

Merged
postgresql007 merged 1 commit into
mainfrom
fix/twelve-inconvenience-bugs
Jul 16, 2026
Merged

fix: 12 operator-inconvenience bugs + 1.0.11 release prep#28
postgresql007 merged 1 commit into
mainfrom
fix/twelve-inconvenience-bugs

Conversation

@postgresql007

Copy link
Copy Markdown
Contributor

Twelve operator-inconvenience bugs found by systematically exercising the CLI surface, each fixed with a regression test, plus the 1.0.11 release prep.

Highest impact

  • repo scrub false corruption on encrypted repos (the default after init): reported 100% chunk corruption and exit 9, paging on every scheduled run. Now scrubs manifest-aware (the same per-manifest CAS repair scrub uses) — E2E verified 342/342 encrypted chunks decrypt + verify.
  • -c/--config silently ignored: advertised on every command, always read the XDG/FHS default. deployment edit -c staging.yaml mutated the wrong file. Now honored for reads and write-back.
  • lint always returned valid: rubber-stamped garbage YAML/unknown keys/missing files. Now runs the real loader + validation.

Dry-run honesty

  • recovery windows no longer advertises a PITR range across a WAL archive hole (caps at the hole).
  • restore --preview surfaces the wal_archive_hole finding instead of "✓ ready" for an unreachable target.
  • capacity report confidence now requires a real observation window (a seconds-long window can't be "medium").
  • rotate renders legally-held backups [held], not [del ].

Error class / stubs / muscle memory

  • recovery readiness throughput as a byte-rate (160.0 MiB/s), not 46603h22m40s.
  • --incremental-from on PG<17 → backup.incremental_unsupported (exit 2) with a hint, not internal.
  • repo init --repo <url> accepted (matches sibling verbs).
  • explain <cmd> returns real help; glossary <term> returns the definition.

Bonus: the YAML/CSV integer-fidelity fix was extended to a shared jsonshape helper covering tap/junit/pdf/template.

Verification

Full unit suite green across the tree; go vet clean; docs/CLI reference regenerated. Every fix has a regression test (repo scrub encrypted E2E, config-flag load, lint invalid, TestWindows_CapsAtArchiveHole, TestPreview_SurfacesWALArchiveHole, capacity window guard, rotate held-label, throughput, incremental class, repo-init flag, explain/glossary).

After merge: tag v1.0.11 → packages publish; Homebrew cask pushed manually (tap token still invalid); containers remain unpublished pending org GHCR enablement.

False alarms / silent wrong-target:
- repo scrub now scrubs manifest-aware so ENCRYPTED chunks decrypt +
  verify — it previously built a decryptor-less CAS and reported 100%
  corruption (exit 9) on every encrypted repo, paging on each run.
- The global -c/--config flag is now honored (reads + write-back) via
  PG_HARDSTORAGE_CONFIG_FILE; it was advertised everywhere but read
  nowhere, so the tool always used the XDG/FHS default.
- lint validates the resolved config with the real loader instead of
  always returning {"status":"valid"}.

Dry-run / advisory honesty:
- recovery windows caps latest_restore_lsn at the first WAL archive
  hole (records the gap) instead of advertising a range across it.
- restore --preview surfaces the wal_archive_hole finding instead of
  reporting "Pre-flight: ✓ ready" for a target the real restore halts
  before.
- capacity confidence now requires a real observation window (>=1 day
  medium, >=1 week high); a sub-day window can no longer be labelled
  "medium" and carries a caveat.
- rotate renders legally-held backups [held], not [del ].

Error class / stubs / muscle memory:
- recovery readiness prints throughput as a byte-rate, not a duration.
- backup --incremental-from against PG<17 is backup.incremental_
  unsupported (usage, exit 2) with a hint, not the generic internal.
- repo init accepts --repo (matching sibling repo verbs) or positional.
- explain <cmd> returns the command's real summary/usage/description.
- glossary <term> returns the definition (unknown -> notfound.term).

Also: extended the renderer integer-fidelity fix into a shared
jsonshape helper (yaml/csv/tap/junit/pdf/template).

Release prep: CHANGELOG 1.0.11 and doc version examples bumped. All
fixes carry regression tests; CLI reference regenerated (repo init).
@postgresql007
postgresql007 merged commit 6ed8150 into main Jul 16, 2026
6 checks passed
@postgresql007
postgresql007 deleted the fix/twelve-inconvenience-bugs branch July 16, 2026 03:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant