@@ -638,13 +638,13 @@ Recommended `1.0.x` source-layout sequence:
638638
639639The recommended post-` 1.0 ` SIMD path is incremental. Minor versions should
640640mean something visible to users: ` 1.1.x ` is the non-accelerated SIMD encode
641- evidence series, ` 1.2.0 ` is the first release that may activate encode
642- acceleration if the evidence is complete , ` 1.2.x ` is the non-accelerated SIMD
643- decode evidence series, and ` 1.3.0 ` is the first release that may activate both
644- encode and decode acceleration if the decode evidence is complete. After each
645- active-acceleration minor release, pause feature work for a short soak period
646- so users can report platform-specific regressions before the next acceleration
647- line begins.
641+ evidence and integration series, ` 1.2.0 ` is the release where encode
642+ acceleration must be fully working for the admitted encode scope , ` 1.2.x ` is
643+ the non-accelerated SIMD decode evidence series, and ` 1.3.0 ` is the first
644+ release that may activate both encode and decode acceleration if the decode
645+ evidence is complete. After each active-acceleration minor release, pause
646+ feature work for a short soak period so users can report platform-specific
647+ regressions before the next acceleration line begins.
648648
649649Current ` 1.1.x ` checkpoint state:
650650
@@ -666,47 +666,64 @@ Current `1.1.x` checkpoint state:
666666 before real crates.io publishing, and high-assurance docs now spell out
667667 wrapped in-place retention, strict-error logging, ` DecodedBuffer ` cloning,
668668 public-length ` subtle ` comparison, and AArch64/RISC-V deployment posture.
669- - Next ` 1.1.x ` checkpoints, if needed, should be release-candidate hardening
670- only: fix real pentest or CI findings, refresh evidence scripts, or improve
671- documentation. Do not publish additional crates.io versions for this line
672- unless a user-impacting fix requires it.
673-
674- Remaining before ` 1.2.0 ` active encode dispatch can be considered:
675-
676- - Decide which encode backend, if any, is admitted first. The conservative
677- first admission candidate is std-only x86/x86_64 encode dispatch for
678- Standard and URL-safe alphabets, because runtime CPU feature detection is
679- available through ` std::is_x86_feature_detected! ` . NEON, wasm ` simd128 ` ,
680- AVX-512, custom alphabets, and all decode acceleration may remain
681- real-but-non-dispatchable if their evidence is not complete.
682- - Wire the admitted backend into the full public encode path:
669+
670+ Planned checkpoints to reach ` 1.2.0 ` fully working encode acceleration:
671+
672+ - ` 1.1.5 ` : add the public encode-dispatch integration layer while keeping the
673+ selected backend forced to scalar. This checkpoint should route
683674 ` Engine::encode_slice ` , ` encode_slice_clear_tail ` , alloc encode helpers, and
684- in-place encode where applicable. Scalar must remain the reference for tails,
685- padding, line wrapping, legacy profiles, and custom alphabets unless a
686- specific accelerated path is separately admitted.
687- - Add runtime fallback tests proving unsupported CPUs execute scalar code
688- without illegal instructions and that runtime reports name the active backend
689- only when an admitted backend is actually selected.
690- - Keep ` active_backend() ` returning scalar and keep ` ActiveBackend ` without
691- accelerated variants until the admission manifest is updated in the same
692- commit as the admitted dispatch code.
693- - Run the complete scalar differential, fuzz, Miri, Kani, dudect-style,
694- generated assembly, backend evidence, unsafe-boundary, panic-policy,
695- dependency, package, and release metadata gates on the exact release
696- candidate.
697- - Produce per-backend hardware evidence for any backend considered for active
698- dispatch. A backend may stay real-but-non-dispatchable in ` 1.2.0 ` if its
699- hardware evidence is incomplete.
700- - Produce benchmark evidence with hardware, OS, Rust version, feature flags,
701- command, raw output, scalar baseline, and exact admitted backend names.
702- - Update ` docs/SIMD_ADMISSION.md ` , runtime report expectations, release notes,
703- unsafe inventory, benchmark docs, and the release script in the same change
704- that admits any backend.
705- - Keep ` no_std ` acceleration disabled unless a future unsafe caller-contract
706- API is designed, reviewed, and separately admitted.
707- - Sync all workspace crate versions and publish the next crates.io family
708- release as ` 1.2.0 ` only after the ` 1.1.x ` checkpoint tags, pentest,
709- GitHub CI, Kani, and release evidence remain clean.
675+ in-place encode through one audited encode backend boundary, then prove the
676+ boundary is behavior-preserving against scalar for all existing encode
677+ profiles.
678+ - ` 1.1.6 ` : admit std-only x86/x86_64 SSSE3/SSE4.1 encode dispatch for Standard
679+ and URL-safe alphabets if scalar parity, fallback, generated assembly,
680+ unsafe inventory, and runtime-report evidence are complete. Unsupported CPUs,
681+ custom alphabets, tails, wrapping, legacy profiles, and ` no_std ` builds must
682+ remain scalar.
683+ - ` 1.1.7 ` : admit std-only x86/x86_64 AVX2 encode dispatch with the same public
684+ API coverage and fallback requirements. Runtime priority must be explicit
685+ and tested, for example AVX2 above SSSE3/SSE4.1 when both are available.
686+ - ` 1.1.8 ` : admit AVX-512 VBMI encode dispatch only if hardware evidence,
687+ generated assembly, register cleanup, fallback behavior, and benchmark data
688+ are complete. If AVX-512 evidence is incomplete, keep AVX-512 as a real
689+ non-dispatchable prototype rather than blocking ` 1.2.0 ` .
690+ - ` 1.1.9 ` : admit AArch64 NEON encode dispatch for Standard and URL-safe
691+ alphabets only if hardware evidence from real AArch64 machines, generated
692+ assembly review, register cleanup review, and platform fallback behavior are
693+ complete. Otherwise keep NEON non-dispatchable and ship ` 1.2.0 ` with x86
694+ encode acceleration only.
695+ - ` 1.1.10 ` : decide the wasm ` simd128 ` encode posture. Because wasm runtime/JIT
696+ behavior is outside the crate's control, wasm may remain compile-evidence
697+ only unless a specific runtime and deployment profile is admitted. Do not
698+ let wasm block ` 1.2.0 ` unless the project explicitly decides that wasm encode
699+ acceleration is part of the ` 1.2.0 ` scope.
700+ - ` 1.1.11 ` : full encode release-candidate hardening. Run fuzz/dudect/perf,
701+ generated assembly, backend evidence, Miri, Kani, unsafe-boundary,
702+ panic-policy, no-alloc, target-matrix, macOS, and package checks against the
703+ exact candidate. Update benchmarks and release notes with only the backends
704+ actually admitted.
705+ - ` 1.1.12 ` : version-sync and publish rehearsal. Set all workspace crates to
706+ ` 1.2.0 ` , update ` release-crates.toml ` , verify signed-tag publish gating,
707+ run ` scripts/stable_release_gate.sh release ` , run pentest, wait for GitHub
708+ green, then tag the release candidate.
709+
710+ ` 1.2.0 ` acceptance criteria:
711+
712+ - Encode acceleration is active for every backend explicitly admitted in
713+ ` docs/SIMD_ADMISSION.md ` .
714+ - The public encode APIs are fully wired: ` encode_slice ` ,
715+ ` encode_slice_clear_tail ` , alloc helpers, and applicable in-place encode.
716+ - Scalar fallback remains correct for unsupported CPUs, ` no_std ` , custom
717+ alphabets unless separately admitted, line wrapping, legacy profiles, tails,
718+ and padding.
719+ - Runtime reports identify active accelerated encode backends only when they
720+ are actually selected; otherwise they report scalar active execution.
721+ - Benchmarks, generated assembly, unsafe inventory, release notes, and
722+ admission manifest name the exact active encode backends. No release note may
723+ imply decode acceleration.
724+ - All workspace crates are version-synced and published as the ` 1.2.0 ` family
725+ only after pentest, GitHub CI, Kani, full release gate, and signed-tag checks
726+ pass.
710727
711728After ` 1.2.0 ` :
712729
0 commit comments