From a79d0128644aaea8612cb96665d4ba0c7435346f Mon Sep 17 00:00:00 2001 From: ThreeFish Date: Fri, 21 Aug 2026 13:56:52 +0800 Subject: [PATCH 1/6] =?UTF-8?q?refactor(influence):=20=E5=B0=86=20media/?= =?UTF-8?q?=20=E7=BA=AF=E9=87=8D=E5=91=BD=E5=90=8D=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E4=B8=BA=20apps/negentropy-influence/;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 191 个文件全部 R100 纯重命名(0 增 0 删、无任何内容改动),并采用分层布局 把「机制」与「内容」的边界显式化: - media/pipeline/ → apps/negentropy-influence/pipeline/ - media/series.{json,md} → apps/negentropy-influence/series.{json,md} - media/-video/ ×4 → apps/negentropy-influence/episodes/-video/ 分层只在成片侧加深一层,pipeline/ 相对子项目根的深度不变,因此 pipeline 内 全部 parents[1] 锚点(prepare_ref / refs / tts / conftest 及 13 个测试文件) 零改动;代价仅为 12 个薄包装的 parents[2]→[3] 与 series.json 的 4 个 path。 ⚠️ 纯重命名,不可单独落地;语义修复见后继提交。本提交之后树是坏的: 3 处仓库根锚点(pipeline.py / check_series.py / tts_sample.py)错位一级、 pre-commit 两处 files: 正则静默失配、28 行 .gitignore 规则失配(逐句音频与 声音克隆样本会变为可提交)、16 条相对链接失效。 🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist) Co-Authored-By: Aurelius Huang --- .../episodes}/claude-code-explained-video/README.md | 0 .../episodes}/claude-code-explained-video/pipeline.toml | 0 .../claude-code-explained-video/research/source-notes.md | 0 .../episodes}/claude-code-explained-video/research/sources.toml | 0 .../claude-code-explained-video/research/verification-2026-08.md | 0 .../episodes}/claude-code-explained-video/script/narration.json | 0 .../episodes}/claude-code-explained-video/script/narration.md | 0 .../episodes}/claude-code-explained-video/script/planning.md | 0 .../episodes}/claude-code-explained-video/script/storyboard.md | 0 .../claude-code-explained-video/scripts/build_narration.py | 0 .../episodes}/claude-code-explained-video/scripts/qa_frames.py | 0 .../episodes}/claude-code-explained-video/scripts/tts.py | 0 .../episodes}/claude-code-explained-video/video/.npmrc | 0 .../episodes}/claude-code-explained-video/video/package.json | 0 .../episodes}/claude-code-explained-video/video/pnpm-lock.yaml | 0 .../claude-code-explained-video/video/remotion.config.ts | 0 .../episodes}/claude-code-explained-video/video/src/Main.tsx | 0 .../episodes}/claude-code-explained-video/video/src/Root.tsx | 0 .../video/src/components/NarrationAudio.tsx | 0 .../video/src/components/SceneFade.tsx | 0 .../claude-code-explained-video/video/src/components/Subtitle.tsx | 0 .../claude-code-explained-video/video/src/components/cards.tsx | 0 .../claude-code-explained-video/video/src/components/motifs.tsx | 0 .../claude-code-explained-video/video/src/design/theme.ts | 0 .../episodes}/claude-code-explained-video/video/src/index.ts | 0 .../claude-code-explained-video/video/src/scenes/P0Hook.tsx | 0 .../claude-code-explained-video/video/src/scenes/P1Loop.tsx | 0 .../claude-code-explained-video/video/src/scenes/P2Dispatch.tsx | 0 .../claude-code-explained-video/video/src/scenes/P3Gates.tsx | 0 .../claude-code-explained-video/video/src/scenes/P4Hooks.tsx | 0 .../claude-code-explained-video/video/src/scenes/P5Stack.tsx | 0 .../claude-code-explained-video/video/src/scenes/P6Ending.tsx | 0 .../episodes}/claude-code-explained-video/video/src/timing.json | 0 .../episodes}/claude-code-explained-video/video/src/timing.ts | 0 .../episodes}/claude-code-explained-video/video/src/types.ts | 0 .../episodes}/claude-code-explained-video/video/tsconfig.json | 0 .../episodes}/experience-era-agents-video/README.md | 0 .../episodes}/experience-era-agents-video/pipeline.toml | 0 .../episodes}/experience-era-agents-video/research/paper-notes.md | 0 .../experience-era-agents-video/research/upgrade-2026-08-v3.md | 0 .../experience-era-agents-video/research/upgrade-2026-08.md | 0 .../episodes}/experience-era-agents-video/script/narration.json | 0 .../episodes}/experience-era-agents-video/script/narration.md | 0 .../episodes}/experience-era-agents-video/script/planning.md | 0 .../episodes}/experience-era-agents-video/script/storyboard.md | 0 .../experience-era-agents-video/scripts/build_narration.py | 0 .../episodes}/experience-era-agents-video/scripts/qa_frames.py | 0 .../episodes}/experience-era-agents-video/scripts/tts.py | 0 .../episodes}/experience-era-agents-video/video/.npmrc | 0 .../episodes}/experience-era-agents-video/video/package.json | 0 .../episodes}/experience-era-agents-video/video/pnpm-lock.yaml | 0 .../experience-era-agents-video/video/remotion.config.ts | 0 .../episodes}/experience-era-agents-video/video/src/Main.tsx | 0 .../episodes}/experience-era-agents-video/video/src/Root.tsx | 0 .../video/src/components/NarrationAudio.tsx | 0 .../video/src/components/SceneFade.tsx | 0 .../experience-era-agents-video/video/src/components/Subtitle.tsx | 0 .../experience-era-agents-video/video/src/components/cards.tsx | 0 .../experience-era-agents-video/video/src/design/theme.ts | 0 .../episodes}/experience-era-agents-video/video/src/index.ts | 0 .../experience-era-agents-video/video/src/scenes/P0Hook.tsx | 0 .../experience-era-agents-video/video/src/scenes/P1Anatomy.tsx | 0 .../video/src/scenes/P2FourDestinations.tsx | 0 .../experience-era-agents-video/video/src/scenes/P3Meta.tsx | 0 .../experience-era-agents-video/video/src/scenes/P4Eval.tsx | 0 .../experience-era-agents-video/video/src/scenes/P5Safety.tsx | 0 .../experience-era-agents-video/video/src/scenes/P6Ending.tsx | 0 .../episodes}/experience-era-agents-video/video/src/timing.json | 0 .../episodes}/experience-era-agents-video/video/src/timing.ts | 0 .../episodes}/experience-era-agents-video/video/src/types.ts | 0 .../episodes}/experience-era-agents-video/video/tsconfig.json | 0 .../episodes}/self-evolving-coding-agents-video/README.md | 0 .../episodes}/self-evolving-coding-agents-video/pipeline.toml | 0 .../self-evolving-coding-agents-video/research/paper-notes.md | 0 .../self-evolving-coding-agents-video/research/upgrade-2026-08.md | 0 .../self-evolving-coding-agents-video/script/narration.json | 0 .../self-evolving-coding-agents-video/script/narration.md | 0 .../self-evolving-coding-agents-video/script/planning.md | 0 .../self-evolving-coding-agents-video/script/storyboard.md | 0 .../self-evolving-coding-agents-video/scripts/build_narration.py | 0 .../self-evolving-coding-agents-video/scripts/qa_frames.py | 0 .../episodes}/self-evolving-coding-agents-video/scripts/tts.py | 0 .../episodes}/self-evolving-coding-agents-video/video/.npmrc | 0 .../self-evolving-coding-agents-video/video/package.json | 0 .../self-evolving-coding-agents-video/video/pnpm-lock.yaml | 0 .../self-evolving-coding-agents-video/video/remotion.config.ts | 0 .../self-evolving-coding-agents-video/video/src/Main.tsx | 0 .../self-evolving-coding-agents-video/video/src/Root.tsx | 0 .../video/src/components/NarrationAudio.tsx | 0 .../video/src/components/SceneFade.tsx | 0 .../video/src/components/Subtitle.tsx | 0 .../video/src/components/cards.tsx | 0 .../self-evolving-coding-agents-video/video/src/design/theme.ts | 0 .../self-evolving-coding-agents-video/video/src/index.ts | 0 .../self-evolving-coding-agents-video/video/src/scenes/P0Hook.tsx | 0 .../video/src/scenes/P1Boundary.tsx | 0 .../video/src/scenes/P2FiveObjects.tsx | 0 .../video/src/scenes/P3WhenEvidence.tsx | 0 .../self-evolving-coding-agents-video/video/src/scenes/P4Eval.tsx | 0 .../video/src/scenes/P5Trust.tsx | 0 .../video/src/scenes/P6Ending.tsx | 0 .../self-evolving-coding-agents-video/video/src}/timing.json | 0 .../self-evolving-coding-agents-video/video/src/timing.ts | 0 .../self-evolving-coding-agents-video/video/src/types.ts | 0 .../self-evolving-coding-agents-video/video/tsconfig.json | 0 .../episodes}/self-improving-agents-video/README.md | 0 .../episodes}/self-improving-agents-video/pipeline.toml | 0 .../episodes}/self-improving-agents-video/research/paper-notes.md | 0 .../self-improving-agents-video/research/upgrade-2026-08.md | 0 .../episodes}/self-improving-agents-video/script/narration.json | 0 .../episodes}/self-improving-agents-video/script/narration.md | 0 .../episodes}/self-improving-agents-video/script/planning.md | 0 .../episodes}/self-improving-agents-video/script/storyboard.md | 0 .../self-improving-agents-video/scripts/build_narration.py | 0 .../episodes}/self-improving-agents-video/scripts/qa_frames.py | 0 .../episodes}/self-improving-agents-video/scripts/tts.py | 0 .../episodes}/self-improving-agents-video/video/.npmrc | 0 .../episodes}/self-improving-agents-video/video/package.json | 0 .../episodes}/self-improving-agents-video/video/pnpm-lock.yaml | 0 .../self-improving-agents-video/video/remotion.config.ts | 0 .../episodes}/self-improving-agents-video/video/src/Main.tsx | 0 .../episodes}/self-improving-agents-video/video/src/Root.tsx | 0 .../video/src/components/NarrationAudio.tsx | 0 .../video/src/components/SceneFade.tsx | 0 .../self-improving-agents-video/video/src/components/Subtitle.tsx | 0 .../self-improving-agents-video/video/src/components/cards.tsx | 0 .../self-improving-agents-video/video/src/design/theme.ts | 0 .../episodes}/self-improving-agents-video/video/src/index.ts | 0 .../self-improving-agents-video/video/src/scenes/P0Cold.tsx | 0 .../self-improving-agents-video/video/src/scenes/P1Anatomy.tsx | 0 .../self-improving-agents-video/video/src/scenes/P2Brain.tsx | 0 .../self-improving-agents-video/video/src/scenes/P3Gear.tsx | 0 .../self-improving-agents-video/video/src/scenes/P4Balance.tsx | 0 .../self-improving-agents-video/video/src/scenes/P5Ending.tsx | 0 .../episodes/self-improving-agents-video}/video/src/timing.json | 0 .../episodes}/self-improving-agents-video/video/src/timing.ts | 0 .../episodes}/self-improving-agents-video/video/src/types.ts | 0 .../episodes}/self-improving-agents-video/video/tsconfig.json | 0 .../negentropy-influence}/pipeline/INDEXTTS-2.5-ADVANCED.md | 0 {media => apps/negentropy-influence}/pipeline/PRON-GLOSSARY.md | 0 {media => apps/negentropy-influence}/pipeline/README.md | 0 {media => apps/negentropy-influence}/pipeline/VOICE-CLONING.md | 0 .../negentropy-influence}/pipeline/scripts/build_narration.py | 0 {media => apps/negentropy-influence}/pipeline/scripts/captions.py | 0 .../negentropy-influence}/pipeline/scripts/check_script.py | 0 .../negentropy-influence}/pipeline/scripts/check_series.py | 0 .../negentropy-influence}/pipeline/scripts/paper_extract.py | 0 {media => apps/negentropy-influence}/pipeline/scripts/pipeline.py | 0 .../negentropy-influence}/pipeline/scripts/prepare_ref.py | 0 .../negentropy-influence}/pipeline/scripts/pron_marks.py | 0 .../negentropy-influence}/pipeline/scripts/prospect_ref.py | 0 .../negentropy-influence}/pipeline/scripts/qa_frames.py | 0 {media => apps/negentropy-influence}/pipeline/scripts/refs.py | 0 .../negentropy-influence}/pipeline/scripts/source_ledger.py | 0 {media => apps/negentropy-influence}/pipeline/scripts/timeline.py | 0 {media => apps/negentropy-influence}/pipeline/scripts/tts.py | 0 .../negentropy-influence}/pipeline/scripts/tts_bench.py | 0 .../negentropy-influence}/pipeline/scripts/tts_sample.py | 0 .../negentropy-influence}/pipeline/scripts/tts_server.py | 0 .../negentropy-influence}/pipeline/skills/01-source-extraction.md | 0 .../negentropy-influence}/pipeline/skills/02-planning.md | 0 .../negentropy-influence}/pipeline/skills/03-narration.md | 0 .../negentropy-influence}/pipeline/skills/04-verification.md | 0 .../negentropy-influence}/pipeline/skills/05-storyboard.md | 0 .../pipeline/skills/06-remotion-implementation.md | 0 .../negentropy-influence}/pipeline/skills/07-tts-voice.md | 0 .../negentropy-influence}/pipeline/skills/08-render-qa.md | 0 .../negentropy-influence}/pipeline/skills/09-final-render.md | 0 {media => apps/negentropy-influence}/pipeline/tests/conftest.py | 0 .../negentropy-influence}/pipeline/tests/fixtures/manifest.json | 0 .../negentropy-influence}/pipeline/tests/fixtures/narration.json | 0 .../negentropy-influence}/pipeline/tests/fixtures/narration.md | 0 .../negentropy-influence}/pipeline/tests/fixtures/storyboard.md | 0 .../negentropy-influence}/pipeline/tests/fixtures/theme.ts | 0 .../negentropy-influence/pipeline/tests/fixtures}/timing.json | 0 .../negentropy-influence}/pipeline/tests/test_build_narration.py | 0 .../negentropy-influence}/pipeline/tests/test_captions.py | 0 .../negentropy-influence}/pipeline/tests/test_check_script.py | 0 .../negentropy-influence}/pipeline/tests/test_check_series.py | 0 .../negentropy-influence}/pipeline/tests/test_digest.py | 0 .../negentropy-influence}/pipeline/tests/test_engine_guard.py | 0 .../negentropy-influence}/pipeline/tests/test_pron_marks.py | 0 .../negentropy-influence}/pipeline/tests/test_prospect_ref.py | 0 .../negentropy-influence}/pipeline/tests/test_qa_checks.py | 0 .../negentropy-influence}/pipeline/tests/test_source_ledger.py | 0 .../negentropy-influence}/pipeline/tests/test_timeline.py | 0 .../negentropy-influence}/pipeline/tests/test_tts_bench.py | 0 {media => apps/negentropy-influence}/pipeline/voices/README.md | 0 {media => apps/negentropy-influence}/pipeline/voices/refs.toml | 0 {media => apps/negentropy-influence}/series.json | 0 {media => apps/negentropy-influence}/series.md | 0 191 files changed, 0 insertions(+), 0 deletions(-) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/README.md (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/pipeline.toml (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/research/source-notes.md (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/research/sources.toml (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/research/verification-2026-08.md (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/script/narration.json (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/script/narration.md (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/script/planning.md (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/script/storyboard.md (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/scripts/build_narration.py (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/scripts/qa_frames.py (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/scripts/tts.py (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/.npmrc (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/package.json (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/pnpm-lock.yaml (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/remotion.config.ts (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/Main.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/Root.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/components/NarrationAudio.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/components/SceneFade.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/components/Subtitle.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/components/cards.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/components/motifs.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/design/theme.ts (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/index.ts (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/scenes/P0Hook.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/scenes/P1Loop.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/scenes/P2Dispatch.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/scenes/P3Gates.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/scenes/P4Hooks.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/scenes/P5Stack.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/scenes/P6Ending.tsx (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/timing.json (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/timing.ts (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/src/types.ts (100%) rename {media => apps/negentropy-influence/episodes}/claude-code-explained-video/video/tsconfig.json (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/README.md (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/pipeline.toml (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/research/paper-notes.md (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/research/upgrade-2026-08-v3.md (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/research/upgrade-2026-08.md (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/script/narration.json (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/script/narration.md (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/script/planning.md (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/script/storyboard.md (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/scripts/build_narration.py (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/scripts/qa_frames.py (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/scripts/tts.py (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/.npmrc (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/package.json (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/pnpm-lock.yaml (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/remotion.config.ts (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/Main.tsx (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/Root.tsx (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/components/NarrationAudio.tsx (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/components/SceneFade.tsx (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/components/Subtitle.tsx (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/components/cards.tsx (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/design/theme.ts (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/index.ts (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/scenes/P0Hook.tsx (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/scenes/P1Anatomy.tsx (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/scenes/P2FourDestinations.tsx (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/scenes/P3Meta.tsx (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/scenes/P4Eval.tsx (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/scenes/P5Safety.tsx (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/scenes/P6Ending.tsx (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/timing.json (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/timing.ts (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/src/types.ts (100%) rename {media => apps/negentropy-influence/episodes}/experience-era-agents-video/video/tsconfig.json (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/README.md (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/pipeline.toml (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/research/paper-notes.md (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/research/upgrade-2026-08.md (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/script/narration.json (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/script/narration.md (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/script/planning.md (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/script/storyboard.md (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/scripts/build_narration.py (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/scripts/qa_frames.py (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/scripts/tts.py (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/.npmrc (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/package.json (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/pnpm-lock.yaml (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/remotion.config.ts (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/Main.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/Root.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/components/NarrationAudio.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/components/SceneFade.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/components/Subtitle.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/components/cards.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/design/theme.ts (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/index.ts (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/scenes/P0Hook.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/scenes/P1Boundary.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/scenes/P2FiveObjects.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/scenes/P3WhenEvidence.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/scenes/P4Eval.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/scenes/P5Trust.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/scenes/P6Ending.tsx (100%) rename {media/pipeline/tests/fixtures => apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src}/timing.json (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/timing.ts (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/src/types.ts (100%) rename {media => apps/negentropy-influence/episodes}/self-evolving-coding-agents-video/video/tsconfig.json (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/README.md (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/pipeline.toml (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/research/paper-notes.md (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/research/upgrade-2026-08.md (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/script/narration.json (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/script/narration.md (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/script/planning.md (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/script/storyboard.md (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/scripts/build_narration.py (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/scripts/qa_frames.py (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/scripts/tts.py (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/.npmrc (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/package.json (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/pnpm-lock.yaml (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/remotion.config.ts (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/Main.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/Root.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/components/NarrationAudio.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/components/SceneFade.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/components/Subtitle.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/components/cards.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/design/theme.ts (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/index.ts (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/scenes/P0Cold.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/scenes/P1Anatomy.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/scenes/P2Brain.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/scenes/P3Gear.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/scenes/P4Balance.tsx (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/scenes/P5Ending.tsx (100%) rename {media/self-evolving-coding-agents-video => apps/negentropy-influence/episodes/self-improving-agents-video}/video/src/timing.json (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/timing.ts (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/src/types.ts (100%) rename {media => apps/negentropy-influence/episodes}/self-improving-agents-video/video/tsconfig.json (100%) rename {media => apps/negentropy-influence}/pipeline/INDEXTTS-2.5-ADVANCED.md (100%) rename {media => apps/negentropy-influence}/pipeline/PRON-GLOSSARY.md (100%) rename {media => apps/negentropy-influence}/pipeline/README.md (100%) rename {media => apps/negentropy-influence}/pipeline/VOICE-CLONING.md (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/build_narration.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/captions.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/check_script.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/check_series.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/paper_extract.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/pipeline.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/prepare_ref.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/pron_marks.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/prospect_ref.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/qa_frames.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/refs.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/source_ledger.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/timeline.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/tts.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/tts_bench.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/tts_sample.py (100%) rename {media => apps/negentropy-influence}/pipeline/scripts/tts_server.py (100%) rename {media => apps/negentropy-influence}/pipeline/skills/01-source-extraction.md (100%) rename {media => apps/negentropy-influence}/pipeline/skills/02-planning.md (100%) rename {media => apps/negentropy-influence}/pipeline/skills/03-narration.md (100%) rename {media => apps/negentropy-influence}/pipeline/skills/04-verification.md (100%) rename {media => apps/negentropy-influence}/pipeline/skills/05-storyboard.md (100%) rename {media => apps/negentropy-influence}/pipeline/skills/06-remotion-implementation.md (100%) rename {media => apps/negentropy-influence}/pipeline/skills/07-tts-voice.md (100%) rename {media => apps/negentropy-influence}/pipeline/skills/08-render-qa.md (100%) rename {media => apps/negentropy-influence}/pipeline/skills/09-final-render.md (100%) rename {media => apps/negentropy-influence}/pipeline/tests/conftest.py (100%) rename {media => apps/negentropy-influence}/pipeline/tests/fixtures/manifest.json (100%) rename {media => apps/negentropy-influence}/pipeline/tests/fixtures/narration.json (100%) rename {media => apps/negentropy-influence}/pipeline/tests/fixtures/narration.md (100%) rename {media => apps/negentropy-influence}/pipeline/tests/fixtures/storyboard.md (100%) rename {media => apps/negentropy-influence}/pipeline/tests/fixtures/theme.ts (100%) rename {media/self-improving-agents-video/video/src => apps/negentropy-influence/pipeline/tests/fixtures}/timing.json (100%) rename {media => apps/negentropy-influence}/pipeline/tests/test_build_narration.py (100%) rename {media => apps/negentropy-influence}/pipeline/tests/test_captions.py (100%) rename {media => apps/negentropy-influence}/pipeline/tests/test_check_script.py (100%) rename {media => apps/negentropy-influence}/pipeline/tests/test_check_series.py (100%) rename {media => apps/negentropy-influence}/pipeline/tests/test_digest.py (100%) rename {media => apps/negentropy-influence}/pipeline/tests/test_engine_guard.py (100%) rename {media => apps/negentropy-influence}/pipeline/tests/test_pron_marks.py (100%) rename {media => apps/negentropy-influence}/pipeline/tests/test_prospect_ref.py (100%) rename {media => apps/negentropy-influence}/pipeline/tests/test_qa_checks.py (100%) rename {media => apps/negentropy-influence}/pipeline/tests/test_source_ledger.py (100%) rename {media => apps/negentropy-influence}/pipeline/tests/test_timeline.py (100%) rename {media => apps/negentropy-influence}/pipeline/tests/test_tts_bench.py (100%) rename {media => apps/negentropy-influence}/pipeline/voices/README.md (100%) rename {media => apps/negentropy-influence}/pipeline/voices/refs.toml (100%) rename {media => apps/negentropy-influence}/series.json (100%) rename {media => apps/negentropy-influence}/series.md (100%) diff --git a/media/claude-code-explained-video/README.md b/apps/negentropy-influence/episodes/claude-code-explained-video/README.md similarity index 100% rename from media/claude-code-explained-video/README.md rename to apps/negentropy-influence/episodes/claude-code-explained-video/README.md diff --git a/media/claude-code-explained-video/pipeline.toml b/apps/negentropy-influence/episodes/claude-code-explained-video/pipeline.toml similarity index 100% rename from media/claude-code-explained-video/pipeline.toml rename to apps/negentropy-influence/episodes/claude-code-explained-video/pipeline.toml diff --git a/media/claude-code-explained-video/research/source-notes.md b/apps/negentropy-influence/episodes/claude-code-explained-video/research/source-notes.md similarity index 100% rename from media/claude-code-explained-video/research/source-notes.md rename to apps/negentropy-influence/episodes/claude-code-explained-video/research/source-notes.md diff --git a/media/claude-code-explained-video/research/sources.toml b/apps/negentropy-influence/episodes/claude-code-explained-video/research/sources.toml similarity index 100% rename from media/claude-code-explained-video/research/sources.toml rename to apps/negentropy-influence/episodes/claude-code-explained-video/research/sources.toml diff --git a/media/claude-code-explained-video/research/verification-2026-08.md b/apps/negentropy-influence/episodes/claude-code-explained-video/research/verification-2026-08.md similarity index 100% rename from media/claude-code-explained-video/research/verification-2026-08.md rename to apps/negentropy-influence/episodes/claude-code-explained-video/research/verification-2026-08.md diff --git a/media/claude-code-explained-video/script/narration.json b/apps/negentropy-influence/episodes/claude-code-explained-video/script/narration.json similarity index 100% rename from media/claude-code-explained-video/script/narration.json rename to apps/negentropy-influence/episodes/claude-code-explained-video/script/narration.json diff --git a/media/claude-code-explained-video/script/narration.md b/apps/negentropy-influence/episodes/claude-code-explained-video/script/narration.md similarity index 100% rename from media/claude-code-explained-video/script/narration.md rename to apps/negentropy-influence/episodes/claude-code-explained-video/script/narration.md diff --git a/media/claude-code-explained-video/script/planning.md b/apps/negentropy-influence/episodes/claude-code-explained-video/script/planning.md similarity index 100% rename from media/claude-code-explained-video/script/planning.md rename to apps/negentropy-influence/episodes/claude-code-explained-video/script/planning.md diff --git a/media/claude-code-explained-video/script/storyboard.md b/apps/negentropy-influence/episodes/claude-code-explained-video/script/storyboard.md similarity index 100% rename from media/claude-code-explained-video/script/storyboard.md rename to apps/negentropy-influence/episodes/claude-code-explained-video/script/storyboard.md diff --git a/media/claude-code-explained-video/scripts/build_narration.py b/apps/negentropy-influence/episodes/claude-code-explained-video/scripts/build_narration.py similarity index 100% rename from media/claude-code-explained-video/scripts/build_narration.py rename to apps/negentropy-influence/episodes/claude-code-explained-video/scripts/build_narration.py diff --git a/media/claude-code-explained-video/scripts/qa_frames.py b/apps/negentropy-influence/episodes/claude-code-explained-video/scripts/qa_frames.py similarity index 100% rename from media/claude-code-explained-video/scripts/qa_frames.py rename to apps/negentropy-influence/episodes/claude-code-explained-video/scripts/qa_frames.py diff --git a/media/claude-code-explained-video/scripts/tts.py b/apps/negentropy-influence/episodes/claude-code-explained-video/scripts/tts.py similarity index 100% rename from media/claude-code-explained-video/scripts/tts.py rename to apps/negentropy-influence/episodes/claude-code-explained-video/scripts/tts.py diff --git a/media/claude-code-explained-video/video/.npmrc b/apps/negentropy-influence/episodes/claude-code-explained-video/video/.npmrc similarity index 100% rename from media/claude-code-explained-video/video/.npmrc rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/.npmrc diff --git a/media/claude-code-explained-video/video/package.json b/apps/negentropy-influence/episodes/claude-code-explained-video/video/package.json similarity index 100% rename from media/claude-code-explained-video/video/package.json rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/package.json diff --git a/media/claude-code-explained-video/video/pnpm-lock.yaml b/apps/negentropy-influence/episodes/claude-code-explained-video/video/pnpm-lock.yaml similarity index 100% rename from media/claude-code-explained-video/video/pnpm-lock.yaml rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/pnpm-lock.yaml diff --git a/media/claude-code-explained-video/video/remotion.config.ts b/apps/negentropy-influence/episodes/claude-code-explained-video/video/remotion.config.ts similarity index 100% rename from media/claude-code-explained-video/video/remotion.config.ts rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/remotion.config.ts diff --git a/media/claude-code-explained-video/video/src/Main.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/Main.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/Main.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/Main.tsx diff --git a/media/claude-code-explained-video/video/src/Root.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/Root.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/Root.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/Root.tsx diff --git a/media/claude-code-explained-video/video/src/components/NarrationAudio.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/components/NarrationAudio.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/components/NarrationAudio.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/components/NarrationAudio.tsx diff --git a/media/claude-code-explained-video/video/src/components/SceneFade.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/components/SceneFade.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/components/SceneFade.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/components/SceneFade.tsx diff --git a/media/claude-code-explained-video/video/src/components/Subtitle.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/components/Subtitle.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/components/Subtitle.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/components/Subtitle.tsx diff --git a/media/claude-code-explained-video/video/src/components/cards.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/components/cards.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/components/cards.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/components/cards.tsx diff --git a/media/claude-code-explained-video/video/src/components/motifs.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/components/motifs.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/components/motifs.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/components/motifs.tsx diff --git a/media/claude-code-explained-video/video/src/design/theme.ts b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/design/theme.ts similarity index 100% rename from media/claude-code-explained-video/video/src/design/theme.ts rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/design/theme.ts diff --git a/media/claude-code-explained-video/video/src/index.ts b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/index.ts similarity index 100% rename from media/claude-code-explained-video/video/src/index.ts rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/index.ts diff --git a/media/claude-code-explained-video/video/src/scenes/P0Hook.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P0Hook.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/scenes/P0Hook.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P0Hook.tsx diff --git a/media/claude-code-explained-video/video/src/scenes/P1Loop.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P1Loop.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/scenes/P1Loop.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P1Loop.tsx diff --git a/media/claude-code-explained-video/video/src/scenes/P2Dispatch.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P2Dispatch.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/scenes/P2Dispatch.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P2Dispatch.tsx diff --git a/media/claude-code-explained-video/video/src/scenes/P3Gates.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P3Gates.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/scenes/P3Gates.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P3Gates.tsx diff --git a/media/claude-code-explained-video/video/src/scenes/P4Hooks.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P4Hooks.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/scenes/P4Hooks.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P4Hooks.tsx diff --git a/media/claude-code-explained-video/video/src/scenes/P5Stack.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P5Stack.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/scenes/P5Stack.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P5Stack.tsx diff --git a/media/claude-code-explained-video/video/src/scenes/P6Ending.tsx b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P6Ending.tsx similarity index 100% rename from media/claude-code-explained-video/video/src/scenes/P6Ending.tsx rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/scenes/P6Ending.tsx diff --git a/media/claude-code-explained-video/video/src/timing.json b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/timing.json similarity index 100% rename from media/claude-code-explained-video/video/src/timing.json rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/timing.json diff --git a/media/claude-code-explained-video/video/src/timing.ts b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/timing.ts similarity index 100% rename from media/claude-code-explained-video/video/src/timing.ts rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/timing.ts diff --git a/media/claude-code-explained-video/video/src/types.ts b/apps/negentropy-influence/episodes/claude-code-explained-video/video/src/types.ts similarity index 100% rename from media/claude-code-explained-video/video/src/types.ts rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/src/types.ts diff --git a/media/claude-code-explained-video/video/tsconfig.json b/apps/negentropy-influence/episodes/claude-code-explained-video/video/tsconfig.json similarity index 100% rename from media/claude-code-explained-video/video/tsconfig.json rename to apps/negentropy-influence/episodes/claude-code-explained-video/video/tsconfig.json diff --git a/media/experience-era-agents-video/README.md b/apps/negentropy-influence/episodes/experience-era-agents-video/README.md similarity index 100% rename from media/experience-era-agents-video/README.md rename to apps/negentropy-influence/episodes/experience-era-agents-video/README.md diff --git a/media/experience-era-agents-video/pipeline.toml b/apps/negentropy-influence/episodes/experience-era-agents-video/pipeline.toml similarity index 100% rename from media/experience-era-agents-video/pipeline.toml rename to apps/negentropy-influence/episodes/experience-era-agents-video/pipeline.toml diff --git a/media/experience-era-agents-video/research/paper-notes.md b/apps/negentropy-influence/episodes/experience-era-agents-video/research/paper-notes.md similarity index 100% rename from media/experience-era-agents-video/research/paper-notes.md rename to apps/negentropy-influence/episodes/experience-era-agents-video/research/paper-notes.md diff --git a/media/experience-era-agents-video/research/upgrade-2026-08-v3.md b/apps/negentropy-influence/episodes/experience-era-agents-video/research/upgrade-2026-08-v3.md similarity index 100% rename from media/experience-era-agents-video/research/upgrade-2026-08-v3.md rename to apps/negentropy-influence/episodes/experience-era-agents-video/research/upgrade-2026-08-v3.md diff --git a/media/experience-era-agents-video/research/upgrade-2026-08.md b/apps/negentropy-influence/episodes/experience-era-agents-video/research/upgrade-2026-08.md similarity index 100% rename from media/experience-era-agents-video/research/upgrade-2026-08.md rename to apps/negentropy-influence/episodes/experience-era-agents-video/research/upgrade-2026-08.md diff --git a/media/experience-era-agents-video/script/narration.json b/apps/negentropy-influence/episodes/experience-era-agents-video/script/narration.json similarity index 100% rename from media/experience-era-agents-video/script/narration.json rename to apps/negentropy-influence/episodes/experience-era-agents-video/script/narration.json diff --git a/media/experience-era-agents-video/script/narration.md b/apps/negentropy-influence/episodes/experience-era-agents-video/script/narration.md similarity index 100% rename from media/experience-era-agents-video/script/narration.md rename to apps/negentropy-influence/episodes/experience-era-agents-video/script/narration.md diff --git a/media/experience-era-agents-video/script/planning.md b/apps/negentropy-influence/episodes/experience-era-agents-video/script/planning.md similarity index 100% rename from media/experience-era-agents-video/script/planning.md rename to apps/negentropy-influence/episodes/experience-era-agents-video/script/planning.md diff --git a/media/experience-era-agents-video/script/storyboard.md b/apps/negentropy-influence/episodes/experience-era-agents-video/script/storyboard.md similarity index 100% rename from media/experience-era-agents-video/script/storyboard.md rename to apps/negentropy-influence/episodes/experience-era-agents-video/script/storyboard.md diff --git a/media/experience-era-agents-video/scripts/build_narration.py b/apps/negentropy-influence/episodes/experience-era-agents-video/scripts/build_narration.py similarity index 100% rename from media/experience-era-agents-video/scripts/build_narration.py rename to apps/negentropy-influence/episodes/experience-era-agents-video/scripts/build_narration.py diff --git a/media/experience-era-agents-video/scripts/qa_frames.py b/apps/negentropy-influence/episodes/experience-era-agents-video/scripts/qa_frames.py similarity index 100% rename from media/experience-era-agents-video/scripts/qa_frames.py rename to apps/negentropy-influence/episodes/experience-era-agents-video/scripts/qa_frames.py diff --git a/media/experience-era-agents-video/scripts/tts.py b/apps/negentropy-influence/episodes/experience-era-agents-video/scripts/tts.py similarity index 100% rename from media/experience-era-agents-video/scripts/tts.py rename to apps/negentropy-influence/episodes/experience-era-agents-video/scripts/tts.py diff --git a/media/experience-era-agents-video/video/.npmrc b/apps/negentropy-influence/episodes/experience-era-agents-video/video/.npmrc similarity index 100% rename from media/experience-era-agents-video/video/.npmrc rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/.npmrc diff --git a/media/experience-era-agents-video/video/package.json b/apps/negentropy-influence/episodes/experience-era-agents-video/video/package.json similarity index 100% rename from media/experience-era-agents-video/video/package.json rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/package.json diff --git a/media/experience-era-agents-video/video/pnpm-lock.yaml b/apps/negentropy-influence/episodes/experience-era-agents-video/video/pnpm-lock.yaml similarity index 100% rename from media/experience-era-agents-video/video/pnpm-lock.yaml rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/pnpm-lock.yaml diff --git a/media/experience-era-agents-video/video/remotion.config.ts b/apps/negentropy-influence/episodes/experience-era-agents-video/video/remotion.config.ts similarity index 100% rename from media/experience-era-agents-video/video/remotion.config.ts rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/remotion.config.ts diff --git a/media/experience-era-agents-video/video/src/Main.tsx b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/Main.tsx similarity index 100% rename from media/experience-era-agents-video/video/src/Main.tsx rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/Main.tsx diff --git a/media/experience-era-agents-video/video/src/Root.tsx b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/Root.tsx similarity index 100% rename from media/experience-era-agents-video/video/src/Root.tsx rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/Root.tsx diff --git a/media/experience-era-agents-video/video/src/components/NarrationAudio.tsx b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/components/NarrationAudio.tsx similarity index 100% rename from media/experience-era-agents-video/video/src/components/NarrationAudio.tsx rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/components/NarrationAudio.tsx diff --git a/media/experience-era-agents-video/video/src/components/SceneFade.tsx b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/components/SceneFade.tsx similarity index 100% rename from media/experience-era-agents-video/video/src/components/SceneFade.tsx rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/components/SceneFade.tsx diff --git a/media/experience-era-agents-video/video/src/components/Subtitle.tsx b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/components/Subtitle.tsx similarity index 100% rename from media/experience-era-agents-video/video/src/components/Subtitle.tsx rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/components/Subtitle.tsx diff --git a/media/experience-era-agents-video/video/src/components/cards.tsx b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/components/cards.tsx similarity index 100% rename from media/experience-era-agents-video/video/src/components/cards.tsx rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/components/cards.tsx diff --git a/media/experience-era-agents-video/video/src/design/theme.ts b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/design/theme.ts similarity index 100% rename from media/experience-era-agents-video/video/src/design/theme.ts rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/design/theme.ts diff --git a/media/experience-era-agents-video/video/src/index.ts b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/index.ts similarity index 100% rename from media/experience-era-agents-video/video/src/index.ts rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/index.ts diff --git a/media/experience-era-agents-video/video/src/scenes/P0Hook.tsx b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P0Hook.tsx similarity index 100% rename from media/experience-era-agents-video/video/src/scenes/P0Hook.tsx rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P0Hook.tsx diff --git a/media/experience-era-agents-video/video/src/scenes/P1Anatomy.tsx b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P1Anatomy.tsx similarity index 100% rename from media/experience-era-agents-video/video/src/scenes/P1Anatomy.tsx rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P1Anatomy.tsx diff --git a/media/experience-era-agents-video/video/src/scenes/P2FourDestinations.tsx b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P2FourDestinations.tsx similarity index 100% rename from media/experience-era-agents-video/video/src/scenes/P2FourDestinations.tsx rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P2FourDestinations.tsx diff --git a/media/experience-era-agents-video/video/src/scenes/P3Meta.tsx b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P3Meta.tsx similarity index 100% rename from media/experience-era-agents-video/video/src/scenes/P3Meta.tsx rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P3Meta.tsx diff --git a/media/experience-era-agents-video/video/src/scenes/P4Eval.tsx b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P4Eval.tsx similarity index 100% rename from media/experience-era-agents-video/video/src/scenes/P4Eval.tsx rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P4Eval.tsx diff --git a/media/experience-era-agents-video/video/src/scenes/P5Safety.tsx b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P5Safety.tsx similarity index 100% rename from media/experience-era-agents-video/video/src/scenes/P5Safety.tsx rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P5Safety.tsx diff --git a/media/experience-era-agents-video/video/src/scenes/P6Ending.tsx b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P6Ending.tsx similarity index 100% rename from media/experience-era-agents-video/video/src/scenes/P6Ending.tsx rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/scenes/P6Ending.tsx diff --git a/media/experience-era-agents-video/video/src/timing.json b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/timing.json similarity index 100% rename from media/experience-era-agents-video/video/src/timing.json rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/timing.json diff --git a/media/experience-era-agents-video/video/src/timing.ts b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/timing.ts similarity index 100% rename from media/experience-era-agents-video/video/src/timing.ts rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/timing.ts diff --git a/media/experience-era-agents-video/video/src/types.ts b/apps/negentropy-influence/episodes/experience-era-agents-video/video/src/types.ts similarity index 100% rename from media/experience-era-agents-video/video/src/types.ts rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/src/types.ts diff --git a/media/experience-era-agents-video/video/tsconfig.json b/apps/negentropy-influence/episodes/experience-era-agents-video/video/tsconfig.json similarity index 100% rename from media/experience-era-agents-video/video/tsconfig.json rename to apps/negentropy-influence/episodes/experience-era-agents-video/video/tsconfig.json diff --git a/media/self-evolving-coding-agents-video/README.md b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/README.md similarity index 100% rename from media/self-evolving-coding-agents-video/README.md rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/README.md diff --git a/media/self-evolving-coding-agents-video/pipeline.toml b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/pipeline.toml similarity index 100% rename from media/self-evolving-coding-agents-video/pipeline.toml rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/pipeline.toml diff --git a/media/self-evolving-coding-agents-video/research/paper-notes.md b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/research/paper-notes.md similarity index 100% rename from media/self-evolving-coding-agents-video/research/paper-notes.md rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/research/paper-notes.md diff --git a/media/self-evolving-coding-agents-video/research/upgrade-2026-08.md b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/research/upgrade-2026-08.md similarity index 100% rename from media/self-evolving-coding-agents-video/research/upgrade-2026-08.md rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/research/upgrade-2026-08.md diff --git a/media/self-evolving-coding-agents-video/script/narration.json b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/script/narration.json similarity index 100% rename from media/self-evolving-coding-agents-video/script/narration.json rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/script/narration.json diff --git a/media/self-evolving-coding-agents-video/script/narration.md b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/script/narration.md similarity index 100% rename from media/self-evolving-coding-agents-video/script/narration.md rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/script/narration.md diff --git a/media/self-evolving-coding-agents-video/script/planning.md b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/script/planning.md similarity index 100% rename from media/self-evolving-coding-agents-video/script/planning.md rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/script/planning.md diff --git a/media/self-evolving-coding-agents-video/script/storyboard.md b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/script/storyboard.md similarity index 100% rename from media/self-evolving-coding-agents-video/script/storyboard.md rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/script/storyboard.md diff --git a/media/self-evolving-coding-agents-video/scripts/build_narration.py b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/scripts/build_narration.py similarity index 100% rename from media/self-evolving-coding-agents-video/scripts/build_narration.py rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/scripts/build_narration.py diff --git a/media/self-evolving-coding-agents-video/scripts/qa_frames.py b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/scripts/qa_frames.py similarity index 100% rename from media/self-evolving-coding-agents-video/scripts/qa_frames.py rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/scripts/qa_frames.py diff --git a/media/self-evolving-coding-agents-video/scripts/tts.py b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/scripts/tts.py similarity index 100% rename from media/self-evolving-coding-agents-video/scripts/tts.py rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/scripts/tts.py diff --git a/media/self-evolving-coding-agents-video/video/.npmrc b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/.npmrc similarity index 100% rename from media/self-evolving-coding-agents-video/video/.npmrc rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/.npmrc diff --git a/media/self-evolving-coding-agents-video/video/package.json b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/package.json similarity index 100% rename from media/self-evolving-coding-agents-video/video/package.json rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/package.json diff --git a/media/self-evolving-coding-agents-video/video/pnpm-lock.yaml b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/pnpm-lock.yaml similarity index 100% rename from media/self-evolving-coding-agents-video/video/pnpm-lock.yaml rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/pnpm-lock.yaml diff --git a/media/self-evolving-coding-agents-video/video/remotion.config.ts b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/remotion.config.ts similarity index 100% rename from media/self-evolving-coding-agents-video/video/remotion.config.ts rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/remotion.config.ts diff --git a/media/self-evolving-coding-agents-video/video/src/Main.tsx b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/Main.tsx similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/Main.tsx rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/Main.tsx diff --git a/media/self-evolving-coding-agents-video/video/src/Root.tsx b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/Root.tsx similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/Root.tsx rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/Root.tsx diff --git a/media/self-evolving-coding-agents-video/video/src/components/NarrationAudio.tsx b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/components/NarrationAudio.tsx similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/components/NarrationAudio.tsx rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/components/NarrationAudio.tsx diff --git a/media/self-evolving-coding-agents-video/video/src/components/SceneFade.tsx b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/components/SceneFade.tsx similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/components/SceneFade.tsx rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/components/SceneFade.tsx diff --git a/media/self-evolving-coding-agents-video/video/src/components/Subtitle.tsx b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/components/Subtitle.tsx similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/components/Subtitle.tsx rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/components/Subtitle.tsx diff --git a/media/self-evolving-coding-agents-video/video/src/components/cards.tsx b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/components/cards.tsx similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/components/cards.tsx rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/components/cards.tsx diff --git a/media/self-evolving-coding-agents-video/video/src/design/theme.ts b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/design/theme.ts similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/design/theme.ts rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/design/theme.ts diff --git a/media/self-evolving-coding-agents-video/video/src/index.ts b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/index.ts similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/index.ts rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/index.ts diff --git a/media/self-evolving-coding-agents-video/video/src/scenes/P0Hook.tsx b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P0Hook.tsx similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/scenes/P0Hook.tsx rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P0Hook.tsx diff --git a/media/self-evolving-coding-agents-video/video/src/scenes/P1Boundary.tsx b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P1Boundary.tsx similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/scenes/P1Boundary.tsx rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P1Boundary.tsx diff --git a/media/self-evolving-coding-agents-video/video/src/scenes/P2FiveObjects.tsx b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P2FiveObjects.tsx similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/scenes/P2FiveObjects.tsx rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P2FiveObjects.tsx diff --git a/media/self-evolving-coding-agents-video/video/src/scenes/P3WhenEvidence.tsx b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P3WhenEvidence.tsx similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/scenes/P3WhenEvidence.tsx rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P3WhenEvidence.tsx diff --git a/media/self-evolving-coding-agents-video/video/src/scenes/P4Eval.tsx b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P4Eval.tsx similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/scenes/P4Eval.tsx rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P4Eval.tsx diff --git a/media/self-evolving-coding-agents-video/video/src/scenes/P5Trust.tsx b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P5Trust.tsx similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/scenes/P5Trust.tsx rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P5Trust.tsx diff --git a/media/self-evolving-coding-agents-video/video/src/scenes/P6Ending.tsx b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P6Ending.tsx similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/scenes/P6Ending.tsx rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/scenes/P6Ending.tsx diff --git a/media/pipeline/tests/fixtures/timing.json b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/timing.json similarity index 100% rename from media/pipeline/tests/fixtures/timing.json rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/timing.json diff --git a/media/self-evolving-coding-agents-video/video/src/timing.ts b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/timing.ts similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/timing.ts rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/timing.ts diff --git a/media/self-evolving-coding-agents-video/video/src/types.ts b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/types.ts similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/types.ts rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/src/types.ts diff --git a/media/self-evolving-coding-agents-video/video/tsconfig.json b/apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/tsconfig.json similarity index 100% rename from media/self-evolving-coding-agents-video/video/tsconfig.json rename to apps/negentropy-influence/episodes/self-evolving-coding-agents-video/video/tsconfig.json diff --git a/media/self-improving-agents-video/README.md b/apps/negentropy-influence/episodes/self-improving-agents-video/README.md similarity index 100% rename from media/self-improving-agents-video/README.md rename to apps/negentropy-influence/episodes/self-improving-agents-video/README.md diff --git a/media/self-improving-agents-video/pipeline.toml b/apps/negentropy-influence/episodes/self-improving-agents-video/pipeline.toml similarity index 100% rename from media/self-improving-agents-video/pipeline.toml rename to apps/negentropy-influence/episodes/self-improving-agents-video/pipeline.toml diff --git a/media/self-improving-agents-video/research/paper-notes.md b/apps/negentropy-influence/episodes/self-improving-agents-video/research/paper-notes.md similarity index 100% rename from media/self-improving-agents-video/research/paper-notes.md rename to apps/negentropy-influence/episodes/self-improving-agents-video/research/paper-notes.md diff --git a/media/self-improving-agents-video/research/upgrade-2026-08.md b/apps/negentropy-influence/episodes/self-improving-agents-video/research/upgrade-2026-08.md similarity index 100% rename from media/self-improving-agents-video/research/upgrade-2026-08.md rename to apps/negentropy-influence/episodes/self-improving-agents-video/research/upgrade-2026-08.md diff --git a/media/self-improving-agents-video/script/narration.json b/apps/negentropy-influence/episodes/self-improving-agents-video/script/narration.json similarity index 100% rename from media/self-improving-agents-video/script/narration.json rename to apps/negentropy-influence/episodes/self-improving-agents-video/script/narration.json diff --git a/media/self-improving-agents-video/script/narration.md b/apps/negentropy-influence/episodes/self-improving-agents-video/script/narration.md similarity index 100% rename from media/self-improving-agents-video/script/narration.md rename to apps/negentropy-influence/episodes/self-improving-agents-video/script/narration.md diff --git a/media/self-improving-agents-video/script/planning.md b/apps/negentropy-influence/episodes/self-improving-agents-video/script/planning.md similarity index 100% rename from media/self-improving-agents-video/script/planning.md rename to apps/negentropy-influence/episodes/self-improving-agents-video/script/planning.md diff --git a/media/self-improving-agents-video/script/storyboard.md b/apps/negentropy-influence/episodes/self-improving-agents-video/script/storyboard.md similarity index 100% rename from media/self-improving-agents-video/script/storyboard.md rename to apps/negentropy-influence/episodes/self-improving-agents-video/script/storyboard.md diff --git a/media/self-improving-agents-video/scripts/build_narration.py b/apps/negentropy-influence/episodes/self-improving-agents-video/scripts/build_narration.py similarity index 100% rename from media/self-improving-agents-video/scripts/build_narration.py rename to apps/negentropy-influence/episodes/self-improving-agents-video/scripts/build_narration.py diff --git a/media/self-improving-agents-video/scripts/qa_frames.py b/apps/negentropy-influence/episodes/self-improving-agents-video/scripts/qa_frames.py similarity index 100% rename from media/self-improving-agents-video/scripts/qa_frames.py rename to apps/negentropy-influence/episodes/self-improving-agents-video/scripts/qa_frames.py diff --git a/media/self-improving-agents-video/scripts/tts.py b/apps/negentropy-influence/episodes/self-improving-agents-video/scripts/tts.py similarity index 100% rename from media/self-improving-agents-video/scripts/tts.py rename to apps/negentropy-influence/episodes/self-improving-agents-video/scripts/tts.py diff --git a/media/self-improving-agents-video/video/.npmrc b/apps/negentropy-influence/episodes/self-improving-agents-video/video/.npmrc similarity index 100% rename from media/self-improving-agents-video/video/.npmrc rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/.npmrc diff --git a/media/self-improving-agents-video/video/package.json b/apps/negentropy-influence/episodes/self-improving-agents-video/video/package.json similarity index 100% rename from media/self-improving-agents-video/video/package.json rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/package.json diff --git a/media/self-improving-agents-video/video/pnpm-lock.yaml b/apps/negentropy-influence/episodes/self-improving-agents-video/video/pnpm-lock.yaml similarity index 100% rename from media/self-improving-agents-video/video/pnpm-lock.yaml rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/pnpm-lock.yaml diff --git a/media/self-improving-agents-video/video/remotion.config.ts b/apps/negentropy-influence/episodes/self-improving-agents-video/video/remotion.config.ts similarity index 100% rename from media/self-improving-agents-video/video/remotion.config.ts rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/remotion.config.ts diff --git a/media/self-improving-agents-video/video/src/Main.tsx b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/Main.tsx similarity index 100% rename from media/self-improving-agents-video/video/src/Main.tsx rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/Main.tsx diff --git a/media/self-improving-agents-video/video/src/Root.tsx b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/Root.tsx similarity index 100% rename from media/self-improving-agents-video/video/src/Root.tsx rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/Root.tsx diff --git a/media/self-improving-agents-video/video/src/components/NarrationAudio.tsx b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/components/NarrationAudio.tsx similarity index 100% rename from media/self-improving-agents-video/video/src/components/NarrationAudio.tsx rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/components/NarrationAudio.tsx diff --git a/media/self-improving-agents-video/video/src/components/SceneFade.tsx b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/components/SceneFade.tsx similarity index 100% rename from media/self-improving-agents-video/video/src/components/SceneFade.tsx rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/components/SceneFade.tsx diff --git a/media/self-improving-agents-video/video/src/components/Subtitle.tsx b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/components/Subtitle.tsx similarity index 100% rename from media/self-improving-agents-video/video/src/components/Subtitle.tsx rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/components/Subtitle.tsx diff --git a/media/self-improving-agents-video/video/src/components/cards.tsx b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/components/cards.tsx similarity index 100% rename from media/self-improving-agents-video/video/src/components/cards.tsx rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/components/cards.tsx diff --git a/media/self-improving-agents-video/video/src/design/theme.ts b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/design/theme.ts similarity index 100% rename from media/self-improving-agents-video/video/src/design/theme.ts rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/design/theme.ts diff --git a/media/self-improving-agents-video/video/src/index.ts b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/index.ts similarity index 100% rename from media/self-improving-agents-video/video/src/index.ts rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/index.ts diff --git a/media/self-improving-agents-video/video/src/scenes/P0Cold.tsx b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/scenes/P0Cold.tsx similarity index 100% rename from media/self-improving-agents-video/video/src/scenes/P0Cold.tsx rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/scenes/P0Cold.tsx diff --git a/media/self-improving-agents-video/video/src/scenes/P1Anatomy.tsx b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/scenes/P1Anatomy.tsx similarity index 100% rename from media/self-improving-agents-video/video/src/scenes/P1Anatomy.tsx rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/scenes/P1Anatomy.tsx diff --git a/media/self-improving-agents-video/video/src/scenes/P2Brain.tsx b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/scenes/P2Brain.tsx similarity index 100% rename from media/self-improving-agents-video/video/src/scenes/P2Brain.tsx rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/scenes/P2Brain.tsx diff --git a/media/self-improving-agents-video/video/src/scenes/P3Gear.tsx b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/scenes/P3Gear.tsx similarity index 100% rename from media/self-improving-agents-video/video/src/scenes/P3Gear.tsx rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/scenes/P3Gear.tsx diff --git a/media/self-improving-agents-video/video/src/scenes/P4Balance.tsx b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/scenes/P4Balance.tsx similarity index 100% rename from media/self-improving-agents-video/video/src/scenes/P4Balance.tsx rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/scenes/P4Balance.tsx diff --git a/media/self-improving-agents-video/video/src/scenes/P5Ending.tsx b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/scenes/P5Ending.tsx similarity index 100% rename from media/self-improving-agents-video/video/src/scenes/P5Ending.tsx rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/scenes/P5Ending.tsx diff --git a/media/self-evolving-coding-agents-video/video/src/timing.json b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/timing.json similarity index 100% rename from media/self-evolving-coding-agents-video/video/src/timing.json rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/timing.json diff --git a/media/self-improving-agents-video/video/src/timing.ts b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/timing.ts similarity index 100% rename from media/self-improving-agents-video/video/src/timing.ts rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/timing.ts diff --git a/media/self-improving-agents-video/video/src/types.ts b/apps/negentropy-influence/episodes/self-improving-agents-video/video/src/types.ts similarity index 100% rename from media/self-improving-agents-video/video/src/types.ts rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/src/types.ts diff --git a/media/self-improving-agents-video/video/tsconfig.json b/apps/negentropy-influence/episodes/self-improving-agents-video/video/tsconfig.json similarity index 100% rename from media/self-improving-agents-video/video/tsconfig.json rename to apps/negentropy-influence/episodes/self-improving-agents-video/video/tsconfig.json diff --git a/media/pipeline/INDEXTTS-2.5-ADVANCED.md b/apps/negentropy-influence/pipeline/INDEXTTS-2.5-ADVANCED.md similarity index 100% rename from media/pipeline/INDEXTTS-2.5-ADVANCED.md rename to apps/negentropy-influence/pipeline/INDEXTTS-2.5-ADVANCED.md diff --git a/media/pipeline/PRON-GLOSSARY.md b/apps/negentropy-influence/pipeline/PRON-GLOSSARY.md similarity index 100% rename from media/pipeline/PRON-GLOSSARY.md rename to apps/negentropy-influence/pipeline/PRON-GLOSSARY.md diff --git a/media/pipeline/README.md b/apps/negentropy-influence/pipeline/README.md similarity index 100% rename from media/pipeline/README.md rename to apps/negentropy-influence/pipeline/README.md diff --git a/media/pipeline/VOICE-CLONING.md b/apps/negentropy-influence/pipeline/VOICE-CLONING.md similarity index 100% rename from media/pipeline/VOICE-CLONING.md rename to apps/negentropy-influence/pipeline/VOICE-CLONING.md diff --git a/media/pipeline/scripts/build_narration.py b/apps/negentropy-influence/pipeline/scripts/build_narration.py similarity index 100% rename from media/pipeline/scripts/build_narration.py rename to apps/negentropy-influence/pipeline/scripts/build_narration.py diff --git a/media/pipeline/scripts/captions.py b/apps/negentropy-influence/pipeline/scripts/captions.py similarity index 100% rename from media/pipeline/scripts/captions.py rename to apps/negentropy-influence/pipeline/scripts/captions.py diff --git a/media/pipeline/scripts/check_script.py b/apps/negentropy-influence/pipeline/scripts/check_script.py similarity index 100% rename from media/pipeline/scripts/check_script.py rename to apps/negentropy-influence/pipeline/scripts/check_script.py diff --git a/media/pipeline/scripts/check_series.py b/apps/negentropy-influence/pipeline/scripts/check_series.py similarity index 100% rename from media/pipeline/scripts/check_series.py rename to apps/negentropy-influence/pipeline/scripts/check_series.py diff --git a/media/pipeline/scripts/paper_extract.py b/apps/negentropy-influence/pipeline/scripts/paper_extract.py similarity index 100% rename from media/pipeline/scripts/paper_extract.py rename to apps/negentropy-influence/pipeline/scripts/paper_extract.py diff --git a/media/pipeline/scripts/pipeline.py b/apps/negentropy-influence/pipeline/scripts/pipeline.py similarity index 100% rename from media/pipeline/scripts/pipeline.py rename to apps/negentropy-influence/pipeline/scripts/pipeline.py diff --git a/media/pipeline/scripts/prepare_ref.py b/apps/negentropy-influence/pipeline/scripts/prepare_ref.py similarity index 100% rename from media/pipeline/scripts/prepare_ref.py rename to apps/negentropy-influence/pipeline/scripts/prepare_ref.py diff --git a/media/pipeline/scripts/pron_marks.py b/apps/negentropy-influence/pipeline/scripts/pron_marks.py similarity index 100% rename from media/pipeline/scripts/pron_marks.py rename to apps/negentropy-influence/pipeline/scripts/pron_marks.py diff --git a/media/pipeline/scripts/prospect_ref.py b/apps/negentropy-influence/pipeline/scripts/prospect_ref.py similarity index 100% rename from media/pipeline/scripts/prospect_ref.py rename to apps/negentropy-influence/pipeline/scripts/prospect_ref.py diff --git a/media/pipeline/scripts/qa_frames.py b/apps/negentropy-influence/pipeline/scripts/qa_frames.py similarity index 100% rename from media/pipeline/scripts/qa_frames.py rename to apps/negentropy-influence/pipeline/scripts/qa_frames.py diff --git a/media/pipeline/scripts/refs.py b/apps/negentropy-influence/pipeline/scripts/refs.py similarity index 100% rename from media/pipeline/scripts/refs.py rename to apps/negentropy-influence/pipeline/scripts/refs.py diff --git a/media/pipeline/scripts/source_ledger.py b/apps/negentropy-influence/pipeline/scripts/source_ledger.py similarity index 100% rename from media/pipeline/scripts/source_ledger.py rename to apps/negentropy-influence/pipeline/scripts/source_ledger.py diff --git a/media/pipeline/scripts/timeline.py b/apps/negentropy-influence/pipeline/scripts/timeline.py similarity index 100% rename from media/pipeline/scripts/timeline.py rename to apps/negentropy-influence/pipeline/scripts/timeline.py diff --git a/media/pipeline/scripts/tts.py b/apps/negentropy-influence/pipeline/scripts/tts.py similarity index 100% rename from media/pipeline/scripts/tts.py rename to apps/negentropy-influence/pipeline/scripts/tts.py diff --git a/media/pipeline/scripts/tts_bench.py b/apps/negentropy-influence/pipeline/scripts/tts_bench.py similarity index 100% rename from media/pipeline/scripts/tts_bench.py rename to apps/negentropy-influence/pipeline/scripts/tts_bench.py diff --git a/media/pipeline/scripts/tts_sample.py b/apps/negentropy-influence/pipeline/scripts/tts_sample.py similarity index 100% rename from media/pipeline/scripts/tts_sample.py rename to apps/negentropy-influence/pipeline/scripts/tts_sample.py diff --git a/media/pipeline/scripts/tts_server.py b/apps/negentropy-influence/pipeline/scripts/tts_server.py similarity index 100% rename from media/pipeline/scripts/tts_server.py rename to apps/negentropy-influence/pipeline/scripts/tts_server.py diff --git a/media/pipeline/skills/01-source-extraction.md b/apps/negentropy-influence/pipeline/skills/01-source-extraction.md similarity index 100% rename from media/pipeline/skills/01-source-extraction.md rename to apps/negentropy-influence/pipeline/skills/01-source-extraction.md diff --git a/media/pipeline/skills/02-planning.md b/apps/negentropy-influence/pipeline/skills/02-planning.md similarity index 100% rename from media/pipeline/skills/02-planning.md rename to apps/negentropy-influence/pipeline/skills/02-planning.md diff --git a/media/pipeline/skills/03-narration.md b/apps/negentropy-influence/pipeline/skills/03-narration.md similarity index 100% rename from media/pipeline/skills/03-narration.md rename to apps/negentropy-influence/pipeline/skills/03-narration.md diff --git a/media/pipeline/skills/04-verification.md b/apps/negentropy-influence/pipeline/skills/04-verification.md similarity index 100% rename from media/pipeline/skills/04-verification.md rename to apps/negentropy-influence/pipeline/skills/04-verification.md diff --git a/media/pipeline/skills/05-storyboard.md b/apps/negentropy-influence/pipeline/skills/05-storyboard.md similarity index 100% rename from media/pipeline/skills/05-storyboard.md rename to apps/negentropy-influence/pipeline/skills/05-storyboard.md diff --git a/media/pipeline/skills/06-remotion-implementation.md b/apps/negentropy-influence/pipeline/skills/06-remotion-implementation.md similarity index 100% rename from media/pipeline/skills/06-remotion-implementation.md rename to apps/negentropy-influence/pipeline/skills/06-remotion-implementation.md diff --git a/media/pipeline/skills/07-tts-voice.md b/apps/negentropy-influence/pipeline/skills/07-tts-voice.md similarity index 100% rename from media/pipeline/skills/07-tts-voice.md rename to apps/negentropy-influence/pipeline/skills/07-tts-voice.md diff --git a/media/pipeline/skills/08-render-qa.md b/apps/negentropy-influence/pipeline/skills/08-render-qa.md similarity index 100% rename from media/pipeline/skills/08-render-qa.md rename to apps/negentropy-influence/pipeline/skills/08-render-qa.md diff --git a/media/pipeline/skills/09-final-render.md b/apps/negentropy-influence/pipeline/skills/09-final-render.md similarity index 100% rename from media/pipeline/skills/09-final-render.md rename to apps/negentropy-influence/pipeline/skills/09-final-render.md diff --git a/media/pipeline/tests/conftest.py b/apps/negentropy-influence/pipeline/tests/conftest.py similarity index 100% rename from media/pipeline/tests/conftest.py rename to apps/negentropy-influence/pipeline/tests/conftest.py diff --git a/media/pipeline/tests/fixtures/manifest.json b/apps/negentropy-influence/pipeline/tests/fixtures/manifest.json similarity index 100% rename from media/pipeline/tests/fixtures/manifest.json rename to apps/negentropy-influence/pipeline/tests/fixtures/manifest.json diff --git a/media/pipeline/tests/fixtures/narration.json b/apps/negentropy-influence/pipeline/tests/fixtures/narration.json similarity index 100% rename from media/pipeline/tests/fixtures/narration.json rename to apps/negentropy-influence/pipeline/tests/fixtures/narration.json diff --git a/media/pipeline/tests/fixtures/narration.md b/apps/negentropy-influence/pipeline/tests/fixtures/narration.md similarity index 100% rename from media/pipeline/tests/fixtures/narration.md rename to apps/negentropy-influence/pipeline/tests/fixtures/narration.md diff --git a/media/pipeline/tests/fixtures/storyboard.md b/apps/negentropy-influence/pipeline/tests/fixtures/storyboard.md similarity index 100% rename from media/pipeline/tests/fixtures/storyboard.md rename to apps/negentropy-influence/pipeline/tests/fixtures/storyboard.md diff --git a/media/pipeline/tests/fixtures/theme.ts b/apps/negentropy-influence/pipeline/tests/fixtures/theme.ts similarity index 100% rename from media/pipeline/tests/fixtures/theme.ts rename to apps/negentropy-influence/pipeline/tests/fixtures/theme.ts diff --git a/media/self-improving-agents-video/video/src/timing.json b/apps/negentropy-influence/pipeline/tests/fixtures/timing.json similarity index 100% rename from media/self-improving-agents-video/video/src/timing.json rename to apps/negentropy-influence/pipeline/tests/fixtures/timing.json diff --git a/media/pipeline/tests/test_build_narration.py b/apps/negentropy-influence/pipeline/tests/test_build_narration.py similarity index 100% rename from media/pipeline/tests/test_build_narration.py rename to apps/negentropy-influence/pipeline/tests/test_build_narration.py diff --git a/media/pipeline/tests/test_captions.py b/apps/negentropy-influence/pipeline/tests/test_captions.py similarity index 100% rename from media/pipeline/tests/test_captions.py rename to apps/negentropy-influence/pipeline/tests/test_captions.py diff --git a/media/pipeline/tests/test_check_script.py b/apps/negentropy-influence/pipeline/tests/test_check_script.py similarity index 100% rename from media/pipeline/tests/test_check_script.py rename to apps/negentropy-influence/pipeline/tests/test_check_script.py diff --git a/media/pipeline/tests/test_check_series.py b/apps/negentropy-influence/pipeline/tests/test_check_series.py similarity index 100% rename from media/pipeline/tests/test_check_series.py rename to apps/negentropy-influence/pipeline/tests/test_check_series.py diff --git a/media/pipeline/tests/test_digest.py b/apps/negentropy-influence/pipeline/tests/test_digest.py similarity index 100% rename from media/pipeline/tests/test_digest.py rename to apps/negentropy-influence/pipeline/tests/test_digest.py diff --git a/media/pipeline/tests/test_engine_guard.py b/apps/negentropy-influence/pipeline/tests/test_engine_guard.py similarity index 100% rename from media/pipeline/tests/test_engine_guard.py rename to apps/negentropy-influence/pipeline/tests/test_engine_guard.py diff --git a/media/pipeline/tests/test_pron_marks.py b/apps/negentropy-influence/pipeline/tests/test_pron_marks.py similarity index 100% rename from media/pipeline/tests/test_pron_marks.py rename to apps/negentropy-influence/pipeline/tests/test_pron_marks.py diff --git a/media/pipeline/tests/test_prospect_ref.py b/apps/negentropy-influence/pipeline/tests/test_prospect_ref.py similarity index 100% rename from media/pipeline/tests/test_prospect_ref.py rename to apps/negentropy-influence/pipeline/tests/test_prospect_ref.py diff --git a/media/pipeline/tests/test_qa_checks.py b/apps/negentropy-influence/pipeline/tests/test_qa_checks.py similarity index 100% rename from media/pipeline/tests/test_qa_checks.py rename to apps/negentropy-influence/pipeline/tests/test_qa_checks.py diff --git a/media/pipeline/tests/test_source_ledger.py b/apps/negentropy-influence/pipeline/tests/test_source_ledger.py similarity index 100% rename from media/pipeline/tests/test_source_ledger.py rename to apps/negentropy-influence/pipeline/tests/test_source_ledger.py diff --git a/media/pipeline/tests/test_timeline.py b/apps/negentropy-influence/pipeline/tests/test_timeline.py similarity index 100% rename from media/pipeline/tests/test_timeline.py rename to apps/negentropy-influence/pipeline/tests/test_timeline.py diff --git a/media/pipeline/tests/test_tts_bench.py b/apps/negentropy-influence/pipeline/tests/test_tts_bench.py similarity index 100% rename from media/pipeline/tests/test_tts_bench.py rename to apps/negentropy-influence/pipeline/tests/test_tts_bench.py diff --git a/media/pipeline/voices/README.md b/apps/negentropy-influence/pipeline/voices/README.md similarity index 100% rename from media/pipeline/voices/README.md rename to apps/negentropy-influence/pipeline/voices/README.md diff --git a/media/pipeline/voices/refs.toml b/apps/negentropy-influence/pipeline/voices/refs.toml similarity index 100% rename from media/pipeline/voices/refs.toml rename to apps/negentropy-influence/pipeline/voices/refs.toml diff --git a/media/series.json b/apps/negentropy-influence/series.json similarity index 100% rename from media/series.json rename to apps/negentropy-influence/series.json diff --git a/media/series.md b/apps/negentropy-influence/series.md similarity index 100% rename from media/series.md rename to apps/negentropy-influence/series.md From 821b682d9a43cd5057b76eb24bebc02df99eb0da Mon Sep 17 00:00:00 2001 From: ThreeFish Date: Fri, 21 Aug 2026 14:13:02 +0800 Subject: [PATCH 2/6] =?UTF-8?q?refactor(influence):=20=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E5=90=8E=E8=AF=AD=E4=B9=89=E4=BF=AE=E5=A4=8D=E2=80=94=E2=80=94?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E9=94=9A=E7=82=B9=E6=8A=BD=E5=8F=96=E3=80=81?= =?UTF-8?q?=E5=8F=97=E6=A3=80=E8=8C=83=E5=9B=B4=E6=8C=89=E6=A0=B9=E6=8B=86?= =?UTF-8?q?=E5=88=86=E3=80=81=E4=BA=A7=E7=89=A9=20ignore=20=E9=80=9A?= =?UTF-8?q?=E9=85=8D=E5=8C=96;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 承接前一提交的纯重命名,修完它造成的全部断裂,并把三处「数目录层数」的 脆弱锚点换成标记法。 ## 路径锚点(治根) 新增 `pipeline/scripts/paths.py` + `.influence-root` 哨兵:向上搜索标记定位 子项目根,`REPO` 由「子项目位于 apps/」派生。此前 `REPO` 一个名字混用 了「仓库根」与「子项目根」两个正交概念,迁移后三处 `parents[N]` 同时指向 `apps/`,且三种失败形态各不相同、**都不报错**: - `pipeline.py` → tts.ref 解析失败,doctor 的告警与「样本本就不入库」无法区分 - `check_series.py` → series.json 找不到即 exit,pre-commit 门整体静默失效 - `tts_sample.py` → 生物特征小样写进 `apps/.temp/`,而 `.temp/` 非锚定,git 无感 不用 `.git` 作标记:本仓是 worktree,`.git` 是**文件**不是目录;且测试的 tmp 假仓库没有 `.git`,而 `~/tools/index-tts` 恰好是真 `.git`(tts_server.py 拷出去 跑时会误锚)。`tts.py` 刻意不依赖 paths.py,以保住它被拷出仓库运行的路径。 12 个薄包装 `parents[2]`→`[3]`(episodes/ 层),三名各自仍逐字节一致。 ## 受检范围按根拆分(顺带补一个既存缺口) `check_series.py` 的 COVERED_GLOBS 拆为 INFLUENCE / REPO 两组,子项目侧用相对 glob —— 路径字面量从脚本中**彻底消失**,「误把前缀写宽成 `apps/**`」结构性 不可能发生(实测宽化会炸出 12 条其他子项目的既存死链假 FAIL)。 新增 `.agent/skills/science-video-pipeline/**` 覆盖:该路由壳有 13 条入树链接, 此前**完全没有死链校验**,而它们正是整目录迁移会一次性打断的东西。刻意不收 `.agent/skills/**` 全量——会连带执法别的技能的既存债(pdf-reader 有示意占位链接)。 ## 产物 ignore 通配化(治一个静默泄漏) 根 `.gitignore` 28 行逐集枚举 → 16 行通配到分集级。实测迁移后 voices/*.wav、 video/public/audio/*.mp3、.engine、*.wav 全部会变为**可提交**(仅 out/ 靠通用 规则幸存),而 check-added-large-files 阈值 1024KB 拦不住 768KB 的声音样本。 通配同时修掉一个既存漏洞:**新集在补齐那 5 行之前完全没有覆盖**——故 pipeline/README.md 新集清单第 3 步随之删除。 ## 数据契约 - 4 个 `pipeline.toml` 的 `tts.ref` 改为**子项目根相对**。缓存安全已证明: `digest_indextts` 的摘要含 `ref_sha1`(文件字节哈希)而**无任何路径成分**, 改拼法不会失效任何一句缓存,test_digest 黄金哈希不受影响。 - `series.json` 4 个 `path` → `episodes/-video`;规则 2/3 取 `split("/")[-1]`, 两处判定逻辑零改动。 ## 其余 - 6 个仓库级文件的 69 处引用(.gitignore / .pre-commit-config.yaml / SKILL.md 含 frontmatter 发现 glob / knowledge-map / CHANGELOG / issue.md) - 树内 151 处路径:命令走 `$R`/`$P` 变量(位置无关),散文走子项目相对链接 - 5 条爬出子项目的相对链接补层级;分集侧需 +2(apps 与 episodes 各一级), 子项目内部只需 +1 —— 这个不对称由 check_series 规则 5 当场抓出 - 新增 `pyproject.toml`:**仅** `[tool.pytest.ini_options]`。刻意不含 `[project]` (否则 uv 会试图构建本目录)与 `[tool.ruff]`(实测 line-length=120 会重排 24/31 文件、埋掉语义 diff);刻意不放 `package.json`(`apps/*` 是 depth-1 glob,会把子项目吸进根 workspace,击穿各集 --ignore-workspace 隔离) - 新增 README.md(apps/* 7/7 约定) ## 验证 130 测试全绿(与迁移前基线一致);check_series `2 系列/4 集 · 受检 118 · FAIL 0` (118 = 基线 117 + 新纳管的 SKILL.md,该数字本身即 REPO 解析正确的证明); 4 集 check_script/--check-theme 与基线逐项一致(含 se/si 两处既存 WARN); 4 集 doctor 均解析到 apps/negentropy-influence/pipeline/voices/ 且零行含 /media/; `.gitignore` 双向证明通过(零受控文件被吞、含未来分集的产物全覆盖); pnpm 仍恰好 5 个项目、根 lockfile 零变更;全仓 media/ 引用归零。 🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist) Co-Authored-By: Aurelius Huang --- .agent/skills/science-video-pipeline/SKILL.md | 26 +++---- .gitignore | 50 ++++--------- .pre-commit-config.yaml | 22 +++--- CHANGELOG.md | 20 ++--- apps/negentropy-influence/.influence-root | 8 ++ apps/negentropy-influence/README.md | 63 ++++++++++++++++ .../claude-code-explained-video/README.md | 6 +- .../claude-code-explained-video/pipeline.toml | 4 +- .../research/source-notes.md | 2 +- .../research/sources.toml | 2 +- .../script/planning.md | 4 +- .../scripts/build_narration.py | 6 +- .../scripts/qa_frames.py | 6 +- .../scripts/tts.py | 6 +- .../video/src/components/SceneFade.tsx | 2 +- .../video/src/components/motifs.tsx | 2 +- .../experience-era-agents-video/README.md | 6 +- .../experience-era-agents-video/pipeline.toml | 2 +- .../research/paper-notes.md | 6 +- .../research/upgrade-2026-08-v3.md | 4 +- .../script/planning.md | 6 +- .../scripts/build_narration.py | 6 +- .../scripts/qa_frames.py | 6 +- .../scripts/tts.py | 6 +- .../video/src/components/SceneFade.tsx | 2 +- .../README.md | 6 +- .../pipeline.toml | 4 +- .../research/paper-notes.md | 2 +- .../script/planning.md | 4 +- .../scripts/build_narration.py | 6 +- .../scripts/qa_frames.py | 6 +- .../scripts/tts.py | 6 +- .../video/src/components/SceneFade.tsx | 2 +- .../video/src/scenes/P6Ending.tsx | 2 +- .../self-improving-agents-video/README.md | 2 +- .../self-improving-agents-video/pipeline.toml | 4 +- .../scripts/build_narration.py | 6 +- .../scripts/qa_frames.py | 6 +- .../scripts/tts.py | 6 +- .../video/src/components/SceneFade.tsx | 2 +- .../pipeline/INDEXTTS-2.5-ADVANCED.md | 12 +-- apps/negentropy-influence/pipeline/README.md | 44 +++++------ .../pipeline/VOICE-CLONING.md | 46 ++++++------ .../pipeline/scripts/build_narration.py | 10 +-- .../pipeline/scripts/captions.py | 2 +- .../pipeline/scripts/check_script.py | 2 +- .../pipeline/scripts/check_series.py | 52 +++++++++---- .../pipeline/scripts/paper_extract.py | 2 +- .../pipeline/scripts/paths.py | 73 +++++++++++++++++++ .../pipeline/scripts/pipeline.py | 17 +++-- .../pipeline/scripts/prepare_ref.py | 8 +- .../pipeline/scripts/prospect_ref.py | 10 +-- .../pipeline/scripts/qa_frames.py | 6 +- .../pipeline/scripts/refs.py | 6 +- .../pipeline/scripts/source_ledger.py | 10 +-- .../pipeline/scripts/tts.py | 14 ++-- .../pipeline/scripts/tts_bench.py | 10 +-- .../pipeline/scripts/tts_sample.py | 19 +++-- .../pipeline/scripts/tts_server.py | 6 +- .../pipeline/skills/01-source-extraction.md | 6 +- .../pipeline/skills/03-narration.md | 4 +- .../skills/06-remotion-implementation.md | 2 +- .../pipeline/skills/07-tts-voice.md | 4 +- .../pipeline/skills/08-render-qa.md | 18 ++--- .../pipeline/skills/09-final-render.md | 4 +- .../pipeline/tests/conftest.py | 2 +- .../pipeline/tests/test_check_series.py | 59 ++++++++++----- .../pipeline/voices/README.md | 16 ++-- apps/negentropy-influence/pyproject.toml | 26 +++++++ apps/negentropy-influence/series.json | 10 +-- apps/negentropy-influence/series.md | 8 +- docs/.agents/issue.md | 14 ++-- docs/.agents/knowledge-map.md | 8 +- 73 files changed, 533 insertions(+), 334 deletions(-) create mode 100644 apps/negentropy-influence/.influence-root create mode 100644 apps/negentropy-influence/README.md create mode 100644 apps/negentropy-influence/pipeline/scripts/paths.py create mode 100644 apps/negentropy-influence/pyproject.toml diff --git a/.agent/skills/science-video-pipeline/SKILL.md b/.agent/skills/science-video-pipeline/SKILL.md index 48aecc12..4fcf6f7d 100644 --- a/.agent/skills/science-video-pipeline/SKILL.md +++ b/.agent/skills/science-video-pipeline/SKILL.md @@ -1,35 +1,35 @@ --- name: science-video-pipeline -description: 把论文/综述做成动效图解科普视频的九阶段流水线(论文精读提取→策划→逐字稿 SSOT→双重校验→分镜→TTS 声音克隆→Remotion 场景实现→草渲抽帧 QA→终渲交付)。Use when producing or iterating a media/*-video/ episode: narration.md, storyboard.md, IndexTTS voice cloning, Remotion scenes, frame QA, or final render; or when scaffolding a new episode. +description: 把论文/综述做成动效图解科普视频的九阶段流水线(论文精读提取→策划→逐字稿 SSOT→双重校验→分镜→TTS 声音克隆→Remotion 场景实现→草渲抽帧 QA→终渲交付)。Use when producing or iterating an apps/negentropy-influence/episodes/*-video/ episode: narration.md, storyboard.md, IndexTTS voice cloning, Remotion scenes, frame QA, or final render; or when scaffolding a new episode. allowed-tools: Read, Write, Edit, Glob, Grep, Bash --- # 科普视频制作流水线(导航壳) -本 Skill 是路由层:内容 SSOT 在 `media/pipeline/skills/01–09.md`,工具 SSOT 在 -`media/pipeline/scripts/`,不在此复制任何正文(防第二事实源)。 +本 Skill 是路由层:内容 SSOT 在 `apps/negentropy-influence/pipeline/skills/01–09.md`,工具 SSOT 在 +`apps/negentropy-influence/pipeline/scripts/`,不在此复制任何正文(防第二事实源)。 ## 九阶段速查 | Stage | 做什么 | 规格链接 | 工具/命令(编排入口 `pipeline.py`) | 通过门 | |---|---|---|---|---| -| ① 信源精读取证 | **A 型论文**:并行子代理逐章 + 官方站点补充;**B 型文档/代码/课程站点**:固定提交取证 + 证据三级 | [01](../../../media/pipeline/skills/01-source-extraction.md) | A 型 `paper_extract.py`(map/text/captions/find/render);B 型 `source_ledger.py`(fetch/list/verify) | 全部断言可回溯;RISKY=0 | -| ② 策划 | 受众/结构/视觉契约(色彩语义) | [02](../../../media/pipeline/skills/02-planning.md) | — | planning.md 六节齐 | -| ③ 逐字稿 | narration.md ★单一事实源 | [03](../../../media/pipeline/skills/03-narration.md) | `pipeline.py build` | `build_narration.py` 通过 | -| ④⑤ 双重校验 + 分镜 | 真实性回溯 + 易懂性;beat 覆盖性 | [04](../../../media/pipeline/skills/04-verification.md) / [05](../../../media/pipeline/skills/05-storyboard.md) | `pipeline.py check`(+`--check-scenes`) | RISKY=0;覆盖率无缺句 | -| ⑥ TTS 配音 | 本人音色克隆(IndexTTS-2.5) | [07](../../../media/pipeline/skills/07-tts-voice.md) | `pipeline.py tts --plan` | refs 指纹门 + 试听 + ETA | -| ⑦ Remotion 场景 | 代码动画实现 | [06](../../../media/pipeline/skills/06-remotion-implementation.md) | `tsc --noEmit` | 七条渲染红线 | -| ⑧ 草渲 + 抽帧 QA | 半分辨率快速迭代 | [08](../../../media/pipeline/skills/08-render-qa.md) | `pipeline.py render` + `qa` | 自动体检零 FAIL | -| ⑨ 终渲 + 交付 | 1080p30 + srt/vtt | [09](../../../media/pipeline/skills/09-final-render.md) | `render --final` + `captions` | 实测时长在预算窗 | +| ① 信源精读取证 | **A 型论文**:并行子代理逐章 + 官方站点补充;**B 型文档/代码/课程站点**:固定提交取证 + 证据三级 | [01](../../../apps/negentropy-influence/pipeline/skills/01-source-extraction.md) | A 型 `paper_extract.py`(map/text/captions/find/render);B 型 `source_ledger.py`(fetch/list/verify) | 全部断言可回溯;RISKY=0 | +| ② 策划 | 受众/结构/视觉契约(色彩语义) | [02](../../../apps/negentropy-influence/pipeline/skills/02-planning.md) | — | planning.md 六节齐 | +| ③ 逐字稿 | narration.md ★单一事实源 | [03](../../../apps/negentropy-influence/pipeline/skills/03-narration.md) | `pipeline.py build` | `build_narration.py` 通过 | +| ④⑤ 双重校验 + 分镜 | 真实性回溯 + 易懂性;beat 覆盖性 | [04](../../../apps/negentropy-influence/pipeline/skills/04-verification.md) / [05](../../../apps/negentropy-influence/pipeline/skills/05-storyboard.md) | `pipeline.py check`(+`--check-scenes`) | RISKY=0;覆盖率无缺句 | +| ⑥ TTS 配音 | 本人音色克隆(IndexTTS-2.5) | [07](../../../apps/negentropy-influence/pipeline/skills/07-tts-voice.md) | `pipeline.py tts --plan` | refs 指纹门 + 试听 + ETA | +| ⑦ Remotion 场景 | 代码动画实现 | [06](../../../apps/negentropy-influence/pipeline/skills/06-remotion-implementation.md) | `tsc --noEmit` | 七条渲染红线 | +| ⑧ 草渲 + 抽帧 QA | 半分辨率快速迭代 | [08](../../../apps/negentropy-influence/pipeline/skills/08-render-qa.md) | `pipeline.py render` + `qa` | 自动体检零 FAIL | +| ⑨ 终渲 + 交付 | 1080p30 + srt/vtt | [09](../../../apps/negentropy-influence/pipeline/skills/09-final-render.md) | `render --final` + `captions` | 实测时长在预算窗 | ## 关键不变量 - 逐字稿只改 `narration.md`;`narration.json`/`manifest.json` 是派生物。 -- **口播永不出现他集标题与集数序号**——顺序只在视觉层与 [media/series.json](../../../media/series.json)(校验:`check_series.py`)。 +- **口播永不出现他集标题与集数序号**——顺序只在视觉层与 [series.json](../../../apps/negentropy-influence/series.json)(校验:`check_series.py`)。 多系列(顶层 `seriesList[]`)语义:反串线规则**跨系列全局**,顺序类规则**按系列内**判定。 - **证据分级**:B 型信源里「他人对闭源产品源码的分析」属三级证据,口播必须带归属句, 不得表述为产品既成事实;活数据(行数、总量、star 数)不进口播。 - 每集 `pipeline.toml` 是可执行参数的唯一来源;README 不复制命令行参数。 - 时序常数只在 `video/src/timing.json`(timing.ts 与 Python 共读)。 - 声音样本是生物特征:不入库(`voices/refs.toml` 只存指纹),试听后即删。 -- 新集脚手架与复用边界(Python 集中 SSOT / Remotion 复制不共享)见 [media/pipeline/README.md](../../../media/pipeline/README.md)。 +- 新集脚手架与复用边界(Python 集中 SSOT / Remotion 复制不共享)见 [pipeline/README.md](../../../apps/negentropy-influence/pipeline/README.md)。 diff --git a/.gitignore b/.gitignore index 2a909488..9b5e62b8 100644 --- a/.gitignore +++ b/.gitignore @@ -294,39 +294,21 @@ benchmarks/runs/ # 此条兜底 agent 路径漂移误在 worktree 写候选的极端场景,确保其永不进 commit/PR) patrol-candidate.md -# 科普视频工程(media/self-improving-agents-video)本地产物: +# 科普视频工程(apps/negentropy-influence/episodes/-video)本地产物: # tts.py 逐句音频 + manifest、Remotion 渲染产物均环境相关,不入 git。 # 注:工程内的 .gitignore 被上方根级裸 `.gitignore` 规则挡住无法提交,规则须维护在此处。 -media/self-improving-agents-video/video/public/audio/ -media/self-improving-agents-video/out/ -media/self-improving-agents-video/**/*.mp4 -media/self-improving-agents-video/**/*.mp3 -media/self-improving-agents-video/**/*.wav - -# 科普视频工程(media/experience-era-agents-video)本地产物:同上集规则。 -media/experience-era-agents-video/video/public/audio/ -media/experience-era-agents-video/out/ -media/experience-era-agents-video/**/*.mp4 -media/experience-era-agents-video/**/*.mp3 -media/experience-era-agents-video/**/*.wav - -# 声音克隆参考样本(media/pipeline/voices/):个人声音属生物特征信息,绝不入库。 -# 目录级忽略 + 白名单例外(README 与 refs.toml 指纹清单——后者只存哈希与生成参数, -# 不含音频字节),防漏网音频格式(ogg/opus/wma 等)。 -media/pipeline/voices/* -!media/pipeline/voices/README.md -!media/pipeline/voices/refs.toml - -# 科普视频工程(media/self-evolving-coding-agents-video)本地产物:同上集规则。 -media/self-evolving-coding-agents-video/video/public/audio/ -media/self-evolving-coding-agents-video/out/ -media/self-evolving-coding-agents-video/**/*.mp4 -media/self-evolving-coding-agents-video/**/*.mp3 -media/self-evolving-coding-agents-video/**/*.wav - -# 科普视频工程(media/claude-code-explained-video)本地产物:同上集规则。 -media/claude-code-explained-video/video/public/audio/ -media/claude-code-explained-video/out/ -media/claude-code-explained-video/**/*.mp4 -media/claude-code-explained-video/**/*.mp3 -media/claude-code-explained-video/**/*.wav +# 通配到集:`*` 只吃一级目录名(= 分集目录),故**新增分集无需再改本文件** +# —— 此前逐集枚举导致新集的音频产物在补齐 5 行前完全未被覆盖。 +# `out/` 已由上方通用规则(第 223 行 `out/`,非锚定)覆盖,此处不再逐集重复。 +apps/negentropy-influence/episodes/*/video/public/audio/ +apps/negentropy-influence/episodes/**/*.mp4 +apps/negentropy-influence/episodes/**/*.mp3 +apps/negentropy-influence/episodes/**/*.wav + +# 声音克隆参考样本(apps/negentropy-influence/pipeline/voices/):个人声音属生物 +# 特征信息,绝不入库。目录级忽略 + 白名单例外(README 与 refs.toml 指纹清单—— +# 后者只存哈希与生成参数,不含音频字节),防漏网音频格式(ogg/opus/wma 等)。 +# 注:必须写 `/*` 而非 `/` —— git 无法用 `!` 把被排除**目录**内的文件重新纳入。 +apps/negentropy-influence/pipeline/voices/* +!apps/negentropy-influence/pipeline/voices/README.md +!apps/negentropy-influence/pipeline/voices/refs.toml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 858dc041..ddd2cf8b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -46,16 +46,16 @@ repos: files: ^apps/negentropy/ types_or: [python, pyi] - # ── Python: media/pipeline(科普视频公共管线) ───────────────────────── + # ── Python: negentropy-influence/pipeline(科普视频公共管线) ────────── # 与 negentropy 同一 ruff 修订版;此前仅覆盖 apps/negentropy/,管线脚本无 lint 门 - id: ruff - name: ruff lint (media-pipeline) + name: ruff lint (influence-pipeline) args: [--fix, --exit-non-zero-on-fix] - files: ^media/pipeline/ + files: ^apps/negentropy-influence/pipeline/ types_or: [python, pyi] - id: ruff-format - name: ruff format (media-pipeline) - files: ^media/pipeline/ + name: ruff format (influence-pipeline) + files: ^apps/negentropy-influence/pipeline/ types_or: [python, pyi] # ── Node.js: apps/negentropy-ui ────────────────────────────────────────── @@ -119,14 +119,18 @@ repos: files: ^(VERSION|scripts/sync_versions\.py|package\.json|apps/negentropy/(pyproject\.toml|uv\.lock)|apps/negentropy-ui/package\.json|apps/negentropy-wiki/package\.json|apps/negentropy-perceives/(pyproject\.toml|uv\.lock)|packages/agents-chat-core/package\.json)$ pass_filenames: false - # ── 科普视频系列一致性(media/series.json 执法) ───────────────────────── + # ── 科普视频系列一致性(series.json 执法) ─────────────────────────────── # 规则:口播反串线(自身标题排除)/多标题顺序/序号绑定/清单完整性/相对链接死链。 # 注意:挂在内容修复之后落地;顺序调整类变更须先改 series.json 再动散文。 + # ⚠️ files: 写错是**静默**失效(钩子直接跳过、不报错),entry 写错才会响。 + # 改动本条后须验证:暂存一处子项目内改动,确认钩子 Passed 而非 Skipped。 + # `.agent/skills/science-video-pipeline/` 亦须在列 —— 该路由壳有 13 条入树 + # 链接受规则 5 执法,只改它的提交必须能触发本钩子。 - repo: local hooks: - id: series-consistency-check - name: Series consistency (media/series.json) + name: Series consistency (series.json) language: system - entry: uv run --no-project media/pipeline/scripts/check_series.py - files: ^(media/|docs/\.agents/knowledge-map\.md|CHANGELOG\.md) + entry: uv run --no-project apps/negentropy-influence/pipeline/scripts/check_series.py + files: ^(apps/negentropy-influence/|\.agent/skills/science-video-pipeline/|docs/\.agents/knowledge-map\.md|CHANGELOG\.md) pass_filenames: false diff --git a/CHANGELOG.md b/CHANGELOG.md index 96e02697..feb20c94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,18 +6,18 @@ ### Added -- **新系列「Claude Code 通俗全解」首集 + 管线多系列化与 B 型信源取证基建**:新增 [《拆开 Claude Code:让 AI 动手的四层机制》](media/claude-code-explained-video/README.md)(陶土橙 `#D97757` 内核 / 石青 `#64C4C0` 外挂机制 / 警示红 `#EF6461` 拒绝闸门,三色对 `#0E1116` 实测 6.06 / 9.18 / 6.00 : 1;170 句 4048 字 7 幕 39 镜;配音 `sunny-steady` + `me-bright.wav`),选题为开源课程 [Learn Claude Code](https://learn.shareai.run/zh/s01/) 的工具与执行四章(s01 Agent Loop / s02 Tool Use / s03 Permission / s04 Hooks)。为此做三件基建: - ① **`media/series.json` 多系列化**:顶层由单 `series` 对象改为 `seriesList[]`,`check_series.py` 相应分层——**反串线规则(1)跨系列全局生效**(两系列口播互不引用),**顺序类规则(2/3/4)按系列内判定**(`episode` 的 `1..N` 连续性只在系列内成立,slug 仍全局唯一);`test_check_series.py` 增 6 例多系列语义用例(各系列各有第 1 集不误报、跨系列标题不比顺序、跨系列反串线仍 FAIL、跨系列 slug 重复 FAIL)。 - ② **Stage ① 泛化为两类信源**:`skills/01-paper-extraction.md` → [`01-source-extraction.md`](media/pipeline/skills/01-source-extraction.md),A 型论文正文原样保留,新增 **B 型(文档/代码/课程站点)** 大节——双轨取证(仓库 @ **固定 commit** + 站点正文)、**证据三级**(一级仓库实测可断言 / 二级站点正文 / 三级「他人对闭源产品源码的分析」**必须带归属句**,不得说成产品既成事实)、数字纪律(口径须可复算、复算不出就只说趋势、活数据不进口播)、二次信源分歧清单必备。配套新工具 [`source_ledger.py`](media/pipeline/scripts/source_ledger.py)(fetch/list/verify,仿 `refs.py` 的清单+指纹设计;`repo` 类校验 `--pinned-ref` 出现在 URL 中且 raw 指纹漂移即 FAIL,`site` 类只比**剥标签归一后的正文**指纹、漂移报 WARN——构建产物哈希天天变,比 raw 毫无信噪比)+ `test_source_ledger.py` 11 例;`media/pipeline/tests/` 由 46 → **130 项**全绿(含合并 #1109 带入的 pron_marks / prospect_ref / tts_bench / digest 参数化用例)。 +- **新系列「Claude Code 通俗全解」首集 + 管线多系列化与 B 型信源取证基建**:新增 [《拆开 Claude Code:让 AI 动手的四层机制》](apps/negentropy-influence/episodes/claude-code-explained-video/README.md)(陶土橙 `#D97757` 内核 / 石青 `#64C4C0` 外挂机制 / 警示红 `#EF6461` 拒绝闸门,三色对 `#0E1116` 实测 6.06 / 9.18 / 6.00 : 1;170 句 4048 字 7 幕 39 镜;配音 `sunny-steady` + `me-bright.wav`),选题为开源课程 [Learn Claude Code](https://learn.shareai.run/zh/s01/) 的工具与执行四章(s01 Agent Loop / s02 Tool Use / s03 Permission / s04 Hooks)。为此做三件基建: + ① **`apps/negentropy-influence/series.json` 多系列化**:顶层由单 `series` 对象改为 `seriesList[]`,`check_series.py` 相应分层——**反串线规则(1)跨系列全局生效**(两系列口播互不引用),**顺序类规则(2/3/4)按系列内判定**(`episode` 的 `1..N` 连续性只在系列内成立,slug 仍全局唯一);`test_check_series.py` 增 6 例多系列语义用例(各系列各有第 1 集不误报、跨系列标题不比顺序、跨系列反串线仍 FAIL、跨系列 slug 重复 FAIL)。 + ② **Stage ① 泛化为两类信源**:`skills/01-paper-extraction.md` → [`01-source-extraction.md`](apps/negentropy-influence/pipeline/skills/01-source-extraction.md),A 型论文正文原样保留,新增 **B 型(文档/代码/课程站点)** 大节——双轨取证(仓库 @ **固定 commit** + 站点正文)、**证据三级**(一级仓库实测可断言 / 二级站点正文 / 三级「他人对闭源产品源码的分析」**必须带归属句**,不得说成产品既成事实)、数字纪律(口径须可复算、复算不出就只说趋势、活数据不进口播)、二次信源分歧清单必备。配套新工具 [`source_ledger.py`](apps/negentropy-influence/pipeline/scripts/source_ledger.py)(fetch/list/verify,仿 `refs.py` 的清单+指纹设计;`repo` 类校验 `--pinned-ref` 出现在 URL 中且 raw 指纹漂移即 FAIL,`site` 类只比**剥标签归一后的正文**指纹、漂移报 WARN——构建产物哈希天天变,比 raw 毫无信噪比)+ `test_source_ledger.py` 11 例;`apps/negentropy-influence/pipeline/tests/` 由 46 → **130 项**全绿(含合并 #1109 带入的 pron_marks / prospect_ref / tts_bench / digest 参数化用例)。 ③ **两条实测口径沉淀**:`skills/02` 写明 **`chars_per_min = 280` 不是纯语速而是含停顿的等效口径**(EP1 实测纯语速 301 字/分 + 停顿开销 68 s,两者抵消使「字数 ÷ 280」对全片时长误差仅 1%),并给出推论「**字数是硬约束,句数不是**」(本集实测:263 句合并到 229 句,字数只从 5054 掉到 4909,时长几乎没动——压时长必须真删内容);`skills/06` 新增**可复用视觉母题库**(终端打字 / 恒定视觉锚 / 字典分发表 / 闸门路由 / 插槽注册板 / 反枚举并列项)并显式化一条此前隐含的边界:**A 档冻结清单的同步义务限于同系列内**,新系列首集建立自己的基线(否则「复制不共享」的隔离初衷会被跨系列同步义务反向击穿)。 内容侧的两处校准值得单列:课程站点标注的章节行数(102/135/180/232)在固定提交上**用任何口径都复算不出**(s04 声称 232 而实测非空仅 213),判定为早期提交遗留值 → 口播只说趋势、画面给实测值 + 口径 + 取数日期;课程反复说的「循环里只改了一行」经逐章 diff 实测**只在 s02 成立**(s03 是插入 5 行门、s04 另长出 Stop 钩子续跑分支),故口播改用更准也更有力的口径——「**骨架四章一字未改,变的只有『执行』那一步怎么写**」(实测支撑:程序总行 141 → 255 增 81%,而 `agent_loop` 恒在 20–28 行)。另实测确认 pnpm ≥ 11 的 `ERR_PNPM_IGNORED_BUILDS: esbuild`(ISSUE-076)**对本工程无害**——平台二进制是 optionalDependency、不依赖 postinstall,旧写法下 `remotion bundle` 端到端通过,故刻意不改 A 档冻结文件去消音。 -- **科普视频公共管线基建升级**:`pipeline.py` 单入口编排(status/doctor/build/check/tts/captions/render/qa/all/clean-samples,阶段契约与派生式新鲜度——零状态文件防第二事实源)+ 每集 `pipeline.toml` 声明式配置(可执行参数不再散落 README,治 ISSUE-161 类漂移)+ `timing.json` 时序常数 SSOT(timing.ts 同步 import、Python 侧 timeline.py 共读,双语言镜像漂移结构性消灭)+ 七件新工具:`check_script`(④⑤门:分镜覆盖性/时长预算双口径/淡入不变式/--check-scenes 分镜↔代码互比——当场抓出两集既存分镜漂移)、`check_series`(系列顺序五规则执法 [media/series.json](media/series.json),自身标题排除使纯 grep 不可能做到的反串线 lint 成为可能)、`captions`(srt/vtt,cue 终点不含停顿)、`qa_frames --check/--check-theme`(黑帧/字幕带侵入[连通亮段法]/冻帧/字幕缺失 + WCAG 对比度)、`paper_extract`(Stage ① 取证五子命令)、`refs.py` + `voices/refs.toml`(参考样本指纹清单,只存哈希不存音频)、`tts.py --expect-ref-sha1` 指纹硬校验与 `.engine` 音色签名护栏 + `--allow-voice-switch` 显式放行(ISSUE-163 的拦截层);`media/pipeline/tests/` 45 项(digest 黄金哈希守「缓存零失效」)全绿 2s;pre-commit ruff 扩至 `^media/pipeline/`;技能规格补齐 skills/07–09 并挂载路由型真 Skill [.agent/skills/science-video-pipeline](.agent/skills/science-video-pipeline/SKILL.md)(零正文复制)。 -- **系列发布顺序 SSOT 与 Remotion 最佳实践三集落地**:新增 `media/series.json`/`series.md`(三集顺序 + 「序号不进口播」系列纪律——发布顺序变更的 TTS 代价恒为零);`@remotion/media` `