flanchanxwo / pixiv-cli-native
Change or validate pixiv-cli Rust ugoira, cgo/FFI, committed static libraries, vendored dependencies, Linux ABI, and native runner evidence. Use when native sources, library hashes, target toolchains, or encoder behavior change; not for routine Go-only or documentation edits.
Maintain pixiv-cli Native Code
Read AGENTS.md, the affected FFI/encoder owner, and the Rust/staticlib sections of docs/en/maintainers/development.md. Use ci/platforms.json for target/compiler/toolchain metadata; do not maintain a second platform list in a new helper or skill.
Change safely
- Identify whether the change affects Rust source, the C ABI, cgo selection, vendoring, staticlib provenance, or release linking. Record the affected behavior and evidence required before altering binary inputs.
- Use the repository's Red/Green workflow for behavior changes. Keep unsafe FFI ownership, allocation/free pairing, panic containment, cancellation, and error translation explicit. Avoid
unwrap/expecton fallible external input or crossing the FFI boundary with unwinding. - Work in
internal/media/ugoira/rustfor Cargo commands so its.cargo/config.tomlsource replacement applies. Use locked/offline dependency resolution. Never hand-edit vendored crates or hide a network fallback; approved dependency changes must regenerate the complete closure and license evidence. - Preserve the single encoder/FFI seam. A slow normal encode is not a timeout failure. Keep decoder-derived resource constraints and explicit errors; do not add another encoder or ffmpeg runtime fallback.
Verify the touched boundary
From the crate directory, run the appropriate focused test, then:
cargo fmt --check
cargo test --locked --offline
cargo clippy --locked --offline --all-targets -- -D warningsFrom the repository root, relevant checks include:
go test ./internal/media/ugoira/staticlib -run '^TestCommittedManifestWhenPresent$' -count=1
go test ./internal/media/ugoira/... -count=1
go run ./scripts/cmd/licensebundle --check
sh scripts/test-build-staticlibs.sh
sh scripts/test-build-platform.sh
sh scripts/test-rust-vendor.shThese commands can compile native code and consume significant resources; confirm the required existing toolchains and scope first. Report missing targets, compilers, or components instead of installing or pretending to validate them.
scripts/build-platform.sh owns the exact-target Rust/Go/archive build. Linux release binaries must pass go run ./scripts/cmd/linuxabi --binary PATH against the actual ELF, not merely execute on a newer host. Read the existing script and workflow before supplying target/version/compiler arguments.
Provenance and publication
Committed libraries and manifest.json bind every shipped target from the registry to one source digest. A single-target rebuild invalidates cross-platform completeness; do not manufacture a new manifest around partial evidence. Do not commit rust/target/. Preserve .gitattributes byte rules for source/vendor/license inputs.
Use the credential-free native-evidence.yml workflow for actual native runner evidence. Consolidate only a complete same-source, same-version run using the existing nativeevidence tool. Never splice successful artifacts from different source digests or label a fixture test as all-target native evidence. Review any backfilled libraries and manifest together, then rerun integrity and real GIF/APNG linking smoke.
A toolchain upgrade requires rebuilding and verifying every affected shipped target, not just editing a version field. Release, signing, tags, and publisher actions remain separately authorized. Report which native executions actually occurred and which remain unverified.