diff --git a/docs/PROJECT-STRUCTURE.md b/docs/PROJECT-STRUCTURE.md
index f32c35b..8fae564 100644
--- a/docs/PROJECT-STRUCTURE.md
+++ b/docs/PROJECT-STRUCTURE.md
@@ -119,7 +119,7 @@ S:\Game Hacking\Eushully\Himegari\ ← workspace root (three siblings)
│ layout-3 numbered state/history/gfx, DAT/STH pair + BMP codec,
│ and profile-owned state
│ ├── Age.Engine.Frontend/ platform-neutral frontend support: diagnostics/options, page
- │ location, performance logging, movie decoder/runtime contracts,
+ │ location, performance logging, movie runtime/FFmpeg decoding,
│ audio alignment, surface registry, and WAV sanitization
│ └── Age.Engine.Text.Windows/ optional exact Windows GDI gray-4 reference backend; kept
│ outside the platform-neutral VM/runtime core
@@ -156,8 +156,9 @@ through project references rather than compiling duplicate linked sources. The f
`PageLocatorState`, `GodotTimelineLog`, `GodotTraceSink`, `StepLimitDiagnosticFormatter`, `GodotVmOptions`,
`PerformanceFrameLog`, and `WindowLaunchOptions`. It also owns the internal movie decoder boundary/runtime,
audio-timeline alignment, movie-surface registry, and RIFF/WAVE sanitizer; only the `Himegari` and
-`Age.Engine.Tests` assemblies receive explicit friend access to that internal API. FFmpeg interop and decoder
-implementation remain under `godot/` until their separate ownership slice.
+`Age.Engine.Tests` assemblies receive explicit friend access to that internal API. FFmpeg native interop and the
+asynchronous/paced decoder also live here; the `Age.MovieCorpusGate` tool receives friend access to the native
+frame-source seam and references this project rather than compiling an interop source link.
`godot/GodotAdvHost.cs` retains cross-domain host coordination. Its partial-class companion
`godot/GodotAdvHost.AdvText.cs` owns live/retained ADV text, surface glyph rasterization and caching,
diff --git a/docs/remake-architecture-and-roadmap.md b/docs/remake-architecture-and-roadmap.md
index d4a4996..6a1bfeb 100644
--- a/docs/remake-architecture-and-roadmap.md
+++ b/docs/remake-architecture-and-roadmap.md
@@ -841,6 +841,13 @@ do not mix mechanical moves with semantic changes.
in Godot while implementing the moved boundary through that friend access. Both solution builds and runtime
validation remain green.
+ The third bounded build-graph slice moved the unchanged FFmpeg native interop and asynchronous/paced decoder
+ from `godot/` into `Age.Engine.Frontend`. The two remaining movie test source links and the corpus tool's native
+ source link were replaced by project references. Friend access now also names only the `Age.MovieCorpusGate`
+ assembly required by the native frame-source seam; native ABI resolution, decoder pacing, seek/audio behavior,
+ failure handling, and teardown remain unchanged. Engine, Godot, and corpus-gate builds plus runtime validation
+ remain green.
+
5. **Close repository-policy and storage gaps.** Add an explicit project license, third-party notices and
checksums/provenance for committed binaries, consistent editor/build policy, a pinned .NET SDK, and a
CI entry point built on the same validation driver. Remove the empty workspace-root `.git` directory and
@@ -1195,9 +1202,9 @@ layer's rendering diverges from ADV; save layout.
## 8. Immediate next step
Begin step 4 of the **codebase consolidation** maintenance slice: make the build graph express source ownership
-without changing behavior. Move `FfmpegMovieNative.cs` and `FfmpegMovieDecoder.cs` from `godot/` into
-`Age.Engine.Frontend` next. Replace both test source links and the movie corpus gate's native-source link with
-project references, granting narrowly scoped friend access to the corpus-gate assembly while preserving native
-ABI, decoder pacing, failure, and teardown behavior.
+without changing behavior. Move the reusable `MovieCorpusGate.cs` implementation from
+`tools/movie-corpus-gate/` into `Age.Engine.Frontend` next. Leave the tool's `Program.cs` as its command-line entry
+point, remove the final test source link, preserve the internal friend boundary, and verify that no production
+`.cs` files are compiled through cross-project links.
Concrete playthrough blockers may still preempt this bounded maintenance work; the consolidation effort does
not replace Phase B gameplay validation or the open cross-platform gates.
diff --git a/godot/FfmpegMovieDecoder.cs b/engine/Age.Engine.Frontend/FfmpegMovieDecoder.cs
similarity index 100%
rename from godot/FfmpegMovieDecoder.cs
rename to engine/Age.Engine.Frontend/FfmpegMovieDecoder.cs
diff --git a/godot/FfmpegMovieNative.cs b/engine/Age.Engine.Frontend/FfmpegMovieNative.cs
similarity index 100%
rename from godot/FfmpegMovieNative.cs
rename to engine/Age.Engine.Frontend/FfmpegMovieNative.cs
diff --git a/engine/Age.Engine.Frontend/Properties/AssemblyInfo.cs b/engine/Age.Engine.Frontend/Properties/AssemblyInfo.cs
index 223b7b5..626ea33 100644
--- a/engine/Age.Engine.Frontend/Properties/AssemblyInfo.cs
+++ b/engine/Age.Engine.Frontend/Properties/AssemblyInfo.cs
@@ -1,4 +1,5 @@
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("Age.Engine.Tests")]
+[assembly: InternalsVisibleTo("Age.MovieCorpusGate")]
[assembly: InternalsVisibleTo("Himegari")]
diff --git a/engine/Age.Engine.Tests/Age.Engine.Tests.csproj b/engine/Age.Engine.Tests/Age.Engine.Tests.csproj
index beaa608..4744193 100644
--- a/engine/Age.Engine.Tests/Age.Engine.Tests.csproj
+++ b/engine/Age.Engine.Tests/Age.Engine.Tests.csproj
@@ -24,8 +24,6 @@
-
-
diff --git a/tools/movie-corpus-gate/Age.MovieCorpusGate.csproj b/tools/movie-corpus-gate/Age.MovieCorpusGate.csproj
index 63b46a3..47a00b0 100644
--- a/tools/movie-corpus-gate/Age.MovieCorpusGate.csproj
+++ b/tools/movie-corpus-gate/Age.MovieCorpusGate.csproj
@@ -8,6 +8,6 @@
-
+