Skip to content

Qualify the stabilization candidate for controlled rollout - #52

Merged
bandoracer merged 69 commits into
mainfrom
codex/stabilization-candidate
Sep 17, 2026
Merged

bandoracer merged 69 commits into
mainfrom
codex/stabilization-candidate

Conversation

@bandoracer

@bandoracer bandoracer commented Sep 16, 2026 •

Copy link
Copy Markdown
Owner

The older application can lose file identity after interrupted imports or renames, resubmit uncertain downloads, and truncate large-library workflows. This candidate combines the existing stabilization stack with durable recovery, explicit file evidence, complete collection reads and operator review controls, while preserving the publication guard from #51.

Migrations 0030–0058 are append-only. Candidate follow-ups fix the cold-statistics missing-books query, preserve acquisition failure explanations, label the collapsed theme control, correct removal retention text and route removed books to their restoration page. The original stacked drafts remain available as review history.

Qualification is complete for application source 6e209ffd8d3724879e52187e27790029e66af986. Subsequent commits record documentation only.

  • All six CI jobs passed: run 35157133068, including Go vet/Postgres race tests, 25 frontend tests, 143 browser tests, build/deployment checks, real disposable Calibre, packaged recovery/restore and image scans.
  • The broader risk review found no remaining blocker in its documented scope. A fresh browser journey covered Forms authentication, real English Open Library search/add, uncertain acquisition without resubmission, EPUB/chapter import, failure/restart recovery, foreign-file review, rename/remove/restore, and desktop/tablet/phone layouts.
  • A sanitized production copy upgraded from migration 0029 to 0058 with all existing fields across nine tables preserved, three exact relational file/book links and three unchanged media hashes. Restoring the original API/web image bytes and pre-upgrade snapshot passed rollback and reverted a deliberate copy-only mutation.
  • Explicit candidate publication produced paired immutable digests. Those exact images passed all three packaged suites on native ARM64 and native NAS AMD64. Four exact-image scans found zero fixable HIGH/CRITICAL vulnerabilities under the configured policy. Both latest digests remained unchanged.

The documentation now has a concise installation README with an actual UI screenshot, focused operator and implementation guides, a current readiness summary, and a separate historical ledger. Source-build, authentication, automation, backup and restore instructions are reconciled with the candidate. Contribution/security guidance, a changelog and issue/PR templates are included. Documentation checks passed for 331 local links and 147 heading fragments across 42 Markdown files, issue-form structure, deployment configuration and whitespace.

Candidate tag: candidate-6e209ffd8d3724879e52187e27790029e66af986-35157133068-1.

  • API index: sha256:5b42f0e33c465026e4105a740baba72202df606389e614d150ac1e8da2334cd2
  • Web index: sha256:a8c9ea2acae6fa155c73715aa4be2e7b3ce8cb42dc7458795f16be9ce2cdf4db

Merged into main at e742210d5c4b6a422ce60b5dc86f08e2fd93e99c after all six checks passed on c0d9efb. The exact qualified digest pair is now deployed on the maintainer NAS. Migration 0029→0058 preserved existing records, all three file/book associations and media hashes; live Prowlarr/qBittorrent/Open Library checks and the library scan passed. Cosmos routing is repaired and requires Cosmos sign-in. The original application environment is restored, initial workers report no errors, and a fresh rollback checkpoint is retained. Issue #1 is fixed; older draft PRs and #2 are superseded. Release and rollout evidence record the result. The owner subsequently requested immediate latest promotion to replace the broken older images. Run 35168275050 promoted the exact qualified indexes without rebuilding; both latest tags and platform manifests were verified. The longer observation remains incomplete and is no longer a publication prerequisite. Rich-provider credentials and real Readarr migration/consumer qualification remain separate limitations.

Detailed source, platform digests, methods, fixture limitations and rollback evidence: qualification report. Release gates: checklist.

bandoracer and others added 30 commits September 15, 2026 18:03
Prowlarr's /api/v1/search binds `categories` as an array of int, which
requires a repeated query parameter (categories=7000&categories=3030).
searchOnce used url.Values.Set with a comma-joined string, so any format
resolving to more than one category produced categories=7000%2C3030 and
Prowlarr rejected it with 400 Bad Request:

    "categories": { "rawValue": "7000,3030",
      "errors": [{ "errorMessage": "The value '7000,3030' is not valid." }],
      "validationState": "invalid" }

librarry surfaces that upstream failure to the browser as a 502.

This hit audiobook searches (7000,3030) and the "any" format on every
query regardless of search term or indexer. Ebook searches were
unaffected only incidentally, because "7000" is a single value with no
comma to mis-encode.

Add categoryListForFormat, which splits the same list for use with
url.Values.Add. categoriesForFormat is retained for fetchIndexerFeed:
the Newznab feed endpoint takes a comma-joined `cat` parameter, which
is the correct convention there and must not change.
@bandoracer bandoracer changed the title Freeze the stabilization candidate for release qualification Qualify the stabilization candidate for controlled rollout Sep 16, 2026
@bandoracer
bandoracer marked this pull request as ready for review September 17, 2026 00:17
@bandoracer
bandoracer merged commit e742210 into main Sep 17, 2026
6 checks passed
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.

2 participants