Repository navigation
Declare executable archive members and environment helpers; self-test with archive modes - #15
Merged
Merged
Conversation
Every self-test failure was prefixed with an executable-bit hint, including ordinary import errors, and the hint pointed only at fields that cannot mark a helper the solved environment installs outside the scripts directory. The original error now comes first, the hint is conditional and says that case has no declaration yet, and Windows, which has no modes to lose, keeps the original error untouched. Archive membership now joins the destination exactly as the declaration does. The open follow-up is recorded in .context/state/current.md.
Deploying scrollcase with
|
| Latest commit: |
9582e80
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://021f8a2f.scrollcase.pages.dev |
| Branch Preview URL: | https://feat-archive-member-executab.scrollcase.pages.dev |
Rust 1.99 clippy adds assert_is_empty, which CI denies through -D warnings. The three assertions predate this branch; assert_eq! against an empty value also prints what was found when one fails.
A package can keep a helper binary in its own directory inside the prefix, outside the scripts directory the runtime rule covers. It always shipped as 0644, and the mode-faithful self-test turned that into a build failure with nothing an author could declare. Top-level executablePaths names such files: literal paths under venv/. The reader refuses a path outside the environment root and any path an asset, local file or archive destination already owns, so each executable keeps one declaration. After pruning, the build requires a link-free regular file, then adds the paths to the declared set driving the entry-point guard, self-test modes and archive. Optional build input inside schema version 3; signed documents, digest and consumers are unchanged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
assetArchives[].executablesdeclares expanded members that need the executable bit, relative to the archive destination afterstripComponents. The build rejects unsafe, duplicate (within and across archives), missing, non-regular, linked or link-traversing paths, and declarations removed byprunePathsorremoveAfterExtract. Linux/macOS ship them as0755; Windows validates identically and keeps extension-based executability.executablePathsdeclares helpers the solved environment installs undervenv/outside the scripts directory (e.g. a compiler binary inside a package's own directory), which until now always shipped as0644. Literal paths only. The reader refuses paths outsidevenv/and paths an asset, local file or archive destination already owns, so every executable has one declaration; the build requires a link-free regular file after pruning.uniqueItemsis now enforced by the internal validator.umask 077; the Node, Python and Rust consumers prove it.assert!(x.is_empty())rewritten asassert_eq!for theassert_is_emptylint in clippy 1.99 (pre-existing code; CI would fail on main too)..context/updated.Additive build input within schema version 3: no wire, payload-digest,
kindor signature change. Consumers need no upgrade.Test plan
npm test: 661 passed, 1 macOS-only skip (Linux/WSL)cd docs && npm run build,npm run action:checkexecutablePaths: conda-forge libtoolconfig.guessrefused undeclared, built declared (0755 in ZIP, sibling 0644), consumed under umask 077 and run (exit 0), byte-identical rebuild.context/history/windows-native-validation.md(remaining failures need the Windows symlink privilege, as on main)🤖 Generated with Claude Code