# Turn report gates into an owned channel plan

**Manual DaVinci Resolve/Fusion construction — draft.** This is an editable
layer recipe with native-frame controls, not a tested `.drp`, `.comp`, macro or
importable spline. No native Resolve execution, moving-source approval or
pixel-equivalent Text+ rendering is claimed.

## Source and timeline

The official reference is `Ljm3nHQQiSk`, *Reconcile quarter-end financials with
ChatGPT Work*, published August 13, 2026. Its freshly indexed 1920×1080 rendition
has60fps, a1/15360 time base and256 ticks per frame. Select **[3780,4638)**:
**858 frames /14.3 seconds**, source time63.0 through77.3 seconds exclusive.
Absolute PTS starts967680 and ends1187328 ticks exclusive. The separately
attributed 960×540 silent research excerpt rebases these positions; it is not
an editable input. `source-timing.json` binds all858 source and excerpt PTS.
The fresh rendition is not proof of an absent historical master's identity.

Create a1920×1080 progressive, square-pixel,60fps timeline with exactly858
frames, local0 through857. Explicitly map local zero to the Fusion clip's global
start. Do not add handles, audio, a final dissolve, repeated frames or the next
title. Source4638 is the first dark frame after the post and is excluded.

## Whole contract

Start with a split conversation/report view. Four gate keys and owners in the
read-only report must recur in the derived channel post. A submitted request
and working explanation precede the foreground fade. The new window holds at
the wider scale before the shared camera pushes into the post. The report
remains behind it, but its conversation updates to a confirmation; do not
freeze the entire background application. Do not replace this with a file
drag, chooser, table morph, share dialog or source-tab roundtrip.

Use either complete JSON fixture. Both are original nonfinancial planning
examples. This is not evidence that OpenAI, Slack or Poe performs those actions.
The source's edited working-time jumps are not product latency. The source post
shows all four headings/owners at the wider scale, with later fourth-section
details outside the studied viewport. The supplied build intentionally displays
only the fourth heading/owner and never pans down to invented details.

## Coordinates and graph

`Scene.tsx` uses top-left pixels, Y down, in a1920×1080 full-frame domain.
Build branches at that same domain size to avoid accidental crop/rescale during
Merge. For a rectangle `(x,y,w,h)`, normalized center is
`((x+w/2)/1920, 1-(y+h/2)/1080)`, width`w/1920`, height`h/1080`.
For points use`(x/1920,1-y/1080)`. Confirm the installed node convention.

Merge order:

1. `ConstellationField`: full1920×1080 original vector field.
2. `ReportWindow`: shadow, rounded white body, toolbar, conversation and report.
3. `ChannelWindow`: shadow, rounded body, rails, headers, post and composer;
   apply `channelOpacity` once to this assembled branch.
4. `Pointer`: original stroked polygon, independently gated by `cursorOpacity`.
5. `SharedCamera`: transform the entire assembled field, both windows and pointer
   with `cameraScale`, `cameraX`, `cameraY`, then apply the authored camera blur.
6. Crop to the1920×1080 output and connect to MediaOut. A dark full-frame field
   beneath the transformed branch prevents transparent output edges.

The camera affine mapping is `screen = scale × world + translation`. For a
full-frame Transform with center-pivot scaling, use
`Center.X = scale/2 + cameraX/1920` and
`Center.Y = 1-scale/2-cameraY/1080`, with Size=`scale` and no rotation.
This compensation reproduces a top-left origin; simply setting Center to the
pixel translation does not. CSS blur pixels do not directly certify a Fusion
Blur size. Calibrate that optical effect against actual renders; keep it zero
at held endpoints and retain the unverified optical difference until checked.

## Construct the original branches

### Field and avatar

Reconstruct `public/art/constellation.svg` with Background, gradient and masks.
It has a radial dark field, a227×173 repeating four-dot cell, two thin
constellation polylines at14% opacity and eight larger dots. Preserve the SVG's
actual positions, radii, stops and opacity. Do not use a screenshot of the film's
galaxy desktop. Repeat the cell across the full canvas before the shared camera.

The64×64 avatar has a14px rounded field, a head circle at(32,24) radius14,
an original shirt/hair silhouette and three short face strokes. Use the SVG's
path coordinates as filled/stroked Polygon/Bezier shapes. Reuse this original
avatar in the rail and author row. Source photography is not included.

### Report window

Place the window at world(210,118), size1500×844, radius17. Use a soft shadow
behind it, clip all children to its rounded boundary, and place a38px toolbar
at the top. Toolbar circles are10px diameter with8px gaps and18px left padding;
the brand/report label follows them. This is original chrome, not a copied logo.

The conversation is window-local(0,38),340×806, with a right divider. Before
`submitted`, use the prior request bubble at(55,22),255×125, with12–14px inner
padding; show the review label at(22,217), action label at(22,250), four summary
lines at(22,288) and the read-only note at(22,416). After submission, replace
that history with the read-only note at(20,24), submitted request bubble at
(54,60),257×105, status at(22,213) and working/confirmation text at(22,248).
Those positions are conversation-local. `workingOpacity` affects the latter
paragraph; `confirmation` selects the confirmation array.

The composer remains conversation-local(18,666),304×120, radius18. Text starts
(14,12) inside it; use explicit20px line spacing. A vector plus is at(14,88),
the mode label at(47,91), and a29px action circle at(263,82). `requestVisible`
selects request lines versus placeholder. A submitted request remains briefly
in this composer while the history bubble has appeared; do not clear both in
the same frame. `sendEnabled` or `submitted` selects the dark circle, and
`submitted` changes the arrow to a square. These are schematic original icons.

The report branch is window-local(340,38),1160×806, clipped independently.
Report title is at(30,18); its read-only/status line is(82,87). Heading is
(82,196), two intro lines start(82,240), section label(82,326) and table headers
(82,377). The six column widths are55,130,165,130,185,230px. Four table rows
start at(82,420+93×row), each1010×76 with a top rule and17px top padding. Map
order, key, owner, priority, status and dependency from the same gate records
used by the post. Source-notes text at(82,790) is partly clipped by this viewport.
The report table stays fixed within its window through delivery.

### Channel window and post

Place the foreground at report-window-local(42,0),1330×826, radius15, with a2px
border and its own shadow. It does not replace or allocate space inside the
report. Keep the complete branch behind one opacity gate so the source report
can be seen through the whole window during entry.

Toolbar height is38. The vertical icon rail is(0,38),62×788; draw icons with
stroked vector masks. The channel sidebar is(62,38),260×788. Its workspace label
is(17,16), navigation lines start(17,70) at34px spacing, channel heading at
(17,242), and seven channel rows start(9,277+35×row),242×30. Highlight row5,
whose label is the fixture channel. Do not create a second independent channel
name that could diverge from the request's intended destination.

Main header is(322,38),1008×61. The post viewport is(338,109),956×587 and clips
before the foreground composer at Y696. Inside this viewport, avatar is(0,0),
31×31; author starts(44,0), post title(44,23) and two summary lines(44,52).
Gate content has an additional(44,108) origin. Gate sections begin at relative
Y0,155,291,443, with15px type and18px line spacing.

Each of the first three sections contains key/title, owner, due date, its action
lines and evidence. Section3 also has a dependency line between due date and
actions. Action counts are3,2,3. The fourth contains only its key/title and owner.
Its lower edge meets the viewport boundary; do not shrink all text to expose
more. Owner mentions use an original pale-blue background. The foreground
composer is(338,696),958×112 with a9px rounded border, formatting row, placeholder
and vector plus. It overlays no visible text above its own viewport boundary.

## Text and color

Use the supplied Geist font and explicit line arrays. Report heading is22px
weight600; table headers14px; table cells15px; report intro16px/24px. Conversation
summary16px/25px, working text15px/24px, composer15px/20px and submitted bubble
14px/22px. Post text is15px/18px, title and labels weight600; summary15px/21px.
Workspace label is19px/600. Do not assume a Text+ Size value equals CSS pixels:
calibrate the native font metrics at1920×1080 and check the named text boxes.

The selected JSON supplies accent, ink, paper and sidebar colors. The SVG field,
avatar and several neutral chrome colors are fixed original art. Palette reuse
is therefore partial. Actual Chromium width checks run before rendering; they
are not proof of Resolve shaping. No auto-shrink, clipping repair or font swap
is supported. If text exceeds its box, shorten the input within the contract.

## Frame controls

`controls.csv` has858 data rows. Regenerate it from `scripts/controls.mjs` and
compare bytes before transferring values. Use one key per integer local frame,
linear interpolation between sampled continuous values and stepped gates for
the integer state flags. Do not apply an additional easing curve to the CSV.
Source PTS and authored control values are separate evidence.

| Local frame | Source frame | Required state |
| ---: | ---: | --- |
| 0 | 3780 | Full report already open; four gates/owners visible |
| 28–59 | 3808–3839 | Authored camera approach to composer/report |
| 150 /151 | 3930 /3931 | Empty composer /single-step request arrival |
| 240 /241 | 4020 /4021 | No submitted history /history appears with request still in composer |
| 260 | 4040 | Authored composer clear, within observed duplication-to-clear interval |
| 276 | 4056 | Camera returned to wide context |
| 374 /375 | 4154 /4155 | Faint /legible working explanation |
| 454 /455 | 4234 /4235 | No foreground /first transparent foreground |
| 482 | 4262 | Authored fade endpoint, before the observed opaque4272 sample |
| 492 | 4272 | Opaque post; same four owners; background confirmation |
| 610–660 | 4390–4440 | Authored shared camera push after the wide hold |
| 857 | 4637 | Held closer post; do not include the next dark frame |

The source establishes those content/ordering boundaries and bracketing samples,
not the recovered pointer physics, exact camera coefficients or fade curve.
The candidate uses smoothstep interpolation and disclosed original geometry.
Pointer world coordinates come from the CSV and disappear at local278; apply
the shared camera after positioning the polygon.

## Acceptance still required

Check both content variants at the frame boundaries, wide post and final crop.
Confirm matching keys/owners, a translucent whole-window entry, retained report
edge, no table-to-message morph, no extra fourth-section reveal and no clipped
intended labels. Compare a native Resolve render to the Remotion outputs and
the moving research source before asserting native equivalence or quality.
Current delivery provides sampled output checks and executable verification,
not a completed moving or native-Resolve review.
