Commit Graph
434 Commits
Author SHA1 Message Date
Miguel Ángel 2a2a1d2d90 chore: release v0.8.177 (#5897) 2026-10-19 14:03:31 -04:00
Miguel Ángel 5f619ef6ca chore: release v0.8.176 (#5891) 2026-10-19 12:14:57 -04:00
Miguel Ángel ed8e2d2002 chore: release v0.8.175 (#5886) 2026-10-19 10:51:06 -04:00
Miguel Ángel 1d631bf98a chore: release v0.8.174 (#5869) 2026-10-18 22:21:10 -04:00
Miguel Ángel 5658f70065 fix(core): color grading applies to canvas compositions (#5860)
* fix(core): color grading applies to canvas compositions

data-color-grading on a <canvas> was ignored by the runtime and refused by
lint, the Studio panel and the CLI writer. One source-tag list in the grading
contract now feeds all of them. A canvas is sized from its drawing buffer and
re-uploaded on every seek and transport tick.

* fix(core): keep the comment share of grading files at the base
2026-10-19 00:38:53 +00:00
Miguel Ángel d1123299f8 fix(lint): back-to-back audio clips no longer count as overlapping after float rounding (#5837)
duplicate_audio_track compared raw float ends, so 21.03 + 0.1 (21.130000000000003)
overlapped a clip starting at 21.13. The one-instant span helpers move from core's
clipFacts to parsers, which lint and core both depend on; core re-exports them and
the rule uses spansOverlap.
2026-10-18 22:15:23 +00:00
Miguel Ángel 9566f96f92 chore: release v0.8.173 (#5857) 2026-10-18 17:37:10 -04:00
Miguel Ángel a971c2bb25 test(lint): shader lint tests pass on macOS, where the temp folder is a symlink (#5851)
projectShaders reports real paths, and macOS's temp folder is /var, a link
to /private/var, so the tests' expected paths never matched there. The
fixture root is now the real path.
2026-10-18 16:33:06 +00:00
Miguel Ángel c8288eb9b6 chore: release v0.8.172 (#5848) 2026-10-18 15:53:44 +00:00
Miguel Ángel 76ba031dcc chore: release v0.8.171 (#5838) 2026-10-18 09:34:30 +00:00
Miguel Ángel b74686ef8e chore: release v0.8.170 (#5822) 2026-10-18 05:26:26 +00:00
Miguel Ángel 7735338b49 chore: release v0.8.169 (#5804) 2026-10-17 16:55:51 +00:00
Miguel Ángel 6e1f9ee11f chore: release v0.8.168 (#5780) 2026-10-17 09:54:30 +00:00
Miguel Ángel e6ce733796 fix(lint): stop flagging dir on <html>; a render test now guards RTL export (#5744) 2026-10-17 03:25:12 +00:00
Miguel Ángel eab6ca15b1 fix(cli): timeline lists clips nested in a timed element and lint flags ones that never show (#5732)
* fix(cli): timeline lists clips nested in a timed element and lint flags ones that never show

* docs(lint): wrap the nested-clip entries

* docs(skills): format the nested-clip note and refresh the skills manifest

* fix(cli): keep timeline edits from colliding with a clip's own wrapper

* fix(cli): cut clips nested in a wrapper at their sub-composition's in-point

* refactor(lint): split the nested-clip visibility checks to keep the audit green

* style(cli): restore the timeline test's formatting
2026-10-17 02:27:17 +00:00
Miguel Ángel 35b17c3fe6 chore: release v0.8.167 (#5730) 2026-10-17 00:44:30 +00:00
Rudy Mizrahi Celekli 0bff8342c3 perf(lint): strip stylesheet comments once per canvas zoom scan (#5712) 2026-10-16 19:09:14 +00:00
Miguel Ángel a43cdd93bf chore: release v0.8.166 (#5709) 2026-10-16 18:16:28 +00:00
Miguel Ángel 1714f7c7b4 chore: release v0.8.165 (#5703) 2026-10-16 17:30:38 +00:00
Miguel Ángel 4d6b5be33b chore: release v0.8.164 (#5679) 2026-10-16 08:42:19 +00:00
Miguel Ángel 490ecafbc4 chore: release v0.8.163 (#5676) 2026-10-16 01:52:29 +00:00
Miguel Ángel 76222e41d7 chore: release v0.8.162 (#5649) 2026-10-15 11:54:09 +00:00
Xuanru Li ce060c7acc chore: release v0.8.161 (#5643) 2026-10-15 08:49:20 +00:00
Xuanru Li ec97816a92 chore: release v0.8.160 (#5636) 2026-10-15 05:43:55 +00:00
Miguel Ángel d4c8d76fff fix(lint): warn on unbounded cosine powers in shaders (#5640) 2026-10-15 05:40:38 +00:00
Miguel Ángel f35b05fba0 chore: release v0.8.159 (#5621)
* chore: release v0.8.159

* chore: v0.8.159 notes list the first-frame fix

* chore: v0.8.159 notes list the sandboxed GPU check fix

* chore: v0.8.159 notes list the hidden-scene fix and the offline font test
2026-10-15 00:27:52 +00:00
Miguel Ángel fa99eec9d0 chore: release v0.8.158 (#5617) 2026-10-14 19:19:18 +00:00
Miguel Ángel b72c3fb25d chore: release v0.8.157 (#5596) 2026-10-14 09:19:15 +00:00
Xuanru Li 45825faa5d fix(inspector): grep timeline windows, continuation, candidates and timeline text from the Canary dogfood (#5595)
* fix(inspector): report nested hosts' authored window, one location per source line

The runtime strips data-duration/data-end from nested composition hosts after
boot and keeps them as data-hf-authored-*. Timeline inspection built its
resolver without authored attrs, so a host with data-duration="4" reported
its GSAP timeline length (3.72s) instead.

Timeline text and events[].sources listed the same file:line once per mapped
snippet (creation, caller, dependency), so a one-line script printed one
location up to nine times.

* refactor(inspector): carry the dedupe reason in the helper's name

* fix(inspector): end continuation on a page that fits no snippet; fill budget with candidates

* fix(inspector): timeline groups by component, names attr values, eases, film end

* fix(studio-server): stamp hf ids into a file without reformatting it

* fix(inspector): find an element's tag before its served hf id reaches the source

* fix(inspector): live element map shows authored classes and text, not the playhead's

* fix(inspector): collapse script-built text so the element map ignores the playhead

Class names stay in source order, a runtime-stripped id is shown as id="…"
rather than a selector, and a grouped row names which children it covers.

* fix(inspector): keep paging, stamping, and the live map still on the reported edges

A snippet larger than the page ended the walk, so later snippets could not
be reached. Raw text ended at a longer tag name, which could stamp an id
inside a script. An empty or mixed source element showed live text, and an
unknown duration read as a film that ends at 0s.

* fix(inspector): mint ids for an empty hf id and keep an unquoted class

An empty data-hf-id was treated as already assigned, so stamping left it
blank while the older stamper minted one. An unquoted class was read as no
class, so the live map dropped it.

* fix(inspector): narrow markup before reading a child tag

skipMarkup returns a boolean, so the build still sees Markup where a tag
is required. Narrow on the kind first so the inspector typechecks.

* fix: quiet check false positives and name the ancestor of an id-less target

Endpoint contact, disjoint fromTo pairs, and a negative z-index under a
stacking-context parent were warnings with bad advice. Layout and contrast
blamed a dot grid, a circular avatar's panel, and a visibility override.
A faint texture veil is no longer the click target.

* fix(lint): drop a history sentence and six gsap comments

The comments check treats "load-bearing" as history, and gsap.ts added six
comment lines. The names already carry what those lines said.

* fix(parsers): ignore an empty id written inside another attribute

The empty-id scan matched the first data-hf-id="" in the tag, including one
inside a quoted title. It now skips quoted text, so the real attribute is minted.

* fix(lint): keep real covers and a negative z-index under a card

A gradient scale-down treated every fill like a radial dot, so a panel
that starts transparent stopped counting as a cover. A stacking context
on any ancestor cleared a negative z-index, and a faint wrapper made
images inside it unpickable.

* fix: keep an emoji from shifting a stamped id

The quote mask replaced one emoji with one space, so the id landed before
the closing quote. A radial cover that turns opaque after a clear stop
stays fully painted.

* fix(lint): score a letter-only dot as a dot, not a color name

namesAColor saw #fff and rgba as words, so those dot grids counted as a
full cover. Hex and rgb colors are stripped before that word check.
2026-10-14 09:16:20 +00:00
James RussoandClaude Opus 5.5 74e17fa9cf chore: release v0.8.156 (#5577)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-14 04:11:14 +00:00
James Russo 5a6c0575f8 chore: release v0.8.155 (#5567) 2026-10-13 23:07:51 +00:00
Xuanru Li 8147f7b940 chore: release v0.8.154 (#5545)
* chore: release v0.8.154

* ci: give the studio test job fifteen minutes

The queue run installs and builds inside the same ten minute cap.
It was still inside the studio tests when that cap cancelled the job.
2026-10-13 19:23:45 +00:00
Miguel Ángel 05786f5558 chore: release v0.8.153 (#5541) 2026-10-13 15:19:09 +00:00
Xuanru Li e8eb358fe2 chore: release v0.8.152 (#5534)
* chore: release v0.8.152

* docs(changelog): correct the v0.8.152 release notes

The summary overstated snapshot retention, history turns, and video state.
It also left out the new artifact paths and nullable keyframe times.
2026-10-13 07:37:26 +00:00
Xuanru Li 8e4de38be1 fix(keyframes): report unresolved GSAP timing instead of guessing rest poses (#5526)
* fix(keyframes): report unresolved GSAP timing instead of guessing rest poses

* fix(keyframes): drop later times when a delay cannot be resolved

Boolean(null) treated an unreadable delay as no delay,
so the next cursor-relative tween kept a guessed start.

* fix(keyframes): keep a staggered rest pose in Studio

The parser stops are what Studio holds, so a staggered from keeps its rest
pose there. The CLI reports that pose as unresolved, and an unread position
no longer seeds the next tween at zero.
2026-10-13 04:52:22 +00:00
Miguel Ángel 945c61ebb6 chore: release v0.8.151 (#5529) 2026-10-13 04:13:03 +00:00
Yash Rastogi b75fa6d996 test: add tests for audio_reactive_single_tween_per_group and gsap_group_selector_keyframes (#5404)
Resolves #5390
2026-10-13 03:39:50 +00:00
Yash Rastogi 33cffbf06b test: add coverage for slideshow_unresolved_ref and subcomposition_root_styled_by_class (#5399)
Resolves #5391
2026-10-13 03:39:34 +00:00
Leonel Rivas 9713e93a52 fix(lint): read a sub-composition's linked stylesheet from the project root (#5084)
A sub-composition that links a shared stylesheet with a plain path like
assets/fonts.css was only looked up next to its own HTML file, so lint
reported font_family_without_font_face for fonts that stylesheet declares.
The ../ spelling is rejected by invalid_parent_traversal_in_asset_path, so
no spelling passed.

Lint still looks next to the sub-composition first and now falls back to
the project root, which is where the preview and the bundler load the link
from. Links that start with / or contain a .. segment keep their old lookup.
A folder with the stylesheet's name is skipped instead of throwing EISDIR.

Fixes #5074
2026-10-13 01:28:07 +00:00
Miguel Ángel 8b27935e8c chore: release v0.8.150 (#5495) 2026-10-12 13:51:49 +00:00
James RussoandClaude Opus 5.5 bf881bf79d chore: release v0.8.149 (#5472)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-11 18:52:16 +00:00
Miguel Ángel 43be84d82c chore: release v0.8.148 (#5470) 2026-10-11 17:34:38 +00:00
Miguel Ángel d4dd6c097d chore: release v0.8.147 (#5456) 2026-10-11 08:55:42 +00:00
Miguel Ángel 8bca7c4417 chore: release v0.8.146 (#5448) 2026-10-11 04:25:16 +00:00
Miguel Ángel a9823f719d fix(lint): a double-quoted media src with an apostrophe is read whole, not reported missing (#5411)
* fix(lint): a double-quoted media src with an apostrophe is read whole, not reported missing

* fix(lint): every media src read goes through the attribute parser, decoded

* refactor(lint): the src pattern only finds the tag; the attribute parser reads the value

* fix(lint): a media src whose name starts with a quote character is checked too

* fix(lint): the missing-audio check skips audio tags that scripts build as strings

* docs(lint): mediaSrcTagRe's comment states the src rule without the history
2026-10-10 19:28:42 +00:00
Miguel Ángel 9825614d91 fix(studio): Studio's own text reads without em or en dashes (#5414)
* fix(studio): text in Studio reads without em or en dashes

* fix(studio): the dash check also catches HTML entities, and peak reads Unavailable

* test(studio): the dash check test covers every entity form

* fix(studio): messages Studio shows from lint, sdk, core and the renderer drop dashes too

* fix(producer): the gate check stops early on the engine's new fallback wording
2026-10-10 19:08:30 +00:00
Miguel Ángel bb9e507e84 perf(packages): ship npm packages without source maps and guard their size in CI (#5403)
* perf(packages): ship npm packages without source maps and guard their size in CI

No package or consumer reads the published source maps, so they are no
longer built. The CLI copies only the studio app it serves instead of the
whole studio dist. verify:packed-manifests now holds every published package
to a size budget that ratchets down, and CI rejects pull requests that add a
large binary outside LFS.

* fix(ci): large-binary check reads every filename and fails on git errors

* ci: run only Build when a skill bundled into the CLI changes

* fix(ci): size guards also catch type changes, odd file names, unreadable blobs and bad budgets

* fix(ci): large-binary check reads blobs by id and skips submodules

* fix(ci): exempt only exact registry copies under docs/public/catalog

* test(ci): cover the staged catalog-copy exemption; drop the local-only override hint in CI

* fix(ci): producer budget follows its slimmed package; size checks name their real cause
2026-10-10 09:04:47 +00:00
Miguel Ángel 76f8a567a5 chore: release v0.8.145 (#5412) 2026-10-10 08:04:19 +00:00
Miguel Ángel f8ee010c65 chore: release v0.8.144 (#5384) 2026-10-10 00:45:48 +00:00
Miguel Ángel 5ec2dd2e12 fix(lint): check passes valid sub-compositions and scene-relative asset paths (#5337)
* fix(lint): check passes valid sub-compositions and scene-relative asset paths

* fix(lint): keep the browser lint build free of node modules

* refactor(lint): tidy sub-composition lint helpers and guard bare node imports

* fix(lint): resolve stylesheet asset paths from the stylesheet's own folder

* fix(lint): catch every written form of a path that climbs out of the project

* fix(parsers): sub-composition asset paths written with backslashes load in preview

* fix(parsers): an encoded backslash stays in the file name and a leading backslash stays absolute

* fix(lint): an encoded %2f counts as a separator when checking for a climb out of the project
2026-10-09 19:54:58 +00:00