Noyalib external positioning
Skill sebastienrousseau/agtmls/skills/noyalib-external-positioning
How noyalib is described publicly: ecosystem map, provable differentiators, claiming rules, migration guides, and the COMPARISON matrix against other Rust YAML crates. Use when writing or reviewing README claims, release notes, launch copy, 'why noyalib vs X', or 'can we claim noyalib is faster than yaml-rust2 or saphyr'. Dated claims must be re-verified before publishing.From its SKILL.md
npx -y skills add sebastienrousseau/agtmls --skill noyalib-external-positioningAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
11.3 KB, as published. Nobody here has run it
noyalib external positioning
Scope. Everything the project says about itself in public — READMEs,
release notes, MIGRATION-FROM-*.md, COMPARISON.md, BENCHMARKS.md, blog
posts, papers, tweets, conference talks. Load before touching any of that
surface. For internal docs (USER-GUIDE, ARCHITECTURE, POLICIES) load
noyalib-docs-and-writing. For unproven / speculative directions load
noyalib-research-frontier.
Snapshot date: 2026-07-08. The ecosystem below drifts. Re-verify before shipping copy that names a peer.
Reference material (the per-peer ecosystem map, the reproducibility standards, the migration-audience playbook, and the pre-publication provenance checklist): see
reference.mdin this directory. This file keeps the ground-truth file list, the provable differentiators, and the claiming rules (project law).
1. Ground truth (read before making a claim)
doc/COMPARISON.md— the ecosystem matrix. Cell states dated 2026-05 in-file; re-check crates.io + each repo before publication.doc/BENCHMARKS.md— headline speedups, methodology, hardware disclosure (Apple M4, aarch64-apple-darwin, Rust 1.95 stable, criterion--warm-up-time 2 --measurement-time 4,--releaseLTO=fat cgu=1 panic=abort). Reproducible viacargo bench --bench comparison.README.md— user-facing top-of-funnel claims; the "One-minute migration" table lists every peer we court.doc/MIGRATION-FROM-*.md— per-crate function tables (serde_yaml, serde_yaml_ng, serde_yml, serde-norway, serde-yaml-bw, serde-saphyr, yaml-serde, yaml-spanned).crates/noyalib/benches/comparison.rs— the benched peers today areserde_yaml_ng,yaml-rust2.serde_yml/libymlwere dropped in v0.0.6 over RUSTSEC-2025-0067 + RUSTSEC-2025-0068 (doc/POLICIES.md§3, CHANGELOG under v0.0.6).crates/noyalib/tests/competitive_features.rs,competitive_features_full.rs,competitor_bugs.rs— parity tests + reproductions of upstream bugs (e.g. yaml-rust2#70 UTF-8 flow).crates/noyalib/src/de/config.rs— the current authoritative list ofParserConfig::max_*builder methods (do not repeat a hand-typed budget count — grep the source).
2. Ecosystem map (2026-07 — verify each row before publication)
Give every peer its honest claim to fame, then noyalib's honest
differential — verifiable facts only, no disparagement. The migration
wave noyalib courts is the serde_yaml (archived 2024) refugees;
serde_yaml_ng (libyaml-backed) is the primary bench peer;
saphyr/serde-saphyr and yaml-spanned are benched peers (saphyr is
also an opt-in noyalib dep — not an adversary); serde_yml was retired
from bench dev-deps in v0.0.6 over RUSTSEC-2025-0067/-0068. Full
per-peer map with each migration guide in reference.md §R1.
Rule: before naming any peer in copy, cargo search <peer> + open
the repo; a release in the last 90 days may invalidate a "unique to
noyalib" line.
3. Provable differentiators (each with WHERE the proof lives)
Everything here is CI-enforced or bench-reproducible. If you cannot point at a file, remove the claim.
-
Zero
unsafe(workspace-wide).#![forbid(unsafe_code)]at every crate root (seecrates/noyalib/src/lib.rs) plusunsafe_code = "forbid"in the[lints.rust]table ofcrates/noyalib/Cargo.toml. Enforcement is at the rustc / Cargo-lint layer, not acargo geigerjob — no such job exists in.github/workflows/. Proof:grep -R "unsafe" crates/returns zero blocks in first-party code. Peers with C-FFI (serde_yaml_ng,serde_yml) fail this viaunsafe-libyamlin the tree — verify viacargo tree. -
Spans +
Spanned<T>. Every deserialized field can carry(line, column, byte_offset)and serialize transparently asT. COMPARISON.md marks this yes/no across the matrix; re-verify againstyaml-spannedandsaphyrbefore writing "unique among serde-YAML crates" — both have span support in some form. The current honest framing is: "spans with aserde-typedSpanned<T>wrapper that is transparent to the serde surface." -
Lossless CST editing (the moat).
noyalib::cst::Document+set(path, value)— span-precise edits that preserve original formatting (comments, blank lines, indent style). No peer in COMPARISON.md ships this. Proof: the CST module, the recent span-fidelity commits (see recent CHANGELOG entries around alias span-through, block-collection value spans, keep-chomped scalars). -
DoS budget suite.
ParserConfigexposes a suite ofmax_*builders. Do not hard-code a count in copy — grep source of truth:grep -c "pub fn max_" crates/noyalib/src/de/config.rs. Current builders includemax_depth,max_document_length,max_alias_expansions,max_mapping_keys,max_sequence_length,max_events,max_nodes,max_total_scalar_bytes,max_documents,max_merge_keys, plusmax_include_depth. README §"Configurable resource budgets" lists the default vsstrict()values. Peer comparisons: COMPARISON.md marksserde_yml/serde_yaml_ngas "Basic",saphyr/rust-yamlas "Yes",yaml-rust2as "No" — state peers' posture only if COMPARISON.md still says so. -
Official-suite conformance. Ground truth lives in the tests:
crates/noyalib/tests/official_suite.rssetsSKIP_LIST = &[](line 164) and assertscompliance >= 94.0(line 312);yaml_compliance_report.rsmirrors the empty skip list. 351 wrapper.yamlfiles undertests/yaml-test-suite/unpack to a larger number of case documents. Prose inREADME.md("387/387, 19 skipped") anddoc/BENCHMARKS.md("406/406, 0 skipped") disagrees with the tests — that is in-tree documentation drift. Cite the tests, not the prose: "no skip list, ≥94 % compliance floor, emptySKIP_LISTasserted". Re-run before releasing any specific pass-count claim. The other libraries either don't track this publicly or apply lenience. -
Supply-chain posture. SLSA L3 provenance, sigstore keyless signing,
cargo-deny/cargo-vet/cargo-semver-checksgates, REUSE.software 3.3 compliance, signed commits, OpenSSF Scorecard ~9/10 (was 6.5 before v0.0.6) — seedoc/POLICIES.md§3. Every artifact carries a cosign keyless signature + SLSA L3 attestation.noyalibcurrently targets the OpenSSF Best Practices Badge for the v0.1 milestone (not yet earned — do not claim it).
4. Claiming rules (project law)
These are non-negotiable. Break one and the release notes have to be retracted.
-
No performance claim without a criterion run in the same PR. Hardware, toolchain, and flags disclosed exactly the way
doc/BENCHMARKS.mdopens: chip, target triple, Rust version, criterion flags,--release+ LTO / codegen-units / panic settings. "Fast" / "high-performance" are fine as flavour text; any number needs a reproducible bench. -
No "faster than X" without a runnable comparison. The comparison bench (
benches/comparison.rs) must include X in the same PR that ships the copy. Third parties must be able to reproduce with a singlecargo bench --bench comparison. Peers dropped from bench dev-deps (currentlyserde_yml,libyml) cannot appear in perf copy without being re-added and the RUSTSEC exposure re-evaluated. -
No uniqueness claim without checking current peer versions. Peers evolve. "Only Rust YAML library that does X" ages fast. Re-verify against the last crates.io release of every peer named in COMPARISON.md before shipping the claim. If in doubt, downgrade to "the only [category] we know of" or "unique among the peers in COMPARISON.md as of 2026-07-08."
-
Unproven = labeled candidate/open. If it isn't measured or CI-enforced, the copy says "candidate", "planned", "roadmap", or "goal" — never a bare present-tense assertion. Load
noyalib-research-frontierfor the speculative bucket. -
Security claims only for what CI enforces. "Zero unsafe" is fine because
#![forbid(unsafe_code)]gates it. "DoS-safe" is fine because the budget suite is on by default and the strict mode is documented. "Memory-safe" without a Miri run in CI is not fine. "Constant-time" claims require adudect/cachegrindmeasurement, which we do not currently ship. -
No disparagement. State only verifiable facts about peers. The RUSTSEC-2025-0067/-0068 note about
libymlis a fact; framing it as a value judgement about the maintainer is not. Ecosystem goodwill is a project asset.
5. Reproducibility standards
Every measured claim must be re-runnable by a third party from a fresh
clone with one command, disclosing hardware, exact toolchain, build
flags (--release LTO=fat cgu=1 panic=abort), and criterion knobs —
the pattern doc/BENCHMARKS.md opens with. Reproducible builds are a
1.0 gate, not shipped — claim the goal, not the fact. Full standard
(the disclosure checklist + the CST round-trip reproducibility rule) in
reference.md §R2.
6. Migration-audience playbook
The migration wave is the primary v0.0.x audience; pitch order is
drop-in shim → per-crate guide → upgrades, and the upgrades land in
the order a serde_yaml refugee cares about (correctness → security →
spans → CST editing → performance), because "will my code break?" is
the first fear and "is it faster?" the last. Full playbook (shim
mechanics, the eight MIGRATION-FROM-*.md guides, ordered rationale)
in reference.md §R3.
7. When NOT to use this skill
- Writing the docs themselves (USER-GUIDE.md, ARCHITECTURE.md,
POLICIES.md, per-module docstrings) → load
noyalib-docs-and-writing. - Research / speculative directions not yet measured or CI-enforced →
load
noyalib-research-frontier. - Architecture invariants of the library itself → load
noyalib-architecture-contract. - Changing CI / release plumbing → load
noyalib-ci-and-release.
8. Provenance / re-verification checklist
The pre-publication re-verify one-liners (COMPARISON.md header date,
BENCHMARKS.md methodology, current benched peers, retired-peer
rationale, live budget-builder count, peer freshness via cargo search) live in reference.md §R4. Run them before merging any copy
that names a peer, benchmarks a peer, or makes a uniqueness claim.
Snapshot date on this skill: 2026-07-08. Anything that names a peer version, a number, or a "unique" claim is volatile — re-verify before publication.