Skip to content

Fixture: JianYing 9.0.0 on Windows (encrypted mirrors beside a plaintext primary) - #150

Merged
renezander030 merged 1 commit into
renezander030:masterfrom
Phelim2023315:test/jianying-9-0-0-windows-fixture
Oct 14, 2026
Merged

renezander030 merged 1 commit into
renezander030:masterfrom
Phelim2023315:test/jianying-9-0-0-windows-fixture

Conversation

@Phelim2023315

Copy link
Copy Markdown
Contributor

Adds a committed fixture, a regression test and a docs/version-support.md row
for a capture the docs currently describe from memory only.

The capture

A real 剪映专业版 (JianYing) 9.0.0 on Windows 10.0.19045 project, taken with
capcut fixture after the app had opened a draft this CLI wrote:

File State
draft_info.json plaintext JSON, 3485 bytes — the primary, still the tool-written bytes
draft_content.json encrypted blob (app-rewritten)
template-2.tmp encrypted blob (app-rewritten)
draft_meta_info.json encrypted blob (app-rewritten)
Timelines/project.json, Timelines/469574b7-…/draft_content.json layout + encrypted blob

Redacted with capcut fixture: no media, home paths / emails / device
identifiers stripped. Content is two text segments ("smoke-test",
"smoke-cta-default") from the tool's own smoke test.

Why it is worth committing

  1. A plaintext tool-written primary is accepted on this build. The draft was
    written, closed, opened in the app, and the added text segment was present and
    editable. The app then encrypted the legacy mirrors and left the primary
    plaintext — so the CLI keeps reading the project through its canonical file and
    never writes into the encrypted mirrors.
  2. The 6.0+ note about the primary file name does not hold here. On the same
    build an app-authored project is a plaintext draft_content.json with no
    draft_info.json or template-2.tmp at all. That folder is the owner's and is
    not committed, but the consequence is recorded in the docs row.
  3. target_timerange.start is not guaranteed. The smoke-test segment
    carries {"duration":3000000} with no start and no speed; the app renders
    it normally and capcut segments -H printed NaN:00NaN / undefinedx for it.

What the test pins

  • diagnose selects draft_info.json as canonical and reports 9.0.0.
  • The three encrypted mirrors are reported as present-but-unparseable, and the
    readable primary still carries the timeline — a capture with encrypted siblings
    must not break canonical selection.
  • version reads JianYing / lv / 9.0.0 off the primary.
  • The current write-guard verdict (known-broken / refuse /
    beyond_known_range) is unchanged, so any future narrowing of the 6.0+ band is
    a deliberate edit with this test in front of it.

What this does NOT claim

The write guard is untouched on purpose. A committed fixture backs the storage
shape
; it is not a round-trip claim for every JianYing 9.0.0 build, and this is
one machine. Narrowing the >= 6.0 refusal (or relaxing it for plaintext-primary
projects, the way the 11.4.0 macOS row is phrased) should be a maintainer
decision on top of this evidence — see #148.

Testing

npm test
npm run lint

test/jianying-9-0-0-windows.test.mjs: 4 tests, all passing.

A real 剪映专业版 9.0.0 (Windows 10.0.19045) project, captured with `capcut
fixture` after the app had opened a draft this CLI wrote, so the app encrypted
`draft_content.json` / `template-2.tmp` / `draft_meta_info.json` in place and
materialised `Timelines/` while leaving the primary `draft_info.json` plaintext.

That state is worth committing because it is the one the docs cannot describe
from memory: the project stays readable through its plaintext primary, the
encrypted mirrors are skipped rather than fatal, and the version markers come
off the primary. The test pins all three, plus the current write-guard verdict
for the version so a future change to it is deliberate.

Two things the capture also establishes, recorded in the fixture README and the
new docs/version-support.md row rather than asserted here:

- On this build an *app-authored* project is a plaintext `draft_content.json`
  with no `draft_info.json` or `template-2.tmp` at all, so the 6.0+ note that
  the primary has been `draft_info.json` since 6.0 does not hold here.
- A segment the app itself carries can have a `target_timerange` with no
  `start` and no `speed`.

The write guard is deliberately untouched by this commit: a committed fixture
backs the storage shape, not a round-trip on every 9.0.0 build, and one
machine's capture is not evidence enough to narrow the 6.0+ refusal.
@renezander030

Copy link
Copy Markdown
Owner

Thanks for contributing the capture and regression tests! This is a useful addition, and I agree with keeping the write guard unchanged. Once CI has run and passed, this looks ready to merge.

@renezander030
renezander030 merged commit 6e53e8a into renezander030:master Oct 14, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants