Skip to content

docs(menus): rich menu editor plan with BD-ready foundations - #103

Merged
ScottMorris merged 7 commits into
mainfrom
docs/rich-menu-editor-plan
Jul 14, 2026
Merged

docs(menus): rich menu editor plan with BD-ready foundations#103
ScottMorris merged 7 commits into
mainfrom
docs/rich-menu-editor-plan

Conversation

@ScottMorris

Copy link
Copy Markdown
Contributor

Summary

Adds docs/rich-menu-editor-plan.md — the planning doc for the next generation of menu authoring: motion backgrounds, animated buttons, richer imagery, timeline editing, and disc-aware UI, structured as six shippable slices with BDMV-readiness decisions baked in.

Highlights:

  • Current state review of the v0.3.0 menu system, with a gap table showing the authored model is ~2 phases ahead of the editor and DVD build (per-state styles, motion timing, video nodes, and themes exist in the model but are dropped or blocked downstream).
  • Eight binding design decisions so the same editor can author BDMV menus later: per-state rendered button visuals, Rust-evaluated animation property tracks, semantic MenuRole over physical MenuDomain, per-format FormatProfile constraint tables, design-space-only editing (legacy Menu.buttons mirror retirement), semantic actions, a MenuCompiler backend seam, and flagged colour-management work.
  • Disc-aware UI section: format badge, per-family terminology map (VMGM/subpicture vs Top Menu/IG), and honest profile-driven target previews.
  • Slices A–F with code sketches, mermaid diagrams, timeline/format-badge mocks, and a spumux DCSQ lowering sample.
  • lib-igs-author-plan.md review against the actual state of libhdmv (checked 2026-07): the igs crate is decode-only today (the plan's assumed write_object_segment/write_palette_segment don't exist; hdmv-insn encode and pgs::encode_rle do), Phase D should integrate from MenuDocument + pre-rendered state bitmaps rather than legacy Menu/MenuButton, ButtonImage should be a frame sequence, and palette quantisation must be joint per display set.

Test plan

  • pnpm exec prettier --check docs/rich-menu-editor-plan.md
  • Claims about current behaviour verified against source (skia/scene.rs node skips, planner/helpers.rs motion block, CompileMode.tsx/SceneCanvas.tsx constants) and against the libhdmv repo tree
  • Cross-references to existing docs (motion-menus.md, blu-ray-integration-plan.md, lib-igs-author-plan.md, dvd_bd_architecture_note.md) checked for consistency

🤖 Generated with Claude Code

https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo

ScottMorris and others added 2 commits July 13, 2026 22:00
Plans the next generation of menu authoring: motion backgrounds,
animated buttons, richer imagery, and timeline editing, structured as
six shippable slices (A-F).

Reviews the current menu system (v0.3.0) and documents the gap between
the authored model (which already expresses per-state styles, motion
timing, video nodes, and themes) and the editor/build layers that only
partially implement it.

Binds eight design decisions that keep the editor extensible to BDMV:
per-state rendered button visuals, Rust-evaluated animation property
tracks, semantic menu roles over physical domains, per-format
constraint profiles, design-space-only editing, semantic actions, a
`MenuCompiler` backend seam, and flagged colour-management work.

Adds a disc-aware UI section (format badge, per-family terminology map,
honest target preview) and a review of `lib-igs-author-plan.md` against
the actual state of libhdmv: the `igs` crate is decode-only today (the
plan's assumed segment writers do not exist), Phase D should integrate
from `MenuDocument` rather than the legacy `Menu`/`MenuButton` model,
`ButtonImage` should be a frame sequence, and palette quantisation must
be joint per display set.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
…u plan

Expands the plan with concrete artefacts:

- mermaid diagrams for the current pipeline (including the legacy-mirror
  and renderer-parity problem edges), animation-track lowering, the
  `MenuCompiler` backend fork, and slice/igs-author sequencing
- Rust sketches for `AnimationTrack`/`Easing`, `MenuRole`,
  `FormatProfile`/`HighlightModel`, and the `MenuCompiler` trait
- TypeScript sketch for the per-family terminology module
- ASCII mocks of the format badge and the timeline strip
- spumux DCSQ lowering sample and a theme-document JSON sample
- revised `igs-author` API sketch (frame-sequence `ButtonImage`,
  `MenuDocument`-based integration)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
@ScottMorris ScottMorris added documentation Improvements or additions to documentation menus Menu layout, navigation, and button behaviour labels Jul 14, 2026
@ScottMorris

Copy link
Copy Markdown
Contributor Author

@codex review

@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown

Spindle JS tests

233 tests  ±0   233 ✅ ±0   3s ⏱️ -3s
 24 suites ±0     0 💤 ±0 
  1 files   ±0     0 ❌ ±0 

Results for commit dfd73f6. ± Comparison against base commit ed45e3e.

♻️ This comment has been updated with latest results.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6e12ecd977

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/rich-menu-editor-plan.md Outdated
@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown

Spindle Rust tests

222 tests  ±0   222 ✅ ±0   2s ⏱️ ±0s
  2 suites ±0     0 💤 ±0 
  1 files   ±0     0 ❌ ±0 

Results for commit dfd73f6. ± Comparison against base commit ed45e3e.

♻️ This comment has been updated with latest results.

Codex review: mapping every `Vmgm` document to `Root` would misclassify
additional VMGM pages (title-select, extras) that projects can already
hold in `disc.globalMenus`. Only the disc's entry menu infers `Root`;
remaining VMGM menus infer `TitleSelect`, and roles stay user-editable
after the one-time inference.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
@ScottMorris

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6d41657625

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/rich-menu-editor-plan.md Outdated
Codex review: spumux's `image`/`select`/`highlight` attributes are
overlay image paths, not colour fields. The animated-highlight sample
now bakes each keyframe's sampled colour/opacity into per-keyframe
rendered overlay PNGs, and notes the lower-level DCSQ-writer fallback
(covered by the player-compatibility research issue) if overlay swaps
prove too coarse.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
@ScottMorris

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 73cd9a0ca4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/rich-menu-editor-plan.md Outdated
Comment thread docs/rich-menu-editor-plan.md Outdated
Codex review round 3:

- Role inference can no longer lean on generation metadata alone:
  every generator currently writes `generatorId: 'menu-workspace'`
  (menuGenerators.ts), so it cannot discriminate chapter vs setup
  menus. The role slice now adds a `generatorKind` going forward and
  uses interaction-content detection (`PlayChapter` → chapter,
  `SetAudioStream`/`SetSubtitleStream` → setup) for existing projects
  before the entry-menu/`TitleSelect` fallbacks.
- Design decision 6 no longer claims `PlaybackAction` ports to BD
  "as-is": `PlayNextInTitleset` is DVD-only and `PlayAllInTitleset`
  expands against titleset order, so each backend defines its mapping
  and `FormatProfile` gains a supported-actions list for validation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
@ScottMorris

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 79688e95f6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/rich-menu-editor-plan.md Outdated
Comment thread docs/rich-menu-editor-plan.md Outdated
…rence

Codex review round 4:

- The animated-highlight spumux sample now carries `force="yes"`,
  `transparent`, and `<button>` children (matching what the existing
  still-menu builder emits), with the repeated rectangles marked as
  elided rather than silently missing.
- Setup-role inference counts actions after recursively flattening
  `Sequence`: the audio/subtitle generators wrap `setAudioStream`/
  `setSubtitleStream` inside a `sequence` with an optional `showMenu`
  return, so top-level counting would misclassify existing setup menus
  as `TitleSelect`.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
@ScottMorris

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ea66ce3f83

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/rich-menu-editor-plan.md
Comment thread docs/rich-menu-editor-plan.md
…uttons

Codex review round 5:

- `compose_background` now takes the document and asset map, not just
  `RenderedMenu` + timing: motion menus need the background video
  (`scene.background.asset_id`) and audio bed to trim/loop/mux, and the
  audio bed today lives only on the legacy `Menu`
  (`resolved_motion_audio_asset_id()`), so the mirror-retirement scope
  now explicitly moves such fields onto `MenuDocument`.
- Slice B acceptance now requires recursively flattening grouped
  buttons for authoring/interaction extraction —
  `AuthorableMenuRef::buttons()` only scans top-level `scene.nodes`, so
  rendering groups alone would produce visible-but-dead buttons.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CXZ2ehDJ1H6BWLWqtyzCAo
@ScottMorris

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Bravo.

Reviewed commit: dfd73f6686

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@ScottMorris
ScottMorris merged commit 43e52b8 into main Jul 14, 2026
8 checks passed
@ScottMorris
ScottMorris deleted the docs/rich-menu-editor-plan branch July 14, 2026 02:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation menus Menu layout, navigation, and button behaviour

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant