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:
| Product | Free tier | Paid range | Positioning |
|---|---|---|---|
| Higgsfield | 10 credits/day, watermark | $15–$99/mo (+$62–89/seat business) | Multi-model aggregator, creative suite |
| Artlist AI | none confirmed | $29.99–$79.99/mo + add-ons | AI layer on an existing 10M+ user brand (Artlist Studio) |
| Suno | 10 songs/day, no signup | Pro/Premier, exact price unconfirmed | Fastest-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.
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).
"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).
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.mp4 — byte-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.
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.