Commit Graph
14 Commits
Author SHA1 Message Date
justinandClaude Opus 5 3e7b777e53 demo: read the recovered content instead of a path
zerto_recover_file no longer writes the file to this host and hands back a
path, because a path here means nothing to a caller elsewhere and letting
the caller choose it was an arbitrary write. Both drivers still read
rec["path"], so they broke.

They now use the returned content. A small recovered_bytes() helper in each
driver decodes the text or base64 form, so the Windows copy-back keeps
shipping exact bytes rather than letting PowerShell rewrite line endings,
which is the bug that put a stray CR in an earlier take.

The Linux driver writes the bytes to a local file before scp, since scp
needs something on disk to send.

Verified against a live recovery: the helper returns 164 bytes whose sha256
matches the one the server reported, and the keys the on-screen show()
filter uses are all still present.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_016yVfC5nvZowoLFnEGWhLGn
2026-09-22 19:41:52 -04:00
justinandClaude Opus 5 e802d86196 demo: stop claiming backup is the only other copy
The narration said the changed file's "only other copy is in last night's
backup". That is false, and it gives away the argument the demo exists to
make: Zerto has a copy from seconds before the change. That is the whole
point.

d5 now draws the contrast instead of conceding it. Backup has last night,
hours old. Zerto has seconds before the change.

d2 had the same problem in a quieter form, asserting there was "no other
copy of that file anywhere" while Zerto was already protecting the machine.
Cut, since d5 carries the comparison.

Also fixes the pronunciation map that made the voice say "vem". The
replace map takes a phrase and a pronunciation, so {"VM": "vee em"} is
spoken as one run-together word. Expanded to "virtual machine".

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_016yVfC5nvZowoLFnEGWhLGn
2026-09-22 19:39:54 -04:00
justinandClaude Opus 5 2a35397e99 demo: commit the recording harness
The demo tooling only existed in a session scratch directory, which is
temporary. This puts it in the repo so the video can be rebuilt.

Terminal only: tmux drives a two pane session, asciinema records it, agg
renders it, ffmpeg encodes it. The left pane runs the loop against a live
ZVM, the right pane polls the VPG journal so the tagged checkpoint appears
on camera as it lands.

Narration is synthesised per beat and aligned to marks the driver writes
while it runs, rather than to predicted timings, so a slow API call or an
FLR mount that takes longer than usual does not drift the audio. Two
things that has to respect are written down in the README: agg's
idle-time-limit must exceed the longest pause or it compresses idle time
and breaks the wall-clock mapping, and each beat holds for its narration
length so no line is cut off.

demo_win.json carries live guest credentials, so only an example with
placeholders is committed and the real file is gitignored, along with the
generated wav, cast, gif and mp4.

The xAI key path and voice id come from the environment now instead of
being hardcoded to one machine.

Also records the narration gotchas that cost time: mapping an acronym to
run-together phonetics ({"VM": "vee em"}) is spoken as one word, "vem";
prose written for the page sounds robotic read aloud; and volumedetect
reports no samples when aimed at a file whose first stream is video,
which makes a working audio track look silent.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_016yVfC5nvZowoLFnEGWhLGn
2026-09-22 19:39:54 -04:00
claude bf3b8e1a05 fix(recover): return the file content, not a path on this host (#10) 2026-09-22 19:39:43 -04:00
claude 8baeceac32 feat(hooks): enforce the guard from a PreToolUse hook (#9) 2026-09-22 19:39:24 -04:00
claude 3d487e0850 docs: tagged checkpoints do work on cloud-protected VPGs (#11) 2026-09-22 19:39:06 -04:00
claude ebf714cc20 fix(client): serialise Keycloak token acquisition (#7) 2026-09-21 15:15:42 -04:00
claude 1d53029038 feat(guard): read the Zerto task, and ask before guarding unknown tools (#6) 2026-09-21 15:07:43 -04:00
claude 5039f7378d feat(catalog): cover Windows guest-mutating tools in the starter list (#5) 2026-09-21 15:06:41 -04:00
claude 90768f17e1 feat(flr): windows paths, recovery-site gate, stable partition reads (#4) 2026-09-21 14:11:09 -04:00
claude 59d1f71617 feat(flr): make FLR session lifecycle visible and reapable (#3) 2026-09-21 13:43:05 -04:00
claude 108e919dcb fix(flr): partition-rooted FLR paths + agent/intent in checkpoint names (#2) 2026-09-21 13:42:36 -04:00
claude 2473d22d2e fix(flr): 10.9 session list + download path (#1)
Co-authored-by: claude <[email protected]>
2026-09-21 12:18:13 -04:00
claude 38ba9c1b50 feat(poc): rewind MCP, skill, and recover-ladder docs
Initial PoC: find_protection, tagged checkpoints, FLR, mutating catalog.
Lab 10.9 status enums (0=Initializing, 1=MeetingSLA). Credentials stay in gitignored config.json.
2026-09-21 12:09:11 -04:00