Skip to content

Per-show block types, deletable hand-made blocks, undoable Not a repeat - #16

Merged
dben merged 4 commits into
claude/happy-cannon-3b1sa6from
claude/happy-cannon-3b1sa6-overrides
Oct 21, 2026
Merged

dben merged 4 commits into
claude/happy-cannon-3b1sa6from
claude/happy-cannon-3b1sa6-overrides

Conversation

@dben

@dben dben commented Oct 21, 2026

Copy link
Copy Markdown
Owner

Stacked on #15. Retarget to main once that merges.

Per-show types

  • Intro, Outro and Keep on the timeline are now the podcast's own type for a block, stored in a new podcast_types table. They apply to that podcast's episodes only; other shows treat the block as it was found.
  • These are overrides, not copies of the block. A copy would match twice in every scan and count twice against the 40-per-hash cap on common hashes.
  • Remove clears an override, and the block goes back to how it was found.
  • Kept sections stay on the timeline in grey and aren't cut.
  • Sections with an override, and blocks marked by hand, show a Custom (this show) pill.
  • When a block is split into pieces, its overrides carry over to the pieces.

Not a repeat

  • Still applies to every show (the block's own ignored type).
  • Each report now lists where such blocks play (not_repeats), using an extra scan when the report is built. The shared match table is unchanged, so bumper tagging, nested-block dropping and splitting work as before.
  • The timeline leaves these matches out. When an episode has any, a collapsed Not a repeat list under the sections shows them, with Undo. Undoing re-cuts every episode that lists the block.

Blocks marked by hand

  • "Catch it in this show's other episodes too" saves a Local, Intro or Outro block of this show only (segments.by_hand).
  • These blocks can be deleted from their card. Found blocks can't be deleted; mark them Keep or Not a repeat instead.

Re-cuts

  • A per-show change re-cuts only that show's ready episodes where the block plays.
  • Not a repeat, and undoing it, re-cut every show's.

Upgrade

  • On first open, the store adds by_hand and podcast_types. Hand-typed intros, outros and Local blocks go back to automatic, as agreed. False positives stay.
  • Existing reports keep their old cuts until each episode is next processed.

CLI

  • podblock type still sets a block's type for every show.
  • report --podcast and breaks apply the podcast's own types.

Testing

  • All 194 tests pass; ruff is clean.
  • New tests cover:
    • Keep, Intro and Remove staying within one show, using a second test show that shares the jingle and ad.
    • Not a repeat applying across shows, being listed in the report, and Undo.
    • Hand-made blocks: scoped to their show, deletable, and found blocks refused for deletion.
    • Store overrides, and carrying them to split pieces.
    • The upgrade reset.
  • Checked the timeline in headless Chromium, on desktop and at phone width.

README.md, WEBAPP.md and CLI.md are updated.


Generated by Claude Code

- Intro, Outro and Keep on the timeline are now the podcast's own type for
  a block (new podcast_types table), used in that podcast's episodes only.
  Remove puts the block back as it was found. Other shows are unaffected.
- Not a repeat (ignored) still applies to every show. Reports now list
  where such blocks play (not_repeats), and the timeline shows them in a
  collapsed list with Undo.
- Sections marked by hand and saved as blocks are Local, Intro or Outro
  blocks of this show (segments.by_hand), and can be deleted.
- Kept sections stay on the timeline in grey, uncut. Custom sections get
  a "Custom (this show)" pill.
- Upgrading a store resets hand-typed intros, outros and Local blocks to
  automatic; false positives stay.
- The CLI report and breaks use the podcast's own types too.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01EG47UsmrudfwVCr5yZ9P9b
…tten

- Menu: "Keep (this show)" and "Not a repeat", without the explanations.
- Drop hints that repeat the label or the menu; keep "Won't be cut in any
  show" for the one change that reaches other shows.
- Not a repeat list: no intro line; each item has "Cut again", then Undo.
- Waveform labels are a little wider, so "Not a repeat" fits.
- WEBAPP.md gains a Writing section with the rules from the earlier
  description clean-up.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01EG47UsmrudfwVCr5yZ9P9b
It joins the collapsed Not a repeat list, opened to show it, with Undo,
instead of staying on the waveform as a grey region until saved. Kept
sections stay on the timeline as before.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01EG47UsmrudfwVCr5yZ9P9b
Discard reset section types and hand cuts, but left a pending Delete on a
hand-made block and a pending "Cut again" in the Not a repeat list.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01EG47UsmrudfwVCr5yZ9P9b
@dben
dben added this pull request to stack #17 October 21, 2026 17:07
@dben
dben merged commit 61c0987 into main Oct 21, 2026
4 checks passed
@dben
dben deleted the claude/happy-cannon-3b1sa6-overrides branch October 21, 2026 17:07
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