Skip to content

Releases: AmirMotefaker/KetabCast

v0.2.0-beta.5.1.14 - Checkpoint Recovery Seeding

Choose a tag to compare

@AmirMotefaker AmirMotefaker released this 13 Aug 07:30
a10d744

Checkpoint Recovery Seeding

Closes #80. Tracks #53.

  • PR: #81
  • PR head: bbc3b49
  • exact merge SHA: a10d744
  • PR CI: 31677868134
  • post-merge CI: 31677926800
  • Pages: 31677926831
  • trigger production run: 31675910818
  • next resume checkpoint artifact: 9171645600
  • artifact digest: sha256:06089a026ea4ba6f2dde77ec39ab1740e70d0122c73b6b8f85ed46511dbd5ff5

A provenance-verified checkpoint reuse now reconstructs the successful transcript hash state used by the existing bounded content_blocked recovery path. Unverified resume cannot seed this state and invalid hashes fail closed.

Existing content_blocked recovery caps, classifier-block limits, free-tier handling and hard network request caps are unchanged.

No production dispatch or media/player promotion is performed by this release.

v0.2.0-beta.5.1.13 - Stale Pending Interaction Budget

Choose a tag to compare

@AmirMotefaker AmirMotefaker released this 13 Aug 06:51
d002d3c

Stale Pending Interaction Budget

Closes #78. Tracks #53.

Exact lifecycle

  • PR: #79
  • PR head: fc13890
  • Merge SHA: d002d3c
  • PR CI: 31675017445
  • Post-merge CI: 31675079962
  • Pages: 31675080011
  • Same-ID timeout source run: 31672388904
  • Next resume checkpoint artifact: 9170553292
  • Artifact digest: sha256:13e30e039e6da33d3c989db59627cadd41b8941eae498bac3ea952ba0d0c3a3a

Released contract

A pending provider Interaction ID is bounded to two polling/materialization windows. When that budget is exhausted, the stale ID is retired before further GET polling; the normal renderer path may then make one fresh generation attempt for the same chunk under the existing request cap, quota handling, transient retry and content-safety rules.

No production dispatch or media/player promotion is performed by this release.

v0.2.0-beta.5.1.12 — Pending Interaction Checkpoint

Choose a tag to compare

@AmirMotefaker AmirMotefaker released this 13 Aug 05:06
81b120b

Pending Interaction checkpoint hotfix

Closes #76. Tracks #53.

Exact lifecycle evidence

  • PR: #77
  • PR head: 3b01d53
  • PR CI: 31668781391
  • Merge SHA: 81b120b
  • Post-merge CI: 31669113741
  • Post-merge Pages: 31669113732
  • Trigger failed production resume: 31623180788
  • Trigger failed checkpoint artifact: 9152558220

Released fix

  • accepted Gemini Interaction ID is persisted before long polling;
  • pending Interaction provenance is bound to book/role/voice/transcript/chunk/source run/source SHA;
  • verified pending Interaction metadata can be seeded from failed artifacts;
  • a verified same ID is resumed before any new generation POST;
  • pending sidecar is cleared only after a finalized WAV checkpoint exists;
  • existing request hard-cap, 429 handling, and content-safety behavior remain fail-closed.

Production

No production dispatch or media/player promotion is performed by this release lifecycle.

v0.2.0-beta.5.1.9 - Gemini TTS Long Materialization Window

Choose a tag to compare

@AmirMotefaker AmirMotefaker released this 12 Aug 13:23
e52eea2

Gemini completed-audio materialization window

Trigger:

  • controlled Batch A run 31597210578
  • source v0.2.0-beta.5.1.8 / 87da695
  • Atomic Habits Sulafat chunks succeeded
  • Atomic Habits Schedar chunk 1 returned an accepted completed Interaction but exposed no audio through six same-ID GET polls

Fix:

  • same-ID polling interval remains 5 seconds
  • existing Interaction timeout remains 15 minutes
  • completed/no-audio bound derives to 180 same-ID GET polls
  • success-path deterministic proof returns audio on GET 12
  • persistent no-audio remains fail-closed
  • no duplicate generation POST after accepted Interaction ID
  • generation POST hard cap remains 10
  • content_blocked recovery POST hard budget remains 2
  • response_format remains type=audio
  • transcript and safety settings unchanged

Lifecycle:

  • Issue #70
  • PR #71
  • final PR head: 4863683
  • merge/release SHA: e52eea2
  • PR CI: 31599995316
  • main CI: 31601039576
  • Pages deploy: 31601039609

Safety:

  • no Batch A dispatch in this release step
  • no media-dual-v0.2.0-beta.6 creation
  • no episodes.json/player/Piper promotion

v0.2.0-beta.5.1.8 - Gemini TTS Content-Blocked Recovery

Choose a tag to compare

@AmirMotefaker AmirMotefaker released this 12 Aug 12:04
87da695

Gemini TTS content_blocked classifier recovery

Trigger:

  • controlled Batch A run 31587048578
  • source v0.2.0-beta.5.1.7 / 30c75a0
  • Atomic Habits Sulafat chunks succeeded; Schedar chunk 1 then returned HTTP 400 content_blocked

Fix:

  • explicit speech-synthesis preamble
  • spoken transcript START/END boundaries
  • transcript preserved exactly
  • no safety setting changes
  • recovery only for exact transcript SHA already synthesized successfully in the same process
  • every actual recovery-prompt POST consumes the global recovery budget
  • generic retryable recovery responses also consume recovery budget
  • max recovery POSTs = 2 globally
  • third recovery POST refused before network fetch
  • overall generation POST hard cap remains 10

Deterministic proof:

  • primary content_blocked -> recovery POST #1 -> retryable 500
  • recovery POST #2 -> retryable 500
  • later eligible recovery POST #3 is refused before network fetch
  • unseen transcript fails closed
  • completed/no-audio materialization tests remain PASS

Lifecycle:

  • Issue #68
  • PR #69
  • final PR head: f3f9d42
  • merge/release SHA: 87da695
  • PR CI: 31594232501
  • main CI: 31594649547
  • Pages deploy: 31594649570

Safety:

  • no Batch A dispatch in this release step
  • no media-dual-v0.2.0-beta.6 creation
  • no episodes.json/player/Piper promotion

v0.2.0-beta.5.1.7 - Gemini TTS Audio Materialization

Choose a tag to compare

@AmirMotefaker AmirMotefaker released this 12 Aug 10:07
30c75a0

Gemini TTS completed-Interaction audio materialization

Fixes the Batch A failure where an accepted Gemini Interaction returned status=completed before audio was visible in the initial snapshot.

Runtime behavior

  • completed/no-audio preserves the accepted Interaction ID;
  • up to 6 bounded same-ID GET materialization polls;
  • GET polling remains separate from the generation POST hard cap;
  • generation POST hard cap remains 10;
  • no duplicate generation POST after an Interaction ID is accepted;
  • response_format remains type=audio with no delivery property;
  • fail closed with TTS_INTERACTION_COMPLETED_WITHOUT_AUDIO after the bound.

Deterministic runtime proof

  • success: completed/no-audio -> same-ID GET #1 no audio -> GET #2 audio -> PASS;
  • failure: persistent completed/no-audio -> exactly 6 same-ID GETs -> fail closed;
  • same ID, poll numbering, API-key forwarding and poll interval are asserted.

GitHub lifecycle

  • Issue #66
  • PR #67
  • PR final head: 1a3ba20
  • merge/release SHA: 30c75a0
  • PR CI run: 31585178328
  • main CI run: 31585940997
  • Pages deploy run: 31585940957

Trigger evidence

  • failed controlled Batch A run: 31572749438
  • failed source tag: v0.2.0-beta.5.1.5
  • failed source SHA: 686f5ff

Safety boundary

This release does not dispatch Batch A, does not modify production episode metadata/player/Piper audio, and does not publish media-dual-v0.2.0-beta.6. Batch A remains separately controlled under #53.

v0.2.0-beta.5.1.6 - Approved Voice Preview

Choose a tag to compare

@AmirMotefaker AmirMotefaker released this 12 Aug 09:19
09e220f

Approved voice preview

Published the two human-approved narration previews on GitHub Pages:

  • Sulafat / Warm — female product voice
  • Schedar / Even — male product voice

GitHub lifecycle

  • Issue #64
  • PR #65
  • feature SHA: 22cb9e0
  • merge/release SHA: 09e220f
  • main CI run: 31582037891
  • Pages deploy run: 31582037942

Provenance

  • Voice Lab run: 31462344234
  • artifact id: 9090398542
  • source SHA: fa45671

Preview SHA-256

  • Sulafat: 46b523fe8aad6472de6e1fdf34a601b7892822e9fb2e1d22d120a43f5f65cc7b
  • Schedar: ca763d44ac0062dea18985b4c15fdfebb2fe658be817df88cc8612a7feda6ff1

Safety boundary

Production episode metadata and existing Piper audio remain unchanged. Full dual-voice episode generation remains tracked separately in #53.

Zobdino v0.2.0-beta.5.1.5 — Gemini TTS Audio Response Format Contract

Choose a tag to compare

@AmirMotefaker AmirMotefaker released this 12 Aug 06:58
686f5ff

Zobdino v0.2.0-beta.5.1.5 — Gemini TTS Audio Response Format Contract

Trigger: Batch A run 31570098554 failed with HTTP 400
Audio delivery mode is not supported.

Fix:

  • remove explicit response_format.delivery
  • preserve response_format.type=audio
  • preserve Interaction completion polling
  • preserve audio data/URI extraction
  • preserve no duplicate generation POST
  • preserve Retry Policy v2 and hard cap 10

Evidence:

No TTS generated.
No workflow/episodes/Piper/player mutation.
Dual Voice remains 0/10.
media-dual-v0.2.0-beta.6 remains absent.

Zobdino v0.2.0-beta.5.1.4 — Gemini TTS Interaction Completion Polling

Choose a tag to compare

@AmirMotefaker AmirMotefaker released this 12 Aug 05:58
2bd4fac

Zobdino v0.2.0-beta.5.1.4 — Gemini TTS Interaction Completion Polling

Trigger

Controlled Batch A run 31565336801 exposed a successful-Interaction handling
gap: two fast HTTP-success responses did not contain extracted inline audio,
the renderer submitted duplicate generation POSTs, and the third POST hit a
transient 429.

Fix

  • explicit audio delivery=inline
  • accepted Interaction IDs are polled using GET /interactions/{id}
  • no duplicate generation POST while an accepted Interaction is pending
  • inline audio data + audio URI extraction
  • 5-second polling / 15-minute timeout
  • transient GET Retry-After/backoff
  • safe metadata-only diagnostics
  • generation POST hard cap remains 10
  • GET poll requests recorded separately
  • deterministic Interaction contract self-tests

Safety

No TTS generated by this hotfix.
No workflow/media/Piper/episodes/player state changed.
Dual Voice remains 0/10.
media-dual-v0.2.0-beta.6 remains absent.

Evidence

Issue: #60
Batch A: #53
PR: #61
PR CI: https://github.com/AmirMotefaker/KetabCast/actions/runs/31568215087
Post-merge CI: https://github.com/AmirMotefaker/KetabCast/actions/runs/31568262304
Pages: https://github.com/AmirMotefaker/KetabCast/actions/runs/31568262300
Exact SHA: 2bd4fac
Live: https://amirmotefaker.github.io/KetabCast/
Source failure: https://github.com/AmirMotefaker/KetabCast/actions/runs/31565336801

Zobdino v0.2.0-beta.5.1.3 — Dual-Voice Media Publication Hardening

Choose a tag to compare

@AmirMotefaker AmirMotefaker released this 12 Aug 04:54
3b10a6f

Zobdino v0.2.0-beta.5.1.3 — Dual-Voice Media Publication Hardening

  • recovery artifact before media publication
  • canonical asset filename copy/upload
  • canonical copy SHA/bytes verification
  • legacy file#label removed
  • legacy --clobber=false removed
  • overwrite refusal retained
  • GitHub digest/bytes/public download-back verification retained

No audio generated.
Production episodes/Piper/player unchanged.
Dual Voice remains 0/10.
media-dual-v0.2.0-beta.6 remains absent until controlled Batch A.

Issue: #58
Batch A: #53
PR: #59
PR CI: https://github.com/AmirMotefaker/KetabCast/actions/runs/31564675168
Post-merge CI: https://github.com/AmirMotefaker/KetabCast/actions/runs/31564728223
Pages: https://github.com/AmirMotefaker/KetabCast/actions/runs/31564728152
Exact SHA: 3b10a6f
Live: https://amirmotefaker.github.io/KetabCast/