Skip to content

feat(studio): make storyboard view default available (remove FF)#1794

Merged
jrusso1020 merged 2 commits into
mainfrom
feat-storyboard-default-available
Jun 30, 2026
Merged

feat(studio): make storyboard view default available (remove FF)#1794
jrusso1020 merged 2 commits into
mainfrom
feat-storyboard-default-available

Conversation

@jrusso1020

Copy link
Copy Markdown
Collaborator

What

Removes STUDIO_STORYBOARD_ENABLED. The storyboard view-mode toggle was gated behind a default-off feature flag (VITE_STUDIO_ENABLE_STORYBOARD / VITE_STUDIO_STORYBOARD_ENABLED) since the original storyboard shell PR. With the experience now ready for broad exposure, drop the gating and make the toggle available unconditionally.

After this lands the FF env vars become no-ops; nothing else in the codebase reads them.

How

  • packages/studio/src/components/editor/manualEditingAvailability.ts — delete the STUDIO_STORYBOARD_ENABLED constant + its comment.
  • packages/studio/src/App.tsx — drop the import + the FF arg to useViewModeState(). Hook is now called argument-free.
  • packages/studio/src/components/StudioHeader.tsx — drop the import + the conditional-render guard on <ViewModeToggle />. The toggle renders alongside the project name + toolbar in every Studio session.
  • packages/studio/src/contexts/ViewModeContext.tsx — remove the enabled: boolean parameter from useViewModeState() and simplify. No more pin-to-timeline-when-disabled branch — the function now does the obvious thing: initial read from ?view=, toggling, popstate sync.
  • packages/studio/fixtures/storyboard-sample/README.md — drop the VITE_STUDIO_ENABLE_STORYBOARD=1 prefix from the preview command.

Net: -23/+14 across 5 files.

Testing

  • Final grep -rn STUDIO_STORYBOARD_ENABLED packages/ returns no hits.
  • Final grep -rn VITE_STUDIO_ENABLE_STORYBOARD packages/ returns no hits.
  • Behavior change: the view-mode toggle in StudioHeader (Storyboard / Preview) now renders on every Studio session. ?view=storyboard deep-links work without needing the env var. Browser back/forward continues to sync ?view= via popstate.

Co-Authored-By: Jerrai noreply@anthropic.com

Removes STUDIO_STORYBOARD_ENABLED. The storyboard view-mode toggle was
gated behind a default-off feature flag (VITE_STUDIO_ENABLE_STORYBOARD)
since #1529. With the storyboard experience now ready for broad
exposure, drop the gating and make the toggle available unconditionally.

Changes:
- packages/studio/src/components/editor/manualEditingAvailability.ts:
  delete the STUDIO_STORYBOARD_ENABLED constant.
- packages/studio/src/App.tsx: drop the import + FF arg to
  useViewModeState(). Hook is now called argument-free.
- packages/studio/src/components/StudioHeader.tsx: drop the import + the
  conditional-render guard on <ViewModeToggle />. The toggle always
  renders in StudioHeader's center slot.
- packages/studio/src/contexts/ViewModeContext.tsx: remove the enabled:
  boolean parameter from useViewModeState() and simplify.
- packages/studio/fixtures/storyboard-sample/README.md: drop the
  VITE_STUDIO_ENABLE_STORYBOARD=1 prefix from the preview command.

The VITE_STUDIO_ENABLE_STORYBOARD / VITE_STUDIO_STORYBOARD_ENABLED env
vars become no-ops after this change.

Co-Authored-By: Jerrai <noreply@anthropic.com>

@vanceingalls vanceingalls left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Stack status

Single PR. base = main, no descendants on feat-storyboard-default-available. The case-file admits no accomplices.

Verdict

LGTM with one 🟡 doc nit — the implementation is a clean flag-removal; only a single stale citation in a sibling skills doc warrants the magnifying glass.

Scope

Removes the default-off feature flag STUDIO_STORYBOARD_ENABLED (env: VITE_STUDIO_ENABLE_STORYBOARD / VITE_STUDIO_STORYBOARD_ENABLED) introduced in #1529. The constant is deleted from manualEditingAvailability.ts; App.tsx and StudioHeader.tsx shed their imports + guards; useViewModeState() loses its enabled: boolean parameter and the pin-to-timeline branch dies with it. Fixture README drops the VITE_STUDIO_ENABLE_STORYBOARD=1 prefix. The two env vars become inert — nothing else reads them.

Context snapshot

  • HEAD: 8108799d9f8241c812d5d053737e996490591bd5
  • Author: jrusso1020
  • Reviews on PR at read time: none (Magi tagged in parallel; pre-post freshness re-check before submission)
  • CI: Format / Lint / Fallow audit / Semantic title / SDK contract / runtime contract / Studio load smoke / regression / player-perf / CodeQL python — all green. Typecheck / Build / Test / CLI smoke (required) / Windows render / preview-regression — in progress at observation time, no failures.
  • mergeStateStatus BLOCKED is the standing review-required gate, not a CI fail.

Findings

✅ Deletion completeness — verified clean

Three forensic dragnets at HEAD confirm the constant is gone everywhere it lived:

  • STUDIO_STORYBOARD_ENABLED: only the three files this PR touches — manualEditingAvailability.ts (definition deleted), App.tsx (import + arg dropped), StudioHeader.tsx (import + && guard dropped). Zero stragglers.
  • VITE_STUDIO_STORYBOARD_ENABLED: only the (now-deleted) definition line.
  • VITE_STUDIO_ENABLE_STORYBOARD: only the fixture README (updated) and one stale skills doc reference (see 🟡 below).

✅ Hook-signature blast radius — verified clean

useViewModeState had exactly one call site in the repo — packages/studio/src/App.tsx:65, updated to argument-free. ViewModeProvider plumbing downstream (App.tsx:472, StoryboardFrameFocus.tsx via useViewMode) is unchanged because the value shape { viewMode, setViewMode } is preserved. No facade ripple.

✅ Reachability of the newly-ungated path — verified

Per the verify-new-path-reachable lens: under prod defaults the storyboard view is now reached two ways, both unconditional:

  1. <ViewModeToggle /> renders for every Studio session (StudioHeader.tsx:206).
  2. ?view=storyboard deep-link works on mount (readViewModeFromUrl() at ViewModeContext.tsx:50, no guard).

The popstate listener and writeViewModeToUrl similarly drop their enabled short-circuits — back/forward sync remains live. The downstream render branch in App.tsx:498 (viewModeValue.viewMode === "storyboard" && <StoryboardView .../>) is untouched and now actually firable. No dead-code residue.

✅ Decorative-gate / band-aid check — clean

This PR is the removal of a gate, not the addition of one. The simplified useViewModeState body is straightforwardly inert-free: no duplicate guards, no contradictory rules, no silent scope gaps. The JSDoc rewrite accurately reflects the new behavior.

🟡 Stale skills doc citation — skills/hyperframes-core/references/storyboard-format.md:5

HyperFrames Studio renders it as a contact sheet (the Storyboard view, behind `VITE_STUDIO_ENABLE_STORYBOARD=1`).

After this PR, VITE_STUDIO_ENABLE_STORYBOARD is a no-op env var. The "behind …" clause is now actively misleading — any agent (LLM or human) reading this skill will believe the flag still gates the view and will either set a dead env var or, worse, propagate the stale gate into a generated workflow. Suggested fix:

HyperFrames Studio renders it as a contact sheet (the Storyboard view, available by default; toggle in the header or deep-link with `?view=storyboard`).

Same patch motion as the fixture README change — one-line edit, no logic change.

💭 Cosmetic — JSDoc precision

The new doc comment on useViewModeState:

initial read from ?view=, toggling, popstate sync.

is fine and matches the body. The remark that "a scripted pushState/replaceState to ?view= would not be reflected here, by design" survives below the hook in the useEffect comment, so the contract for the agent-deep-link case stays documented. No change needed; just noting that the surviving comment is load-bearing for the agent-navigation use case and should stay even on future tidy-up passes.

Cross-PR notes

  • #1791 (storyboard-angle follow-ups) is in @hyperframes/core/storyboard parser/CLI territory — disjoint file set from this PR. No interaction risk.
  • No conflict with the recent producer/cache (#1781), keyframe-retiming (#1784), package-files (#1787), or id-less-media (#1790) work — those touch unrelated modules.

Summary

Textbook flag-removal: definition deleted, all consumers updated, hook signature simplified with zero downstream ripple, fixture doc kept in sync. The only investigatory residue is the sibling skills reference still describing the view as flag-gated — a single-line follow-up either in this PR or a quick stacked one. Not a merge blocker; flagged for hygiene.

Review by Via

@miguel-heygen miguel-heygen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Concur with Via's review. I independently checked the diff at 8108799d and do not see additional blockers.

Verified:

  • packages/studio/src/contexts/ViewModeContext.tsx:50 now owns view mode without the feature-flag parameter while preserving URL read/write and popstate cleanup.
  • packages/studio/src/App.tsx:65 is the only useViewModeState() call site and now matches the simplified signature; the storyboard branch remains behind the existing Studio project-resolution guard.
  • packages/studio/src/components/StudioHeader.tsx:206 exposes the toggle unconditionally, which matches the product intent.
  • rg confirms no STUDIO_STORYBOARD_ENABLED, VITE_STUDIO_ENABLE_STORYBOARD, or VITE_STUDIO_STORYBOARD_ENABLED references remain under packages/.

Only caveat is the same non-blocking doc stale ref Via flagged: skills/hyperframes-core/references/storyboard-format.md:5 still describes Storyboard as behind VITE_STUDIO_ENABLE_STORYBOARD=1. That should be updated, but it is not a runtime blocker for this PR.

CI has no failures at review time; only Smoke: global install and Windows checks are still pending.

Verdict: APPROVE
Reasoning: Runtime flag removal is complete and the newly default-available storyboard path is reachable without introducing a code-path regression; remaining issue is documentation hygiene only.
— Magi

The Storyboard view is now available by default (the FF removed in this PR);
storyboard-format.md no longer points at the dead env var, and skills-manifest
is regenerated for the hyperframes-core hash. Closes the Via/Magi review nit.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@miguel-heygen miguel-heygen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Re-reviewed the delta at fcac5b197.

The only changes since my prior approval are the stale Storyboard skill doc line and regenerated manifest hash:

  • skills/hyperframes-core/references/storyboard-format.md now correctly says Storyboard is available by default instead of behind VITE_STUDIO_ENABLE_STORYBOARD=1.
  • skills-manifest.json updates the hyperframes-core hash to match.

I re-checked the full diff context: the original flag removal remains complete, useViewModeState() still has a single updated call site, and the toggle/deep-link path remains unconditionally reachable. No new issues found.

CI has no failures at review time; several long jobs are still pending.

Verdict: APPROVE
Reasoning: prior doc nit is resolved and the manifest update is consistent with that doc change.
— Magi

@jrusso1020 jrusso1020 merged commit f24a1a9 into main Jun 30, 2026
39 checks passed
@jrusso1020 jrusso1020 deleted the feat-storyboard-default-available branch June 30, 2026 05:32
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.

3 participants