Commit Graph

15 Commits

Author SHA1 Message Date
Olli Paloviita 013b497efa Branding, app sessions, login command, screenshots docs
- 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
2026-09-04 11:31:03 +03:00
Olli Paloviita ce688f03ac Remove code-sync (sync command, --watch, implicit drains); link the video overview page
- 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).
2026-09-01 23:32:36 +03:00
Olli Paloviita 06fe634569 cli: code-owned editor edits, streamlined preview output, record-all default
- 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).
2026-08-24 15:12:52 +03:00
Olli Paloviita 679c9db2bf Auto-mint the editor token from the org secret; queue edits while the bridge is offline
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.
2026-08-18 10:53:42 +03:00
Olli Paloviita 578ff0e536 Let the anonymous trial run screenci edit; require an account for export
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.
2026-08-13 12:18:18 +03:00
Olli Paloviita 96fddbaa6c editor: rename record command to export, edit specs, export run updates 2026-08-12 19:59:23 +03:00
Olli Paloviita 7fd89186be fix(dev): show machine name only in the connect message, drop unused userName 2026-07-22 00:33:31 +03:00
Olli Paloviita da50b23d27 feat(codeSync): soft-skip stale override keys instead of hard-failing
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.
2026-07-13 14:04:09 +03:00
Olli Paloviita 0f211bea64 editor: apply deferred (pending) codegen edits on connect
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.
2026-07-13 02:18:41 +03:00
Olli Paloviita 351db23822 WIP: editor branch work in progress (auto-committed before merging fable6) 2026-07-12 16:39:20 +03:00
Olli Paloviita eacc5df17a editor codegen for options and narration, dev source watching
- 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
2026-07-12 00:04:38 +03:00
Olli Paloviita 04393fa30e feat: code-as-source-of-truth editing via dev codegen channel
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.
2026-07-11 21:52:29 +03:00
Olli Paloviita 9ca337359e cli: thread previewOnly through the dev record trigger
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.
2026-07-09 17:37:55 +03:00
Olli Paloviita 7f18152cab screenci dev: tolerate empty poll responses instead of warning
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.
2026-07-08 19:28:13 +03:00
Olli Paloviita 9c4cfd284f Add screenci dev: connect this machine to the editor for on-demand records
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.
2026-07-08 14:27:32 +03:00