Skip to content

[codex] Launch the Living Arc transmedia story system - #90

Draft
frankxai wants to merge 2 commits into
mainfrom
agent/living-arc-transmedia-release
Draft

[codex] Launch the Living Arc transmedia story system#90
frankxai wants to merge 2 commits into
mainfrom
agent/living-arc-transmedia-release

Conversation

@frankxai

@frankxai frankxai commented Aug 4, 2026

Copy link
Copy Markdown
Owner

Summary

Launches The Living Arc as an original Arcanea transmedia story system, including the narrative foundation, a cinematic responsive web experience, Webtoon Episode 00, downloadable wallpapers, and a ready-to-publish social campaign.

What ships

  • original six-book story bible, Book I opening chapter, canon-staging proposal, and transmedia release strategy
  • interactive /story/the-living-arc experience with a remembered opening choice, Living Elements Concord tabs, expandable codex, format paths, and real wallpaper downloads
  • vertical /story/the-living-arc/webtoon/episode-0 prologue with reading progress and three original art panels
  • 4K desktop and phone wallpapers
  • eight-slide Instagram carousel + ordered ZIP
  • 18.13-second 1080×1920 Reel master, four source cards, and cover
  • Instagram, Reels, Stories, LinkedIn, X/Threads, and Discord launch copy with alt text
  • editable social-render script, asset-rights ledger, direction decision, and visual QA evidence
  • sitemap, metadata, Open Graph, structured data, and lore discoverability

Verification

  • tsc --noEmit
  • targeted ESLint with zero warnings
  • Next.js 16 production build: 133/133 static pages generated
  • browser proof at 375×844, 768×1024, and 1440×1000 on both routes
  • zero automated WCAG 2 A/AA and 2.1 A/AA violations in the final proof run
  • no horizontal overflow, broken visible images, or unlabeled images
  • opening-choice persistence, Water Concord selection, and Scroll → Episode 00 interaction checks passed
  • social renderer syntax, 8-file carousel ZIP, and 1080×1920 / 30 fps Reel master verified

Editorial and rights boundary

All new lore remains STAGING pending canon review. The system translates broad genre-level influences into Arcanea-original terminology, metaphysics, characters, symbols, and visuals. New generated masters are retained with provenance in the asset ledger; pre-existing draft art is flagged for provenance confirmation before external licensing.

@gemini-code-assist

Copy link
Copy Markdown

Caution

The consumer version of Gemini Code Assist on GitHub has been sunset. All code review activity has officially ceased.

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 0a7f5f09-3e7b-465d-9b14-42ef50b04222

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

frankxai commented Aug 4, 2026

Copy link
Copy Markdown
Owner Author

Automated CI triage

Relevant release gates are green:

  • Quality Gate — TypeScript/package tests, lint-debt report, and production build passed
  • Web excellence
  • CodeRabbit status
  • TypeScript and Security Audit jobs in the broader test suite
  • ✅ Local scoped ESLint, production build, responsive browser proof, interactions, and WCAG audit (details in the PR body and design-qa.md)

Three repository-wide workflows remain red for issues outside this PR’s changed paths:

  • Deploy Arcanea Applications fails in actions/setup-node before dependencies because it requests a pnpm cache before pnpm is installed.
  • Arcanea MVP CI/CD runs the full existing web lint backlog and reports 222 errors in unchanged files; the Living Arc paths pass the targeted zero-warning lint command.
  • Arcanea Test Suite reports existing CLI/package matrix failures; this PR changes no CLI or package test code.

I did not expand this story release into unrelated CI-infrastructure or legacy-lint remediation.

@claude

claude Bot commented Aug 4, 2026

Copy link
Copy Markdown

Review: The Living Arc transmedia launch

Reviewed the code changes (76 files, ~4.9k additions) against the repo's TypeScript/Next.js/CSS-Modules conventions. Overall this is a well-structured, self-contained feature: consistent CSS Modules split (foundation/narrative/codex/release), SSR-safe useSyncExternalStore usage, prefers-reduced-motion handling in every new stylesheet, and solid semantic markup/ARIA labeling on the webtoon page. A few things worth a look before merge:

Potential bugs

  • apps/web/components/story/living-arc/living-arc-experience.tsx — unguarded localStorage.setItem: readStoredChoice() wraps localStorage access in try/catch, but choose() calls window.localStorage.setItem(...) directly with no guard. In Safari private browsing (or any environment with storage disabled/full), setItem throws, which would break the "Keep the wound / Give him the memory" buttons with no fallback. Worth wrapping the write the same way the read is wrapped, so the UI degrades to "no persistence" instead of erroring.
  • Timing coupled across files by a magic number: choose() uses window.setTimeout(..., 420) to wait before scrolling to #first-memory, matching the 420ms choiceReveal CSS animation in living-arc-foundation.module.css. These two 420s are not derived from a shared constant, so a future edit to one duration will silently desync the scroll timing from the animation.

Code quality / maintainability

  • living-arc-styles.ts merges 4 CSS Modules via object spread ({...foundationStyles, ...narrativeStyles, ...codexStyles, ...releaseStyles}). CSS Modules class names are only unique within their own file — if two of these four files ever define the same class name, the spread silently lets the last one win with no compiler/lint error. Not a problem today (names look deliberately namespaced), but it's a landmine for the next contributor who adds a class without checking all four files.
  • --null as a CSS custom property name (in living-arc-foundation.module.css, reused across codex/narrative/release modules) is a confusing name for what's actually a near-black ink color (#05070d). Reads oddly at every color: var(--null) call site — a name like --ink-deep would be clearer.

Scope / risk

  • Site-wide domain default change bundled into a feature PR: apps/web/app/layout.tsx and apps/web/app/sitemap.ts both change the fallback base URL from https://arcanea.com to https://www.arcanea.ai when NEXT_PUBLIC_APP_URL isn't set. That's a global change to canonical URLs, Open Graph metadata, and the entire sitemap — not scoped to the new story routes. If this is an intentional rebrand it's fine, but it's easy to miss buried in a 76-file feature PR; worth calling out explicitly in the PR description and confirming the env var is actually set in production so this fallback doesn't silently change SEO metadata site-wide.

Test coverage

  • No unit/component tests were added for the new interactive logic — LivingArcExperience's choice persistence (readStoredChoice/choose) and WebtoonProgress's scroll-based completion tracking are both pure-ish, easily testable behaviors (localStorage round-trip, event dispatch, progress math) that currently have zero automated coverage. Given this repo's TDD-first guidance, at least a couple of unit tests around the choice-storage logic would be valuable.

Accessibility (minor)

  • The elementTabs / formatTabs widgets use role="tablist"/role="tab" on <button> elements but don't implement the WAI-ARIA APG roving-tabindex + arrow-key navigation pattern — every tab remains a normal Tab stop instead of a single tab-stop with Left/Right arrow switching. Functionally fine (click and Tab both work), but not a full ARIA tabs implementation.

Instrumentation (verify, don't necessarily change)

  • living-arc-experience.tsx and webtoon-progress.tsx dispatch several window.dispatchEvent(new CustomEvent('living_arc_...')) calls (living_arc_choice, living_arc_element, living_arc_format_interest, living_arc_chapter_start/complete). No in-repo listener for these events was found — if they're meant to be picked up by GTM or another external tag manager, that's fine, but worth double-checking the tag is actually configured, otherwise this is currently inert instrumentation.

Security

  • No issues found. The two dangerouslySetInnerHTML usages for JSON-LD (page.tsx, episode-0/page.tsx) only serialize static, hardcoded objects — no user input flows into them.

Nice touches worth calling out: the try/catch + version-tagged shape around localStorage reads, the SSR-safe useSyncExternalStore with an explicit getServerSnapshot, and consistent prefers-reduced-motion overrides in every new stylesheet.

@claude

claude Bot commented Aug 4, 2026

Copy link
Copy Markdown

Review: [codex] Launch the Living Arc transmedia story system

Reviewed the diff for apps/web/app/story/the-living-arc/**, apps/web/components/story/living-arc/**, scripts/render-living-arc-social.sh, and the small infra edits. Overall this is a well-executed, self-audited feature drop — the included design-qa.md and release-evidence/living-arc/visual-proof/report.json already document a real browser QA pass (WCAG checks, 375/768/1440 breakpoints, overflow fixes), which is exactly the standard this repos web-release-gate expects. Nice work closing that loop before opening the PR.

Code quality / correctness

  • Dead analytics instrumentation. living-arc-experience.tsx and webtoon-progress.tsx dispatch several CustomEvents (living_arc_choice, living_arc_element, living_arc_format_interest, living_arc_chapter_start, living_arc_chapter_complete), but no listener anywhere in apps/web consumes them (no dataLayer/gtag/analytics wiring picks these up). As written this is dead code — worth either wiring it to the actual analytics pipeline in this PR, or dropping it until that pipeline exists, so a future reader does not assume it is live telemetry.
  • Implicit cross-file CSS variable coupling. living-arc-styles.ts merges four separate CSS Modules (foundation, narrative, codex, release) into one flat object via spread. Tokens like --null, --gold, --moonbone, --teal-ink are only defined in .shell inside living-arc-foundation.module.css, but consumed in living-arc-codex.module.css and living-arc-narrative.module.css. This works today only because every consumer happens to render inside the .shell wrapper — there is no compiler check enforcing that, and CSS custom properties fail silently (not a build error) if that assumption ever breaks. Consider centralizing the token declarations in one clearly-canonical file instead of relying on one components local class to leak variables into sibling modules.
  • --null as a variable name is easy to misread as the CSS null/invalid-value case. webtoon.module.css uses --ink for a near-identical near-black (#03060a vs #05070d) — a consistent, clearer name across both would reduce confusion and duplication of near-identical dark tokens.
  • Style organization: related selectors are split across files somewhat arbitrarily — e.g. .villainImage lives in living-arc-foundation.module.css while .villainSection/.villainCopy (same section) live in living-arc-narrative.module.css. Not a bug, but makes it non-obvious where to edit a given sections styles.

Scope

  • .github/workflows/deploy-apps.yml (Node 18 to 22, pnpm install method) is bundled into this content-feature PR. The change looks correct — it matches packageManager: pnpm@8.15.0 and engines.node >= 20.9.0 in the root package.json — but is unrelated to "Launch the Living Arc" and would be easier to review/bisect as its own PR.
  • apps/web/app/layout.tsx and sitemap.ts switch the canonical/default domain from arcanea.com to www.arcanea.ai. That is a site-wide change (affects metadataBase for every pages OG/canonical URLs, not just this feature) riding along in a feature PR — worth confirming it is intentional and that arcanea.com still redirects, since this silently changes canonical URLs everywhere.

Security

Nothing concerning. scripts/render-living-arc-social.sh uses set -euo pipefail, quotes all variable expansions, and only operates on repo-local, hardcoded paths (no user input, not wired into CI) — safe as a local asset-rendering utility. No secrets, no dynamic eval/injection surface in the new TS/TSX either.

Performance

  • Good use of next/image with explicit sizes throughout, and loading=lazy on below-the-fold webtoon panels vs. priority on the first hero/panel images.
  • webtoon-progress.tsx scroll handler is rAF-throttled and passive — reasonable.
  • The bundled Instagram carousel zip and mp4 reel now ship under apps/web/public/..., which is correct for direct downloads, but worth double-checking these large binaries do not get pulled into any JS bundle analysis/build step unnecessarily — they should not, since they are static public assets, but flagging given the unusually large added-file count (77 files) in this PR.

Test coverage

  • No unit/component tests were added for the new interactive logic: readStoredChoice/subscribeToChoice (localStorage parsing with a version guard) in living-arc-experience.tsx, or the scroll-progress math in webtoon-progress.tsx. Both are small and cheap to unit test (malformed localStorage JSON, version !== 1, the scrollable <= 0 edge case). Given this repos TDD-first guidance, this is the main coverage gap — not blocking, since the PR body documents manual interaction QA, but automated coverage would catch regressions the visual-proof screenshots cannot.

Nit

  • page.tsxs seriesData.url and the webtoon pages episodeData.url/isPartOf.url hardcode https://www.arcanea.ai/... rather than deriving from NEXT_PUBLIC_APP_URL the way sitemap.ts/layout.tsx do. Minor inconsistency, fine in practice, but worth noting since the rest of the codebase treats the base URL as configurable.

Nothing here blocks merging; the flagged items are mostly maintainability/coupling concerns plus the dead-event-listener question, which is worth a quick confirm before shipping.

@frankxai

frankxai commented Aug 7, 2026

Copy link
Copy Markdown
Owner Author

PR hospital triage 2026-08-07 — PARK (draft · creative gate)

Disposition: leave draft. Living Arc transmedia system — creative gate.

  • Label suggestion: park · creative-gate

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.

1 participant