Fixture + evidence: JianYing 9.0.0 Windows opens a tool-written plaintext draft, encrypts the legacy mirrors on close #148
Description
The capture (produced with capcut fixture, media excluded, home paths / emails
/ device identifiers redacted) is committed in the accompanying PR as
test/fixtures/jianying-9-0-0-windows/.
Environment
app 剪映专业版 (JianYing)
version 9.0.0
OS Windows 10.0.19045
draft store %LOCALAPPDATA%\JianyingPro\User Data\Projects\com.lveditor.draft
What was done
capcut-cli0.29.0 created a draft and wrote into it (add-text, then a text
template). A human acceptance check then closed the project and opened it in
the app: the added text segment was present on the timeline and editable.- The project was captured with
capcut fixtureafter that open.
What the capture shows
| File | State |
|---|---|
draft_info.json |
plaintext JSON (3485 bytes) — the primary, still the tool-written bytes |
draft_content.json |
encrypted blob — rewritten by the app on close |
template-2.tmp |
encrypted blob — rewritten by the app on close |
draft_meta_info.json |
encrypted blob — rewritten on close |
Timelines/project.json + Timelines/469574b7-…/draft_content.json |
nested layout the app materialised |
So on this build:
- the app accepted a plaintext, tool-written primary and kept it plaintext;
- it converted the legacy mirrors to encrypted blobs;
- the CLI still reads the project (canonical
draft_info.json), and never writes
into the encrypted mirrors.
Two further observations from the same machine:
- An app-authored project on this build is a plaintext
draft_content.jsonwith
nodraft_info.jsonortemplate-2.tmpat all (12517 bytes, 5 tracks, read
fine bycapcut diagnose). The 11.4.0-macOS note — "the primary file name has
beendraft_info.jsonsince 6.0" — therefore does not hold for this build.
That folder is the owner's work, so it is not attached; the consequence is
recorded indocs/version-support.md. - A segment in the captured draft has
target_timerange{"duration":3000000}
with nostartand nospeed. The app renders it normally;capcut segments -HprintedNaN:00NaN/undefinedx. Reported separately (issuesegmentsrenders NaN for a segment whosetarget_timerangehas nostart#147).
The question for the maintainer
The lv >= 6.0 write guard is currently refuse, justified by the
encrypted-draft era. This capture is the same shape of evidence as the JianYing
11.4.0 macOS row, which is labelled "plaintext drafts accepted on open — generation
is not blocked" while the guard stays conservative. Two possible follow-ups, both
deliberately left out of the PR so the decision is yours:
- Add the row (with the fixture) and leave the guard exactly as it is — what the
PR currently does. - Narrow the refusal for projects whose primary is plaintext and readable
(draft_info.jsonpresent and parseable, mirrors either absent or unreadable
encrypted blobs), keeping the refusal for app-authored fully-encrypted
projects. That would let a plaintext pipeline write its own drafts without
--force-writewhile still refusing a draft the CLI cannot read at all.
--force-write does work on this build today, and the app opens the result — but a
guard that has to be overridden for a normal workflow is worth revisiting once a
second build confirms the behaviour. If it helps, the same capcut fixture run on
another 9.x build would settle it.
Activity
renezander030 commentedon Oct 14, 2026
Thanks for the fixture and the app check! I’m happy to take the evidence in #150 while keeping the write guard unchanged for now. A full write/open/save/close/reopen check on another JianYing 9.x build would help support a narrower exception.
renezander030 commentedon Oct 14, 2026
The fixture landed in #150 and now runs in the test suite on
master. Closing this one. Evidence from another JianYing 9.x build is welcome in a new issue.