PRISM · products/refract

Refract — Project Atlas

One honest view of all 8 build stages, per docs/prism-docs/06-OPERATIONS/project-build-standard.md. Real status only — anything not done is marked not-done, not implied.

Method: D-027 heavy tier (spec-kit pilot) Owner-agent: ariel-hameifik Generated: 2026-07-18 Sole client in current scope: Sand Israel
No paid generation, no client delivery, no public deploy, no registry change is authorized yet for Refract. Everything below is planning-stage-and-earlier. This page is a status view, not a product surface — Refract itself has no live link yet (see Stage 6).
4 done 0 pending Ben 1 partial (in progress) 3 not started
1 Research Done

Artifact: products/refract/research/research.md — completed 2026-07-18 by רותם (research), skills: prism-research, marketing-skills:competitor-profiling, marketing-skills:competitors.

Live-sourced research (WebFetch + WebSearch, 2026-07-18) on three direct competitors:

ProductFree tierPaid rangePositioning
Higgsfield10 credits/day, watermark$15–$99/mo (+$62–89/seat business)Multi-model aggregator, creative suite
Artlist AInone confirmed$29.99–$79.99/mo + add-onsAI layer on an existing 10M+ user brand (Artlist Studio)
Suno10 songs/day, no signupPro/Premier, exact price unconfirmedFastest-to-full-result, try-before-signup

Key finding: none of the three market "the truth/assembly layer over generation providers" as their core thesis — every one of them is, structurally, a similar provider-aggregator-plus-assembly-UI, but none states it as the differentiator. Refract's own PRFAQ language already stakes this ground; it isn't yet exploited by any competitor reviewed.

Onboarding-flow suggestion (unconfirmed, input to Vision — not a decision): brief → instant job acceptance, no signup (Suno-style) → storyboard/animatic within minutes as the first "wow" moment → signup only when continuing to shot production → live progress tracking, never a fake loading bar.

Flag carried into Vision, not resolved here: this research session opened with a same-day (2026-07-18) note that Refract's framing shifted from a Sand-only internal production tool to "a full SaaS product, built from zero, competing directly with Higgsfield/Artlist/Suno." That is a materially different scope than the Sand-only, M1-first track the PRFAQ/PROJECT.md below still describe. Research deliberately does not resolve this — see Stage 2.
2 Vision Gate: P6 — Ben, immediately Approved 2026-07-18

Artifacts: products/refract/PRFAQ.md + decisions/2026-07-18-vision-p6-saas-scope.md (the ratified resolution).

Resolved — was a documentation lag, not a real contradiction. Decision ledger D-022#029 (2026-07-16, already Ben-ratified) settled this:
"Refract is not a proof lab. It must mature into a finished, launch-ready mass-market SaaS product through the complete governed SpecKit pipeline."
Klaus's PRFAQ (written 2026-07-17) undersold that scope by framing Sand as the near-term sole client. Ben's 2026-07-18 instruction confirmed and sharpened D-022#029 directly: build the full SaaS shell — onboarding, UI, positioning vs. Higgsfield/Artlist/Suno — in parallel with M1's technical proof, not sequenced after it.

Ratified scope: Refract is PRISM's flagship, launch-ready, mass-market SaaS product. Sand Israel is a bounded design-partner/pilot case within that build (D-022#032), not the ceiling on ambition — M1's montage proof happens through the Sand engagement, while the SaaS shell is built now. Positioning gap (Rotem's competitor research, 2026-07-18): none of Higgsfield/Artlist/Suno claim to be "the truth and assembly layer over generation providers" — despite functionally being aggregators/composers themselves. That is Refract's open thesis.

Unchanged, still separately gated: no paid generation spend, no re-registration, no public claims, no deploy — each clears its own gate independently.

3 Brand + Mockup Gate: P6 — a deployed link, not chat Not started

Artifact: none. products/refract/brand/ does not exist.

No brand direction notes, no DesignSync artifacts (dashboard.html / mobile.html / tokens.html), no Ben-receipted waiver on file. Per the project-build-standard's four laws ("no silent skips"), this stage is recorded honestly as not started — not skipped-with-approval, and not implied "in progress." This atlas page itself deliberately reuses prism-site's neutral Glass Box tokens rather than invent a Refract-specific look, precisely because that decision belongs to this stage, not to a status page built ahead of it.

4 Spec Done

Artifacts: products/refract/specs/001-m1-montage-revival/spec.md (heavy tier, D-027, spec-kit) + openspec/changes/refract-revival-m1/proposal.md (light-tier OpenSpec bridge for board-card tracking).

Fully drafted spec-kit spec: 3 user stories (P1 — full local loop brief→montage; P1 — honest cost/time record, never invented, never marketing "seconds" on the finished video; P2 — boundary check confirming no client delivery / public deploy / registry change), 6 functional requirements (FR-001..FR-006 — deterministic montage, real cost/duration record, no silent paid-provider spend, explicit failure surfacing), 4 success criteria (SC-001..SC-004), edge cases and assumptions. Requirements quality checklist: specs/001-m1-montage-revival/checklists/requirements.md — all items pass.

The OpenSpec bridge proposal states the same Why/What/Invariants/Out-of-scope in board-card form: no paid spend, no client delivery, no public deploy, deterministic montage (cut=concat, not frame-drift xfade), explicit failure surfacing; out of scope for this slice: lipsync, subtitles, music (M2), multi-scene continuity (M3).

2026-07-18 update: Vision (Stage 2) is approved with a receipt (decisions/2026-07-18-vision-p6-saas-scope.md), and the OpenSpec bridge's task 0 ("Ben P6 — PRFAQ gate") is now ticked against that receipt. Spec stage is complete — closing the gap where an approved Vision gate hadn't been reflected in the task tracker.
5 Architecture + Tasks Gate: P7 (if load-bearing assumptions) Done

Artifacts: products/refract/specs/001-m1-montage-revival/{plan,research,data-model,quickstart,tasks}.md (heavy-tier, canonical) + openspec/changes/refract-revival-m1/tasks.md (light-tier bridge, now pointing to the heavy-tier file as source of truth rather than duplicating it).

2026-07-18: the D-027 pilot gap is closed. `/speckit.plan` and `/speckit.tasks` had never been run after `/speckit.specify` — this session ran both: `plan.md` (Technical Context, Constitution Check against this repo's own governance docs, Project Structure reusing products/refract-video/app/{stitch,finish,brief}.py as-is), `research.md` (montage-reuse / fixture-sourcing / real-ffmpeg decisions), `data-model.md` (Brief / Shot list / Run record / Montage output entities mapped to the existing meta.json/costs.jsonl shapes), `quickstart.md` (SC-001..SC-004 validation commands), and `tasks.md` (T001-T016, dependency-ordered, organized by user story per spec-kit's own rules).

2026-07-18, later same day: all 16 tasks (T001-T016) are done. Setup + Foundational (Phase 1-2) done earlier this session; Phase 3-6 (T006-T016) closed out the same day with a real render — see Stage 6 (Implement) below for the artifact and numbers. Tasks.md now shows every checkbox ticked with an inline evidence note per task; nothing is marked done without a corresponding on-disk artifact.

6 Implement Partial — M1 proven, not productized

Artifact: products/refract-video/runs/run-20260718-164352/deliverable.mp4 — a real, playable local file (not a deployed link; open it locally to view it).

2026-07-18: M1's one-montage proof actually ran, end-to-end, no manual editing step. render_montage() (products/refract-video/app/stitch.py, unmodified — no new code) was called on the 4 locked fixture shots → runs/run-20260718-164352/montage.mp4: 4 beats, cut transitions, 1:1, 20.18s, usd: 0.0, wall-clock 24.4s. Re-run a second time with the identical spec → runs/run-20260718-164425/montage.mp4byte-for-byte identical (MD5 ae087ef796ae1649be7e62ede9b820f4 on both files), stronger than SC-002 requires (structural match only). finish_deliverable() (products/refract-video/app/finish.py, unmodified) was then run over the first montage → the deliverable.mp4 above: 20.18s, usd: 0.0, wall-clock 62.7s, clean full ffmpeg decode.

Real bug found and worked around, not hidden: finish.py's _save_png_atomic() calls .convert("RGB") on an RGBA overlay layer, dropping alpha and baking an opaque black background into the "super" caption PNG. With default spec values this blacks out the entire video from vo_at_s (7.5s default) to the end — confirmed by extracting frames (solid black + a stray "B" letter from t=12s onward on the uncorrected first attempt). Workaround used here: super_from_s = deliverable_s so the overlay's enable() window never triggers. The underlying bug in finish.py is not fixed — logged in products/refract-video/pipeline.md for follow-up before any production use of finish_deliverable's super/slate features.

SC-001..SC-004 all PASS, verified via quickstart.md's own commands (not assumed): playable file + correct 4-beat order (SC-001); byte-identical re-run (SC-002, exceeds the required bar); usd: 0.0 on both runs with no costs.jsonl line for either run-id — correctly absent for a $0 fixture reuse, not a gap (SC-003); zero paid-provider invocations confirmed by grep over costs.jsonl (SC-004). Boundary check (T013) clean: no artifact claims delivery/public deploy/registry change; projects-registry.yaml's refract-video entry unchanged (tier: closed).

Marked partial, not done: this proves the M1 technical loop works on one fixture case. It has not been productized (no UI, no onboarding, no SaaS shell — those are separate, not-yet-started stages/milestones per PROJECT.md's M1→M3 chain), and products/refract-video/'s own broader capability set (VO, music, lipsync, provider adapters, 180 passing tests) predates and is untouched by this run.

7 Review + Evaluation Gate: P6 — the link Not started

Artifact: none. products/refract/reviews/ / decisions/ do not exist for this track.

No implementation receipt, no build/budget/honesty gates, no Lighthouse pass (not applicable until Implement produces a live surface), and no Ben P6 approval — because there is nothing built yet to review or approve.

8 Knowledge Not started

Artifact: none. products/refract/lessons/ does not exist.

No lessons captured and no memory/ promotions logged for this revival track yet — expected, since Implement and Review haven't happened.