Skip to content

Apply source and layer transforms in composition rendering - #24

Merged
scbrown merged 14 commits into
mainfrom
fix/composition-transforms
Sep 27, 2026
Merged

scbrown merged 14 commits into
mainfrom
fix/composition-transforms

Conversation

@scbrown

@scbrown scbrown commented Sep 26, 2026

Copy link
Copy Markdown
Owner

Composition PNGs and GIF frames ignored source-sprite and layer transforms, so a shifted sprite rendered correctly alone but stayed in its original position when composed. Apply source transforms before caching, then layer transforms before cell placement, including nested compositions. Reuse the direct-render transform parser and preserve strict errors and lenient diagnostics.

Six regressions cover direct/PNG parity, GIF frames, transform order, nested cache isolation, invalid transforms, and transformed dimensions. Both CLI regressions fail against the original base. All six pass after merging current main; formatting passes. The full suite with lsp,wasm previously passed with 2,611 tests and the required Clippy command passed on the combined implementation.

scbrown and others added 14 commits September 25, 2026 22:47
- release-plz.yml: release PR on every push to main; on merge it tags
  v<version>, creates the GitHub release, then calls release.yml (6-target
  binaries + .deb + SHA256SUMS) and crates.yml from the same run, since a
  GITHUB_TOKEN tag cannot trigger the tag/release workflows.
- cliff.toml: conventional-commit changelog, internal ticket ids scrubbed.
- clippy (rust 1.97): sort_by_key, checked_div, collapsed match guard.
- fix: `pxl install` treated every path dependency as stale when the
  project path contained a symlink (macOS /var); compare canonical paths.
- browser-tests: drop the npm cache keyed on a lockfile that does not exist.
- python: macos-13 runners are retired; use macos-15-intel.
- README: crates badge pointed at an unrelated `pxl` crate; dead
  pixelsrc.dev link; Homebrew tap instruction pointed at a repo that does
  not exist; add `cargo install pixelsrc`.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PXBCFZMofE9EGKzo8J2YKJ
…oke wheel builds

.cargo/config.toml forced x86_64-linux-gnu-gcc for the native Linux
target, which does not exist in the manylinux container maturin builds
in (and is just gcc on a plain x86_64 host).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PXBCFZMofE9EGKzo8J2YKJ
- drop .cargo/config.toml: its linker overrides (x86_64-linux-gnu-gcc,
  aarch64-linux-gnu-gcc) do not exist in maturin's manylinux containers,
  and cross sets its own linker anyway; the macOS entries were defaults.
- wheels: pyo3 0.23 rejects the 3.14 interpreter that --find-interpreter
  now finds; build it against the stable ABI.
- browser tests: npx serve was still downloading when the 3s wait ended
  (ERR_EMPTY_RESPONSE); serve the book with python3 -m http.server.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PXBCFZMofE9EGKzo8J2YKJ
The formula lived in homebrew-pixelsrc/ inside this repo, which brew
cannot tap, and the README pointed at scbrown/tap, which never existed.
The tap is now its own repo (seeded with 0.2.0, verified with brew
install + brew test). homebrew.yml checks it out with a write deploy key
and pushes the regenerated formula; release-plz.yml calls it after the
binaries are attached.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PXBCFZMofE9EGKzo8J2YKJ
…rpreters

With [output.linkcheck] configured, mdBook writes the site to book/html/,
so the tests were loading a bare directory listing. The aarch64
manylinux-cross container has no default interpreter, so maturin needs
--find-interpreter like the macOS and Windows jobs.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PXBCFZMofE9EGKzo8J2YKJ
…es green

- wasm-demo.js probed dynamic import with `typeof import`, a SyntaxError
  that aborted the whole script, so window.pixelsrcDemo was never defined
  and every interactive example in the book was dead.
- browser test: open mdBook search before asserting the bar is visible.
- Linux wheels: the pyo3 forward-compat env var does not reach the
  manylinux container; list the supported interpreters explicitly.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PXBCFZMofE9EGKzo8J2YKJ
@scbrown
scbrown merged commit 36f28ac into main Sep 27, 2026
16 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.

1 participant