- Branding config and asset refs with CLI support.
- App session handling replaces the edit-token exchange; login command and
sign-in banner.
- Docs: branding, signing in, screenshots; login skill reference.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A1yyJeUrHajm8whsiHqk4G
- Drop the sync command, preview --watch/--no-watch/--no-sync, --record-kill-window, and the queued-edit drains before test/export/preview. Editor edits now live in the web editor and are not written back to sources.
- Delete codeSync, applyCodegen, editorOptionsSync, devWatch, codegenFailureLog and their specs; trim devListen to register/sync-state/deregister.
- preview is always one-shot; generated CI workflows run plain screenci preview.
- CLI links point at the video overview page: preview prints /project/<pid>/video/<vid>, a single-video export prints ...?export=<recordId>, multi-video runs keep the run pages. Held-video notices deep-link ?editor.
- Rewrite docs, skill files, and the narration guidance: narrate the flow rather than each click, use the product's own vocabulary, and fill forms with fictitious example data (Emma Carter, emma@aperturebio.com).
- Preview with no user grep records every declared video (new and renamed
videos always get picked up); a grepped session keeps the freshness skip.
The forced label and the out-of-date wording are gone from the record line.
- One-shot preview output is phase-shaped: no connect banner, one drain
summary line instead of per-edit apply lines (live --watch sessions keep
them, without the Unknown user attribution), one editor-media notice per
video, no closing hint. Unknown-video edit failures only log when the
user's own grep targets that name.
- Editor edits are code-owned end to end: editing a cue on a names-only
narration declaration converts it to the object form (untouched names stay
blank as editor markers) instead of refusing as app-managed.
- export never applies queued edits: it peeks /cli/dev/pending-codegen-count
and warns, and --no-sync becomes a documented no-op. sync/test/preview
still drain on start; skipped (orphaned) edits are no longer counted as
synced.
- Held uploads name their blank narration cues with the sync-and-re-record
fix; the post-upload notice is scoped to editor-uploaded media.
- Docs updated (cli.mdx, editor.md, narration.md).
screenci edit no longer needs a hand-created SCREENCI_EDIT_TOKEN: the
CLI exchanges the org secret for a machine-scoped editor token minted
by the server (idempotent per machine, revocable on the Secrets page).
Edits made in the web editor while no bridge is connected queue as
deferred codegen requests; the next screenci edit run drains them into
the script before listening. Export skips Studio-held videos instead of
waiting on renders that will never start, and reports when everything
is held. Docs updated to match.
The anonymous trial is now preview-only. screenci edit works without a
SCREENCI_SECRET: the anon session token doubles as the dev token, and a
claimed trial self-upgrades in place (the claim-minted org secret and
personal editor token are persisted into .env and the bridge reconnects
without stopping). Expired or claimed-elsewhere sessions get clear
next steps.
screenci export now refuses the anonymous trial up front and points at
edit for the free live preview and at sign-up for exporting; a claimed
trial self-upgrades to the real secret and proceeds.
Docs and the agent skill are updated to match.
An override whose key is absent from the current recording snapshot (its
action was removed, or an ordinal-keyed target such as a waitForTimeout
delay drifted since the edit was authored) was reported as a hard
'unstamped-action' failure. That surfaced a permanent editor error the
user had to clear by hand, even though there was no call site to write
and nothing wrong.
Introduce a typed 'orphaned-override' reason for the absent-key case and
distinguish it from a genuine unstamped action (present in the snapshot
but with no editId) and a slug#N loop repeat. applyCodegenRequest now
returns { outcome: 'orphaned' } instead of throwing when every refusal is
that soft kind, and the dev listener reports it as 'orphaned' so the
request is auto-discarded rather than failed.
Accept codegen requests queued while no machine was connected: the poll
loop applies them like any other edit and logs "queued by <name>"
attribution. Update the editor docs to describe pending edits and code
sync.
- optionsEdit and narrationEdit records (timeline edits v4): render/record
option snapshots merge into .renderOptions/.recordOptions builder calls
(section added when missing), narration cue values merge into the
video.narration declaration via the new setNarrationValue codemod
(content-major and language-major forms, conversion to language-major on
a non-default language edit, names-only declarations stay app-managed)
- applyCodegenRequest wires the new records into planCodeSync
- screenci dev watches the managed videos' test sources and
screenci.config.ts (src/devWatch.ts): a real content change re-records
the affected videos as previews through a new machine-local record job
in the listen loop; codegen self-writes are baseline-suppressed;
--no-watch disables it
- docs: cli.mdx dev watching, editor.md option/narration codegen coverage
Editor edits now arrive over the dev channel as codegen requests and are
written straight into the .screenci.ts sources; recordings always run purely
from code values.
- Keep data.json across uploads (media-only cleanup, last-data.json rename)
and stamp a sourceHash of the test file into its metadata.
- screenci dev startup handshake: skip recording when the source hash matches
and every editable action has an editId; otherwise stamp missing editIds
and re-record as a preview. New --grep, --force-record and
--record-kill-window flags.
- Dev loop: records run in a killable background slot while the loop keeps
polling; codegen requests apply serially via the codemod pipeline and are
acked over /cli/dev/report-codegen; fast-poll during active editing;
kill-or-queue policy for superseding record triggers; sync-state reporting
locks editor timelines during the startup handshake.
- Remove the server-override machinery: editable-actions.json and
action-params.json snapshots, SCREENCI_TIMELINE_EDITS injection, runtime
override application, screenci sync / status / reset-web-edits and
dev --sync.
A preview-only dev trigger (from the web editor's raw-record button)
records normally but uploads into the video's preview slot without a
render. DevTrigger.previewOnly flows to runTriggeredRecord, which sets
SCREENCI_PREVIEW_ONLY so the upload body carries previewOnly, mirroring
the SCREENCI_SKIP_RENDER pattern.
An empty 2xx body from the /cli/dev/* proxy (or an idle keep-alive) made
postDev's res.json() throw "Unexpected end of JSON input", which the poll loop
logged as "Connection problem, retrying" and backed off on. Read the body as
text and treat an empty one as an empty result, so an empty poll response is a
no-op instead of a spurious connection error.
New long-running command that registers a dev listener with the service,
short-polls for record triggers from the web editor, runs the requested
video and language through the normal record and upload path, and reports
status back. Authenticates with SCREENCI_SECRET plus a personal
SCREENCI_DEV_TOKEN so only the token owner's web session can trigger
records on this machine.
The previously removed dev command name is reintroduced on purpose; the
regression test now asserts the command exists instead.