Repository navigation
fix(deps): replace archived YAML parser with maintained fork - #2704
Merged
Merged
Conversation
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
bashkit | e84c8b7 | Commit Preview URL Branch Preview URL |
Oct 13 2026, 02:18 AM |
8 tasks done
chaliy
added a commit
that referenced
this pull request
Oct 13, 2026
## What changed Join reserves shared live-memory capacity before generating matching-row products. Parsing, key grouping and emission consume shared work and check cancellation/deadlines. Budget failures abort the execution as resource errors; ordinary many-to-many output remains complete through pipelines and redirects. ## Why Join previously built its full result in an ordinary String before dispatcher accounting. Its synchronous matching loops did not poll execution limits. ## Before / After Ordinary inputs `a 1 / a 2` and `a x / a y` have two rows per table. With a 70-unit work budget, unchanged main returned all four rows: the required-error fixture failed, exit 101. With this patch the fixture passes: the public API returns a work-budget resource error and the session accepts a later execution. The same ordinary inputs under normal limits produce exactly: ```text a 1 x a 1 y a 2 x a 2 y ``` Verified in the default CLI with producer exit 0 and an exact-output assertion. Five ordinary option combinations match GNU join. A stdout capture limit of 8 bytes still permits 24 complete output bytes through a pipe and VFS redirect. Small unit tests cover memory admission, generated work, cancellation, deadline mapping, contextual Unicode lowercasing, and the stream's byte/text copy. ## Risk Medium: join now rejects requests that exceed configured live-memory, aggregate input or work budgets. Small budgets may reject valid matching rows. GNU output semantics remain unchanged when budgets admit the work. ## Checklist - [x] Ordinary failing-before/passing-after fixtures - [x] Clippy across all targets/features - [x] Knowledge, threat model and public guides updated - [x] Ordinary GNU differential and default CLI smoke - [x] Full `just pre-pr`, `just test`, all-target/all-feature Clippy - [x] Dependency advisory gate repaired separately in #2704; unchanged deny/vet green - [x] Parallel benchmark and final 96-case Bashkit/Bash benchmark (0 errors, 100% output match) - [ ] Required CI, full PR review, squash merge and exact-merged verification Builds on the separately merged dependency repair in #2704. Existing resource limits and CI definitions are unchanged. Benchmark histories are retained; the parallel results vary on the shared machine and do not isolate join overhead.
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.
What changed
Replace the archived
unsafe-libyamldependency with the maintained NorwaySerde/libyaml fork used by
yq. The root, fuzz and Hyperlight lockfiles allresolve
serde_norway0.9.42 andunsafe-libyaml-norway0.2.15.Why
cargo deny checkfailed on RUSTSEC-2024-0449. Removing the abandoned packagerepairs the audit gate without suppressing the advisory. This is a prerequisite
dependency repair, separate from the join resource-budget fix.
Before / After
Before:
cargo deny checkexited 1,error[unmaintained]: unsafe-libyaml is unmaintained.After: the unchanged command exits 0,
advisories ok, bans ok, licenses ok, sources ok.Locked vetting also passes with the previous exemption criteria transferred to
the exact replacement versions and source-review notes recorded.
No observable YAML behavior change is intended. Full YAML compatibility,
negative and atomic-write tests pass. The parser retains its 128-level recursion
ceiling, and Bashkit's alias rejection, depth/document limits and jq evaluator
remain in place. Diagnostic no-leak checks now identify the new namespace.
Published parser-library source review found one lint allowance as the only
implementation delta from 0.2.11; test executables additionally rename imports
and simplify one loop. The Serde deserializer delta retains the same API and
limits, with namespace, let-else and unreachable-pattern changes.
Risk
Medium: downstream package names and maintenance ownership change. The same
unsafe parser implementation remains; this migration does not claim to make it
memory-safe. Existing dependency-vetting exemptions retain their prior criteria;
this is not a claim of a new full audit.
Checklist
just pre-pr,just test, all-target/all-feature Clippy, deny and locked vet