# Direction: spotify-concept-ad
Runtime date: 2026-10-20   Mode: auto, don't ask (router mode auto; signal "do not ask, decide")   Tier: full   Crew: full (D-08)

## Summary
Concept: The street plays along: the city's machine noise locks to the beat you choose in Spotify's own search field, and the street becomes a drum machine playing your track (D-13); since the owner's redirect, a drawn street where every machine joins the song after the press, one continuous camera (D-30, supersedes D-14's crane); 35.0 s, English 16:9, one version (D-28, D-39); viewer takeaway written late (D-48)
Direction: a drawn night street in flat vector, side view: grey before the press, each machine takes its colour when it joins, the windows light as the street's equalizer at the drop, the logo alone on black at the end (D-31, D-44, D-45; supersedes D-17)
Palette: ground #121212, field #1F1F1F, card #181818, ink #FFFFFF; the machines coral #FFA178, olive #608108, mint #91EEDA, slate #477D95; Spotify green #1ED760 only on the play circle and the field focus; the logo on #000000 (D-18)
Type: Figtree 700 for the sound words, the line and the Top result label; Figtree 500 for the field placeholder and the typed answer (D-19; the Arabic pair of D-19 is not delivered, D-28)
Gates: default look pass (D-31); distance 4 of 6 vs ice-styles "Flat Vector 2D Motion Graphics" (D-31); fingerprint pass, no earlier records on this machine (D-31); clarity read-1 not run, read-2 not run (the gate entered the skills mid-run, after 02; D-48); clarity read-3 PASS r5 (ice/review/clarity/read-3-r5-match.md; the round-4 read is void)

## Decisions

### D-01 Ask or not ask at stage 01
Status: approved
Question: Send the stage 01 question message or decide every open field?
Locked inputs: run conditions: "The user is asleep and will not answer anything. Auto mode, and the user said 'do not ask, decide'".
Options:
- A: Send no message; every field takes its default with a D-entry (rests on: questions.md section 5 signal "don't ask")
- B: Send the message and wait (rests on: router stop A)
- C: Send the message and continue with defaults while waiting (rests on: intake-and-brief.md section 6.3)
Choice: A
Reason: The user's own words are a "don't ask" signal; the router's stops table then has zero stops (no stage 01 message, no preview approval).
Sources: brief slot mode (router; user signal quoted); ice-motion-director/SKILL.md section 3.3 and section 5 "Stops"; ice-direction/references/questions.md section 5
Approved by: user signal (quoted) on 2026-10-20
Gates: none
Left behind: B
Supersedes: none

### D-02 Brand ownership
Status: approved
Question: Is the user the brand (official film) or not (unofficial concept)?
Locked inputs: run conditions: "This is an unofficial concept for a public gallery: the film ends with, and the delivery note states, 'Unofficial concept, not affiliated with Spotify'".
Options:
- A: I am the brand: use its official material as an official film
- B: Not the brand: unofficial concept, last frame "Unofficial concept, not affiliated with Spotify" plus a faithful Arabic translation in the Arabic version
- C: Not sure (treated as B)
Choice: B
Reason: Stated in the run conditions and equal to the fixed default; no store badges, offers, prices or claims the brand's own pages do not state today.
Sources: run conditions (quoted); ice-direction/references/questions.md section 2 fixed option set; ice-assets/references/brand-authenticity.md section 10 steps 1 and 10
Approved by: run conditions (quoted) on 2026-10-20
Gates: unofficial label (ice-qa at 10)
Left behind: A
Supersedes: none

### D-03 Voice source
Status: approved
Question: Who speaks in the film?
Locked inputs: run conditions: "No voiceover unless the skills find a permitted voice source; with none, the film is music-led with all words on screen, in each language". No recording supplied; no voice approved by name; no AI media allowed.
Options:
- A: Every word on screen in each language, with music and sound, no voice (fixed default)
- B: The user's own recording (none supplied)
- C: A voice source approved by name (none approved; AI voice excluded by the run conditions)
Choice: A
Reason: No permitted voice source exists; the router's "voice implied, no voice source" rule keeps the film on ice-film, music-led. The cut is built so a voice could be added later without re-cutting.
Sources: run conditions (quoted); ice-motion-director/SKILL.md section 2 "Voice implied, no voice source"; ice-direction/references/questions.md section 2 fixed option set
Approved by: run conditions (quoted) on 2026-10-20
Gates: none
Left behind: C
Supersedes: none

### D-04 Commercial use
Status: approved
Question: Is the film for commercial use (decides whether PolyForm Noncommercial material may be opened)?
Locked inputs: none from the user.
Options:
- A: unknown: never open the noncommercial folder (default when unanswered)
- B: yes
- C: no (would unlock noncommercial material; needs the user's words)
Choice: A
Reason: The user did not say; `unknown` keeps every noncommercial-only source closed, which costs nothing because the skill's permissive references cover the same ground.
Sources: ice-film/SKILL.md section 8; ice-direction/references/intake-and-brief.md section 1 slot commercial_use
Approved by: approver agent (batched stage 01 check) on 2026-10-20
Gates: none
Left behind: C
Supersedes: none

### D-05 Market (provisional, for research)
Status: approved
Question: Which market does each language version speak to?
Locked inputs: language versions Arabic and English (prompt). The prompt is written in Egyptian Arabic ("اعمل", "مدته").
Options:
- A: Arabic version for Egypt and the wider Arab world (MENA), English version global (rests on: prompt language and dialect)
- B: Arabic version for the Gulf only, English version for the UK and US
- C: One market for both (Egypt), English as a second language there
Choice: A
Reason: The user's own dialect points to Egypt; an Arabic film for a pan-Arab streaming audience reads in MENA when its on-screen words are clear Arabic; the English version serves the gallery's global audience. Research queries use market "Egypt", "MENA" and "global".
Sources: brief slots language and market (prompt); ice-direction/references/intake-and-brief.md section 1 ("market: infer from language and brand")
Approved by: approver agent (batched stage 01 check) on 2026-10-20
Gates: none
Left behind: B
Supersedes: none

### D-06 Platform (provisional, for research)
Status: approved
Question: Where will the film play?
Locked inputs: none from the user; length 35 to 60 s (prompt).
Options:
- A: YouTube and social feeds (Instagram, TikTok, YouTube Shorts), plus the public gallery page (rests on: run conditions "public gallery", length range)
- B: Television spot only
- C: Social feed only (vertical)
Choice: A
Reason: A 35 to 60 s ad for a gallery is watched on a web page and on YouTube (landscape); the same film is most often reused in feeds (vertical). Research queries use platform terms "YouTube", "Instagram", "TikTok". Final ratios are set at 03 from the film type's deliverables.
Sources: run conditions ("public gallery"); brief slot duration (prompt); ice-direction/references/intake-and-brief.md section 1 ("platform: infer")
Approved by: approver agent (batched stage 01 check) on 2026-10-20
Gates: none
Left behind: B
Supersedes: none

### D-07 Film type
Status: approved
Question: Which ice-film type carries "an ad for Spotify" of 35 to 60 s?
Locked inputs: "اعمل إعلان لسبوتيفاي، مدته من 35 ثانية لدقيقة" (prompt); unofficial concept, no store badges, offers or claims as if Spotify published them (D-02); no voice (D-03); no login to the app (app-ad.md Truth and content).
Options:
- A: Brand film, borrowing the app ad's "real product moment" (rests on: brand-film.md Fit and Purpose "a feeling the brand owns"; Timing master music-led by default; Deliverables 16:9 master with 9:16 and 1:1 re-laid out)
- B: App ad (rests on: app-ad.md Fit "an app's ad for a feed"; but its main cut is 30 to 40 s, below most of the asked range, its CTA needs store badges, which D-02 forbids, and its screens must come from a seeded demo account, which the agent may not log in to)
- C: Music video (rests on: film-setup.md signal "track-led"; but no licensed track exists yet and the brand, not a track, is the subject)
Choice: A, Brand film
Reason: The asked 35 to 60 s length and an unofficial concept with no CTA badge fit the brand film's purpose (a feeling Spotify owns) and its music-led timing master; the app ad's strength, the real product doing its job, is borrowed as one or two rebuilt UI moments from Spotify's public pages with neutral content, so the film still shows the product.
Sources: brief slots duration, real_brand (prompt); D-02; D-03; ice-film/references/film-setup.md section 1 ("Two types fit: pick the one whose purpose matches the goal, borrow parts of the other, log it"); film-types/brand-film.md and app-ad.md (Fit, Purpose, Rhythm ranges, Truth and content, Deliverables)
Approved by: approver agent (batched stage 01 check) on 2026-10-20
Gates: none
Left behind: B, the app ad with a phone in hand and store badges, the most typical Spotify-ad reading
Supersedes: none

### D-08 Size and crew
Status: approved
Question: Size of the job and crew row.
Locked inputs: duration 35 to 60 s (prompt); two language versions (prompt).
Options:
- A: Size standard (7 to 60 s, versions included); crew Full: length row Standard (21 to 45 s) or Full (over 45 s), plus one row per flag: two language versions; a real brand's UI rebuilt at 90 percent fidelity; more than one master aspect composed separately (16:9 and 9:16 re-laid out). Capped at Full
- B: Size standard, crew Standard (ignoring the flags)
- C: Size long (treating the language versions as a campaign)
Choice: A
Reason: The film-setup.md rule moves one row up per flag and never above Full; with two languages and re-laid-out aspects the run has 12 to 20 dispatches, a reviewer per round per master, and up to 3 film review rounds per master. Size stays standard because the router says language versions and cutdowns of a 7 to 60 s film keep it Standard.
Sources: brief slots duration and language (prompt); ice-motion-director/SKILL.md section 4; ice-film/references/film-setup.md section 2
Approved by: approver agent (batched stage 01 check) on 2026-10-20
Gates: none
Left behind: B
Supersedes: none

### D-09 Goal and audience
Status: approved
Question: The one thing the viewer should do afterwards, and who watches, where, in what state.
Locked inputs: an ad for Spotify (prompt); unofficial concept, no offers or badges (D-02); Arabic and English versions (prompt).
Options:
- A: Goal "open Spotify and play something for the moment you are in"; audience 18 to 34 on phone feeds (sound often off at first) for both versions, plus laptop gallery viewers for English (rests on: R-02 S-17 and S-15 on Egypt's free-listening and data barriers; R-01 S-15 to S-19 on Spotify's own campaigns built on personal listening moments; D-06 platform)
- B: Goal "subscribe to Premium"; audience existing free users (rests on: R-02 S-06 Egypt offer; blocked by D-02: no offers in an unofficial concept)
- C: Goal "remember that Spotify is huge" (777 million users); audience the general public (rests on: R-02 S-01; a scale claim is not a feeling the viewer acts on)
Choice: A
Reason: The only action an unofficial concept can honestly ask for is to play something; it is also the action Spotify's own link wording names ("PLAY ON SPOTIFY", "LISTEN ON SPOTIFY", R-01 S-02). Sound-off feed viewing is why every word is on screen (D-03).
Sources: brief slots platform (D-06), real_brand (prompt); R-01 (2026-10-20) S-02, S-15 to S-19; R-02 (2026-10-20) S-06, S-15, S-17
Approved by: approver agent (batched stage 01 check) on 2026-10-20
Gates: none
Left behind: B, the Premium price push, which is the category's default Egypt ad and is forbidden here
Supersedes: none

### D-10 Aspect ratios and deliverables
Status: approved
Question: Canvas and versions.
Locked inputs: platform D-06; film type brand film (D-07), whose deliverables are "16:9 master; loopable version when built as a loop; 9:16 and 1:1 re-laid out; poster; stills"; two languages (prompt).
Options:
- A: 16:9 master per language, with 9:16 and 1:1 re-laid out from the same timeline, plus a poster still per version (rests on: brand-film.md Deliverables; D-06)
- B: 9:16 only (feeds), no landscape (rests on: feed use; loses the gallery and YouTube)
- C: 16:9 only (rests on: gallery page; loses feeds)
Choice: A
Reason: The type's deliverables list exactly this, and D-06 names both landscape and vertical destinations. Cutdowns (15 s, 6 s) are decided at 03 in versions.md.
Sources: ice-film/references/film-types/brand-film.md Deliverables; D-06
Approved by: approver agent (batched stage 01 check) on 2026-10-20
Gates: none
Left behind: B
Supersedes: none

### D-11 Arabic language profile
Status: approved
Question: Which Arabic, which register, for a text-only film?
Locked inputs: an Arabic version (prompt); market D-05; no voice (D-03).
Options:
- A: Egyptian (Cairo) spoken Arabic, polished register, the way Spotify Egypt writes its own pages ("اسمع موسيقى من غير حدود"، "هتدفع ... بس بعد كده") (rests on: R-02 S-07; prompt written in Egyptian Arabic)
- B: Modern Standard Arabic for a pan-Arab reach (rests on: ice-arabic dialect-profiles.md section 1 "pan-Arab audience: MSA")
- C: Gulf Arabic (rests on: nothing in the brief)
Choice: A
Reason: dialect-profiles.md section 1 says a text-light film with no voice decides between MSA and the most likely audience dialect; the brand's own Arabic copy for this market is Egyptian colloquial, and the user writes Egyptian. Native reader: the user by default; the sign-off stays open in the delivery note (no preview approval in this run).
Sources: R-02 (2026-10-20) S-07; prompt; ice-arabic/SKILL.md section 1; ice-arabic/references/dialect-profiles.md sections 1 and 2
Approved by: approver agent (batched stage 01 check) on 2026-10-20
Gates: Arabic dialect review at 03
Left behind: B
Supersedes: none

### D-12 Picture in mind, and the request's triage
Status: approved (ice/review/stages/01-approver.md asked for this entry; approved on its second pass)
Question: Does the user already picture the film (questions.md section 4), and is the request formed or unformed (intake-and-brief.md section 4)?
Locked inputs: the prompt "اعمل إعلان لسبوتيفاي، مدته من 35 ثانية لدقيقة، ونسخة عربي ونسخة إنجليزي" names a brand, a length and two languages, and no picture, scene or telling. "Don't ask" signal (D-01).
Options:
- A: Not yet, pitch ideas (fixed default for the question); triage: unformed about the telling, so the full concept round runs at 02 (rests on: questions.md section 4 default; intake-and-brief.md section 4 "An ad prompt that gives facts and an occasion ... but no telling ... always enters the concept round")
- B: Treat the request as formed and skip the round (rests on: nothing in the prompt describes a telling)
- C: Take a reference look (rests on: no reference supplied)
Choice: A
Reason: The prompt holds a subject and constraints but no telling; the skill's rule sends such an ad to the concept round, and the unanswered question takes its default.
Sources: prompt (quoted); ice/state.json questions[2]; ice-direction/references/questions.md sections 4 and 5; ice-direction/references/intake-and-brief.md section 4
Approved by: approver agent on 2026-10-20 (stage 01, second pass)
Gates: none
Left behind: B
Supersedes: none

Note on statuses: from stage 02 on, entries are written `proposed` and changed to `approved` only after the approver's report for that stage is on disk (ice/review/stages/01-approver.md, notes).

### D-13 Concept
Status: approved
Question: How does the film make a viewer open Spotify and play something for the moment they are in (D-09), within the locked inputs?
Locked inputs: listed in ice/review/direction/D-13-options.md (brand film D-07; no voice D-03; unofficial concept D-02; no AI media, no people footage, no real songs or artists; code music; TRUTH approved figures; COMPLIANCE RC-01 to RC-11 and RD-02).
Options:
- C1: One question, 777 million answers (subject world) (rests on: R-01 capture "What do you want to play?", R-02 S-01 figures, R-07 open space "interface as main stage")
- C2: The noise edit (emotion) (rests on: R-02 S-15 "noise people would choose not to listen to", R-06 and R-07 open space "sound as a visible system")
- C3: Read the drop (audience, muted feed) (rests on: D-09 muted feeds, R-06 open space)
- C4: Inside the player (anti-pattern inverted) (rests on: R-06 convention, R-07 open space)
- C5: Reorder the day (unusual format: a queue) (rests on: TRUTH F5)
Choice: mix of C2 (body and hero) with C1's exact question as the hinge, the critic's own recommendation, with the critic's five fixes applied (ice/plan/concepts.md)
Reason: C2 is the only KEEP (7): one idea, readable muted from frame 0, and its percussion-led score is the most code-friendly in the round; C1's exact Spotify question fixes C2's failed competitor swap. The critic's Arabic condition for the pill was met by capturing Spotify's own Arabic search placeholder on 2026-10-20.
Sources: ice/review/direction/D-13-options.md; R-01, R-02, R-06, R-07, R-08 (2026-10-20); COMPLIANCE.md; TRUTH.md (F1, Arabic interface strings)
Consultant: per concept, culture, Arabic script and category risks (top: C1 Arabic placeholder uncaptured; C2 religious sounds or other people's music as noise; C3 reading holds; C4 thin public UI; C5 Premium-only action) -> ice/review/direction/D-13-consultant.md
Critic: C1 REVISE 6, C2 KEEP 7, C3 REJECT 4, C4 REJECT 4, C5 REJECT 5; chosen mix C2 plus C1 hinge (ice/review/direction/D-13-critic.md) [independent]
Judged in: own dispatch
Approved by: approver agent on 2026-10-20 (ice/review/stages/02-approver.md)
Gates: unexpected concepts 2 of 5 (C2, C4) minimum met; silhouettes 4 distinct (critic); hero moment named (street as a drum machine); competitor swap passes through Spotify's exact question and real search field
Left behind: C1 as pitched, "music for every moment" in a search box, the category's and Spotify Egypt's existing line
Supersedes: none

### D-14 Structure
Status: approved
Question: Which structure carries D-13?
Locked inputs: D-13 concept and its fixes; length 35 to 60 s (prompt); brand film transition and richness rules (brand-film.md).
Options:
- S-A: Lock-in, row by row (chain reaction on a flat grid) (rests on: structure.md section 2 "chain reaction"; brand-film.md "Narrative shapes")
- S-B: Crane up, the street is the grid (one continuous camera through scale) (rests on: structure.md section 2 "one camera move through scale"; brand-film.md transition policy "every transition turns the current object into the next")
- S-C: Split street, before and after, wiped by a playhead (rests on: structure.md section 2 "before, after")
Choice: S-B with S-A's chain reaction as the locking mechanism (the critic's mix), and the critic's five fixes: show the choice (an answer enters the pill and becomes the melody lane), the chain causes the rise and accelerates, importance budget 2 of 8 and peak at 67 percent, a short descent with the street playing under the closing pill, a 2.5D tilting plane with frontal billboards for read words
Reason: S-B is the only KEEP (7): the top-down reveal makes "the street plays along" literal and one camera meets the brand film's transform-not-cut policy; S-A's chain supplies the cause the camera lacked.
Sources: ice/review/direction/D-14-structure-options.md; ice/review/direction/D-14-critic.md; ice-film/references/structure.md sections 2 to 7; film-types/brand-film.md
Critic: S-A REVISE 6, S-B KEEP 7, S-C REJECT 4 (ice/review/direction/D-14-critic.md) [independent]
Judged in: own dispatch (same critic agent as D-13, fresh report)
Approved by: approver agent on 2026-10-20 (ice/review/stages/02-approver.md, second pass)
Gates: importance budget 25 percent (pass after fix 3); peak 67 percent; beat length variation 2 to 10 s; fingerprint written in ice/plan/structure.md
Left behind: S-A as written, the frontal grid that fills row by row (the typical drum-machine visual)
Supersedes: none

### D-15 Opening (first 3 seconds)
Status: approved
Question: Which of three provisional openings starts the film (openers-and-endings.md section 3)?
Locked inputs: D-13, D-14 (beat 1: street level, machine noise out of time, loudest horn at about 5.0 s); muted phone feeds (D-09); ice-arabic rule 3 (no clipped read word).
Options:
- A: typography leads, one giant noise word slammed across the frame (rests on: concept-menus.md section 3 "A giant word cropped by the frame edge")
- B: depth leads, street level with a word passing close (rests on: concept-menus.md section 3 "In media res")
- C: camera leads, from above down to the street (rests on: structure.md section 2 "one camera move through scale"; bookends the later crane)
Choice: C mixed with A's dominant horn word, with the hook critic's five fixes (ice/plan/hooks.md)
Reason: the hook critic scored C highest (REVISE 6) as the only first frame a muted viewer reads at once, with an escalating fall into the 5.0 s horn; A's crop is a hard Arabic failure, B has no whole word at frame 0.
Sources: ice/plan/hooks.md; studies ice/renders/studies/opening-*.mp4 and ice/plan/hooks/opening-studies-sheet.png; ice/review/direction/D-15-critic.md
Critic: A REJECT 5, B REJECT 4, C REVISE 6 (ice/review/direction/D-15-critic.md) [independent, fresh hook critic]
Judged in: own dispatch
Approved by: approver agent on 2026-10-20 (ice/review/stages/03-approver.md)
Gates: first-3-seconds gate: rules 1 and 5 pass as studied, rules 2 to 4 fixed in the plan and re-checked on the encoded opening at 09
Left behind: A, the giant cropped word slam, the most typical kinetic-type opener
Supersedes: none

### D-16 The fourth noise source: a demolition hammer instead of TV static
Status: approved
Question: Which four machine noises fill the street (D-13 critic fix 3 named horn, drill, engine, TV static)?
Locked inputs: machine sources only; never the call to prayer, Quran recitation, church bells, anyone's music, ringtones or human voices (D-13 critic fix 3, consultant); Arabic version in everyday Egyptian nouns (D-13 critic fix 4); four lanes become the kit (low hit, backbeat, hats, bass).
Options:
- A: horn, drill, engine, TV static (as the critic listed) (rests on: D-13-critic.md fix 3)
- B: horn, drill, engine, a demolition hammer (rests on: D-13-critic.md fix 4 "Egyptian nouns (كلاكس، شنيور)"; consultant D-13 on misreads of invented sound words)
- C: horn, drill, engine, a generator (rests on: everyday Cairo machine noise; no source names it)
Choice: B
Reason: TV static has no clear everyday Egyptian noun and its sound is a hiss with no transient, so it cannot carry the backbeat; the demolition hammer has an everyday Cairo word ("تكسير", the neighbour's renovation) and a hard transient that becomes the backbeat (tak in maqsum, the snare in the straight four). It stays a machine or tool source, inside the critic's rule.
Sources: ice/review/direction/D-13-critic.md fixes 3 and 4; ice/review/direction/D-13-consultant.md; ice/plan/script.md shot 1 and the Arabic dialect review
Critic: not a major decision by decision-process.md section 1 (a content detail inside the approved concept); the D-13 critic's rule (machine sources only) is kept
Approved by: approver agent on 2026-10-20 (ice/review/stages/03-approver.md, second pass)
Gates: compliance RC-03 and RC-08 (no ringtone, no music, no voice): pass
Left behind: A
Supersedes: none (refines D-13 critic fix 3)

### D-17 Direction (the look)
Status: approved
Question: Which look carries "The street plays along"?
Locked inputs: D-13 to D-16; Spotify's colours only from its own material; logo rules (green logo only on #000000 or white); no Spotify Mix; no downloads (local open-licensed fonts only).
Options:
- A: Night shift: Spotify's dark interface becomes the street; each locked lane takes one of Spotify's own browse colours (rests on: brand sheet, browse tile captures, R-04, R-06)
- B: Daylight print: warm paper street, black ink, plates per lane (rests on: Wrapped 2025 kit cover, risograph entry)
- C: Signal: Swiss grid on near-black, one green signal (rests on: R-04 category convention, Swiss Motion entry)
Choice: A, with the critic's five fixes: (1) at 34 s the locked lanes fold into Spotify's Browse all tile layout under the search field (the street becomes Spotify's own search page); (2) no red: lanes coral #FFA178 (horn, first flood), olive #608108 (hammer), mint #91EEDA (drill), slate #477D95 (engine); (3) light carries the choice: overhead lamps on wires at 1.25x parallax, #2A2A2A until their lane locks, then a 600 px pool of the lane colour at 30 percent over the grain; (4) default kit cut to 2, logged (D-22): the answer lands whole; (5) Arabic read words in IBM Plex Sans Arabic Bold at 1.35x the Latin size, texture at 56 px minimum; the end card on #000000
Reason: A is the only direction that serves the claim with its own mechanics (grey until your press, colour only on a lock) and looks like Spotify's own interface and browse colours made better; B is inherited from the risograph entry (3 of 6 axes) and fails contrast on cream; C is the category convention and inherited from Swiss Motion (2 of 6).
Sources: ice/review/direction/D-17-options.md; D-17-consultant.md; D-17-critic.md; R-01 S-02 (2026-10-20); R-04 S-03, S-04; brand-sheet.json; assets/capture/spotify/webplayer-search-en (browse tiles)
Consultant: colour meaning, rival claims, colour vision, Arabic face metrics, Spotify designer view (ice/review/direction/D-17-consultant.md)
Critic: A REVISE 7, B REJECT 5, C REJECT 5 (ice/review/direction/D-17-critic.md) [independent, fresh critic]
Judged in: own dispatch
Approved by: approver agent on 2026-10-20 (ice/review/stages/05-approver.md, second pass)
Gates: default look pass (no ground, surface or dominant accent in hue 225 to 300; lane hues 18, 76, 167, 198; green 141); distance from the Poster color-block card 4 of 6 (palette, layout, motion, structure differ; type same class); default kit 2 with reasons (D-22); richness floor: re-staged at 05 after the approver return: the opening horn is set larger (hero_width at least 40 percent at frame 0), the search field and the Top result card are type and interface heroes measured by hero_width (field 61 percent of the width) and block share, the 34 to 41 s resolve fills 13 of 16 with the tile grid, and the end card gets a textured ground outside the logo zone plus foreground lights (D-24); measured values are in ice/plan/shot-plan.md revision 3
Left behind: C, the category's near-black plus one green accent, the most typical streaming look
Supersedes: none

### D-18 Palette
Status: approved
Question: Colour roles and values for direction A.
Locked inputs: Spotify's own colours (brand sheet; browse tiles; Premium page accents); green logo only on #000000; green only on the play circle and the search field (D-13 critic fix 5).
Options:
- A: dark ground with four browse colours, red led (coral, olive, mint, red) (rests on: D-17 options A)
- B: dark ground with four browse colours, no red (coral, olive, mint, slate) (rests on: D-17 critic fix 2, consultant colour-vision and rival measures)
- C: dark ground with one accent only (green) (rests on: R-04 convention)
Choice: B
Reason: removing red moves the nearest Apple Music red from dE 4.2 to dE 15.2, removes the pan-Arab flag set, and raises the worst lane pair in colour-vision simulation from 4.9 to 6.7 (critic, consultant measures); lanes also differ by position and word, never by colour alone.
Sources: D-17-critic.md fix 2; D-17-consultant.md (measurements); captures browse tiles (#477D95, #608108), Premium page (#FFA178, #91EEDA)
Critic: judged inside D-17 (direction-round axis, decision-process.md section 3)
Approved by: approver agent on 2026-10-20 (ice/review/stages/05-approver.md)
Gates: default look pass; contrast below
Left behind: C
Supersedes: none

```yaml
palette:            # D-18
  ground: "#121212"          # asphalt base (Spotify's own page ground), carries grain and light pools
  surface: "#1F1F1F"         # the search field (web player capture)
  surface_2: "#181818"       # the Top result card (results capture)
  ink: "#FFFFFF"
  ink_muted: "#A7A7A7"       # secondary text (brand sheet)
  field_text: "#B3B3B3"      # added at 07: the field's placeholder and icons, measured on the web player capture (UI fidelity check)
  field_rule: "#7C7C7C"      # added at 07: the divider inside the field, measured on the same capture
  accent: "#1ED760"          # play circle and search field focus only
  accent_small_text: "#1ED760"   # passes 9.76:1 on #121212
  states:
    lane_horn: "#FFA178 coral (Premium page accent), the first flood"
    lane_hammer: "#608108 olive (browse tile)"
    lane_drill: "#91EEDA mint (Premium page accent)"
    lane_engine: "#477D95 slate (browse tile)"
    lane_melody: "#FFFFFF white"
    lamp_off: "#2A2A2A"
    logo_ground: "#000000"
  polarity: dark
  proportions: "70 ground / 20 ink and lane colour / under 5 green"
  accent_budget: [play circle, search field focus ring, caret]
  contrast: {ink_on_ground: 18.73, accent_on_ground: 9.76, small_text: 7.79, words_on_coral_and_mint_use_ground_ink: "9.47 and 13.78", white_on_olive_and_slate: "4.52 and 4.53"}
  brand_source: "ice/assets/brand-sheet.json (real brand) plus Spotify web player browse tiles and Premium page accents, captured 2026-10-20"
```

### D-19 Type
Status: approved
Question: Families and roles for Latin and Arabic.
Locked inputs: Spotify Mix is exclusive (R-01 S-06); CircularSp-Arab is proprietary; no downloads; Arabic matched to Latin in weight and colour (R-05).
Options:
- A: Figtree 700 and 500 (Latin) with IBM Plex Sans Arabic Bold and Regular (Arabic) (rests on: shape overlap 0.310 Latin, 0.393 Arabic, the best Arabic echo of CircularSp-Arab)
- B: Bricolage Grotesque Bold with Tajawal ExtraBold (rests on: closest x-height match; Bricolage is the risograph entry's face)
- C: Readex Pro for both scripts (rests on: one family, best Latin overlap 0.364)
Choice: A, with Arabic read words at 1.35x the Latin size (Plex Arabic body is 69 percent of Figtree's x-height at equal visible height) and Arabic texture words at 56 px or more
Reason: A carries the direction's friendly geometric voice in Latin and the closest independent echo of Spotify's own Arabic site type; the size factor fixes the weight gap the consultant measured. B's Latin is inherited from the rejected direction; C's Arabic line box is smaller than its ink and clips marks.
Sources: temp/fontmatch measurements (D-17-options.md); D-17-consultant.md; R-05; type-pairing.md sections 1 to 6
Critic: judged inside D-17
Approved by: approver agent on 2026-10-20 (ice/review/stages/05-approver.md)
Gates: script coverage: Plex Arabic covers every code point of the Arabic copy with GPOS marks (consultant); Figtree covers the English copy; neither is a default-look face (type-pairing.md section 5)
Left behind: Inter (a default-look face, the first candidate set in the 03 studies)
Supersedes: none

```yaml
type:               # D-19
  display: {family: "Figtree", weights: [700], role: "noise words, road line, Top result label"}
  body: {family: "Figtree", weights: [500], role: "search field placeholder, typed answer, unofficial line"}
  arabic_display: {family: "IBM Plex Sans Arabic", weights: [700], role: "Arabic noise words, road line, labels, at 1.35x the Latin size"}
  arabic_body: {family: "IBM Plex Sans Arabic", weights: [400], role: "Arabic placeholder, answer, unofficial line"}
  scripts: [latin, arabic]
  source: google-fonts   # local copies already on this machine with their OFL text, no download
  files: [assets/fonts/font_figtree_700_os.woff2, assets/fonts/font_figtree_500_os.woff2, assets/fonts/font_ibm-plex-sans-arabic_bold_os.ttf, assets/fonts/font_ibm-plex-sans-arabic_regular_os.ttf]
  reason: "closest free shapes to Spotify Mix and CircularSp-Arab measured on Spotify's own pages; independent OFL designs, so they echo without imitating"
```

### D-20 Sound lead and music source
Status: approved
Question: What leads the sound, and where the music comes from.
Locked inputs: no real Spotify track or real artist's music (run conditions, COMPLIANCE RC-08); downloads only from Spotify's domains (so no library track can be fetched); no AI music; music-led timing master (brand-film.md); ice-audio music-choice-and-licensing.md section 2 (a music brand: licensed library or code score).
Options:
- A: score led, composed by code with the project copy of mgaudio: a groove built from the street's own machines (horn as a low brass stab with the low hit, hammer as the backbeat, drill as the hats, engine as the sub bass), a lead playing the film's motif; Arabic version in maqsum, English in a straight four, both at 120 BPM; the noise section as sound design (rests on: D-13 critic fix 1; ice-audio section 5 code score when no license-safe download is allowed)
- B: sound design led, no music, only the machines in time (rests on: concept; risks reading as a sound-effects reel)
- C: a licensed library track (rests on: ice-audio scope table for brand films; blocked: no download allowed in this run)
Choice: A, logged as a code-made stand-in for a licensed human-made track (named in the delivery note as what a yes to a library download would add)
Reason: the film's claim is that the noise becomes your music, which only a score built from the same sounds can show; it is license-clean and locked to the cue sheet; C is blocked by the run conditions.
Sources: ice-audio/SKILL.md section 5; music-choice-and-licensing.md section 2 (music brands row; downloads not allowed row); D-13-critic.md fix 1
Critic: judged inside D-17 (sound lead axis)
Approved by: approver agent on 2026-10-20 (ice/review/stages/05-approver.md)
Gates: sound axis logged (anti-sameness section 1): lead score, genre a street-percussion groove, tempo band 120 BPM, dramaturgy noise to silence to groove
Left behind: C
Supersedes: none

### D-21 Motion language
Status: approved
Question: The film's motion grammar.
Options:
- A: one continuous camera, locks on the beat, colour and light arrive with the lock, no cuts (rests on: D-14, brand-film.md transition policy)
- B: hard cuts on the beat between street views (rests on: energetic showreel policy)
- C: flat Swiss snaps on a locked frame (rests on: the rejected direction C)
Choice: A (ice/plan/motion-plan.md)
Reason: the brand film transition policy asks that nearly every transition turns the current object into the next; one camera keeps the chain causal.
Sources: ice/plan/motion-plan.md; brand-film.md; D-14
Critic: judged inside D-17 and by the storyboard critic (ice/review/storyboard-review.md)
Approved by: approver agent on 2026-10-20 (ice/review/stages/05-approver.md)
Gates: motion axis differs from the Poster color-block card (crane and locks against block wipes)
Left behind: B
Supersedes: none

### D-22 Default-kit items kept, with reasons
Status: approved
Question: Which default-kit items (anti-sameness.md section 6) remain, and why.
Options:
- A: keep the dark kinetic-type opener and the search box with reasons; mint stays as a Premium page accent (rests on: D-15; TRUTH F1)
- B: replace the opener with a non-type picture (rests on: no footage or photos allowed)
- C: drop the search box (rests on: default kit list; loses the brand hinge D-13)
Choice: A. Reasons: the dark opener of kinetic type is the concept itself (the street's noise is written as words, D-13 and D-15), not decoration; the search box is Spotify's real, captured input and the film's hinge, and the answer now lands whole instead of being typed (critic fix 4); the mint #91EEDA is Spotify's own Premium page accent, not a generic "cyan on dark".
Sources: D-17-critic.md (default kit count 3, fix 4); anti-sameness.md section 6
Critic: D-17 critic asked for these entries
Approved by: approver agent on 2026-10-20 (ice/review/stages/05-approver.md)
Gates: default kit 2 with reasons (under the 3-item failure line)
Left behind: B
Supersedes: none
Amended at the 05 rework (D-30, 2026-10-21): the answer is typed letter by letter again because the owner asked for it, so the typed search box stays a default-kit item with that reason; the dark kinetic-type opener is gone (the film opens on a drawn street); the mint reason stands. Count and results: D-31 gates.

### D-23 Engine
Status: approved
Question: Which engine renders the film (plain decision, ice-engines engine-choice.md section 1 and 7).
Options:
- A: HyperFrames (row 8 default) (rests on: engine-choice.md section 1)
- B: HTML capture with the bundled render-html.mjs and the installed Chrome (rung C, zero install) (rests on: section 7.4)
- C: Remotion (rests on: nothing in the project uses it)
Choice: B
Reason: HyperFrames is not installed and the run allows no installs; rung C renders the same page contract with Chrome 149 and FFmpeg 8.1 already on the machine; the 7.5 replacement gates apply.
Sources: engine-choice.md sections 1, 7.2, 7.4, 7.5; render-html.mjs first lines: "driver built-in Chrome DevTools driver, browser C:\Program Files\Google\Chrome\Application\chrome.exe", "browser version Chrome/149.0.7827.102"
Approved by: approver agent on 2026-10-20 (ice/review/stages/05-approver.md)
Left behind: A
Supersedes: none

### D-24 End-card ground
Status: approved
Question: How does the end card meet the brand film floor (surface detail, three depth layers) while the logo follows Spotify's rules?
Locked inputs: "The Spotify green logo should only be used on a black or white background" and "The white logo should be used on dark colored backgrounds" (R-01 S-02); clear space half the icon height; the end card is not exempt from surface_detail and depth_layers (ice-motion composition-and-staging.md section 7.2).
Options:
- A: the green logo on pure #000000 inside an oval zone wider than its clear space; outside the zone the black thins to 86 percent so the dim street and its lights show through (background with texture); the search field under the logo (second layer); two or three out-of-focus lane lights near the lens at the frame corners, drifting (foreground) (rests on: R-01 S-02 green-on-black rule; composition-and-staging.md section 7.2)
- B: the white logo on a textured dark ground (the dim street everywhere) (rests on: R-01 S-02 white logo on dark grounds; 05 approver note)
- C: the green logo on flat #000000 (rests on: the logo rule only; fails surface_detail and depth_layers)
Choice: A
Reason: the green logo is Spotify's primary colourway and the film's only green after the play circle, so it should close the film; keeping its own zone pure black satisfies the logo rule while the frame around it keeps the street's texture and depth; B gives up the green; C fails the floor.
Sources: R-01 (2026-10-20) S-02; ice/review/stages/05-approver.md item 1; ice-motion/references/composition-and-staging.md section 7.2
Critic: not a major decision (decision-process.md section 1); judged by the film reviewers at 09
Approved by: approver agent on 2026-10-20 (ice/review/stages/05-approver.md, second pass)
Gates: logo gate (green on #000000 inside the zone, clear space kept); surface_detail yes; depth_layers 3
Left behind: C
Supersedes: none

### D-25 Arabic melody lane word order
Status: approved
Question: The step grid and the playhead are a media timeline that never mirrors (ice-arabic rule 11), so time runs left to right; in which order do the Arabic answer words sit in the melody lane?
Locked inputs: ice-arabic rule 11; RD-02 (clear readable Arabic); the answer "حاجة للزحمة دي" (script.md).
Options:
- A: words in reading order: "حاجة" in the rightmost melody cell, "دي" in the leftmost, so the lane reads correctly from right to left while the playhead lights them left to right (rests on: rule 11 for the timeline, letterforms-in-motion.md section 6 reading order for words)
- B: words in time order left to right (reads reversed: "دي للزحمة حاجة") (rests on: the timeline only; fails readability)
- C: mirror the whole grid (rests on: reading order only; breaks rule 11)
Choice: A
Reason: the words are read, the timeline is not; A keeps both rules. The melody notes still play left to right; the score does not sing the words, so no word-to-note sync is lost.
Sources: ice-arabic/SKILL.md section 2 rule 11; ice-arabic/references/letterforms-in-motion.md section 6; ice/review/stages/05-approver.md item 2
Approved by: approver agent on 2026-10-20 (ice/review/stages/05-approver.md, second pass)
Gates: Arabic correctness (hard rule): the lane reads "حاجة للزحمة دي"
Left behind: B
Supersedes: none

### D-26 Size of the rebuilt interface strings in Arabic
Status: approved
Question: D-19 sets Arabic read words at 1.35 times the Latin size. Does that also apply to the strings of the rebuilt Spotify interface (the field's placeholder and the typed answer, "أفضل النتائج")?
Locked inputs: D-19; brand-authenticity.md section 11.1 (rebuild at 90 percent fidelity, element sizes judged against the capture); the Arabic web player captures (webplayer-search-ar, webplayer-results-ar).
Options:
- A: interface strings at the capture's own proportion (Arabic at the Latin size, as Spotify's Arabic web player sets them); the film's own words (noise words, lane words, the painted line, tile titles) keep D-19's 1.35 (rests on: measured on the captures at 07: the Arabic placeholder is 128 px wide in a 474 px field and "أفضل النتائج" 121 px over a 388 px card; at 1.35 the rebuild measured 175 px and 162 px, at 1.0 it measures 130 px and 121 px)
- B: D-19's 1.35 everywhere (rests on: one Arabic scale for the whole film; fails element sizes on the fidelity sheet by about 35 percent)
Choice: A
Reason: inside the rebuilt interface the capture is the authority (section 11.1); Spotify itself sets Arabic at the Latin size there, and IBM Plex Sans Arabic at that size matches the capture's ink width within 2 percent. D-19's reason (Arabic read words visibly smaller than Latin at equal size) concerns the film's own type, which keeps 1.35. The answer stays legible: 40 px in the 16:9 master, 37 px in 9:16.
Sources: ice/review/ui-fidelity/sheet-ar.png; film/js/ui.js (`uts`); D-19
Critic: the UI fidelity critic at 07 (ice/review/ui-fidelity/critic.md)
Approved by: approver agent on 2026-10-20 (ice/review/stages/07-approver.md)
Gates: UI fidelity at or above 0.9 on both sheets
Left behind: B
Supersedes: D-19 for the interface strings only

### D-27 Compositing mode for every render
Status: approved
Question: Headless Chrome composites the 2.5D street on the GPU by default. Do the renders keep that, or run with software compositing?
Locked inputs: ice-film/references/build.md section 5 (every frame a pure function of time); logo-sting-pipeline.md section 4 (the last frame equals the static logo capture, zero differing pixels); D-23 (HTML capture, render-html.mjs).
Options:
- A: GPU compositing (the default) (rests on: speed; measured at 07: the last frame differed from the static logo by up to 28 of 255 on 7,800 to 8,700 edge pixels in 16:9 and 9:16, and by 1 of 255 on 14 to 26 pixels after a fix, changing from run to run with what had been composited before)
- B: software compositing, `ICE_GPU_ARGS="--disable-gpu --disable-gpu-compositing"` for every still, draft and final (rests on: measured at 07: zero differing pixels on all six versions after a 60-seek history; the same render time for stills; the 3D street draws the same within a mean of 1.3 of 255)
Choice: B
Reason: the frame then depends only on t, as the build rules require, and the end lockup lands exactly on the official logo in every version.
Sources: ice/review/final-frame/result.json; temp renders ffc to ffc5 and cues6 to cues7
Critic: none (a measured engine setting)
Approved by: approver agent on 2026-10-20 (ice/review/stages/07-approver.md, second pass)
Gates: Final Frame Contract zero differing pixels; render time per frame recorded at 10
Left behind: A
Supersedes: none

### D-28 One version only: English, 16:9 (owner's decision)
Status: approved
Question: Which versions are delivered?
Locked inputs: the prompt asked for an Arabic and an English version ("ونسخة عربي ونسخة إنجليزي", ledger L3); D-10 planned 16:9, 9:16 and 1:1 per language (six films plus posters).
Options:
- A: deliver the six planned films (rests on: the prompt and D-10)
- B: deliver one film, English 16:9, as the owner now asks (rests on: the owner's message of 2026-10-20)
Choice: B
Reason: the owner (Omar) narrowed the scope mid-run, in his words: "منا مش عايز غير نسخة واحدة فقط لا غير. انجليزي و 16:9 عجبتني ووافقت عليها ... هي نسخة واحدة كاملة من كل شيئ حتى الميوزك والساوند ايفكت وغيره" (I want only one version, nothing else; English and 16:9, I liked it and approved it; one complete version of everything, music and sound effects included). He watched ice/renders/draft-3-en.mp4 and approved its story, scene order, look and pacing; later changes are allowed only where they fix the static, empty last 8 s and the grey placeholder Top result card. The user's newest explicit note outranks earlier notes (ice-film SKILL.md).
Sources: the owner's message relayed by the run coordinator, 2026-10-20; ice/renders/draft-3-en.mp4
Approved by: user (quote above), 2026-10-20
Gates: one final file in ice/renders/final/; the Arabic, 9:16 and 1:1 files built so far stay on disk, unused
Left behind: A (the Arabic version and the 9:16 and 1:1 re-layouts, built to stage 07 and kept)
Supersedes: D-10 (aspects and deliverables), D-11 for delivery (Arabic stays in the record only), ledger L3

### D-29 Loudness profile and the score's loudness-range guard
Status: approved
Question: Which loudness profile does the film master to (ice-audio mix-and-master.md section 5), and how does the music-by-code LRA guard (5 to 8 LU) apply to a film with locked, declared quiet stretches?
Locked inputs: D-06 (YouTube and social feeds plus the gallery page); D-20 (code score, music-led after the press); the cue sheet's declared quiet list (5.5 to 9.0 silence, 22 to 24 breath, the end hold); brand-film.md (gentle -16 is the calm brand film default).
Options:
- A: Social and web, punchy: -14 LUFS, at or under -1 dBTP on the encoded file, LRA at most 9 to 11 LU; the 5 to 8 LU music guard read on the music body (12 to 41 s), the whole-film LRA held to the profile (rests on: D-06 feeds and an energetic film; measured: EN master -14.3 LUFS, -1.1 dBTP, LRA 8.4; score v2 whole film 8.63 LU, body 4.58 LU)
- B: Gentle and spoken: -16 LUFS, LRA up to 9 (rests on: brand-film default; wrong for a groove that plays on a phone feed next to -14 content)
- C: fill the declared quiet stretches until the whole film reads 5 to 8 LU (rests on: the guard read literally; breaks the locked silence after the 5.0 s horn peak and the breath before the drop, which are the film's structure, D-14 and D-15)
Choice: A
Reason: the film plays mostly in feeds (D-06), where -14 is the loudness of the content around it, and the whole film sits inside the profile's LRA (8.4 LU on the encoded master). The music guard's band (5 to 8 LU) is not met either way: the whole film reads 8.63 LU (0.63 over, because of the declared quiet stretches) and the music body, 12 to 41 s, reads 4.58 LU (0.42 under: a steady groove). Both figures are reported in the delivery note as an open guard item. The deliberate quiet stretches are what pushes the whole-film figure over 8; filling them would remove the cold-open silence and the breath. Listed in the delivery note with the numbers.
Sources: ice/audio/qc_en_v2.json; ice/audio/master_draft4_en.json; ice/review/mix-08b.md; ice/review/stages/08-approver.md
Critic: none (a measured audio setting)
Approved by: approver agent on 2026-10-20 (ice/review/stages/08-approver.md, third check)
Gates: the encoded master at -14 +/- 0.5 LUFS, at or under -1 dBTP, LRA at or under 11; music body LRA inside 5 to 8 (or reported)
Left behind: B, C
Supersedes: none
Figures for the delivery note (the drawn street, version 6 on draft-11; the lane-grid figures above stay for the record): master -14.0 LUFS, -2.2 dBTP, LRA 7.4 LU (ice/audio/master_draft11_en_av.json); score whole-film LRA 7.45 LU (inside 5 to 8), music body 7.5 to 28.5 s 3.97 LU (under 5 to 8, reported in D-43).

### D-30 Owner feedback round on draft-7 (2026-10-21)
Status: approved
Question: What does the owner think of draft-7 as an ordinary viewer, and what changes?
Locked inputs: D-28 (one film, English 16:9); the owner's notes relayed by the run coordinator on 2026-10-21.
Owner's notes (summarised from his words): (1) the noise opening (HONK, BANG, BRRRRT, VRRRM on black, 0 to 5.6 s) is far too long; (2) the search text does not type: the cursor blinks on the placeholder for about 3 s, then "something for this traffic" appears at once at 8.8 s; it must type letter by letter with a real typing cadence, starting right away, with no dead cursor time; (3) the Top result card is good, keep it; (4) the noise frames and the frames after play do not express the idea: words on black and the lane grid with a moving playhead do not read as a street, and "The street plays along" does not explain it.
Options he was given: 1 same story, made clear; (others not recorded in the relay)
Choice: option 1, same story, made clear
Reason (his decision, as relayed): noise about 3 s in a real drawn street built in code (no AI media, no photos, no real people's faces): cars honking, a motorbike, a construction drill, every sound from a visible source, a word may pop from its source; the search typed letter by letter, then the Top result card as now, then play; after play the same street objects move to the beat and play along with the song (the horn hits are the drum, the drill the rhythm, the motorbike the bass, or the mapping the music supports best); the viewer sees the street itself playing; the abstract lane grid goes; keep the end card idea (Spotify logo, "What do you want to play?", the unofficial line), English 16:9 only, Spotify's logo rules, code-made music; the score follows the new timing.
Process he set: rework stages 04 and 05 for the new street world with the approvers the skills require, then stop with 5 or 6 still style frames at 1920x1080 and one storyboard strip with timings; nothing animated, rendered or scored until he approves.
Sources: the owner's notes relayed by the run coordinator, 2026-10-21; ice/renders/draft-7-en-av.mp4
Approved by: user (his notes and decision above), 2026-10-21
Gates: the new storyboard and style frames go to the owner before any build
Left behind: the abstract lane-grid world of D-14 and D-17 (kept on disk with draft-1 to draft-8)
Supersedes: D-14 (structure: street-to-sequencer crane), D-15 (opening: oblique patch of type), D-17 (direction: night street made of type), D-21 (motion language) for the world after play; D-13's concept and message stay


### D-31 The street world: a drawn night street (look, stage 05 rework)
Status: approved
Question: How is the real street built in code, so that every sound has a visible source and the street can later play the song?
Locked inputs: D-30 (the owner: a real drawn street built in code, no AI media, no photos, no real faces; every sound from a visible source; the abstract lane grid goes); D-18 palette; D-19 type; D-24 end card; D-27 software compositing; the engine (D-23, HTML capture).
Options:
- A: a flat-vector night street in side view (buildings, lamps, a construction site, a car, a road breaker on a small excavator, a pile driver, a motorbike with a helmeted rider), one continuous camera travelling along it, a far skyline in parallax (rests on: every source is seen whole and at once; it reads on a phone; it builds as SVG shapes from code; the camera can travel to each machine as it joins)
- B: an isometric street block seen from above at an angle (rests on: a richer world; costs: smaller machines on a phone, a much heavier build, sound sources hidden behind buildings)
- C: the earlier 2.5D street with drawn machines standing on the lanes (rests on: reuse of the built camera; costs: keeps the lane grid the owner asked to remove)
Choice: A
Reason: it answers the owner's note directly (a street you recognise, every sound visible) and keeps the film's grammar (one camera, colour arriving on each lock). Grey before the press, each machine taking its lane colour when it joins, the windows as the street equalizer at the drop.
Revised after the rework critic (REVISE, 5 fixes, ice/review/rework-04-05-critic.md): the machines drawn 1.6 times the building scale and close together (all four fill the wide frames; each playing machine is whole in frame from its entry); the pile rig redrawn (a solid leader mast, the ram resting just above the pile cap, a flash at the contact, dust where the pile goes in) and the site closed by solid hoarding instead of thin bars; the extra parked cars removed; words outlined in black next to their own sources, never on a facade or a lamp, inside a 5 percent margin; light only from visible sources (lamp cones, ground pools under the playing machines); the end card logo, field and required line in a pure black sky above the rooftops with the whole street below (no panel, no blobs). Storyboard revision 5.
Sources: D-30; ice/plan/style-frames/v2/ (six frames from the real build: film/v2-en-16x9.html, film/js2/street.js); ice/plan/storyboard-strip-v2.png; ice/plan/storyboard.md revision 5
Critic: the stage 05 rework critic (ice/review/rework-04-05-critic.md, REVISE) and its verify round (ice/review/rework-04-05-verify.md, ONE MORE PASS with 5 small fixes, all applied: ice/review/fixes.json RW-01 to RV-05)
Approved by: approver agent on 2026-10-21 (ice/review/stages/04-05-rework-approver.md, second check)
Gates (results; ice/review/template-distance-v2.md): default-look gate pass (palette values: no ground, surface or accent in hue 225 to 300 with saturation 0.30 or more; lanes at hue 18, 77, 167, 198, green 141; blue-purple pixels 0.00 percent on all 18 stills); 4-of-6 distance against the nearest bundled card, ice-styles "Flat Vector 2D Motion Graphics" (01-flat-vector): differs on palette, layout, motion and structure, 4 of 6, pass at the edge ("Contemporary flat vector illustration with grain", 16_2026, also 4 of 6); fingerprint check: no fingerprint records exist on this machine (~/.ice-motion-director/fingerprints.jsonl absent), the new structure line is in structure.md, so only the template rule applies; default kit: 2 items, each with a reason (the typed search box: the owner asked for the answer typed letter by letter, D-30; mint #91EEDA on a dark street: Spotify's own colour, one of four lane colours, D-18 and D-22), under the 3-item failure line, and the dark kinetic-type opener of D-22 is gone (the film opens on a drawn street); richness on the 18 stills (ice-qa area_features): hero_share 42 to 100, frame_fill 12 to 16 of 16, no empty half; still open: the owner approves the style frames before any build; no faces; no brand names on the street
Left behind: B, C
Supersedes: D-17 (look), D-21 (motion language) for the world; D-22 and D-24 stay

### D-32 Which machine plays which part
Status: approved
Question: After the press, which street machine plays which part of the song?
Locked inputs: D-30 (the owner: the horn hits are the drum, the drill the rhythm, the motorbike the bass, or the mapping the music supports best); D-20 (code score at 120 BPM); the four noise words (D-16).
Options:
- A: the car horn is the kick (low hit), the pile driver the backbeat (snare on 2 and 4), the road breaker the hats (eighths), the motorbike the bass (rests on: each machine sound matches its part: a horn is a short low blast, a ram is a single heavy hit, a breaker is a fast repeat, an engine is a low held tone)
- B: the horn the backbeat, the pile driver the kick (rests on: the ram is the heaviest hit; costs: the press would not trigger the first honk)
Choice: A
Reason: it follows the owner's mapping and keeps the press-to-first-honk handoff (the pressed play circle drops onto the car horn and the horn plays the first kick).
Sources: D-30; ice/plan/storyboard.md revision 5
Critic: the stage 04 and 05 rework critic
Approved by: approver agent on 2026-10-21 (ice/review/stages/04-05-rework-approver.md)
Gates: the score at 08a uses this mapping; each machine moves only on its own part
Left behind: B
Supersedes: none (refines the lane mapping of the cue sheet)

### D-33 New length and timing
Status: approved
Question: How long is the film after the owner's notes, and where do the beats sit?
Locked inputs: the prompt (35 s to one minute); D-30 (noise about 3 s, typing at once, the same story); the end card idea (D-24); 120 BPM.
Options:
- A: 36.0 s: noise 0 to 2.9, question 2.9, typing 3.3 to 5.4, Top result card 5.75, press on the first downbeat 7.5, one machine per bar to 15.5, fill, breath 17.5 to 19.5, drop 19.5, the line 23.5 to 27.5, the field returns 27.5, logo 29.5, unofficial line 30.5, last hit 33.5, ring-out to 36.0 (rests on: the owner's timing for the noise and the typing; four bars of joining machines; the prompt's lower bound)
- B: 44 s with two more bars of groove before the line (rests on: more of the street playing; costs: a longer middle the owner did not ask for)
Choice: A
Reason: it keeps the approved order with the owner's two timing fixes and stays inside the brief's 35 to 60 s.
Sources: ice/plan/storyboard.md revision 5; ice/plan/storyboard-strip-v2.png
Critic: the stage 04 and 05 rework critic
Approved by: approver agent on 2026-10-21 (ice/review/stages/04-05-rework-approver.md, second check)
Gates: the cue sheet is rebuilt at 06 from these times and locked again
Left behind: B
Supersedes: D-14 timing (49.0 s)

### D-34 The line over the playing street (for the owner's choice)
Status: approved
Question: Which line, over the playing street at 23.5 to 27.5 s, explains the idea, now that the owner said "The street plays along" does not explain it?
Locked inputs: D-30 (the owner's note 4); D-13 (concept: the noise locks to the beat you choose); D-19 (type); the claim rules in TRUTH.md (the film's own voice, no product claim).
Options:
- A: "Pick a song. The street keeps the beat." (rests on: the action you take, then what the street does; costs: it says "song" while the card the viewer pressed is labelled "Playlist")
- B: "Press play. The noise becomes the beat." (rests on: it names the press the viewer has just watched, the film's turning point, and says outright that the noise turns into the beat)
- C: "Your song. The street plays it." (rests on: the shortest; it puts the viewer's choice first; costs: "song" against "Playlist" again)
- D: "The street plays along." (the earlier line; the owner said it does not explain the idea)
Choice: B, chosen by the owner (D-35)
Reason: the owner's note asks for a line that explains; B names the cause the viewer saw (the press) and the effect (the noise becomes the beat) and matches the card, where A and C say "song" over a playlist (the approver's note). Reading time by the ice-type rule (letters / 15 + 1.5 s): B 3.6 s, A 3.5 s, C 3.1 s; the line holds about 3.6 s from half in to half out, so each option fits. A and C fit the same two-line layout.
Sources: D-30; ice/plan/style-frames/v2/frame-5-the-line.png; film/js/config.js (COPY.lineParts); ice/plan/script.md (word count and claim test after the rework)
Critic: the stage 05 rework critic (fix 1: offer the owner two or three lines); the approver's note on "song" against "Playlist" (ice/review/stages/04-05-rework-approver.md)
Approved by: user (the owner chose line B, relayed by the run coordinator), 2026-10-21
Gates: the owner picks A, B or C (or his own words) before the build at 07; the chosen line passes the claim check in TRUTH.md (all three pass, script.md)
Left behind: D
Supersedes: the line in D-13 and script.md ("The street plays along.")

### D-35 Owner approval round on the reworked plan (2026-10-21)
Status: approved
Question: What does the owner decide on the six v2 style frames, storyboard revision 5 and the open line?
Locked inputs: D-30 (his process: approve the frames before any build); the frames and strip of the 04 and 05 rework.
Owner's decisions (as relayed by the run coordinator): (1) the six v2 style frames and storyboard revision 5 are approved; (2) D-34: line B, "Press play. The noise becomes the beat."; (3) the 36.0 s length is approved; (4) two fixes to fold in before building: (a) traffic: a row of cars standing in a jam, not one car, so "something for this traffic" makes sense; the car that takes the play circle and becomes the kick stays the hero; the other cars may join with honks on the groove where the score supports it; (b) camera closer: the machines fill the frame and there is much less empty black sky at the top; keep the end card's wide street under the logo. The style frames are updated for the two fixes without a new stop (he approved them in words).
Process he set: then build (07) with the score (08a and 08b) following the new timing; stop at the first draft with sound and report; no final full-quality render or delivery until his notes; the critic and approver rounds stay at full depth.
Choice: as above
Reason: his decisions
Sources: the owner's approval relayed by the run coordinator, 2026-10-21
Approved by: user, 2026-10-21
Gates: the fixes are visible in the updated style frames; the 06 approver checks them against these words
Left behind: none
Supersedes: none (D-31 and D-33 stand; D-36 and D-37 carry the two fixes)

### D-36 The jam cars on the groove (fix a)
Status: approved
Question: How do the other cars of the jam join the song without taking the kick from the hero car?
Locked inputs: D-35 (a row of cars in a jam; the hero car keeps the play circle and the kick; the others join with honks where the score supports it); D-32 (horn = kick, breaker = hats, ram = backbeat, engine = bass); D-20 (code score, 120 BPM); the cue-sheet patterns (kick 0, 4, 8, 12; backbeat 4, 12; bass 0, 3, 6, 8, 11, 14 of 16).
Options:
- A: two horn stabs a bar from the drop: the cars behind the hero honk on the off-beats, steps 6 and 14 of 16 (the "and" of beats 2 and 4), alternating car by car, a second, higher horn voice in the score; in the noise they honk out of time with the rest (rests on: the off-beats are free of the kick and the backbeat, so the stabs answer the hero's kick like a horn section; one car per stab keeps each honk visible)
- B: the jam cars double the hero's kick (rests on: simplest; costs: the hero no longer owns the kick, the cars blur into one)
- C: the jam cars join one by one as extra locks before the drop (rests on: more chain; costs: the bar-per-machine chain and the timing D-33 change)
Choice: A
Reason: the owner asked that the hero stay the kick and the others join where the score supports it; the off-beat steps 6 and 14 are free of the kick and the backbeat (they share their step with the bass and the hats, a mix point for 08b), and they read as cars honking back at the hero.
Sources: D-35; ice/plan/cue-sheet.json (patterns); film/js2/street.js (JAM)
Critic: the 06 approver and the 09 critics (the build and its sound)
Approved by: approver agent on 2026-10-21 (ice/review/stages/06-drawn-street-approver.md)
Gates: each stab lands within one frame of its step; the hero's kick stays the loudest horn; jam cars light coral only on their own stabs
Left behind: B, C
Supersedes: none

### D-37 A closer camera and a taller street (fix b)
Status: approved
Question: How does the camera get closer so the machines fill the frame and the empty sky goes, while the end card keeps the wide street under the logo?
Locked inputs: D-35 (closer camera, much less empty black sky, keep the end card's wide street); D-31 (the drawn street, one continuous camera); D-24 and D-31 (the end card sky pure black above the rooftops).
Options:
- A: tighten the layout (the motorbike in the far lane right above the hero car, the pile rig on the site right above the breaker, the jam running out of frame to the left), raise the buildings behind the action to just under the end card's limit, and raise the camera scale: about 1.1 on the opening car, 0.85 to 1.0 on each machine as it joins, about 0.72 when all four play; the end card stays at 0.342 (rests on: the machines fill the frame and the frame top meets facades instead of sky, while the end card keeps its whole street)
- B: keep the layout and crop the sky with a vertical offset (rests on: no redraw; costs: the empty band moves to the pavement at the bottom)
- C: keep the layout and only raise the buildings (rests on: less sky; costs: the machines stay as small as before)
Choice: A
Reason: only A answers both halves of the note (machines larger in the frame, less empty sky); B and C each move the emptiness or leave the machines small.
Sources: D-35; ice/plan/style-frames/v2/ (updated); film/js2/street.js (camera keys)
Critic: the 06 approver and the 09 critics
Approved by: approver agent on 2026-10-21 (ice/review/stages/06-drawn-street-approver.md)
Gates: every machine whole in frame on its entry; read words inside the 5 percent margins; sky at the top of the wide frames under about 5 percent of the frame; the end card unchanged in composition
Left behind: B, C
Supersedes: the camera keys of storyboard revision 5 (motion-plan.md)

### D-38 Owner feedback round on draft-9 (2026-10-21)
Status: approved
Question: What does the owner want changed after watching draft-9 (ice/renders/draft-9-en-av.mp4)?
Locked inputs: D-35 (his stop at the first draft with sound); draft-9 and its gates.
Owner's words (relayed by the run coordinator): "صلح الملاحظات الاربع عالفيديو" (fix the four notes on the video). The four notes: (1) the ending is too long and too quiet: from 27 to 36 s about 9 s of a search field and then a logo over a tiny street, read as nearly static by our own motion check; make it shorter and alive: tighten the search field beat and the logo card, keep the street visibly playing on the beat under the logo, land the final hit, then the ring-out; the film may come in a little under 36 s if the score allows; keep the Spotify logo rules, "What do you want to play?" and the unofficial line, readable and on screen long enough. (2) The traffic jam still reads thin: most of the other cars are cut at the frame edge; put clearly more standing cars inside the frame, behind and around the hero car, so a viewer reads "traffic jam" at a glance, without hiding the machines. (3) From about 9 to 18 s, while the machines join one by one, the framing is nearly static; add purposeful camera movement (a slow push or a drift toward each machine as it joins) within the approved look. (4) Sound: the limiting at the peak (19.5 to 27.5 s) is about 9 dB; bring it to about 6 dB or less so the drop is not harsh, and keep the loudness target.
Process he set: render draft-10 (review copy with sound), run the approver rounds the skills require, then stop for his notes; no final render before his approval.
Choice: fix all four (D-39 to D-42)
Reason: his decision
Sources: the owner's notes relayed by the run coordinator, 2026-10-21; ice/renders/draft-9-en-av.mp4; ice/review/gates-draft9/
Approved by: user, 2026-10-21
Gates: draft-10 answers each note, checked by the approvers
Left behind: none
Supersedes: the end timing of D-33 (see D-39)

### D-39 A shorter, living ending (note 1)
Status: approved
Question: How does the ending get shorter and alive while the logo rules, the question and the unofficial line keep their reading time, and the film stays inside the prompt's length?
Locked inputs: D-38 note 1 (the owner: "the whole film may come in a little under 36 s if the score allows"); the prompt's length, 35 to 60 s (ice/BRIEF.md, duration, locked; ledger L2); D-24 and D-31 (the logo on pure black, its clear space); RD-01 (the unofficial line, 41 letters, 4.2 s by the ice-type rule); the 120 BPM grid from 7.5 s; the line at 23.5 to 27.5 s.
Options:
- A: the field returns at 27.5 for one beat pair, the logo cadence at 28.5 (bar 10 beat 3), the unofficial line from 29.0, four seconds of the street playing on the beat under the logo, the last hit at 32.5 (bar 12 beat 3), the ring-out to 35.0 (the film 35.0 s, the prompt's lower bound); the end card camera closer (scale 0.39 instead of 0.342), the logo, field and line re-spaced in the black sky, the street brighter under it with the windows and the lamps pulsing on the beat and the jam answering to the last hit (rests on: the ending from 27.5 is 7.5 s instead of 8.5 s of field and logo over a still street; the question 7.5 s on screen, the logo 6.25 s, the unofficial line 6.0 s, all above their reading times; the film stays inside 35 to 60 s)
- A-short: the same with the last hit at 31.5 and the end at 33.5 (rests on: 2.5 s shorter; costs: 1.5 s under the prompt's locked 35 s; built as draft-10 and returned by the 07 approver for that reason)
- B: the logo at 29.5 (bar 11), the last hit at 31.5, end 33.5 (rests on: the cadence on a bar line; costs: under 35 s, and the unofficial line on screen 3.5 s, under its 4.2 s)
- C: keep 36.0 s and only add motion (rests on: no re-timing; costs: the owner asked for shorter)
Choice: A
Reason: it shortens the ending and makes it play, keeps every required reading time, and keeps the film inside the length the prompt locked; the owner's "a little under 36 s" reads as 35 s, not under it.
Sources: D-38; film/js/config.js (CUE2); ice/plan/cue-sheet.json (re-exported; the 33.5 s sheet of draft-10 kept as cue-sheet-draft10.json); ice/review/stages/07-08-draft10-approver.md (return item A)
Critic: the 07 and 08 approver rounds on draft-10 and draft-11
Approved by: approver agent on 2026-10-21 (ice/review/stages/07-08-draft11-approver.md)
Gates: the question at least 3.0 s on screen, the logo at least 3 s, the unofficial line at least 4.2 s; the logo on #000000 with its clear space; the film 35.0 s; no still stretch in the logo card at or above the 1.5 s floor before the last hit (draft-10 measured by look.py: 29.37 to 30.03 s, 0.67 s, while the logo fades up; film_gate longest still 0 s outside the declared holds); the arc guard's ending clauses of the code score (music-by-code.md section 4) are measured and reported in D-43
Left behind: A-short, B, C
Supersedes: D-33 end timing (logo 29.5, last hit 33.5, end 36.0)

### D-40 A denser jam inside the frame (note 2)
Status: approved
Question: How do more standing cars read inside the frame, behind and around the hero car, without hiding the machines?
Locked inputs: D-38 note 2; D-36 (the hero keeps the kick; the jam answers on steps 6 and 14); D-37 (the closer camera); the motorbike, the breaker and the pile rig whole on their entries.
Options:
- A: a second row of the jam in the far lane (three cars and vans standing above and behind the hero car, a little smaller for depth), the motorbike moved forward in the far lane between that row and the road works, the wide frames shifted to take in the two rows; the jam stabs from the drop cycle through all seven cars, one car per stab (rests on: seven vehicles stacked in two rows read as a jam at a glance in the same width the machines need)
- B: more cars in the near lane only (rests on: simple; costs: the extra cars sit further left, outside the frames that hold the machines)
- C: smaller machines so the frames hold more of the jam (rests on: width; costs: undoes D-37, which the owner asked for)
Choice: A
Reason: only the second row puts more cars inside the same frames; cycling the stabs through the seven cars matches the sound, which already plays one car per stab (08a note on draft-9).
Sources: D-38; film/js2/street.js (JAM, order); ice/plan/cue-sheet.json (music.jam)
Critic: the 07 approver round on draft-10
Approved by: approver agent on 2026-10-21 (ice/review/stages/07-08-draft10-approver.md)
Gates: at least four vehicles of the jam whole or mostly inside the frame at the noise peak, the typing and the jam travel; no machine hidden by a car; each stab lights one car only
Left behind: B, C
Supersedes: the fixed step per car of D-36 (the steps stay 6 and 14)

### D-41 Camera movement while the machines join (note 3)
Status: approved
Question: What purposeful movement does the camera make from 9 to 18 s?
Locked inputs: D-38 note 3; D-37 (closer camera); D-21 kept as one continuous camera, no cuts.
Options:
- A: a slow push toward each machine through its joining bar (the breaker 9.5 to 11.0, the pile rig 11.6 to 12.7 with the tilt kept, the motorbike 13.6 to 15.3), a travel between them, then a pull out to the band for the fill with a slow drift to 17.5 (rests on: each push names the new player; nothing holds still more than half a second)
- B: a constant slow truck along the street (rests on: steady motion; costs: it drifts away from the machine that just joined)
- C: beat-synced camera bumps on each lock (rests on: energy; costs: bumps were reverted once on the owner's earlier note)
Choice: A
Reason: the owner named a push or a drift toward each machine; A does exactly that inside the one-camera grammar.
Sources: D-38; film/js2/street.js (KEYS)
Critic: the 07 approver round on draft-10
Approved by: approver agent on 2026-10-21 (ice/review/stages/07-08-draft10-approver.md)
Gates: film_gate in-shot motion at or above the floor in every window from 9 to 18 s; each machine whole in frame on its entry
Left behind: B, C
Supersedes: the 9 to 18 s camera keys of D-37

### D-42 Peak limiting at or under 6 dB (note 4)
Status: approved
Question: How does the drop lose its harshness while the master stays at -14 LUFS and -1 dBTP?
Locked inputs: D-38 note 4; D-29 (social profile: -14 LUFS, -1 dBTP, LRA at or under 10); the 08a and 08b chain (score.py, master_audio.py through the --sfx list).
Options:
- A: make the score's own peaks smaller instead of limiting them (softer transients at the drop impact and the kick, the jam stabs kept off the bass peak, gentle saturation before the bus), deliver the score with true-peak headroom so the master adds little, and measure the total peak reduction from the unlimited bus to the final master at 6 dB or less (rests on: harshness comes from the limiter working hard; a smaller crest needs less of it)
- B: keep the score and master quieter (rests on: less limiting; costs: misses the -14 LUFS target)
- C: a multiband compressor before the limiter (rests on: a common fix; costs: more processing on a code score that can be shaped at the source)
Choice: A
Reason: it keeps the loudness target and removes the cause at the source.
Sources: D-38; ice/audio/score.py (version 5); ice/audio/NOTES.md
Critic: the 08 approver round on draft-10
Approved by: approver agent on 2026-10-21 (ice/review/stages/07-08-draft10-approver.md)
Gates: total peak reduction at the loudest moment at or under 6 dB (score limiter plus master), -14 +/- 0.5 LUFS, true peak at or under -1 dBTP, LRA at or under 10
Left behind: B, C
Supersedes: none

### D-43 The code score's arc guard and body LRA after the owner's draft-9 round
Status: approved
Question: How are the music-by-code guard results that the owner's requests move outside their bands recorded and handled (the 08a return item B on draft-10)?
Locked inputs: D-38 (a short, alive ending that lands a final hit; less limiting at the drop); D-39 (the last hit at 32.5, the end at 35.0); D-42 (total peak reduction at or under 6 dB); D-29 (loudness profile); music-by-code.md section 4 (the arc guard and the 5 to 8 LU band).
Measured on version 6 (ice/audio/qc_en_v6.json, ice/audio/NOTES.md "Version 6"): ending_8_to_20_under_peak fails: the last 3 s window (32.0 to 35.0) reads -16.75 LUFS short-term, 6.09 dB under the peak (-10.66 LUFS at 21.7 s), against 8 to 20; no_loud_last_fifth fails: the loudest 3 s window of the last fifth (26.7 to 29.7 s, the line's last bar, the field and the cadence) reads 1.34 LU under the peak, against more than 2; the music body (7.5 to 28.5 s) LRA is 3.97 LU, under 5 to 8, while the whole film is 7.45 LU, inside it. Every other guard passes (onsets 70 of 70, the jam 13 of 13 at 0 ms, the hero kick over every stab, quiet spans, novelty 0.253, masking, the arc's way in and peak placement at 62 percent).
Options:
- A: keep version 6 and record the three results with their reasons: the final hit sits 2.5 s before the last frame because the owner asked for the ending to land a hit and stay alive, so it falls inside the last 3 s window; in a 35 s film the line and the cadence sit at 67 to 81 percent by the locked timing, so the last fifth starts inside the line; the narrower body is the price of 5.6 dB of total limiting instead of about 9 (D-42) (rests on: each failing clause follows from an owner decision; the listener-facing profile, D-29, is met)
- B: soften the last hit by about 2 dB and pull the line's last bar down to pass the two ending clauses (rests on: the guard read literally; costs: a final button nobody notices, and a weaker line under the hero frame, against the owner's note)
- C: widen the body's dynamics again (rests on: the 5 to 8 band; costs: more limiting at the drop, against D-42)
Choice: A
Reason: the guard protects against endings that fade into nothing and bodies that never breathe; here the owner asked for the opposite of a fade, and the limiting he asked to reduce is what narrowed the body; the master meets D-29 (-14.0 LUFS, -2.2 dBTP, LRA 7.4).
Sources: ice/audio/qc_en_v6.json; ice/audio/NOTES.md (Version 6); ice/audio/peak_reduction_en_v6.json; ice/review/stages/07-08-draft10-approver.md (item B)
Critic: the 08 approver round on draft-11; the owner's listen at his next stop
Approved by: approver agent on 2026-10-21 (ice/review/stages/07-08-draft11-approver.md)
Gates: the three results listed in the delivery note with their numbers and reasons; the owner hears the ending at his next stop
Left behind: B, C
Supersedes: none

### D-44 Owner approval of draft-11, with one change to the ending (2026-10-21)
Status: approved
Question: What does the owner decide on draft-11 (ice/renders/draft-11-en-av.mp4)?
Locked inputs: D-38 (his stop at each draft); draft-11 as approved by the 07 and 08 approver round.
Owner's words (relayed by the run coordinator): "جيد جدا" (very good), and "فقط النهاية احذف جملة انه غير رسمي، وخلي الشاشة كلها سوداء واللوجو بتاع سبوتيفاي يظهر بانيميشن" (only the ending: delete the line saying it is unofficial, make the whole screen black, and let the Spotify logo appear with an animation).
Decision as relayed: draft-11 is approved; the end card becomes a fully black screen with no street and no search field under the logo; the Spotify full logo appears with an entrance animation inside Spotify's rules (R-01: never modified, rotated, recoloured or redrawn, the waves never drawn stroke by stroke; only a fade, a gentle scale from about 0.92 to 1.0, or a mask or light reveal; the final hold the exact official file at the correct size, centred, with its clear zone), landing on the final hit at about 32.5 s with the ring-out kept; the unofficial line leaves the end card. Where the line goes is one open question the coordinator put to him: (a) a small readable line at the opening (the coordinator's recommendation), or (b) out of the video, kept only in the gallery caption. Both variants are prepared; nothing is rendered before his answer. The length stays inside 35 to 60 s; the render runs in order from frame 0.
Choice: as above
Reason: his decision
Sources: the owner's words relayed by the run coordinator, 2026-10-21; ice/renders/draft-11-en-av.mp4
Approved by: user, 2026-10-21
Gates: the end card fully black with only the logo; the logo gate (official file, unaltered, centred, clear zone, green on #000000); the length inside 35 to 60 s; a note for the owner's choice: variant (b) leaves the film without the required unofficial label that the brief asks for in the film (RD-01, ice/assets/TRUTH.md and COMPLIANCE.md), so (b) needs his explicit word that the brief's requirement changes
Left behind: none
Supersedes: the end card of D-24, D-31 and D-39 (the logo, the field and the line in a black sky over the street)

### D-45 The black end card and the logo entrance
Status: approved
Question: How does the film reach a fully black end card with an animated logo that lands on the final hit, keeping the question and the length?
Locked inputs: D-44 (fully black, the logo animated within R-01, the final hit at about 32.5 s, the ring-out kept); the prompt's 35 to 60 s (L2); the question "What do you want to play?" (the call to action, TRUTH exact text, 20 letters, 3.0 s to read); the line at 23.5 to 27.5 s.
Options:
- A: the empty search field returns over the playing street at 27.5 and holds 4.0 s (the call to action read in full); 31.5 (bar 12 beat 1) to 33.0 the street and the field fade to black together; 32.5 to 33.5 the official logo fades up and scales from 0.92 to 1.0 as a whole on an accelerating curve, centred at 768 px (40 percent of the width), landing at scale 1.0 on the final hit at 33.5 (bar 13 beat 1); the exact file holds on #000000 for 1.5 s while the chord rings out to 35.0 (rests on: R-01 motions only; the question keeps its reading time; the logo lands on a downbeat; no pure black frame; an end hold within the reading time of a text-less end card; 35.0 s). Built first as draft-12 with the landing at 32.5 (the owner asked for about 32.5 s): look.py failed G2 (20 pure black frames, 30.97 to 31.63 s) and G3 (the logo still 2.5 s against 1.77 s), so the landing moved to the next downbeat, one second later; draft-13 then failed G3 again (the ease-out tail of the entrance read as held for 3.0 s: the logo is about 7 percent of the frame, so a gentle change stays under the per-frame threshold), so in draft-14 the entrance accelerates into the hit and stops on it, measured end hold 1.47 s
- B: a light sweep across the logo after a fade (rests on: a richer reveal; costs: a light passing over the mark reads as altering it on a phone)
- C: the logo scales up from small to full (rests on: energy; costs: outside the gentle 0.92 to 1.0 range of R-01)
Choice: A
Reason: it does exactly what the owner asked with the plainest motion R-01 allows, and keeps the call to action readable before the screen goes black.
Sources: D-44; film/js/config.js (CUE2), film/js/lockup.js, film/js/ui.js, film/js2/street.js; ice/plan/cue-sheet.json (re-exported)
Critic: the 07 and 08 approver round on draft-14 (ice/review/stages/07-08-draft14-approver.md and its second check); look.py G2 and G3 on draft-12 and draft-13 (ice/review/gates-draft12/, gates-draft13/)
Approved by: approver agent on 2026-10-21 (ice/review/stages/07-08-draft14-approver.md); the landing at 33.5 s awaits the owner's confirmation at his stop
Gates: Final Frame Contract on the black end card (0 differing pixels over the whole frame); the logo at scale 1.0 and full opacity from 33.5 s; the question on screen at least 3.0 s; no street or field visible after 33.0 s; look.py G2 (no flat black run over 3 frames) and G3 (end hold within its limit)
Left behind: B, C
Supersedes: D-39's end card (the camera at 0.39 over the street under the logo), D-39's last hit at 32.5 s and its 2.5 s ring-out (now the last hit at 33.5 s and a 1.5 s hold), and D-44's "about 32.5 s" for the landing (now 33.5 s, pending the owner's confirmation in the heads-up below)

### D-46 The non-affiliation line leaves the video (owner's decision, 2026-10-21)
Status: approved
Question: Where does the line "Unofficial concept, not affiliated with Spotify" go once it leaves the end card (D-44)?
Locked inputs: run condition 3 of DEMO-BRIEF.md ("the film ends with, and the delivery note states, 'Unofficial concept, not affiliated with Spotify'"); ledger L4; TRUTH.md and COMPLIANCE.md RD-01; ice-assets brand-authenticity.md section 10 step 10 (the last frame of an unofficial concept carries the line); D-44.
Options he was given by the run coordinator, with the endorsement and trademark risk of a Spotify logo film without the line explained before he chose: (a) a small readable line at the opening (the coordinator's recommendation); (b) out of the video entirely, kept only in the gallery caption.
Owner's words (relayed by the run coordinator): "اشيل جملة غير رسمي من الفيديو خالص، وخليها في وصف الـ gallery وكارت صفحة الهبوط بس" (remove the unofficial line from the video entirely, and keep it only in the gallery description and the landing page card).
Choice: (b): the film carries no non-affiliation line anywhere; the gallery caption and the landing card carry it in the exact wording "Unofficial concept, not affiliated with Spotify".
Reason: his decision, taken after he was told the risk. It overrides, for this demo only, run condition 3 of DEMO-BRIEF.md (the film no longer ends with the line), RD-01 (placement: not in the film), ledger L4 (the film part) and the label gate of brand-authenticity.md section 10 step 10; every check that asks for the line in the film passes on this point by his decision. The other logo rules stay (R-01: the official file, unaltered, no co-branding, no implied endorsement).
Sources: the owner's words relayed by the run coordinator, 2026-10-21; DEMO-BRIEF.md run condition 3; ice/assets/TRUTH.md RD-01; ice/research/COMPLIANCE.md RD-01
Approved by: user, 2026-10-21
Gates: no frame of the film shows the line (the variant page with the opening line is left behind: film/v2-en-16x9-alt-opening-line.html); ice/review/NOTE.md states plainly that the film carries no non-affiliation line, and that the gallery caption and the landing card must carry it in the exact wording "Unofficial concept, not affiliated with Spotify"; the case study and the gallery caption carry it
Left behind: (a) the small line at the opening (built and checked as a variant, not delivered)
Supersedes: RD-01 placement (last frame), the film part of ledger L4, D-44's open question

### D-47 Final approval of draft-14 by the owner (2026-10-21)
Status: approved
Question: Does the owner approve draft-14 (ice/renders/draft-14-en-av.mp4) for the final render and delivery?
Locked inputs: D-38 (his stop at each draft); D-44 to D-46; the heads-up question on the 33.5 s landing (D-45).
Owner's words (relayed by the run coordinator): "موافق على draft-14 وسمعت الصوت. ابدأ الريندر النهائي 1920x1080 والتسليم والـ case study" (I approve draft-14 and I listened to the sound. Start the final render at 1920x1080, the delivery and the case study).
Choice: draft-14 is the approved cut: final render at 1920x1080, English, 16:9, one version; then delivery (ice/renders/final/, ice/review/NOTE.md, a 16:9 English poster still) and the case study export.
Reason: his decision. It confirms the logo landing at 33.5 s with the 1.5 s hold (D-45; the heads-up question is answered by his approval of draft-14), and it closes the "nobody has listened" caveat: the owner listened to the sound.
Sources: the owner's words relayed by the run coordinator, 2026-10-21; ice/renders/draft-14-en-av.mp4; ice/review/stages/07-08-draft14-approver.md
Approved by: user, 2026-10-21
Gates: stage 09 review rounds on the approved cut fix only real defects without changing the approved film; the final rendered in order from frame 0 with one worker and checked against draft-14 on a few frames, the final logo frame included
Left behind: none
Supersedes: the "nobody has listened" notes in D-43, NOTES.md and the 07 and 08 approver records; D-45's open confirmation of 33.5 s

### D-48 Viewer takeaway, written late at stage 09 (clarity gate)
Status: approved
Question: What must a stranger take from the film, so that clarity read 3 has a locked target to be matched against (ice-qa clarity-gate.md sections 2 and 5)?
Locked inputs: D-13 (concept and message) and ice/review/direction/D-13-critic.md; D-30 (every sound from a visible source; the street plays along after play); ice/BRIEF.md "Product truth"; ice/assets/TRUTH.md ("In one sentence", F1); ice/plan/storyboard.md (approved, last amended by D-46).
Why late: the clarity gate entered the skills on 2026-10-21 at 04:05 +0300 (skills commit efdeea8), after 02 was approved on 2026-10-20; the run kept the skill version it started with (the run coordinator's instruction), so no takeaway was written at 02 and reads 1 and 2 were not run. The approver's 09 return (ice/review/stages/09-10-approver.md) asked for it before a new read 3.
Options:
- (a) write the takeaway late, only from text locked at 02 and before read 3, then run a blind read 3 on the delivered master (rests on: clarity-gate.md section 2, the takeaway is a restatement of the locked concept; section 3, a new viewer per read; the film is unchanged, D-47)
- (b) record read 3 as not run, because the gate entered the skills mid-run and the run kept its starting skill version (rests on: the run coordinator's instruction not to switch skill versions mid-run; the gate has no rule for a run already past 02)
- (c) take the film's on-screen line, "Press play. The noise becomes the beat.", as the takeaway (rests on: the line is the film's own statement of the idea, approved by the owner, D-34 and D-35)
Choice: (a): the block "## Viewer takeaway" under the chosen concept in ice/plan/concepts.md, quoted here:
- Sells: Spotify, the app (the film shows its rebuilt search field, its Top result card and its official logo)
- Offer's job: Spotify lets you search for what you feel like and play it
- One-line idea: Press play on Spotify, the noise around you turns into your music.
- Literal anchors: the sound words (HONK, BRRRRT, BANG, VRRRM) -> the sounds of the drawn machines they pop next to -> 0.0 s; the machines playing on the beat -> the music Spotify plays after the press -> 7.5 s (the press on the rebuilt Top result card); the green play circle that drops into the street -> the play button of Spotify's own result card -> 7.5 s on the card, landing on the hero car at 8.0 s
Reason: (a) is the only option that tests the delivered film against a target fixed before the read; (b) leaves the gate untested and (c) has no Sells or Offer's job and would match the viewer to words on screen rather than to the concept. Every field restates text locked before read 3 (sources in brackets in concepts.md); nothing is new, so the concept, the film and its approval (D-47) do not change.
Sources: ice/plan/concepts.md "Viewer takeaway"; D-13; D-30; TRUTH.md; BRIEF.md; ice-qa/references/clarity-gate.md sections 2 to 5
Critic: ice/review/stages/09-10-approver-r2.md (the approver's source check of every takeaway field) and ice/review/clarity/read-3-r5-match.md (the clarity match) [independent]
Approved by: approver agent on 2026-10-21 (ice/review/stages/09-10-approver-r2.md)
Gates: clarity read-3 PASS r5: a fresh viewer on the delivered master, packet ice/review/clarity/packet-read-3/ (film.mp4 and format.txt only; dispatch read-3-r5-dispatch.md; report read-3-r5.md), matched by the approver (read-3-r5-match.md): Sells MATCH ("Spotify."), Offer's job MATCH ("It lets you find and play music that fits your moment."), One-line idea MATCH ("Press play and the noise around you turns into music."), no misread of the turn or the drop, no major confusion (five minor items to the fix list); known limit: the packet path runs through the project folder "04-spotify" and the viewer saw "spotify" in it (Sells only, which the picture answers). The earlier read (ice/review/clarity/read-3-cold-viewer.md) is void (it opened project paths and the critics' packet), and it ran before the round-4 critics without a match: the critics ran before a matched read, logged as an order deviation
Left behind: (b) record read 3 as not run, the typical choice for a gate that lands mid-run; (c) the on-screen line as the takeaway
Supersedes: none (D-13 stays; this fills its missing takeaway)

## Heads-up
(written at hand-off)
- For the owner at his next stop (D-45): the logo now lands on the final hit at 33.5 s (bar 13 beat 1) and holds 1.5 s, one second later than the "about 32.5 s" he approved in D-44, because a landing at 32.5 s holds the still logo 2.5 s, over look.py G3's 1.77 s for a text-less end card. Answered on 2026-10-21: the owner approved draft-14 (D-47), so 33.5 s stands. (Asked: please confirm 33.5 s. If he declines, the fallback is the landing at 32.5 s with a 2.5 s hold, logged against look.py G3 (draft-12 timing, with the black fade overlapping the entrance so G2 stays clean).)
