versioncam 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +79 -37
  2. package/README.md +382 -242
  3. package/bin/versioncam.js +1 -1
  4. package/dist/app-server.js +2 -2
  5. package/dist/app-server.js.map +1 -1
  6. package/dist/cli/commands/doctor.js +2 -2
  7. package/dist/cli/commands/doctor.js.map +1 -1
  8. package/dist/cli/commands/init.js +1 -1
  9. package/dist/cli/commands/init.js.map +1 -1
  10. package/dist/cli/commands/record.js +3 -2
  11. package/dist/cli/commands/record.js.map +1 -1
  12. package/dist/cli/commands/render.js +1 -1
  13. package/dist/cli/commands/render.js.map +1 -1
  14. package/dist/cli/commands/stability.js +4 -4
  15. package/dist/cli/commands/stability.js.map +1 -1
  16. package/dist/cli/main.js +0 -0
  17. package/dist/cli/usage.d.ts +9 -5
  18. package/dist/cli/usage.js +36 -23
  19. package/dist/cli/usage.js.map +1 -1
  20. package/dist/core/timeline.d.ts +22 -0
  21. package/dist/core/timeline.js +10 -0
  22. package/dist/core/timeline.js.map +1 -1
  23. package/dist/driver/clip.d.ts +4 -1
  24. package/dist/driver/clip.js +9 -1
  25. package/dist/driver/clip.js.map +1 -1
  26. package/dist/driver/session.d.ts +13 -0
  27. package/dist/driver/session.js +57 -1
  28. package/dist/driver/session.js.map +1 -1
  29. package/dist/driver/settle.js +2 -2
  30. package/dist/driver/settle.js.map +1 -1
  31. package/dist/inspect/inspect.js +1 -1
  32. package/dist/page/index.html +1 -1
  33. package/dist/render/render.js +1 -1
  34. package/dist/render/render.js.map +1 -1
  35. package/dist/render/sampling.js +1 -1
  36. package/dist/render/sampling.js.map +1 -1
  37. package/dist/review/review.js +3 -3
  38. package/dist/review/review.js.map +1 -1
  39. package/dsl.md +230 -91
  40. package/package.json +2 -2
  41. package/plugin/README.md +53 -47
  42. package/dist/.types-render/render-page/draw.d.ts +0 -28
  43. package/dist/.types-render/render-page/main.d.ts +0 -24
  44. package/dist/.types-render/render-page/theme.d.ts +0 -37
package/CHANGELOG.md CHANGED
@@ -2,13 +2,52 @@
2
2
 
3
3
  What a user of `versioncam` would want to know about each version, newest
4
4
  first. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
5
- and versions follow [semantic versioning](https://semver.org/): while the
5
+ and versions follow [semantic versioning](https://semver.org/). While the
6
6
  major version is 0, a minor version may change the config or the clip DSL,
7
7
  and its entry here says how.
8
8
 
9
- ## [Unreleased]
9
+ ## 0.1.3 (2026-09-28)
10
10
 
11
- ## [0.1.1] — 2026-09-28
11
+ ### Added
12
+
13
+ - A recording lists the steps its script took: `steps` in `timeline.json`,
14
+ each DSL call the script made and the frame it began on. There is one per
15
+ line of the script: `typeInto` is one step, not also the click it makes, and
16
+ a locator is an argument, not a step. A reader holding the script can say
17
+ which line produced which moment.
18
+ - A recording names the versioncam that made it: `meta.recorder`, the package
19
+ version. A page that shows the recording can print the version that
20
+ recorded it instead of the latest release.
21
+
22
+ ### Changed
23
+
24
+ - The DSL reference gives every method its own heading and every option its
25
+ default, and `versioncam dsl` prints it. It used to say `camera.zoom`
26
+ defaults to 1.65. The default is 1.5, as far as the camera goes before
27
+ captured pixels are upscaled.
28
+ - `versioncam --help` groups the commands by stage: set up, write, record,
29
+ review, output.
30
+ - The CLI's messages say things in sentences and brackets rather than
31
+ dashes. `record` says "1 cut" rather than "1 cuts". `stability` separates
32
+ the pair it compared from the result with a `·`, so a script matching its
33
+ output needs the new line.
34
+
35
+ ## 0.1.2 (2026-09-28)
36
+
37
+ ### Fixed
38
+
39
+ - Typing followed straight away by another action no longer loses its last
40
+ character. `type` and `typeInto` queue keystrokes at a human cadence.
41
+ Whenever the typing ended between two frames, the last keystroke stayed
42
+ queued until after the next step. So `typeInto(…)` then `press("Enter")`
43
+ sent the text without its last character, which then began the next
44
+ message. Whether a clip was affected depended only on its timing.
45
+ - A point written as `{ x, y }`, the shape a bounding box gives you, fails
46
+ with "A point is [x, y], not { x, y }", which names the fix. It used to
47
+ reach Playwright as if it were a locator and fail as "locator.count is not
48
+ a function". `dsl.md` says that a point is `[x, y]`.
49
+
50
+ ## 0.1.1 (2026-09-28)
12
51
 
13
52
  The first version published by the release workflow rather than by hand.
14
53
 
@@ -16,77 +55,80 @@ The first version published by the release workflow rather than by hand.
16
55
 
17
56
  - Where there is no `versioncam.config.ts`, `doctor` and every other command
18
57
  say how to get one: `npx versioncam init`, then `/versioncam`, whose first
19
- run writes it from the repository — or by hand, a default export from
20
- `defineRecorder()`. They used to offer only the second, which is the long
21
- way round for anyone using the skill.
58
+ run writes it from the repository. Or write it by hand, a default export
59
+ from `defineRecorder()`. They used to offer only the second, which is the
60
+ long way round for anyone using the skill.
22
61
  - The skill's plugin manifest links to version.cam, and no longer to a
23
62
  repository nobody outside can open.
24
63
 
25
- ## [0.1.0] — 2026-09-25
64
+ ## 0.1.0 (2026-09-25)
26
65
 
27
- The first published version. It was built in work packages before it had a
28
- version number, so this entry is grouped by them, newest first.
66
+ The first published version, and no longer on npm: install 0.1.1 or later.
67
+ It was built in work packages before it had a version number, so this entry
68
+ is grouped by them, newest first.
29
69
 
30
70
  ### Publishing
31
71
 
32
72
  - Licensed under the Functional Source License 1.1 with Apache 2.0 as the
33
- future licence (`FSL-1.1-ALv2`): use it on your own apps and in your own
34
- CI, commercial work included; no competing product or service; each
35
- version is also available under Apache 2.0 two years after its release.
73
+ future licence (`FSL-1.1-ALv2`). Use it on your own apps and in your own
74
+ CI, commercial work included, but not in a competing product or service.
75
+ Each version is also available under Apache 2.0 two years after its
76
+ release.
36
77
  - `versioncam install` installs the Chromium that this version's Playwright
37
- expects — `--with-deps` adds its system libraries on Linux CI — and
38
- `doctor` names it when the browser is missing.
78
+ expects, and `--with-deps` adds its system libraries on Linux CI. `doctor`
79
+ names it when the browser is missing.
39
80
 
40
81
  ### Reproducible on Linux
41
82
 
42
83
  - A draft recording reproduces on Linux. Chromium now repaints whole tiles
43
- (`--disable-partial-raster`): at a draft's CSS scale, repainting only what
84
+ (`--disable-partial-raster`). At a draft's CSS scale, repainting only what
44
85
  the page reported as changed had left one pixel of a just-typed letter
45
86
  stale in about half of all runs on a CI runner. Full recordings are
46
87
  byte-identical with and without it.
47
- - The page's clock moves only when the recorder moves it — 1/fps a frame,
48
- 16 ms a tick while it waits — instead of running on real time between
49
- frames, where one slow screenshot had moved it 840 ms and fired an app's
50
- timer seven frames early. `offCamera` spends no time on the page's clock;
51
- a sign-in hook runs with the clock ticking; a target that is not yet on
88
+ - The page's clock moves only when the recorder moves it: 1/fps a frame, and
89
+ 16 ms a tick while it waits. It used to run on real time between frames,
90
+ where one slow screenshot had moved it 840 ms and fired an app's timer
91
+ seven frames early. `offCamera` spends no time on the page's clock. A
92
+ sign-in hook runs with the clock ticking. A target that is not yet on
52
93
  screen is waited for in ticks, so it arrives on the same tick every run.
53
94
 
54
- ### Versioncam — 2026-09-24
95
+ ### Versioncam (2026-09-24)
55
96
 
56
97
  - One name for everything: the package and CLI `versioncam`, the config
57
98
  `versioncam.config.ts`, the output directory `.versioncam/`, the skill
58
99
  `/versioncam`.
59
- - `webServer` in the config, Playwright's fields: every command that drives
60
- the app starts it when nothing answers, and stops everything it started.
100
+ - `webServer` in the config, with Playwright's fields. Every command that
101
+ drives the app starts it when nothing answers, and stops everything it
102
+ started.
61
103
  - `versioncam stability` records a clip twice the same way and says whether
62
104
  the app reproduces, with the two pictures behind the first frame that
63
- differs. `frame --at <label>` renders the frame a beat shows; `inspect`
64
- says where each name came from; `measure` prints what each match says.
65
- - One skill and one reviewer file, installed by `versioncam init`; the
105
+ differs. `frame --at <label>` renders the frame a beat shows. `inspect`
106
+ says where each name came from. `measure` prints what each match says.
107
+ - One skill and one reviewer file, installed by `versioncam init`. The
66
108
  skill's first run in a repository writes the config and proves the app
67
109
  records the same way twice before it writes a clip.
68
110
 
69
- ### The authoring loop — 2026-09-22
111
+ ### The authoring loop (2026-09-22)
70
112
 
71
113
  - The agent skill: inspect the app, write a clip, record it, have a fresh
72
- reviewer judge a contact sheet, fix what it finds. No API key; the model
73
- is whichever agent session runs it.
74
- - `versioncam review` — the checks that need no eyes; `sheet --at-marks`,
75
- sampled at the beats; recordings that describe their beats (`marks`) and
76
- their waits (`settles.json`); `failure.png` and `failure.json` when a clip
77
- breaks; `s.drag`; `cursorStart`; review bounds on a clip's length that the
78
- app sets.
114
+ reviewer judge a contact sheet, fix what it finds. No API key: the model is
115
+ whichever agent session runs it.
116
+ - `versioncam review`, the checks that need no eyes. `sheet --at-marks`,
117
+ sampled at the beats. Recordings that describe their beats (`marks`) and
118
+ their waits (`settles.json`). `failure.png` and `failure.json` when a clip
119
+ breaks. `s.drag`. `cursorStart`. Bounds on a clip's length that the app
120
+ sets for review.
79
121
 
80
- ### Speed — 2026-09-21
122
+ ### Speed (2026-09-21)
81
123
 
82
124
  - Capture on change: a frame is photographed only when the page can have
83
- changed, which skips 81–95 % of frames on the example app and leaves the
125
+ changed. That skips 81% to 95% of frames on the example app and leaves the
84
126
  recording identical.
85
127
  - `--draft`: fifteen frames a second at CSS scale, for looking at while
86
128
  writing a clip.
87
129
  - `record` prints where the time went.
88
130
 
89
- ### The package — 2026-09-21
131
+ ### The package (2026-09-21)
90
132
 
91
133
  - The recorder, extracted from the prototype it grew up in: a config
92
134
  boundary (`defineRecorder`), the clip DSL, a renderer with presentation as