Skip to content

feat: preserve presentation slide identity - #1

Merged
buildwithrohith merged 3 commits into
mainfrom
feat/sapiex-structure-fidelity
Aug 7, 2026
Merged

feat: preserve presentation slide identity#1
buildwithrohith merged 3 commits into
mainfrom
feat/sapiex-structure-fidelity

Conversation

@buildwithrohith

Copy link
Copy Markdown
Owner

Summary

  • Emit Inline::Anchor("slide-N") for every PPTX, legacy PPT, and ODP slide in source order, including empty slides.
  • Emit Block::Rule only between content-bearing slides. Empty slides retain their anchor and do not add a doubled separator.
  • Add four-slide fixtures covering titled, untitled, and empty slides for all three presentation parsers, plus the PPTX internal-link regression.
  • Retarget the CI and release workflows from Blacksmith labels to GitHub-hosted runners.
  • Replace npm publication with CI packing. The release workflow stages all seven native .node artifacts, runs npm pack --ignore-scripts, verifies native files in the tarball, and uploads the tarball to the GitHub release.

Distribution decision

Chosen option (b), vendor a packed tarball. The available npm credential is the personal vishhvak account and has no Sapiex organization scope, so publishing a production dependency under that account is not acceptable. No npm publish command was run, and the release workflow contains no npm publish command. The Node package now includes anydoc.*.node in its files list so one packed archive is self-contained on every target. The release workflow also packs the existing Wasm package as a release asset instead of publishing it.

The local Darwin smoke archive was:

/tmp/anydoc-pack-final.oJfJrY/firecrawl-anydoc-0.1.7.tgz

Its literal contents included:

package/README.md
package/anydoc.darwin-arm64.node
package/cli.js
package/index.d.ts
package/index.js
package/package.json
{"anchors":["slide-1","slide-2","slide-3","slide-4"],"rules":2}

The seven-target CI matrix remains the source for the release asset used by Sapiex.

Verification

Actual command output:

$ cargo test --locked --quiet
running 208 tests
....................................................................................... 87/208
....................................................................................... 174/208
..................................
test result: ok. 208 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s

running 1 test
.
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.12s

running 11 tests
i..........
test result: ok. 10 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.14s

running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

$ cargo clippy --workspace --all-targets --all-features -- -D warnings
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.09s

$ cargo fmt --all --check

$ ruby -e 'require "yaml"; ARGV.each { |path| YAML.load_file(path); puts "#{path}: parsed" }' .github/workflows/ci.yml .github/workflows/release.yml
.github/workflows/ci.yml: parsed
.github/workflows/release.yml: parsed

Node pack and binding smoke output:

$ npm test
ℹ tests 13
ℹ suites 0
ℹ pass 13
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0

$ npm pack --ignore-scripts --pack-destination /tmp/anydoc-pack-final.oJfJrY
npm notice 6.9MB anydoc.darwin-arm64.node
npm notice total files: 6
npm notice filename: firecrawl-anydoc-0.1.7.tgz

$ installed packed archive and called toDocument on handmade-slide-identity.pptx
{"anchors":["slide-1","slide-2","slide-3","slide-4"],"rules":2}

Upstream split

The model and tests are isolated in commit d7f5a2d and pushed as upstream-slide-identity. The fork-only CI and release changes are in 40528db.

@buildwithrohith
buildwithrohith merged commit 96160f7 into main Aug 7, 2026
4 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