diff --git a/.github/workflows/shell-release.yml b/.github/workflows/shell-release.yml index f6d84da..c1f4749 100644 --- a/.github/workflows/shell-release.yml +++ b/.github/workflows/shell-release.yml @@ -8,7 +8,7 @@ jobs: shell: runs-on: ubuntu-24.04 # Debian 12 establishes the release ABI contract, independent of runner libc. - container: rust:1.98.1-bookworm + container: rust:1.99.0-bookworm env: RUSTUP_TOOLCHAIN: "1.99.0" steps: diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index d2b6dbf..c4e7510 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-24.04 strategy: matrix: - rust: ["1.91.0", "1.99.0", "stable"] + rust: ["1.99.0", "stable"] env: RUSTUP_TOOLCHAIN: ${{ matrix.rust }} steps: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7ac9adb..44cd0df 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,8 +8,8 @@ behavior or architecture change. See [SECURITY.md](SECURITY.md) for sensitive re ## Build and check Install Rust through rustup, SDL2 development libraries, and pkg-config on your -**development host**. The repository pins Rust 1.91.1; all workspace packages -support Rust 1.91. On Debian/Ubuntu the native development packages are +**development host**. The repository pins Rust 1.99.0; all workspace packages +require Rust 1.99. On Debian/Ubuntu the native development packages are `libsdl2-dev` and `pkg-config`; `python3-tk`, `python3-venv` and `python3-packaging` support runtime inspection and offline dependency tests. An available Lua interpreter (`lua5.3` on Debian/Ubuntu, `lua` in Homebrew) runs diff --git a/Cargo.lock b/Cargo.lock index ded31e7..b3caff5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -143,15 +143,15 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "lazy_static" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb" [[package]] name = "libc" -version = "0.2.189" +version = "0.2.190" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" +checksum = "ce5d3ddc6d3fa000eb1536d85e147bfe31aacaba692ed6a876f95cb7c855be78" [[package]] name = "memchr" @@ -390,7 +390,7 @@ checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" [[package]] name = "vitrallis-files" -version = "1.0.2" +version = "1.0.3" dependencies = [ "sdl2", "vitrallis-native", @@ -398,7 +398,7 @@ dependencies = [ [[package]] name = "vitrallis-native" -version = "1.0.2" +version = "1.0.3" dependencies = [ "font8x8", "libc", @@ -408,7 +408,7 @@ dependencies = [ [[package]] name = "vitrallis-notepad" -version = "1.0.2" +version = "1.0.3" dependencies = [ "sdl2", "vitrallis-native", @@ -416,8 +416,9 @@ dependencies = [ [[package]] name = "vitrallis-shell" -version = "1.0.2" +version = "1.0.3" dependencies = [ + "libc", "png", "sdl2", "semver", @@ -430,7 +431,7 @@ dependencies = [ [[package]] name = "vitrallis-terminal" -version = "1.0.2" +version = "1.0.3" dependencies = [ "libc", "sdl2", diff --git a/Cargo.toml b/Cargo.toml index e253947..98c0e9b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,12 +20,13 @@ default-members = ["."] resolver = "3" [workspace.package] -version = "1.0.2" +version = "1.0.3" edition = "2024" -rust-version = "1.91" +rust-version = "1.99" [dependencies] vitrallis-native.workspace = true +libc.workspace = true sdl2.workspace = true serde_json.workspace = true png.workspace = true @@ -36,7 +37,7 @@ toml.workspace = true [workspace.dependencies] vitrallis-native = { path = "crates/vitrallis-native" } -libc = "0.2.189" +libc = "0.2.190" vt100 = "0.16.2" sdl2 = { version = "0.38.0", features = ["use-pkgconfig"] } font8x8 = { version = "0.3.1", default-features = false, features = ["unicode"] } diff --git a/README.md b/README.md index e83616d..81aad27 100644 --- a/README.md +++ b/README.md @@ -19,14 +19,12 @@ A compact Rust + SDL2 launcher for small Linux screens. Open a terminal, jot dow ## Installation -**[Vitrallis Shell 1.0.1 certification prerelease](https://github.com/csd113/Vitrallis-Shell/releases/tag/v1.0.1).** Release certification is -in progress; stable release readiness has not been declared. -This release preserves the previous build when reinstalling; see the -[certification record](docs/release-certification-2026-10-02.md#authorized-101-recovery-correction). -Later certification found that Restore/relaunch can leave a background system -query unreaped, and cancelling setup can print a Python traceback. The fixes in -[PR #8](https://github.com/csd113/Vitrallis-Shell/pull/8) pass prepared-build tests -but are not included in published 1.0.1. +**Vitrallis Shell 1.0.3 certification prerelease is being prepared.** Release +certification is in progress; stable release readiness has not been declared. +This candidate restores keyboard focus after background apps exit and updates +the Rust requirement and dependencies. Public 1.0.2 retains the input defect. +See the +[certification record](docs/release-certification-2026-10-02.md#app-exit-keyboard-focus-correction). Install the complete bundle containing the shell, Terminal, Notepad, Files and the shared Arti executable. See [device installation and recovery](docs/devices/pocketchip.md) for supported @@ -84,7 +82,7 @@ Apps run with your user's permissions: **Vitrallis is not an app sandbox**. Cata Start with the [documentation index](docs/README.md), [device guide](docs/devices/pocketchip.md), or [app developer guide](docs/app-development.md). -Host development uses the pinned Rust 1.99.0 toolchain (minimum 1.91), SDL2 development libraries, and pkg-config. CI also validates latest stable; release pins advance after the complete validation gates pass, including ARMv7 cross-builds. See [compiler policy](docs/dependencies.md). +Host development requires the pinned Rust 1.99.0 toolchain, SDL2 development libraries, and pkg-config. CI also validates latest stable; release pins advance after the complete validation gates pass, including ARMv7 cross-builds. See [compiler policy](docs/dependencies.md). ```sh cargo build --workspace --locked diff --git a/THIRD_PARTY_LICENSES.txt b/THIRD_PARTY_LICENSES.txt index 8f7d1ef..919033d 100644 --- a/THIRD_PARTY_LICENSES.txt +++ b/THIRD_PARTY_LICENSES.txt @@ -233,6 +233,11 @@ limitations under the License. ======================================================================== Text ID: 23f18e03dc49df91 Sources: +thiserror-impl 2.0.20/LICENSE-MIT +thiserror 2.0.20/LICENSE-MIT +syn 3.0.4/LICENSE-MIT +async-trait 0.1.92/LICENSE-MIT +lazy_static 1.5.1/LICENSE-MIT adler2 2.0.1/LICENSE-MIT anyhow 1.0.104/LICENSE-MIT async-channel 1.9.0/LICENSE-MIT @@ -337,6 +342,8 @@ DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: a9040321c3712d8f Sources: +keccak 0.2.2/LICENSE-APACHE +aes 0.9.3/LICENSE-APACHE aes 0.9.2/LICENSE-APACHE base16ct 0.2.0/LICENSE-APACHE base64ct 1.8.3/LICENSE-APACHE @@ -601,6 +608,7 @@ limitations under the License. ======================================================================== Text ID: 25f77efa393854f7 Sources: +aes 0.9.3/LICENSE-MIT aes 0.9.2/LICENSE-MIT ======================================================================== Copyright (c) 2018-2024 The RustCrypto Project Developers @@ -999,6 +1007,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: c6596eb7be8581c1 Sources: +crc32fast 1.5.1/LICENSE-APACHE +clap_builder 4.6.6/LICENSE-APACHE +clap 4.6.6/LICENSE-APACHE anstream 1.0.0/LICENSE-APACHE anstyle 1.0.14/LICENSE-APACHE anstyle-parse 1.0.0/LICENSE-APACHE @@ -1243,6 +1254,8 @@ toml_writer 1.1.2+spec-1.1.0/LICENSE-APACHE ======================================================================== Text ID: 6efb0476a1cc0850 Sources: +clap_builder 4.6.6/LICENSE-MIT +clap 4.6.6/LICENSE-MIT anstream 1.0.0/LICENSE-MIT anstyle 1.0.14/LICENSE-MIT anstyle-parse 1.0.0/LICENSE-MIT @@ -1292,6 +1305,11 @@ SOFTWARE. ======================================================================== Text ID: 62c7a1e35f564068 Sources: +thiserror-impl 2.0.20/LICENSE-APACHE +thiserror 2.0.20/LICENSE-APACHE +syn 3.0.4/LICENSE-APACHE +async-trait 0.1.92/LICENSE-APACHE +libc 0.2.190/LICENSE-APACHE anyhow 1.0.104/LICENSE-APACHE async-trait 0.1.91/LICENSE-APACHE dyn-clone 1.0.20/LICENSE-APACHE @@ -1513,6 +1531,21 @@ END OF TERMS AND CONDITIONS ======================================================================== Text ID: a60eea8175145316 Sources: +smallvec 1.16.0/LICENSE-APACHE +serde_with_macros 3.22.0/LICENSE-APACHE +serde_with 3.22.0/LICENSE-APACHE +rustls 0.23.45/LICENSE-APACHE +regex-automata 0.4.18/LICENSE-APACHE +num-integer 0.1.47/LICENSE-APACHE +log 0.4.34/LICENSE-APACHE +liblzma-sys 0.4.8/LICENSE-APACHE +liblzma 0.4.8/LICENSE-APACHE +indexmap 2.14.1/LICENSE-APACHE +find-msvc-tools 0.1.11/LICENSE-APACHE +either 1.18.0/LICENSE-APACHE +cc 1.4.4/LICENSE-APACHE +bstr 1.13.1/LICENSE-APACHE +lazy_static 1.5.1/LICENSE-APACHE arbitrary 1.4.2/LICENSE-APACHE arrayvec 0.7.8/LICENSE-APACHE asn1-rs 0.7.2/LICENSE-APACHE @@ -2840,6 +2873,9 @@ SOFTWARE. ======================================================================== Text ID: 6485b8ed310d3f03 Sources: +regex-automata 0.4.18/LICENSE-MIT +num-integer 0.1.47/LICENSE-MIT +log 0.4.34/LICENSE-MIT bitflags 1.3.2/LICENSE-MIT bitflags 2.13.1/LICENSE-MIT bitflags 2.13.2/LICENSE-MIT @@ -3064,6 +3100,7 @@ SOFTWARE. ======================================================================== Text ID: 68653aaa727a2bfa Sources: +bstr 1.13.1/COPYING bstr 1.13.0/COPYING ======================================================================== This project is licensed under either of @@ -3079,6 +3116,7 @@ at your option. ======================================================================== Text ID: 6b7374c39a57e57f Sources: +bstr 1.13.1/LICENSE-MIT bstr 1.13.0/LICENSE-MIT ======================================================================== The MIT License (MIT) @@ -3306,6 +3344,8 @@ DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: 378f5840b258e277 Sources: +find-msvc-tools 0.1.11/LICENSE-MIT +cc 1.4.4/LICENSE-MIT cc 1.4.0/LICENSE-MIT cfg-if 1.0.4/LICENSE-MIT cfg-if 1.0.5/LICENSE-MIT @@ -4251,6 +4291,7 @@ DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: 61d383b05b87d78f Sources: +crc32fast 1.5.1/LICENSE-MIT crc32fast 1.5.0/LICENSE-MIT crc32fast 1.5.2/LICENSE-MIT ======================================================================== @@ -5720,6 +5761,8 @@ SOFTWARE. ======================================================================== Text ID: 8ca14a71ccb997fc Sources: +derive-deftly-macros 1.12.0/LICENCE at 4ef993f28240288732ff5b4e0a2803b811e7a30d +derive-deftly 1.12.0/LICENCE at 4ef993f28240288732ff5b4e0a2803b811e7a30d derive-deftly 1.11.5/LICENCE ======================================================================== Copyright (C) 2022 onwards, Ian Jackson, Tor Project Inc, and contributors @@ -6818,6 +6861,9 @@ SOFTWARE. ======================================================================== Text ID: 7576269ea71f767b Sources: +serde_with_macros 3.22.0/LICENSE-MIT +serde_with 3.22.0/LICENSE-MIT +either 1.18.0/LICENSE-MIT either 1.17.0/LICENSE-MIT itertools 0.14.0/LICENSE-MIT itertools 0.15.0/LICENSE-MIT @@ -7938,6 +7984,15 @@ SOFTWARE. ======================================================================== Text ID: 275c491d6d116055 Sources: +futures-util 0.3.34/LICENSE-APACHE +futures-task 0.3.34/LICENSE-APACHE +futures-sink 0.3.34/LICENSE-APACHE +futures-macro 0.3.34/LICENSE-APACHE +futures-io 0.3.34/LICENSE-APACHE +futures-executor 0.3.34/LICENSE-APACHE +futures-core 0.3.34/LICENSE-APACHE +futures-channel 0.3.34/LICENSE-APACHE +futures 0.3.34/LICENSE-APACHE futures 0.3.33/LICENSE-APACHE futures-channel 0.3.33/LICENSE-APACHE futures-core 0.3.33/LICENSE-APACHE @@ -8155,6 +8210,15 @@ limitations under the License. ======================================================================== Text ID: 6652c868f35dfe5e Sources: +futures-util 0.3.34/LICENSE-MIT +futures-task 0.3.34/LICENSE-MIT +futures-sink 0.3.34/LICENSE-MIT +futures-macro 0.3.34/LICENSE-MIT +futures-io 0.3.34/LICENSE-MIT +futures-executor 0.3.34/LICENSE-MIT +futures-core 0.3.34/LICENSE-MIT +futures-channel 0.3.34/LICENSE-MIT +futures 0.3.34/LICENSE-MIT futures 0.3.33/LICENSE-MIT futures-channel 0.3.33/LICENSE-MIT futures-core 0.3.33/LICENSE-MIT @@ -10437,6 +10501,20 @@ DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: f367c1b8e1aa2624 Sources: +zerovec-derive 0.11.6/LICENSE +zerovec 0.11.8/LICENSE +zerotrie 0.2.5/LICENSE +writeable 0.6.4/LICENSE +tinystr 0.8.4/LICENSE +potential_utf 0.1.6/LICENSE +litemap 0.8.3/LICENSE +icu_provider 2.3.1/LICENSE +icu_properties_data 2.3.0/LICENSE +icu_properties 2.3.0/LICENSE +icu_normalizer_data 2.3.0/LICENSE +icu_normalizer 2.3.0/LICENSE +icu_locale_core 2.3.0/LICENSE +icu_collections 2.3.0/LICENSE icu_collections 2.2.0/LICENSE icu_locale_core 2.2.0/LICENSE icu_normalizer 2.2.0/LICENSE @@ -10600,6 +10678,7 @@ DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: ecc269ef87fd38a1 Sources: +indexmap 2.14.1/LICENSE-MIT indexmap 1.9.3/LICENSE-MIT indexmap 2.14.0/LICENSE-MIT indexmap 2.14.2/LICENSE-MIT @@ -10634,6 +10713,7 @@ DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: 7f78b31de4e7a3e2 Sources: +inotify 0.11.5/LICENSE inotify 0.11.4/LICENSE ======================================================================== Copyright (c) Hanno Braun and contributors @@ -11331,6 +11411,7 @@ DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: 123a331b5dbf04c3 Sources: +libc 0.2.190/LICENSE-MIT libc 0.2.189/LICENSE-MIT ======================================================================== Copyright (c) The Rust Project Developers @@ -11363,6 +11444,8 @@ DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: a90e2da47bdc152c Sources: +liblzma-sys 0.4.8/LICENSE-MIT +liblzma 0.4.8/LICENSE-MIT liblzma 0.4.7/LICENSE-MIT liblzma-sys 0.4.7/LICENSE-MIT ======================================================================== @@ -11396,6 +11479,7 @@ DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: 616a3ad264ce29b8 Sources: +liblzma-sys 0.4.8/xz/COPYING liblzma-sys 0.4.7/xz/COPYING ======================================================================== @@ -11473,6 +11557,7 @@ XZ Utils Licensing ======================================================================== Text ID: 0b01625d853911cd Sources: +liblzma-sys 0.4.8/xz/COPYING.0BSD liblzma-sys 0.4.7/xz/COPYING.0BSD ======================================================================== Permission to use, copy, modify, and/or distribute this @@ -11491,6 +11576,7 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ======================================================================== Text ID: edaef632cbb643e4 Sources: +liblzma-sys 0.4.8/xz/COPYING.GPLv2 liblzma-sys 0.4.7/xz/COPYING.GPLv2 ======================================================================== GNU GENERAL PUBLIC LICENSE @@ -11836,6 +11922,7 @@ Public License instead of this License. ======================================================================== Text ID: 3972dc9744f6499f Sources: +liblzma-sys 0.4.8/xz/COPYING.GPLv3 liblzma-sys 0.4.7/xz/COPYING.GPLv3 ======================================================================== GNU GENERAL PUBLIC LICENSE @@ -12517,6 +12604,7 @@ Public License instead of this License. But first, please read ======================================================================== Text ID: 20e50fe7aae3e563 Sources: +liblzma-sys 0.4.8/xz/COPYING.LGPLv2.1 liblzma-sys 0.4.7/xz/COPYING.LGPLv2.1 ======================================================================== GNU LESSER GENERAL PUBLIC LICENSE @@ -13025,6 +13113,7 @@ That's all there is to it! ======================================================================== Text ID: 2b3fa1d23cb2ab08 Sources: +liblzma-sys 0.4.8/xz/build-aux/license-check.sh liblzma-sys 0.4.7/xz/build-aux/license-check.sh ======================================================================== #!/bin/sh @@ -17407,6 +17496,7 @@ published under these same licenses. ======================================================================== Text ID: 35242e7a83f69875 Sources: +rand 0.8.8/LICENSE-APACHE rand 0.10.2/LICENSE-APACHE rand 0.8.7/LICENSE-APACHE rand 0.9.5/LICENSE-APACHE @@ -17595,6 +17685,7 @@ END OF TERMS AND CONDITIONS ======================================================================== Text ID: 209fbbe0ad52d923 Sources: +rand 0.8.8/LICENSE-MIT rand 0.10.2/LICENSE-MIT rand 0.8.7/LICENSE-MIT rand 0.9.5/LICENSE-MIT @@ -17880,6 +17971,7 @@ DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: 1c7745cc26c7294b Sources: +rangemap 1.8.0/LICENSE-APACHE rangemap 1.7.1/LICENSE-APACHE ======================================================================== @@ -18078,6 +18170,7 @@ rangemap 1.7.1/LICENSE-APACHE ======================================================================== Text ID: 29a4c3823ee29ee5 Sources: +rangemap 1.8.0/LICENSE-MIT rangemap 1.7.1/LICENSE-MIT ======================================================================== Copyright 2019 Jeffrey Parsons @@ -19322,6 +19415,7 @@ at your option. ======================================================================== Text ID: 7cfafc877eccc46c Sources: +rustls 0.23.45/LICENSE-ISC rustls 0.23.43/LICENSE-ISC ======================================================================== ISC License (ISC) @@ -19344,6 +19438,7 @@ THIS SOFTWARE. ======================================================================== Text ID: 709e3175b4212f7b Sources: +rustls 0.23.45/LICENSE-MIT rustls 0.23.43/LICENSE-MIT ======================================================================== Copyright (c) 2016 Joseph Birr-Pixton @@ -19616,6 +19711,7 @@ DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: 5b698ca13897be3a Sources: +rustls-webpki 0.103.15/LICENSE rustls-webpki 0.103.13/LICENSE ======================================================================== Except as otherwise noted, this project is licensed under the following @@ -21904,6 +22000,7 @@ the following restrictions: ======================================================================== Text ID: 0b28172679e0009b Sources: +smallvec 1.16.0/LICENSE-MIT smallvec 1.15.2/LICENSE-MIT ======================================================================== Copyright (c) 2018 The Servo Project Developers @@ -25036,6 +25133,7 @@ DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: 9d185ac6703c4b04 Sources: +zerocopy 0.8.56/LICENSE-APACHE zerocopy 0.8.55/LICENSE-APACHE ======================================================================== Apache License @@ -25245,6 +25343,7 @@ zerocopy 0.8.55/LICENSE-APACHE ======================================================================== Text ID: 83c1763356e822ad Sources: +zerocopy 0.8.56/LICENSE-BSD zerocopy 0.8.55/LICENSE-BSD ======================================================================== Copyright 2019 The Fuchsia Authors. @@ -25276,6 +25375,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ======================================================================== Text ID: 1a2f5c12ddc934d5 Sources: +zerocopy 0.8.56/LICENSE-MIT zerocopy 0.8.55/LICENSE-MIT ======================================================================== Copyright 2023 The Fuchsia Authors @@ -25309,6 +25409,7 @@ DEALINGS IN THE SOFTWARE. ======================================================================== Text ID: 8c7516d4b27b1e49 Sources: +keccak 0.2.2/LICENSE-MIT zeroize 1.9.0/LICENSE-MIT ======================================================================== Copyright (c) 2018-2026 The RustCrypto Project Developers @@ -27115,3 +27216,145 @@ Sources: Rust 1.99.0 REUSE.toml (blanket library/** copyright line; MIT option) ======================================================================== SPDX-FileCopyrightText = "The Rust Project Developers (see https://thanks.rust-lang.org)" + + +======================================================================== +Text ID: e40081d18f17b678 +Sources: +web-time-compat 0.3.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-units 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-socksproto 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-rtmock 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-rtcompat 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-relay-selection 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-protover 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-proto 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-persist 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-netdoc 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-netdir 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-memquota-cost 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-memquota 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-log-ratelim 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-llcrypto 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-linkspec 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-keymgr 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-key-forge 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-hscrypto 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-hsclient 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-guardmgr 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-general-addr 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-error 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-dirmgr 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-dircommon 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-dirclient 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-consdiff 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-config-shared 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-config-path 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-config 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-circmgr 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-checkable 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-chanmgr 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-cert 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-cell 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-bytes 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-basic-utils 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +tor-async-utils 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +slotmap-careful 0.9.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +saturating-time 0.5.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +safelog 0.10.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +retry-error 0.14.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +oneshot-fused-workaround 0.8.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +futures-copy 0.5.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +fslock-guard 0.9.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +fs-mistrust 0.16.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +caret 0.11.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +arti-client 0.47.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +arti 2.7.0/LICENSE-MIT at ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087 +======================================================================== +Copyright 2019-2025, The Tor Project, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +======================================================================== +Text ID: 01e6df90d71d591f +Sources: +liblzma-sys 0.4.8/xz/AUTHORS +======================================================================== + +Authors of XZ Utils +=================== + + XZ Utils is developed and maintained by + Lasse Collin . + + Major parts of liblzma are based on code written by Igor Pavlov, + specifically the LZMA SDK . Without + this code, XZ Utils wouldn't exist. + + The SHA-256 implementation in liblzma is based on code written by + Wei Dai in Crypto++ Library . + + A few scripts have been adapted from GNU gzip. The original + versions were written by Jean-loup Gailly, Charles Levert, and + Paul Eggert. Andrew Dudman helped adapting the scripts and their + man pages for XZ Utils. + + The initial version of the threaded .xz decompressor was written + by Sebastian Andrzej Siewior. + + The initial version of the .lz (lzip) decoder was written + by Michał Górny. + + Architecture-specific CRC optimizations were contributed by + Ilya Kurdyukov, Chenxi Mao, and Xi Ruoyao. + + Other authors: + - Jonathan Nieder + - Joachim Henke + + Special author: Jia Tan was a co-maintainer in 2022-2024. He and + the team behind him inserted a backdoor (CVE-2024-3094) into + XZ Utils 5.6.0 and 5.6.1 releases. He suddenly disappeared when + this was discovered. + + Many people have contributed improvements or reported bugs. + Most of these people are mentioned in the file THANKS. + + The translations of the command line tools and man pages have been + contributed by many people via the Translation Project: + + - https://translationproject.org/domain/xz.html + - https://translationproject.org/domain/xz-man.html + + The authors of the translated man pages are in the header comments + of the man page files. In the source package, the authors of the + translations are in po/*.po and po4a/*.po files. + + Third-party code whose authors aren't listed here: + + - GNU getopt_long() in the 'lib' directory is included for + platforms that don't have a usable getopt_long(). + + - The build system files from GNU Autoconf, GNU Automake, + GNU Libtool, GNU Gettext, Autoconf Archive, and related files. + + +======================================================================== diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index 075c4c3..5fb00da 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -1,6 +1,6 @@ # Licensing and third-party notices -Audit date: **2026-10-02**. Project-owned code, documentation and original artwork +Audit refreshed: **2026-10-04**. Project-owned code, documentation and original artwork are offered under the root [MIT License](LICENSE), at the owner's direction. This grants no rights to third-party material outside the project-owned artwork described below. Copyright remains with the respective contributors; no assignment is implied. @@ -28,7 +28,7 @@ text or a documented source offer before that binary is cleared. - SDL2 is dynamically supplied by the OS through pkg-config, not built with the bundled SDL feature. The sdl2-sys crate also carries SDL's zlib terms. Preserve those notices if redistributing its sources or a runtime library. -- Arti **2.6.0** is a separate bundled executable, built by +- Arti **2.7.0** is a separate bundled executable, built by `scripts/build-arti.sh` with the pinned published feature set. Its metadata declares MIT OR Apache-2.0; the MIT text at the exact source revision is included, because the registry package omits the top-level license texts. @@ -43,6 +43,11 @@ text or a documented source offer before that binary is cleared. bundles XZ Utils liblzma (0BSD); their notices are preserved. A complete binary notice set still requires resolving any missing text for a crate that is actually linked. + The 1.0.3 refresh verifies all 426 selected ARMv7 normal/build packages and + records 106 new or updated inventory rows. The Tor-family MIT text is verified + at registry source `ce8bc6e0998bd5a4efdf06dd62dce53c98ea1087`; derive-deftly's + MIT text is verified at `4ef993f28240288732ff5b4e0a2803b811e7a30d`. + Historical inventory rows and notices remain for retained older artifacts. The selected ARMv7 normal/build dependency graph includes `priority-queue` 2.7.0; its MPL text and immutable upstream source location are retained in the collected notices. The 2026-10-02 reconciliation also adds missing cookie-factory diff --git a/docs/dependencies.md b/docs/dependencies.md index a6cd292..c91ad4b 100644 --- a/docs/dependencies.md +++ b/docs/dependencies.md @@ -1,17 +1,18 @@ # Rust toolchain and dependency policy -The workspace uses edition 2024, Cargo resolver 3 and `rust-version = "1.91"`. +The workspace uses edition 2024, Cargo resolver 3 and `rust-version = "1.99"`. `rust-toolchain.toml` pins Rust **1.99.0** with rustfmt and Clippy. CI also checks -1.91.0 to verify the declared minimum and latest `stable` to catch future changes. +1.99.0 to verify the declared minimum and latest `stable` to catch future changes. The MSRV is a compatibility floor, not the release compiler. After each stable release, install its exact version with rustup, update the host/CI/container pins together, and pass canonical host, Linux container and ARMv7 validation before advancing the release compiler. Do not change the global rustup default or add background update jobs. Workspace packages inherit `version`, -`edition`, `rust-version` and shared dependencies. The Rust 1.99 upgrade preserves the Vitrallis release version, edition, -MSRV and device ABI; dependency versions remain unchanged. +`edition`, `rust-version` and shared dependencies. The 1.0.3 prerelease raises +the minimum compiler to Rust 1.99 and refreshes dependencies at the owner's +request; edition and device ABI remain unchanged. -## Dependency review: 2026-09-19 +## Dependency review: 2026-10-04 All ten direct registry dependencies use their newest non-yanked stable release. The manifest records those versions as minimum compatible requirements; the @@ -21,7 +22,7 @@ lockfile fixes the exact resolved graph for release and CI builds. | --- | --- | --- | | sdl2 | 0.38.0 | `use-pkgconfig`; no bundled SDL build | | font8x8 | 0.3.1 | Unicode tables only; defaults disabled | -| libc | 0.2.189 | POSIX boundary in the shared native crate and Terminal | +| libc | 0.2.190 | POSIX boundary in the shared native crate and Terminal | | vt100 | 0.16.2 | ANSI/VT terminal state | | serde_json | 1.0.151 | Bounded JSON input | | serde | 1.0.229 | Recursive duplicate-key-rejecting JSON visitor | @@ -76,8 +77,8 @@ to force incompatible transitive upgrades. Compression retains the pure Rust miniz backend. `zlib-rs` 0.6.8 appears in the lockfile through an optional PNG/flate2 feature, but that feature is not enabled by this workspace. There is no new native compression library requirement. -The refreshed lockfile passed `cargo audit` with **1,251** loaded RustSec -advisories and no reported advisories or unmaintained-crate warnings. This does +The refreshed lockfile passed `cargo audit` with no reported advisories or +unmaintained-crate warnings. This does not audit native OS libraries or establish trust in remote applications. Reproduce the review after manifest changes: @@ -106,9 +107,18 @@ dependency pins. This refresh does not upgrade global or device packages. CI's only external action, [actions/checkout 7.0.1](https://github.com/actions/checkout/releases/tag/v7.0.1), was verified as the latest release and remains pinned to its full commit SHA. Repository permissions and disabled credential persistence are unchanged. The -release container remains Debian 12, now with Rust 1.99.0. The Debian glibc +release container is `rust:1.99.0-bookworm`. The Debian glibc 2.36 / SDL2 2.26.5 and ARMv7 hard-float contracts remain unchanged. +The workspace refresh advances libc to 0.2.190 and lazy_static to 1.5.1; +all other direct requirements already match the newest stable releases. Arti +advances from 2.6.0 to **2.7.0**, the latest published stable release, and remains +a separate executable built with its publisher's locked dependency graph and +the existing feature set. Current installation, update, packaging and Tor +consumers require that exact Arti version. The license inventory includes the +new graph and byte-verified upstream notices; older retained rows describe +historical artifacts, not additional dependencies of the new build. + ## Application dependency boundaries The updater and App Center share semver, SHA-256 and PNG validation. Networking diff --git a/docs/dependency-licenses.md b/docs/dependency-licenses.md index 7e03142..4b2fe7a 100644 --- a/docs/dependency-licenses.md +++ b/docs/dependency-licenses.md @@ -1,4 +1,4 @@ -# Dependency license inventory — 2026-10-02 +# Dependency license inventory — refreshed 2026-10-04 Generated from the checked-in workspace lockfile and the pinned upstream Arti crate's lock, plus locally cached registry crate metadata and notice files. Includes optional, build and other-target dependencies; @@ -6,7 +6,11 @@ it is a conservative inventory, not a claim that every crate is linked. License expressions are upstream declarations, not replacement project terms. Text IDs refer to verbatim deduplicated texts in `../THIRD_PARTY_LICENSES.txt`. -Also includes the separately installed Arti 2.6.0 crate and its upstream Cargo.lock. +Includes the separately installed Arti 2.7.0 crate's selected ARMv7 normal/build +graph and its upstream Cargo.lock, with historical 2.6.0 rows retained. The +1.0.3 refresh verifies 106 new or updated graph rows; exact Tor and derive-deftly +MIT texts match their registry VCS revisions. Workspace libc 0.2.190 and +lazy_static 1.5.1 are included with their exact upstream notice files. The Shell workspace lock alone does not cover Arti or its bundled native code. The separate [Rust binary runtime inventory](rust-runtime-licenses.md) covers the matching Rust 1.99.0 standard library and compiler intrinsics. @@ -19,6 +23,7 @@ inside that graph must still be resolved before a binary release is cleared | --- | --- | --- | --- | | adler2 | 2.0.1 | 0BSD OR MIT OR Apache-2.0 | 861399f8c21c042b, 8ada45cd9f843acf, 23f18e03dc49df91 | | aes | 0.9.2 | MIT OR Apache-2.0 | a9040321c3712d8f, 25f77efa393854f7 | +| aes | 0.9.3 | MIT OR Apache-2.0 | 25f77efa393854f7, a9040321c3712d8f | | aho-corasick | 1.1.5 | Unlicense OR MIT | 01c266bced4a434d, 0f96a83840e146e4, 7e12e5df4bae12cb | | amplify | 4.9.0 | MIT | b657a3cfbfc77ab8 | | amplify_derive | 4.0.1 | Apache-2.0 | a7173d3ff287d45c | @@ -34,7 +39,9 @@ inside that graph must still be resolved before a binary release is cleared | arbitrary | 1.4.2 | MIT OR Apache-2.0 | a60eea8175145316, 15656cc11a8331f2 | | arrayvec | 0.7.8 | MIT OR Apache-2.0 | a60eea8175145316, 4da95ec4ecb65b73 | | arti | 2.6.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| arti | 2.7.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | arti-client | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| arti-client | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | ascii | 1.1.0 | Apache-2.0 OR MIT | fabba0cb7d00a4b3, 7e4b8a17b118d3d7 | | asn1-rs | 0.7.2 | MIT OR Apache-2.0 | a60eea8175145316, a5c61b93b6ee1d10 | | asn1-rs-derive | 0.6.0 | MIT OR Apache-2.0 | a60eea8175145316, a5c61b93b6ee1d10 | @@ -54,6 +61,7 @@ inside that graph must still be resolved before a binary release is cleared | async-std | 1.13.2 | Apache-2.0 OR MIT | a60eea8175145316, 23f18e03dc49df91 | | async-task | 4.7.1 | Apache-2.0 OR MIT | a60eea8175145316, 23f18e03dc49df91 | | async-trait | 0.1.91 | MIT OR Apache-2.0 | 62c7a1e35f564068, 23f18e03dc49df91 | +| async-trait | 0.1.92 | MIT OR Apache-2.0 | 23f18e03dc49df91, 62c7a1e35f564068 | | async_executors | 0.7.0 | Unlicense | 88d9b4eb60579c19 | | asynchronous-codec | 0.7.0 | MIT | c0d9430a95a7361e | | atomic | 0.5.3 | Apache-2.0/MIT | a60eea8175145316, c9a75f18b9ab2927 | @@ -78,13 +86,16 @@ inside that graph must still be resolved before a binary release is cleared | blocking | 1.6.2 | Apache-2.0 OR MIT | a60eea8175145316, 23f18e03dc49df91 | | bs58 | 0.5.1 | MIT/Apache-2.0 | a60eea8175145316, 42d3bf7e7d4d49d7 | | bstr | 1.13.0 | MIT OR Apache-2.0 | 68653aaa727a2bfa, a60eea8175145316, 6b7374c39a57e57f | +| bstr | 1.13.1 | MIT OR Apache-2.0 | 68653aaa727a2bfa, 6b7374c39a57e57f, a60eea8175145316 | | bumpalo | 3.20.3 | MIT OR Apache-2.0 | a60eea8175145316, 65f94e99ddaf4f5d | | by_address | 1.2.1 | MIT OR Apache-2.0 | a60eea8175145316, daa94322de7eab88 | | bytemuck | 1.25.2 | Zlib OR Apache-2.0 OR MIT | e3ba223bb1423f0a, 9df9ba60a11af705, 84b34dd7608f7fb9 | | byteorder | 1.5.0 | Unlicense OR MIT | 01c266bced4a434d, 0f96a83840e146e4, 7e12e5df4bae12cb | | bytes | 1.12.1 | MIT | 45f522cacecb1023 | | caret | 0.10.1 | MIT OR Apache-2.0 | e40081d18f17b678 | +| caret | 0.11.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | cc | 1.4.0 | MIT OR Apache-2.0 | a60eea8175145316, 378f5840b258e277 | +| cc | 1.4.4 | MIT OR Apache-2.0 | 378f5840b258e277, a60eea8175145316 | | cfg-if | 1.0.4 | MIT OR Apache-2.0 | a60eea8175145316, 378f5840b258e277 | | cfg-if | 1.0.5 | MIT OR Apache-2.0 | a60eea8175145316, 378f5840b258e277 | | cfg_aliases | 0.2.2 | MIT | 31b94860253d8ec7, 1e2b7ade3fb22813 | @@ -93,7 +104,9 @@ inside that graph must still be resolved before a binary release is cleared | cipher | 0.4.4 | MIT OR Apache-2.0 | a9040321c3712d8f, 5c7bd92d1f096f12 | | cipher | 0.5.2 | MIT OR Apache-2.0 | a9040321c3712d8f, 950d712c518a02fc | | clap | 4.6.5 | MIT OR Apache-2.0 | c6596eb7be8581c1, 6efb0476a1cc0850 | +| clap | 4.6.6 | MIT OR Apache-2.0 | 6efb0476a1cc0850, c6596eb7be8581c1 | | clap_builder | 4.6.5 | MIT OR Apache-2.0 | c6596eb7be8581c1, 6efb0476a1cc0850 | +| clap_builder | 4.6.6 | MIT OR Apache-2.0 | 6efb0476a1cc0850, c6596eb7be8581c1 | | clap_derive | 4.6.4 | MIT OR Apache-2.0 | c6596eb7be8581c1, 6efb0476a1cc0850 | | clap_lex | 1.1.0 | MIT OR Apache-2.0 | c6596eb7be8581c1, 6efb0476a1cc0850 | | cmake | 0.1.58 | MIT OR Apache-2.0 | a60eea8175145316, 378f5840b258e277 | @@ -113,8 +126,9 @@ inside that graph must still be resolved before a binary release is cleared | cpubits | 0.1.1 | MIT OR Apache-2.0 | a9040321c3712d8f, 003736bc98408b53 | | cpufeatures | 0.2.17 | MIT OR Apache-2.0 | a9040321c3712d8f, ae9baa7beea91027 | | cpufeatures | 0.3.0 | MIT OR Apache-2.0 | a9040321c3712d8f, ae9baa7beea91027 | -| cpufeatures | 0.3.1 | MIT OR Apache-2.0 | a9040321c3712d8f, 73b9dc2e79c73089 | +| cpufeatures | 0.3.1 | MIT OR Apache-2.0 | 73b9dc2e79c73089, a9040321c3712d8f | | crc32fast | 1.5.0 | MIT OR Apache-2.0 | c6596eb7be8581c1, 61d383b05b87d78f | +| crc32fast | 1.5.1 | MIT OR Apache-2.0 | 61d383b05b87d78f, c6596eb7be8581c1 | | crc32fast | 1.5.2 | MIT OR Apache-2.0 | c6596eb7be8581c1, 61d383b05b87d78f | | crossbeam-channel | 0.5.16 | MIT OR Apache-2.0 | a60eea8175145316, 5734ed989dfca1f6, b16db96b93b1d7cf | | crossbeam-queue | 0.3.13 | MIT OR Apache-2.0 | a60eea8175145316, 5734ed989dfca1f6 | @@ -143,7 +157,9 @@ inside that graph must still be resolved before a binary release is cleared | der_derive | 0.7.3 | Apache-2.0 OR MIT | a9040321c3712d8f, bada9e7ed8dc00d6 | | deranged | 0.5.8 | MIT OR Apache-2.0 | edd65bdd88957a20, 231c837c45eb53f1 | | derive-deftly | 1.11.5 | MIT | 8ca14a71ccb997fc | +| derive-deftly | 1.12.0 | MIT | 8ca14a71ccb997fc | | derive-deftly-macros | 1.11.5 | MIT | 8ca14a71ccb997fc | +| derive-deftly-macros | 1.12.0 | MIT | 8ca14a71ccb997fc | | derive_arbitrary | 1.4.2 | MIT OR Apache-2.0 | a60eea8175145316, 15656cc11a8331f2 | | derive_builder_core_fork_arti | 0.11.2 | MIT/Apache-2.0 | c6596eb7be8581c1, 8c9612877aacfa1b | | derive_builder_fork_arti | 0.11.2 | MIT/Apache-2.0 | c6596eb7be8581c1, 8c9612877aacfa1b | @@ -167,6 +183,7 @@ inside that graph must still be resolved before a binary release is cleared | ed25519-dalek | 2.2.0 | BSD-3-Clause | 7a313964a6e05079 | | educe | 0.4.23 | MIT | 6182f32e16ddbf33 | | either | 1.17.0 | MIT OR Apache-2.0 | a60eea8175145316, 7576269ea71f767b | +| either | 1.18.0 | MIT OR Apache-2.0 | 7576269ea71f767b, a60eea8175145316 | | elliptic-curve | 0.13.8 | Apache-2.0 OR MIT | a9040321c3712d8f, d27687b51f287482 | | enum-ordinalize | 3.1.15 | MIT | 6182f32e16ddbf33 | | enum_dispatch | 0.3.13 | MIT OR Apache-2.0 | 1e5d3ddaf5cbc111 | @@ -189,9 +206,10 @@ inside that graph must still be resolved before a binary release is cleared | figment | 0.10.19 | MIT OR Apache-2.0 | 62c7a1e35f564068, 361df454e66f5cd7 | | filetime | 0.2.29 | MIT/Apache-2.0 | a60eea8175145316, 378f5840b258e277 | | find-msvc-tools | 0.1.9 | MIT OR Apache-2.0 | a60eea8175145316, 378f5840b258e277 | +| find-msvc-tools | 0.1.11 | MIT OR Apache-2.0 | 378f5840b258e277, a60eea8175145316 | | fixed-capacity-vec | 1.0.1 | MIT OR Apache-2.0 | cfc7749b96f63bd3, 9d1a840ab8c72979 | | flagset | 0.4.7 | Apache-2.0 | cfc7749b96f63bd3 | -| flate2 | 1.1.10 | MIT OR Apache-2.0 | a60eea8175145316, 025436edff4cfcdd | +| flate2 | 1.1.10 | MIT OR Apache-2.0 | 025436edff4cfcdd, a60eea8175145316 | | flate2 | 1.1.9 | MIT OR Apache-2.0 | a60eea8175145316, 025436edff4cfcdd | | fluid-let | 1.0.0 | MIT | 340690752c0edc17 | | fnv | 1.0.7 | Apache-2.0 / MIT | a60eea8175145316, 65fdb6c76cd61612 | @@ -200,23 +218,35 @@ inside that graph must still be resolved before a binary release is cleared | font8x8 | 0.3.1 | MIT | 47d9e9e9a4c54af1 | | form_urlencoded | 1.2.2 | MIT OR Apache-2.0 | a60eea8175145316, 20c7855c364d57ea | | fs-mistrust | 0.15.1 | MIT OR Apache-2.0 | e40081d18f17b678 | +| fs-mistrust | 0.16.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | fs_extra | 1.3.0 | MIT | 251ea8ccb1205ce5 | | fslock-guard | 0.8.2 | MIT OR Apache-2.0 | e40081d18f17b678 | +| fslock-guard | 0.9.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | funty | 2.0.0 | MIT | f790cc576999f599 | | futures | 0.3.33 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | +| futures | 0.3.34 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | | futures-await-test | 0.3.0 | MIT | MISSING | | futures-await-test-macro | 0.3.0 | MIT | MISSING | | futures-channel | 0.3.33 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | +| futures-channel | 0.3.34 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | | futures-copy | 0.4.2 | MIT OR Apache-2.0 | e40081d18f17b678 | +| futures-copy | 0.5.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | futures-core | 0.3.33 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | +| futures-core | 0.3.34 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | | futures-executor | 0.3.33 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | +| futures-executor | 0.3.34 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | | futures-io | 0.3.33 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | +| futures-io | 0.3.34 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | | futures-lite | 2.6.1 | Apache-2.0 OR MIT | a60eea8175145316, 23f18e03dc49df91, 6226d0632e2e1a80 | | futures-macro | 0.3.33 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | +| futures-macro | 0.3.34 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | | futures-rustls | 0.26.0 | MIT/Apache-2.0 | 99864c445c106e20, 8ef00f37f3b49f38 | | futures-sink | 0.3.33 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | +| futures-sink | 0.3.34 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | | futures-task | 0.3.33 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | +| futures-task | 0.3.34 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | | futures-util | 0.3.33 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | +| futures-util | 0.3.34 | MIT OR Apache-2.0 | 275c491d6d116055, 6652c868f35dfe5e | | generic-array | 0.14.7 | MIT | ad4fcfaf8d5b12b9 | | getrandom | 0.2.17 | MIT OR Apache-2.0 | aaff376532ea30a0, 42fa16951ce7f24b | | getrandom | 0.3.4 | MIT OR Apache-2.0 | aaff376532ea30a0, 29e9fe5074bd27e0 | @@ -253,20 +283,29 @@ inside that graph must still be resolved before a binary release is cleared | iana-time-zone | 0.1.65 | MIT OR Apache-2.0 | 696759d65dfe558f, da28ccc6b158fc2d | | iana-time-zone-haiku | 0.1.2 | MIT OR Apache-2.0 | 696759d65dfe558f, da28ccc6b158fc2d | | icu_collections | 2.2.0 | Unicode-3.0 | f367c1b8e1aa2624 | +| icu_collections | 2.3.0 | Unicode-3.0 | f367c1b8e1aa2624 | | icu_locale_core | 2.2.0 | Unicode-3.0 | f367c1b8e1aa2624 | +| icu_locale_core | 2.3.0 | Unicode-3.0 | f367c1b8e1aa2624 | | icu_normalizer | 2.2.0 | Unicode-3.0 | f367c1b8e1aa2624 | +| icu_normalizer | 2.3.0 | Unicode-3.0 | f367c1b8e1aa2624 | | icu_normalizer_data | 2.2.0 | Unicode-3.0 | f367c1b8e1aa2624 | +| icu_normalizer_data | 2.3.0 | Unicode-3.0 | f367c1b8e1aa2624 | | icu_properties | 2.2.0 | Unicode-3.0 | f367c1b8e1aa2624 | +| icu_properties | 2.3.0 | Unicode-3.0 | f367c1b8e1aa2624 | | icu_properties_data | 2.2.0 | Unicode-3.0 | f367c1b8e1aa2624 | +| icu_properties_data | 2.3.0 | Unicode-3.0 | f367c1b8e1aa2624 | | icu_provider | 2.2.0 | Unicode-3.0 | f367c1b8e1aa2624 | +| icu_provider | 2.3.1 | Unicode-3.0 | f367c1b8e1aa2624 | | ident_case | 1.0.1 | MIT/Apache-2.0 | 508a77d2e7b51d98 | | idna | 1.1.0 | MIT OR Apache-2.0 | a60eea8175145316, b38f11f6096706e6 | | idna_adapter | 1.2.2 | Apache-2.0 OR MIT | a60eea8175145316, 8b43ce8accd61e9d | | imara-diff | 0.2.0 | Apache-2.0 | a60eea8175145316 | | indexmap | 1.9.3 | Apache-2.0 OR MIT | a60eea8175145316, ecc269ef87fd38a1 | +| indexmap | 2.14.1 | Apache-2.0 OR MIT | a60eea8175145316, ecc269ef87fd38a1 | | indexmap | 2.14.0 | Apache-2.0 OR MIT | a60eea8175145316, ecc269ef87fd38a1 | | indexmap | 2.14.2 | Apache-2.0 OR MIT | a60eea8175145316, ecc269ef87fd38a1 | | inotify | 0.11.4 | ISC | 7f78b31de4e7a3e2 | +| inotify | 0.11.5 | ISC | 7f78b31de4e7a3e2 | | inotify-sys | 0.1.8 | ISC | f68878c9ca61b25d | | inout | 0.1.4 | MIT OR Apache-2.0 | a9040321c3712d8f, 304b898acad7f02e | | inout | 0.2.2 | MIT OR Apache-2.0 | a9040321c3712d8f, a07fcacc3c60de4d | @@ -285,21 +324,28 @@ inside that graph must still be resolved before a binary release is cleared | js-sys | 0.3.103 | MIT OR Apache-2.0 | a60eea8175145316, 378f5840b258e277 | | k12 | 0.3.0 | Apache-2.0 OR MIT | a9040321c3712d8f, 0b287b0c9672e85c | | keccak | 0.1.6 | Apache-2.0 OR MIT | a9040321c3712d8f, bdebaf9156a298f8 | +| keccak | 0.2.2 | Apache-2.0 OR MIT | 8c7516d4b27b1e49, a9040321c3712d8f | | keccak | 0.2.0 | Apache-2.0 OR MIT | a9040321c3712d8f, bdebaf9156a298f8 | | kqueue | 1.2.0 | MIT | 9dc7535841863372 | | kqueue-sys | 1.1.2 | MIT | 9dc7535841863372 | | kv-log-macro | 1.0.7 | MIT OR Apache-2.0 | b00ec75cd7ef2a62, ce688e08d0454a03 | | lazy_static | 1.5.0 | MIT OR Apache-2.0 | a60eea8175145316, 0621878e61f0d0fd | +| lazy_static | 1.5.1 | MIT OR Apache-2.0 | a60eea8175145316, 23f18e03dc49df91 | | libc | 0.2.189 | MIT OR Apache-2.0 | 62c7a1e35f564068, 123a331b5dbf04c3 | +| libc | 0.2.190 | MIT OR Apache-2.0 | 62c7a1e35f564068, 123a331b5dbf04c3 | | liblzma | 0.4.7 | MIT OR Apache-2.0 | a60eea8175145316, a90e2da47bdc152c | +| liblzma | 0.4.8 | MIT OR Apache-2.0 | a60eea8175145316, a90e2da47bdc152c | | liblzma-sys | 0.4.7 | MIT OR Apache-2.0 | a60eea8175145316, a90e2da47bdc152c, 616a3ad264ce29b8, 0b01625d853911cd, edaef632cbb643e4, 3972dc9744f6499f, 20e50fe7aae3e563, 2b3fa1d23cb2ab08 | +| liblzma-sys | 0.4.8 | MIT OR Apache-2.0 | 01e6df90d71d591f, 0b01625d853911cd, 20e50fe7aae3e563, 2b3fa1d23cb2ab08, 3972dc9744f6499f, 616a3ad264ce29b8, a60eea8175145316, a90e2da47bdc152c, edaef632cbb643e4 | | libm | 0.2.16 | MIT | 3823dda7cf046602 | | libredox | 0.1.19 | MIT | 8d073a6a80d1ef2d | | libsqlite3-sys | 0.37.0 | MIT | c10c1f2733754647, ea4fcb309f14a220 | | linux-raw-sys | 0.12.1 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | 3290ae0fbc9ddb77, a60eea8175145316, 268872b9816f90fd, 23f18e03dc49df91 | | litemap | 0.8.2 | Unicode-3.0 | f367c1b8e1aa2624 | +| litemap | 0.8.3 | Unicode-3.0 | f367c1b8e1aa2624 | | lock_api | 0.4.14 | MIT OR Apache-2.0 | a60eea8175145316, c9a75f18b9ab2927 | | log | 0.4.33 | MIT OR Apache-2.0 | a60eea8175145316, 6485b8ed310d3f03 | +| log | 0.4.34 | MIT OR Apache-2.0 | 6485b8ed310d3f03, a60eea8175145316 | | matchers | 0.2.0 | MIT | a47129d738752a6a | | matchit | 0.8.4 | MIT AND BSD-3-Clause | de701d0618d694fe, 162ce11ad71338d0 | | memchr | 2.8.3 | Unlicense OR MIT | 01c266bced4a434d, 0f96a83840e146e4, 7e12e5df4bae12cb | @@ -309,7 +355,7 @@ inside that graph must still be resolved before a binary release is cleared | mime | 0.3.17 | MIT OR Apache-2.0 | a60eea8175145316, df9cfd06d8a44d9a | | minimal-lexical | 0.2.1 | MIT/Apache-2.0 | 8173d5c29b4f956d, 23f18e03dc49df91, dbe1fff0fb1314b6 | | miniz_oxide | 0.8.9 | MIT OR Zlib OR Apache-2.0 | 4108245a1f2df9d4, 0d542e0c8804e39a, 799e9ca9d179295e, 0a54e647fe541046 | -| miniz_oxide | 0.9.1 | MIT OR Zlib OR Apache-2.0 | 4108245a1f2df9d4, 0d542e0c8804e39a, 799e9ca9d179295e, 0a54e647fe541046 | +| miniz_oxide | 0.9.1 | MIT OR Zlib OR Apache-2.0 | 0a54e647fe541046, 0d542e0c8804e39a, 4108245a1f2df9d4, 799e9ca9d179295e | | mio | 1.2.2 | MIT | 07919255c7e04793 | | native-tls | 0.2.18 | MIT OR Apache-2.0 | c6596eb7be8581c1, f2ad7982ddbfa8c4 | | nix | 0.31.3 | MIT | 66e3ee1fa7f909ad | @@ -323,6 +369,7 @@ inside that graph must still be resolved before a binary release is cleared | num-bigint-dig | 0.8.6 | MIT/Apache-2.0 | a60eea8175145316, 6485b8ed310d3f03 | | num-conv | 0.2.2 | MIT OR Apache-2.0 | 0d542e0c8804e39a, e2e245f2b566d0bf | | num-integer | 0.1.46 | MIT OR Apache-2.0 | a60eea8175145316, 6485b8ed310d3f03 | +| num-integer | 0.1.47 | MIT OR Apache-2.0 | 6485b8ed310d3f03, a60eea8175145316 | | num-iter | 0.1.46 | MIT OR Apache-2.0 | a60eea8175145316, 6485b8ed310d3f03 | | num-traits | 0.2.19 | MIT OR Apache-2.0 | a60eea8175145316, 6485b8ed310d3f03 | | num_enum | 0.7.6 | BSD-3-Clause OR MIT OR Apache-2.0 | 62c7a1e35f564068, 0be96d891d00e0ae, 23f18e03dc49df91 | @@ -334,6 +381,7 @@ inside that graph must still be resolved before a binary release is cleared | once_cell | 1.21.4 | MIT OR Apache-2.0 | a60eea8175145316, 23f18e03dc49df91 | | once_cell_polyfill | 1.70.2 | MIT OR Apache-2.0 | c6596eb7be8581c1, 6efb0476a1cc0850 | | oneshot-fused-workaround | 0.7.1 | MIT OR Apache-2.0 | e40081d18f17b678 | +| oneshot-fused-workaround | 0.8.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | openssl-probe | 0.2.1 | MIT OR Apache-2.0 | a60eea8175145316, 378f5840b258e277 | | option-ext | 0.2.0 | MPL-2.0 | 66a3107d5ad6a058 | | ordered-float | 2.10.1 | MIT | f7715d38a3fa1b4a | @@ -360,12 +408,13 @@ inside that graph must still be resolved before a binary release is cleared | pkcs1 | 0.7.5 | Apache-2.0 OR MIT | a9040321c3712d8f, c995204cc6bad2ed | | pkcs8 | 0.10.2 | Apache-2.0 OR MIT | a9040321c3712d8f, ad64fcb9589f1627 | | pkg-config | 0.3.33 | MIT OR Apache-2.0 | a60eea8175145316, 378f5840b258e277 | -| pkg-config | 0.3.34 | MIT OR Apache-2.0 | a60eea8175145316, 378f5840b258e277 | +| pkg-config | 0.3.34 | MIT OR Apache-2.0 | 378f5840b258e277, a60eea8175145316 | | png | 0.18.1 | MIT OR Apache-2.0 | a60eea8175145316, eaf40297c75da471 | | polling | 3.11.0 | Apache-2.0 OR MIT | a60eea8175145316, 23f18e03dc49df91 | | polyval | 0.7.3 | Apache-2.0 OR MIT | a9040321c3712d8f, b8c6939380a400f5 | | postage | 0.5.0 | MIT | d4a0afb0c4ac483f | | potential_utf | 0.1.5 | Unicode-3.0 | f367c1b8e1aa2624 | +| potential_utf | 0.1.6 | Unicode-3.0 | f367c1b8e1aa2624 | | powerfmt | 0.2.0 | MIT OR Apache-2.0 | 155420c6403d4e0f, 070dbc7dda03a292 | | ppv-lite86 | 0.2.21 | MIT OR Apache-2.0 | 0218327e7a480793, 4cada0bd02ea3692 | | primeorder | 0.13.6 | Apache-2.0 OR MIT | a9040321c3712d8f, 233b95ccbf90dc67 | @@ -380,6 +429,7 @@ inside that graph must still be resolved before a binary release is cleared | r-efi | 6.0.0 | MIT OR Apache-2.0 OR LGPL-2.1-or-later | MISSING | | radium | 0.7.0 | MIT | 13f4cc9fbc8d4a44 | | rand | 0.10.2 | MIT OR Apache-2.0 | 90eb64f0279b0d94, 35242e7a83f69875, 209fbbe0ad52d923 | +| rand | 0.8.8 | MIT OR Apache-2.0 | 209fbbe0ad52d923, 35242e7a83f69875 | | rand | 0.8.7 | MIT OR Apache-2.0 | 90eb64f0279b0d94, 35242e7a83f69875, 209fbbe0ad52d923 | | rand | 0.9.5 | MIT OR Apache-2.0 | 90eb64f0279b0d94, 35242e7a83f69875, 209fbbe0ad52d923 | | rand_chacha | 0.10.0 | MIT OR Apache-2.0 | 90eb64f0279b0d94, 35242e7a83f69875, 209fbbe0ad52d923 | @@ -390,6 +440,7 @@ inside that graph must still be resolved before a binary release is cleared | rand_core | 0.9.5 | MIT OR Apache-2.0 | 90eb64f0279b0d94, 6df43f6f4b5d4587, 209fbbe0ad52d923 | | rand_jitter | 0.6.1 | MIT OR Apache-2.0 | 90eb64f0279b0d94, 35242e7a83f69875, 209fbbe0ad52d923 | | rangemap | 1.7.1 | MIT/Apache-2.0 | 1c7745cc26c7294b, 29a4c3823ee29ee5 | +| rangemap | 1.8.0 | MIT/Apache-2.0 | 1c7745cc26c7294b, 29a4c3823ee29ee5 | | rdrand | 0.9.0 | ISC | 00d7b0c8bf95ea93 | | redox_syscall | 0.5.18 | MIT | efcfee7981ff7243 | | redox_users | 0.5.2 | MIT | e6a8ae2d79608378 | @@ -397,10 +448,12 @@ inside that graph must still be resolved before a binary release is cleared | ref-cast-impl | 1.0.26 | MIT OR Apache-2.0 | 62c7a1e35f564068, 23f18e03dc49df91 | | regex | 1.13.1 | MIT OR Apache-2.0 | a60eea8175145316, 6485b8ed310d3f03 | | regex-automata | 0.4.16 | MIT OR Apache-2.0 | a60eea8175145316, 6485b8ed310d3f03 | +| regex-automata | 0.4.18 | MIT OR Apache-2.0 | 6485b8ed310d3f03, a60eea8175145316 | | regex-syntax | 0.8.11 | MIT OR Apache-2.0 | a60eea8175145316, 6485b8ed310d3f03, 74db5baf44a41b10 | | reqwest | 0.13.4 | MIT OR Apache-2.0 | 751963a8b88c0e3a, dd87e27dfbaa888c | | reseeding_rng | 0.10.7 | Apache-2.0 | c71d239df91726fc | | retry-error | 0.13.1 | MIT OR Apache-2.0 | e40081d18f17b678 | +| retry-error | 0.14.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | rfc6979 | 0.4.0 | Apache-2.0 OR MIT | 78779d420019e6b4, bdebaf9156a298f8 | | ring | 0.17.14 | Apache-2.0 AND ISC | b3d734001a94efff, 005fc765ddc5115d, f025ccfb7dfb6bdf, a60eea8175145316, 6ee2ed6c77710de9, 9eacbcb81be66084 | | rlimit | 0.11.0 | MIT | c7dc98fff98de123 | @@ -412,13 +465,17 @@ inside that graph must still be resolved before a binary release is cleared | rustix | 1.1.4 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | 377c2e7c53250cc5, a60eea8175145316, 268872b9816f90fd, 23f18e03dc49df91 | | rustix-linux-procfs | 0.1.1 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | 23f18e03dc49df91, d415a86ccfd79412 | | rustls | 0.23.43 | Apache-2.0 OR ISC OR MIT | a60eea8175145316, 7cfafc877eccc46c, 709e3175b4212f7b | +| rustls | 0.23.45 | Apache-2.0 OR ISC OR MIT | 709e3175b4212f7b, 7cfafc877eccc46c, a60eea8175145316 | | rustls-pki-types | 1.15.1 | MIT OR Apache-2.0 | 45fd05c4865e7c35, 9117d922e6671255 | | rustls-webpki | 0.103.13 | ISC | 5b698ca13897be3a | +| rustls-webpki | 0.103.15 | ISC | 5b698ca13897be3a | | rustversion | 1.0.23 | MIT OR Apache-2.0 | 62c7a1e35f564068, 23f18e03dc49df91 | | safelog | 0.9.1 | MIT OR Apache-2.0 | e40081d18f17b678 | +| safelog | 0.10.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | same-file | 1.0.6 | Unlicense/MIT | 01c266bced4a434d, cb3c929a05e6cbc9, 7e12e5df4bae12cb | | sanitize-filename | 0.6.0 | MIT | a249b5a876d5dd10 | | saturating-time | 0.4.0 | MIT OR Apache-2.0 | c71d239df91726fc, b5a44cc0b356a4dc | +| saturating-time | 0.5.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | schannel | 0.1.29 | MIT | aa72991ac35b4de0 | | schemars | 0.9.0 | MIT | 1954992a2b32e8a2 | | schemars | 1.2.2 | MIT | 1954992a2b32e8a2 | @@ -441,7 +498,9 @@ inside that graph must still be resolved before a binary release is cleared | serde_spanned | 0.6.9 | MIT OR Apache-2.0 | c6596eb7be8581c1, 6efb0476a1cc0850 | | serde_spanned | 1.1.1 | MIT OR Apache-2.0 | c6596eb7be8581c1, 6efb0476a1cc0850 | | serde_with | 3.21.0 | MIT OR Apache-2.0 | a60eea8175145316, 7576269ea71f767b | +| serde_with | 3.22.0 | MIT OR Apache-2.0 | 7576269ea71f767b, a60eea8175145316 | | serde_with_macros | 3.21.0 | MIT OR Apache-2.0 | a60eea8175145316, 7576269ea71f767b | +| serde_with_macros | 3.22.0 | MIT OR Apache-2.0 | 7576269ea71f767b, a60eea8175145316 | | sha1 | 0.10.7 | MIT OR Apache-2.0 | a9040321c3712d8f, b4eb00df6e2a4d22 | | sha2 | 0.10.9 | MIT OR Apache-2.0 | a9040321c3712d8f, b4eb00df6e2a4d22 | | sha2 | 0.11.0 | MIT OR Apache-2.0 | a9040321c3712d8f, 831e0f43ad0bf014 | @@ -459,7 +518,9 @@ inside that graph must still be resolved before a binary release is cleared | slab | 0.4.12 | MIT | 8ce0830173fdac60 | | slotmap | 1.1.1 | Zlib | 6cec81441b2ab2b5 | | slotmap-careful | 0.8.1 | MIT OR Apache-2.0 | e40081d18f17b678 | +| slotmap-careful | 0.9.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | smallvec | 1.15.2 | MIT OR Apache-2.0 | a60eea8175145316, 0b28172679e0009b | +| smallvec | 1.16.0 | MIT OR Apache-2.0 | 0b28172679e0009b, a60eea8175145316 | | socket2 | 0.6.5 | MIT OR Apache-2.0 | a60eea8175145316, 378f5840b258e277 | | spin | 0.9.9 | MIT | 6ac8711fb340c62c | | spki | 0.7.3 | Apache-2.0 OR MIT | a9040321c3712d8f, c995204cc6bad2ed | @@ -477,6 +538,7 @@ inside that graph must still be resolved before a binary release is cleared | subtle | 2.6.1 | BSD-3-Clause | d1fc1bc0d155df60 | | symlink | 0.1.0 | MIT/Apache-2.0 | edb9885b41e48517, a60eea8175145316, b85cb7b51c3f8d60 | | syn | 1.0.109 | MIT OR Apache-2.0 | a60eea8175145316, 23f18e03dc49df91 | +| syn | 3.0.4 | MIT OR Apache-2.0 | 23f18e03dc49df91, 62c7a1e35f564068 | | syn | 2.0.119 | MIT OR Apache-2.0 | 62c7a1e35f564068, 23f18e03dc49df91 | | syn | 3.0.3 | MIT OR Apache-2.0 | 62c7a1e35f564068, 23f18e03dc49df91 | | syn | 3.0.6 | MIT OR Apache-2.0 | 62c7a1e35f564068, 23f18e03dc49df91 | @@ -488,14 +550,17 @@ inside that graph must still be resolved before a binary release is cleared | terminal_size | 0.4.4 | MIT OR Apache-2.0 | c6596eb7be8581c1, bc8dcbbd559a61b8 | | test-temp-dir | 0.8.1 | MIT OR Apache-2.0 | MISSING | | thiserror | 1.0.69 | MIT OR Apache-2.0 | 62c7a1e35f564068, 23f18e03dc49df91 | +| thiserror | 2.0.20 | MIT OR Apache-2.0 | 23f18e03dc49df91, 62c7a1e35f564068 | | thiserror | 2.0.19 | MIT OR Apache-2.0 | 62c7a1e35f564068, 23f18e03dc49df91 | | thiserror-impl | 1.0.69 | MIT OR Apache-2.0 | 62c7a1e35f564068, 23f18e03dc49df91 | +| thiserror-impl | 2.0.20 | MIT OR Apache-2.0 | 23f18e03dc49df91, 62c7a1e35f564068 | | thiserror-impl | 2.0.19 | MIT OR Apache-2.0 | 62c7a1e35f564068, 23f18e03dc49df91 | | thread_local | 1.1.10 | MIT OR Apache-2.0 | a60eea8175145316, c9a75f18b9ab2927 | | time | 0.3.55 | MIT OR Apache-2.0 | 0d542e0c8804e39a, 2537228d9a1b44a5 | | time-core | 0.1.9 | MIT OR Apache-2.0 | 0d542e0c8804e39a, 2537228d9a1b44a5 | | time-macros | 0.2.32 | MIT OR Apache-2.0 | 0d542e0c8804e39a, 2537228d9a1b44a5 | | tinystr | 0.8.3 | Unicode-3.0 | f367c1b8e1aa2624 | +| tinystr | 0.8.4 | Unicode-3.0 | f367c1b8e1aa2624 | | tinyvec | 1.12.0 | Zlib OR Apache-2.0 OR MIT | cfc7749b96f63bd3, fd80a26fbb3f644a, 84b34dd7608f7fb9 | | tinyvec_macros | 0.1.1 | MIT OR Apache-2.0 OR Zlib | 4f44572785f35152, 1dd8eca0f83669e7, 41ace205715d9f19 | | tls_codec | 0.4.2 | Apache-2.0 OR MIT | a9040321c3712d8f, 904801faf3f18503 | @@ -514,44 +579,81 @@ inside that graph must still be resolved before a binary release is cleared | toml_write | 0.1.2 | MIT OR Apache-2.0 | c6596eb7be8581c1, 6efb0476a1cc0850 | | toml_writer | 1.1.2+spec-1.1.0 | MIT OR Apache-2.0 | c6596eb7be8581c1, 6efb0476a1cc0850 | | tor-async-utils | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-async-utils | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-basic-utils | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-basic-utils | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-bytes | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-bytes | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-cell | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-cell | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-cert | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-cert | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-chanmgr | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-chanmgr | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-checkable | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-checkable | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-circmgr | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-circmgr | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-config | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-config | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-config-path | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-config-path | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-config-shared | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-config-shared | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-consdiff | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-consdiff | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-dirclient | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-dirclient | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-dircommon | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-dircommon | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-dirmgr | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-dirmgr | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-error | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-error | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-general-addr | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-general-addr | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-geoip-db | 0.1.0-pre2 | MIT OR Apache-2.0 | MISSING | | tor-guardmgr | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-guardmgr | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-hsclient | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-hsclient | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-hscrypto | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-hscrypto | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-hsservice | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-key-forge | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-key-forge | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-keymgr | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-keymgr | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-linkspec | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-linkspec | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-llcrypto | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-llcrypto | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-log-ratelim | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-log-ratelim | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-memquota | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-memquota | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-memquota-cost | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-memquota-cost | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-netdir | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-netdir | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-netdoc | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-netdoc | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-persist | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-persist | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-proto | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-proto | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-protover | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-protover | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-relay-selection | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-relay-selection | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-rtcompat | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-rtcompat | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-rtmock | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-rtmock | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-socksproto | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-socksproto | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tor-units | 0.46.0 | MIT OR Apache-2.0 | e40081d18f17b678 | +| tor-units | 0.47.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | tower | 0.5.3 | MIT | 4249c8e6c5ebb85f | | tower-http | 0.6.11 | MIT | 5049cf464977eff4 | | tower-layer | 0.3.3 | MIT | 4249c8e6c5ebb85f | @@ -600,6 +702,7 @@ inside that graph must still be resolved before a binary release is cleared | weak-table | 0.4.0 | MIT | c33c7d26bc415a90 | | web-time | 1.1.0 | MIT OR Apache-2.0 | 54a744942eb3fa63, f428305bbf2e70fb | | web-time-compat | 0.2.1 | MIT OR Apache-2.0 | e40081d18f17b678 | +| web-time-compat | 0.3.0 | MIT OR Apache-2.0 | e40081d18f17b678 | | winapi | 0.3.9 | MIT/Apache-2.0 | b40930bbcf80744c, ce7bc3499fee93d5 | | winapi-i686-pc-windows-gnu | 0.4.0 | MIT/Apache-2.0 | MISSING | | winapi-util | 0.1.11 | Unlicense OR MIT | 01c266bced4a434d, cb3c929a05e6cbc9, 7e12e5df4bae12cb | @@ -641,6 +744,7 @@ inside that graph must still be resolved before a binary release is cleared | winnow | 1.0.4 | MIT | cb5aedb296c5246d | | wit-bindgen | 0.57.1 | Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT | a60eea8175145316, 268872b9816f90fd, 23f18e03dc49df91 | | writeable | 0.6.3 | Unicode-3.0 | f367c1b8e1aa2624 | +| writeable | 0.6.4 | Unicode-3.0 | f367c1b8e1aa2624 | | wyz | 0.5.1 | MIT | 411781fd38700f23 | | x25519-dalek | 2.0.1 | BSD-3-Clause | bebc725b8cb1ba1e | | x509-cert | 0.2.5 | Apache-2.0 OR MIT | a9040321c3712d8f, 90c503b61dee04e1 | @@ -648,13 +752,17 @@ inside that graph must still be resolved before a binary release is cleared | yoke | 0.8.3 | Unicode-3.0 | f367c1b8e1aa2624 | | yoke-derive | 0.8.2 | Unicode-3.0 | f367c1b8e1aa2624 | | zerocopy | 0.8.55 | BSD-2-Clause OR Apache-2.0 OR MIT | 9d185ac6703c4b04, 83c1763356e822ad, 1a2f5c12ddc934d5 | +| zerocopy | 0.8.56 | BSD-2-Clause OR Apache-2.0 OR MIT | 1a2f5c12ddc934d5, 83c1763356e822ad, 9d185ac6703c4b04 | | zerofrom | 0.1.8 | Unicode-3.0 | f367c1b8e1aa2624 | | zerofrom-derive | 0.1.7 | Unicode-3.0 | f367c1b8e1aa2624 | | zeroize | 1.9.0 | Apache-2.0 OR MIT | cfc7749b96f63bd3, 8c7516d4b27b1e49 | | zeroize_derive | 1.5.0 | Apache-2.0 OR MIT | cfc7749b96f63bd3, b8c6939380a400f5 | | zerotrie | 0.2.4 | Unicode-3.0 | f367c1b8e1aa2624 | +| zerotrie | 0.2.5 | Unicode-3.0 | f367c1b8e1aa2624 | | zerovec | 0.11.6 | Unicode-3.0 | f367c1b8e1aa2624 | +| zerovec | 0.11.8 | Unicode-3.0 | f367c1b8e1aa2624 | | zerovec-derive | 0.11.3 | Unicode-3.0 | f367c1b8e1aa2624 | +| zerovec-derive | 0.11.6 | Unicode-3.0 | f367c1b8e1aa2624 | | zlib-rs | 0.6.8 | Zlib | e72111c52b7d96eb | | zmij | 1.0.23 | MIT | 23f18e03dc49df91 | | zstd | 0.13.3 | MIT | 129e8edef29e9abc | diff --git a/docs/release-certification-2026-10-02.md b/docs/release-certification-2026-10-02.md index 4887c28..1424332 100644 --- a/docs/release-certification-2026-10-02.md +++ b/docs/release-certification-2026-10-02.md @@ -1,6 +1,8 @@ # Public-release certification — 2026-10-02 -**NOT RELEASE READY. Certification is in progress, continuing into 2026-10-04 UTC.** This record distinguishes +**NOT RELEASE READY. Authorized 1.0.3 preparation is underway, including the +app-exit focus correction and requested compiler/dependency refresh. Exact +public-candidate installation and physical acceptance remain open.** This record distinguishes published beta testing from development testing and will be updated as the remaining gates are exercised. The owner authorized preparation of Shell 1.0.0, Bitcoin Dashboard 1.3.1, Media Carousel 0.4.3 and PocketCHIP Places 0.11.2. @@ -8,7 +10,7 @@ Bitcoin Dashboard 1.3.1, Media Carousel 0.4.3 and PocketCHIP Places 0.11.2. The Shell baseline is `08a204be025d4be7cad07f6fed443a8603441ac3` on `upgrade/rust-1.99.0`, initially clean. Storage, timeout, native UI, release-preparation, fresh root provisioning and startup focus corrections are -reviewed in separate commits. The current public candidate is 1.0.1 from +reviewed in separate commits. The previous public candidate is 1.0.1 from `b2ff6d48be33b0a70c373d56d1a8c2f354501db2`, ARMv7 bundle `1ee6c8e5e4cd7184a27ce8668f252ab40ac8a339f30ba9e96e55f746910dc0e6`. The earlier published 1.0.0 candidate is built from @@ -49,6 +51,63 @@ and 1.0.0 is published as a certification prerelease. Raw logs, receipts, checksums and screenshots are retained locally under `target/release-certification/2026-10-02/`; they are not published release assets. +## Authorized 1.0.3 and dependency refresh + +The owner approved Shell 1.0.3 and gave standing authorization for prerelease +version changes until the actual full release. This supersedes the named-version +approval constraint for the ongoing certification work. The owner also requested +Rust 1.99 and the newest dependencies. The workspace now declares Rust 1.99 as +its minimum; host and release pins remain exact 1.99.0, and the official Debian +12 Rust 1.99.0 container is available. CI validates 1.99.0 and latest stable. + +The live crates.io review checks all ten direct dependencies and 51 locked +registry entries. libc updates to 0.2.190 and lazy_static to 1.5.1; remaining +direct crates are current. Three older transitive versions remain constrained +by upstream SDL2/PNG requirements, as documented in the dependency review. +Arti updates to latest stable 2.7.0 using its publisher's locked graph and the +existing feature set. Every current version consumer and fixture is updated. +The selected ARMv7 normal/build graph contains 426 packages; 106 new or updated +license rows are reconciled against cached source texts and exact registry VCS +revisions. Workspace RustSec audit reports no vulnerabilities or warnings. + +Private evidence is recorded in `v103-authorization.json`, +`v103-registry-index-audit.json`, `v103-dependency-upgrade-final.log`, +`v103-cargo-update.log`, `v103-cargo-audit.json`, +`v103-dependency-license-proof.json` and +`v103-arti-license-reconciliation.json`. Full `sh scripts/validate.sh` passes +on macOS and Linux: formatting, locked all-target/all-feature checks, unchanged +strict Clippy policy, 380/382 Rust tests, 181 Python cases with nine/eight platform +exclusions, release builds, renderer goldens, SDL smokes and documentation links. +The real Awesome/X11 suite also passes on the new build, including actual-focus +recovery after a background exit and preservation of another app's focus. ARMv7 +build and five-executable packaging pass with Arti 2.7.0. + +The first Linux Python pass failed because Docker's 95 GiB filesystem was full; +free-space preflights stopped seven tests before their intended paths. The failed +log is retained. Clearing only Vitrallis compiler incremental caches restored +3.9 GiB free; the complete unchanged canonical sequence and X11 suite then pass. +No unrelated volume, image or test evidence was removed. Both Arti target graphs +have complete retained notices: 426 ARMv7 and 427 x86-64 packages, zero unresolved +selected rows. Exact tag assets, the renewed clean public installer and final +physical acceptance remain open. + +The first exact-source push check failed the existing live process-identity test +with Linux ESRCH (`No such process`) while scanning procfs. The two PR jobs pass +on the same source; this is a process-exit race, not grounds to discard the +failed check. The scanner now ignores only ENOENT/ESRCH for disappeared entries +and preserves permission and other I/O errors. A targeted regression checks +both outcomes; complete renewed Mac/Linux canonical validation passes with +380/383 Rust tests. The Shell reuses the existing workspace libc crate for the +errno constant; no registry crate is added. + +Prepared 1.0.3 installation and repeat installation pass on PocketCHIP with the +new dependencies, retaining all 93 tracked entries and all eight settings. The +480×272 launcher owns actual X focus, with no PocketHome or owned zombie. All 15 +Tor cases pass on the device, including real Arti 2.7.0 bootstrap and clean stop. +An initial test packet omitted sandbox.py; that fixture error and its corrected +complete rerun are retained. These prepared checks do not replace the exact +tagged/public candidate checks. + ## Authorized 1.0.1 recovery correction The owner approved Shell 1.0.1 after the published 1.0.0 reinstall recovery defect @@ -504,6 +563,122 @@ Evidence: `official-update-activation-v2.log`, `relaunch-review-ci-bc84d36.json` and `published-v101-relaunch-disclosure-proof.json`. +## Exact tagged 1.0.2 certification prerelease + +[PR #8](https://github.com/csd113/Vitrallis-Shell/pull/8) is merged at +`eaa11aa52d2c6858d4c79977c3fa595ec42b7f19`. Its tree equals reviewed/tagged +source `6f0a155b53d84c68423e2240f57127e463cf0980`, which has all six successful +Rust 1.91.0/1.99.0/stable push/review jobs. The +[exact tagged workflow](https://github.com/csd113/Vitrallis-Shell/actions/runs/37230948676) +passes full validation, x86-64/ARMv7 builds, utility probes, packaging and legal +notice checks. All 19 assets match GitHub IDs/sizes/digests; eight checksum +sidecars, six helpers and three legal files match tagged source. Both bundles +have five verified ELF members and no trailing data. ARM bundle SHA-256 is +`1052c7a2c6617c6d4c1ed8131b662f6457b5289dc12eac5cc955d5f3c2d07a24`. + +Actual installation and repeat installation of the exact tagged ARM bytes and +helpers pass on PocketCHIP, retaining prepared `656c0850…` as the distinct +previous generation and all 93 tracked saved entries. All five executable hashes, +versions, owners and 0755 modes pass; installed helpers match with 0644 modes. +All eight original settings match. Native Shell hardware graphics self-test and +Terminal/Notepad/Files hardware smokes pass on Mali400 at 480×272, with VSync +and no fallback. PID 28070 owns actual X11 focus on the fullscreen launcher, +with no PocketHome or owned zombie, before and after the graphics probes. + +The release is published as a certification prerelease at 2026-10-04T20:26:52Z. +All 19 asset IDs/sizes/digests remain unchanged by publication. The normal +uninstaller and guarded removal of owned root integration leave the core root +and all eight owned root paths absent. Stock reboot +`8a0973f7-1162-4296-bec1-3dcaa4a2f448` reaches PocketHome in 176.914 seconds, +with no Vitrallis process or core integration. Anonymous device metadata verifies +all 19 public assets. The exact unmodified README command succeeds from this +fully clean state and on completed repeat execution, including fresh GPU/media +provisioning and its required reboot. All five executable versions/hashes/modes, +five installed helpers, private core directories/receipts and saved config match. +Restoring only retained App Center/Tor state preserves the freshly installed +public core; all 93 original saved entries still match. + +Public-install reboot `6427f918-0efa-4099-aff1-b1b833a57cc5` reaches Ready in +185.640 seconds, PID 1083. Three observations at 0, 15 and 30 seconds confirm +480×272 fullscreen, sustained actual X11 focus, no PocketHome and no owned zombie. +Terminal accepts `pwd`, reports `/home/chip`, reaps its PTY and closes normally. +Notepad saves the new 26-byte `public 1.0.2 smoke.txt` with mode 0600 and +`chip:chip` ownership; the earlier note's hash is unchanged. Files enters `bin` +and returns to `/home/chip` with Escape, then closes through its keyboard footer. +The intervening stock session again leaves OS-saved backlight brightness zero, +clamped to 1/10 at startup. This repeats the separately qualified stock-interval +observation; Shell config bytes and other controls are preserved. + +Final navigation automation accidentally launches Bitcoin while changing pages. +After its verified owned Python process receives normal SIGTERM, Settings remains +visible and Awesome considers Shell selected, but actual X11 input focus is +**zero**. Keyboard activation fails while touch still works. A 60-second readiness +observer fails; this is a real app-exit input blocker in public 1.0.2. The remaining +owner cold-power check is postponed until that correction is released. Stable +readiness is not declared. The first asset observer uses a draft tag REST lookup +which returns 404; verification through the authenticated numeric release ID +succeeds. This is an observer correction, not a product failure. + +Evidence: `v102-pr-merged.json`, `v102-candidate-identity.json`, +`v102-review-ci-ledger-head-v4.json`, `v102-tag-workflow-final.json`, +`v102-artifacts-manifest.json`, `v102-publication-proof.json`, +`v102-device-install-proof.json`, `v102-tagged-installed-ready-state.json`, +`settings-persistence-v102-tagged-installed.json`, +`v102-native-graphics-proof.json`, `v102-after-native-graphics-state.json` and +`v102-draft-tag-lookup-failure.json`. + +## App-exit keyboard focus correction + +Public 1.0.2 reaches the focused launcher after its clean public reboot, but its +final Python app-exit test exposes another input transition defect. A FocusGained +transition can mark Shell ready and clear foreground process ownership before +the completed app is reaped. The subsequent exit skips the existing guarded focus +repair, leaving Awesome's selected Shell client different from actual X input +focus. Touch remains usable; keyboard activation does not. + +The correction keeps window raising conditional on the existing active-app policy, +but runs the existing guarded X focus repair on every app exit. The guard preserves +another selected app. No dependency, version, installation helper or data-format +change is made. The real Awesome/X11 regression reproduces cached Shell selection +with actual X focus zero after Home/background return: the old build times out; +the corrected build restores keyboard focus and preserves another app's focus. +Existing native launch, Home, resume, close and crash-recovery cases also pass. + +Full `sh scripts/validate.sh` passes again on macOS/Linux: formatting, checks, +strict Clippy, 380/382 Rust tests, 181 Python cases (nine/eight exclusions), +release builds, renderer/SDL smokes and documentation checks. ARMv7 build and +five-member packaging pass. Initial disposable fixture runs lack Pillow; installing +its test runtime allows the unchanged regression to run. One packaging probe uses +an incompatible QEMU loader and segfaults on the unchanged published Arti executable; +using the matching system loader and Cortex-A7 model passes all five probes. +These failed harness attempts remain retained. + +Prepared bundle `f9db32028969f4a18e770a7270f23231d676e564fbfb43767321d88cdd1354cb` +is installed through the normal installer, retaining immutable public 1.0.2 as +previous. This bundle still reports workspace version 1.0.2 and is explicitly +**unpublished correction evidence**, not the published asset. Its five binary +hashes/versions/owners/modes pass. On device, a real Calculator Tk window is +launched, returned Home and backgrounded while Settings is open. X focus is then +set to None while Awesome still selects Shell; a normal WM close of that owned +Calculator window restores actual Shell keyboard focus automatically in 1.132 +seconds. Calculator is reaped, keyboard Enter opens Display & Sound, and Escape +returns to the launcher. All eight settings and 93 saved entries match; no +PocketHome or owned zombie remains. Final public corrected candidate and owner +cold-power acceptance remain required. No fresh release version is authorized yet. + +Evidence: `exit-focus-validation-summary.json`, +`exit-focus-regression-baseline-v3.log`, +`exit-focus-final-x11-artifacts/stock-session.json`, +`exit-focus-prepared-manifest.json`, `exit-focus-device-install-proof.json`, +`exit-focus-device-regression-proof.json`, `exit-focus-post-regression-state.json`, +`settings-persistence-exit-focus-post-regression.json`, +`retained-state-exit-focus-post-regression.json`, +`v102-public-clean-proof.json`, `v102-stock-reboot.json`, +`v102-public-readme-proof.json`, `v102-public-first-verification.json`, +`v102-public-repeat-verification.json`, `v102-public-installed-reboot.json`, +`v102-public-notes-proof.json`, `v102-accidental-app-focus-state.json` and +`v102-stock-interval-brightness.log`. + ## Actual low-NAND Shell update and fixture cleanup An owned, private incompressible filler on the real `ubi0:rootfs` UBIFS reaches @@ -519,9 +694,12 @@ owner and mode throughout 4053 samples: initial free space is 117,432,320 bytes, minimum is 85,315,584 bytes, and final is 115,740,672 bytes. A new private download is observed; all five public executable hashes, sizes, versions and 0755 modes pass. Beta becomes previous, staging is removed, prepared helpers and receipt -stay unchanged, and the real note is unchanged. The already verified target -generation is reused; this does not certify extraction of a new generation -under pressure or physical power-loss durability. Activation/extraction code +stay unchanged, and the real note is unchanged. The already verified final target +generation is reused after mandatory complete new staging extraction, sync and +five version probes. The ready function is byte-identical to current tagged +source, as recorded in `low-nand-staging-source-proof.json`. The absent-final- +destination rename branch under pressure and physical power-loss durability +are not inferred. Activation/extraction code matches current source as recorded above; the beta selection/bridge differences remain qualified. @@ -587,8 +765,10 @@ Shell owns the device. The remaining Shell critical path is the exact tagged/public 1.0.2 candidate and final physical smoke. Actual UBIFS activation interruption, normal public -retry and the low-NAND update pass with the qualifications above. The prepared relaunch correction passes a production-source held-query -trial; exact tagged/public-candidate verification remains required. +retry and the low-NAND update pass with the qualifications above. The relaunch +correction passes a production-source held-query trial, and exact tagged 1.0.2 +installation, repeat and hardware smokes pass. Clean public-candidate +installation and final owner acceptance remain required. Controlled brightness persistence passes with the qualification above. The clean public 1.0.1 README install, repeat execution, reboot and published artifact verification pass as recorded above. Earlier final-production diff --git a/docs/releases.md b/docs/releases.md index 6e8a199..498dfc9 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1,14 +1,54 @@ # Release validation and assets -## 1.0.2 — authorized candidate in preparation - -The owner authorized Shell 1.0.2 on 2026-10-04. This candidate joins owned -background system queries and Tor work before relaunching, keeps the waiting -view responsive, and hides inactive actions until preparation finishes. Setup -cancellation exits with a short recovery message instead of a Python traceback. -The regression tests and prepared production device checks pass. Exact 1.0.2 -validation, public installation and final physical acceptance are pending; -release readiness is not declared. +## 1.0.3 — authorized certification prerelease + +The owner approved 1.0.3 and subsequent prerelease version changes until the +actual full release. This candidate repairs actual X keyboard focus after a +background app exits, including exits observed after foreground ownership has +already cleared. Another focused app keeps its focus. + +At the owner's request, development, the declared minimum and release builds +use Rust 1.99.0. Current dependency requirements and the workspace lockfile are +refreshed; libc advances to 0.2.190, lazy_static to 1.5.1, and the separately +bundled Arti advances to 2.7.0 with matching consumers and verified notices. +Current direct crates are at their latest stable releases. Three older +transitive versions remain required by upstream SDL2/PNG; see the +[dependency review](dependencies.md#upstream-transitive-constraints). + +Full canonical validation passes on macOS and Linux, including strict Clippy, +380/383 Rust tests, 181 Python cases with platform exclusions, renderer goldens, +SDL smokes and documentation checks. The real Awesome/X11 focus regression +passes with the refreshed dependencies. ARMv7 build and five-executable packaging +pass. Exact tagged assets, clean public installation and final owner cold-power +acceptance of this complete candidate remain to be recorded. +The process scanner also handles Linux ESRCH when a process disappears during +inspection; permission and other I/O errors still fail closed. Its regression +and renewed canonical validation pass. Prepared device install/reinstall retains +all 93 saved entries and eight settings, and all 15 Tor cases pass with real +Arti 2.7.0 bootstrap and cleanup. Public 1.0.2 and earlier release bytes remain immutable. + +## 1.0.2 — certification prerelease + +The owner authorized Shell 1.0.2 on 2026-10-04. The +[certification prerelease](https://github.com/csd113/Vitrallis-Shell/releases/tag/v1.0.2) +is published from tagged source `6f0a155b53d84c68423e2240f57127e463cf0980`. +It joins owned background system queries and Tor work before relaunching, keeps +the waiting view responsive, and hides inactive actions until preparation +finishes. Setup cancellation exits with a short recovery message instead of a +Python traceback. + +Mac/Linux canonical validation and all six exact-source review checks pass. +The exact tagged workflow builds both platforms, and all 19 assets verify against +GitHub sizes/digests and tagged helper/legal bytes. Prepared installation and +repeat installation of the exact ARM bundle pass on PocketCHIP, preserving all +93 saved entries and eight settings. Mali400 graphics self-test and three utility +hardware smokes pass with VSync and no fallback; the 480×272 launcher owns actual +keyboard focus, with no PocketHome or owned zombie. Fully clean public README +installation, completed repeat execution, saved-config checks and software reboot +pass. A later Python app-exit check leaves actual X keyboard focus unset while +Settings is visible. The prepared correction passes canonical validation and a +real-device regression, but is unpublished. Final physical acceptance is postponed +until the correction is released; stable readiness is not declared. ## 1.0.1 — certification prerelease @@ -337,10 +377,10 @@ older standalone layouts remain outside the managed updater contract. See the The tag workflow builds on Debian 12 with Rust 1.99.0 and runs `sh scripts/validate.sh`: formatting, locked workspace check, strict Clippy, complete Rust/Python tests, native release build, SDL smoke checks and -repository/documentation validation. Separate host CI also validates Rust 1.91.0 and latest stable. +repository/documentation validation. Separate host CI also validates the declared Rust 1.99.0 minimum and latest stable. Packaging checks each executable's target and version: the four Vitrallis binaries -match the workspace version; Arti independently reports 2.6.0. ARMv7 +match the workspace version; Arti independently reports 2.7.0. ARMv7 cross-builds are checked under QEMU with the Cortex-A8 CPU model, including version probes, a 480×272 shell frame and native-app smokes. Both architecture bundles require glibc 2.36+ and SDL2 2.26.5+. diff --git a/docs/tor.md b/docs/tor.md index 77f9602..f45a017 100644 --- a/docs/tor.md +++ b/docs/tor.md @@ -1,6 +1,6 @@ # Shared Tor service -Vitrallis owns Tor policy, Settings and launch readiness. **Arti 2.6.0 is a +Vitrallis owns Tor policy, Settings and launch readiness. **Arti 2.7.0 is a separate executable**, never a dependency linked into Shell. One supervised Arti serves all applications through **127.0.0.1:9150**. Nothing listens on a LAN address. Existing applications without networking metadata keep their behavior. diff --git a/integrations/pocketchip/install-session.py b/integrations/pocketchip/install-session.py index 00a5388..a981fe9 100644 --- a/integrations/pocketchip/install-session.py +++ b/integrations/pocketchip/install-session.py @@ -146,7 +146,7 @@ def verify_versions(generation, expected=None): output.seek(0) text = output.read(4097).decode('ascii').strip() if name == 'arti': - if text.splitlines()[:1] != ['Arti 2.6.0']: + if text.splitlines()[:1] != ['Arti 2.7.0']: raise ValueError('Bundled executable version mismatch: arti') continue match = re.fullmatch(re.escape(name) + r' ([0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)', text) diff --git a/scripts/build-arti.sh b/scripts/build-arti.sh index a4fb07a..863753c 100755 --- a/scripts/build-arti.sh +++ b/scripts/build-arti.sh @@ -9,7 +9,7 @@ arti_output=${2:-target/release} arti_build_root=$(pwd)/target/arti-build/$arti_target # Rebuild even when this version is already installed: a compiler pin change # must not reuse an executable produced by an older toolchain. -cargo install --locked --force --version 2.6.0 --no-default-features \ +cargo install --locked --force --version 2.7.0 --no-default-features \ --features tokio,rustls-ring,compression,onion-service-client,harden,static-sqlite \ --target "$arti_target" --root "$arti_build_root" arti mkdir -p "$arti_output" diff --git a/scripts/package-shell-release.py b/scripts/package-shell-release.py index 401a611..87b6c02 100644 --- a/scripts/package-shell-release.py +++ b/scripts/package-shell-release.py @@ -53,7 +53,7 @@ def inventory(directory, target, version, runner): digest = hashlib.file_digest(stream, 'sha256').digest() command = ([str(runner)] if runner is not None else []) + [str(binary.resolve()), '--version'] output = subprocess.check_output(command, timeout=5, text=True).strip() - valid = output.splitlines()[:1] == ['Arti 2.6.0'] if name == 'arti' else output == name + ' ' + version + valid = output.splitlines()[:1] == ['Arti 2.7.0'] if name == 'arti' else output == name + ' ' + version if not valid: raise ValueError('Executable version does not match Cargo metadata: ' + name) entries.append((binary, binary.stat().st_size, digest)) diff --git a/src/app_center/running.rs b/src/app_center/running.rs index d48200d..9e00e76 100644 --- a/src/app_center/running.rs +++ b/src/app_center/running.rs @@ -106,15 +106,27 @@ fn linux(entry: &Path) -> Result, String> { start: start.into(), })) })(); - match result { - Ok(Some(p)) => found.push(p), - Ok(None) => (), - Err(e) if e.kind() == std::io::ErrorKind::NotFound => (), - Err(e) => return Err(e.to_string()), + if let Some(identity) = process_identity_result(result)? { + found.push(identity); } } Ok(found) } +#[cfg(target_os = "linux")] +fn process_identity_result( + result: std::io::Result>, +) -> Result, String> { + match result { + // procfs can report ESRCH instead of ENOENT while a process exits. + Err(error) + if error.kind() == std::io::ErrorKind::NotFound + || error.raw_os_error() == Some(libc::ESRCH) => + { + Ok(None) + } + result => result.map_err(|error| error.to_string()), + } +} #[cfg(not(target_os = "linux"))] fn portable(entry: &Path) -> Result, String> { let uid = crate::platform::command::run("/usr/bin/id", &["-u"])?; @@ -188,6 +200,30 @@ fn script_argument<'a>(args: &[&'a str]) -> Option<&'a str> { #[cfg(test)] mod tests { use super::*; + #[cfg(target_os = "linux")] + #[test] + fn disappeared_processes_do_not_hide_other_scan_errors() -> Result<(), String> { + let identity = Identity { + pid: 42, + start: "verified".into(), + }; + assert_eq!( + process_identity_result(Ok(Some(identity.clone())))?, + Some(identity) + ); + for code in [libc::ENOENT, libc::ESRCH] { + assert_eq!( + process_identity_result(Err(std::io::Error::from_raw_os_error(code)))?, + None + ); + } + for code in [libc::EACCES, libc::EPERM, libc::EIO] { + let error = std::io::Error::from_raw_os_error(code); + let message = error.to_string(); + assert_eq!(process_identity_result(Err(error)), Err(message)); + } + Ok(()) + } #[test] fn identity_and_timeout_are_conservative() { struct Stuck; diff --git a/src/platform/update/tests.rs b/src/platform/update/tests.rs index 50c556d..a769c1d 100644 --- a/src/platform/update/tests.rs +++ b/src/platform/update/tests.rs @@ -281,13 +281,13 @@ fn arti_version_is_independent_and_other_companions_remain_exact() -> Result<(), assert!(version_matches( "arti", &version, - "Arti 2.6.0\nRuntime: tokio\n" + "Arti 2.7.0\nRuntime: tokio\n" )); for wrong in [ "arti 0.1.0-beta4", "Arti 2.5.0", - "Arti 2.6.0-extra", - "\nArti 2.6.0", + "Arti 2.7.0-extra", + "\nArti 2.7.0", ] { assert!(!version_matches("arti", &version, wrong)); } diff --git a/src/platform/update/unix.rs b/src/platform/update/unix.rs index f93bc50..15d9f10 100644 --- a/src/platform/update/unix.rs +++ b/src/platform/update/unix.rs @@ -313,7 +313,7 @@ impl Installation { } fn version_matches(name: &str, version: &semver::Version, output: &str) -> bool { if name == "arti" { - output.lines().next() == Some("Arti 2.6.0") + output.lines().next() == Some("Arti 2.7.0") } else { output.trim() == format!("{name} {version}") } diff --git a/src/tor/supervisor.py b/src/tor/supervisor.py index cfa1ba0..32bd4d8 100644 --- a/src/tor/supervisor.py +++ b/src/tor/supervisor.py @@ -57,9 +57,9 @@ def binary(): if not os.path.isfile(candidate): continue result = subprocess.run([candidate, '--version'], capture_output=True, timeout=5, check=True) - if result.stdout.splitlines()[:1] == [b'Arti 2.6.0']: + if result.stdout.splitlines()[:1] == [b'Arti 2.7.0']: return candidate - raise ValueError('Arti missing; complete beta4 in Settings > Device > Updates') + raise ValueError('Arti missing; reinstall Vitrallis or check Software Updates') def death_signal(parent): diff --git a/src/ui.rs b/src/ui.rs index 8767392..32d618d 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -467,8 +467,12 @@ fn present_frame( } fn raise_after_exit(canvas: &mut Screen, platform: &impl Platform, raise: bool) { - if raise && platform.raise_after_exit() { - canvas.window_mut().raise(); + if platform.raise_after_exit() { + if raise { + canvas.window_mut().raise(); + } + // FocusGained can clear foreground ownership before the exit poll. + // Repair X input focus even then; the repair keeps another app focused. crate::platform::restore_shell_focus(); } } diff --git a/tests/simulator/session.py b/tests/simulator/session.py index 795b931..4da9e38 100644 --- a/tests/simulator/session.py +++ b/tests/simulator/session.py @@ -3,6 +3,7 @@ Run under dbus-run-session. The supervisor runs directly because the container has no systemd user manager; unit ownership/stop commands have separate fixtures. """ +import ctypes import importlib.util import json import os @@ -40,6 +41,30 @@ def active(): return run('xdotool', 'getactivewindow') +def input_focus(clear=False): + x = ctypes.CDLL('libX11.so.6') + x.XOpenDisplay.argtypes = [ctypes.c_char_p] + x.XOpenDisplay.restype = ctypes.c_void_p + x.XCloseDisplay.argtypes = [ctypes.c_void_p] + x.XGetInputFocus.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_ulong), + ctypes.POINTER(ctypes.c_int)] + x.XSetInputFocus.argtypes = [ctypes.c_void_p, ctypes.c_ulong, ctypes.c_int, ctypes.c_ulong] + x.XSync.argtypes = [ctypes.c_void_p, ctypes.c_int] + display = x.XOpenDisplay(None) + if not display: + raise RuntimeError('X input-focus display unavailable') + try: + if clear: + x.XSetInputFocus(display, 0, 0, 0) + x.XSync(display, 0) + window = ctypes.c_ulong() + revert = ctypes.c_int() + x.XGetInputFocus(display, ctypes.byref(window), ctypes.byref(revert)) + return window.value + finally: + x.XCloseDisplay(display) + + def key(*keys): run('xdotool', 'key', '--clearmodifiers', *keys) time.sleep(.15) @@ -160,6 +185,29 @@ def spawn(name, *args): recovered = windows(name)[-1] session.awesome(f'for _, c in ipairs(client.get()) do if c.window == {int(recovered)} then c:kill() end end; return "close requested"') wait_for(lambda: not windows(name), name + ' recovery close') + # Awesome can retain the Shell as its selected client while X focus + # reverts to None. Home already released foreground process ownership; + # its later exit must still repair real keyboard focus. + for destination in (shell, original): + focus(shell) + run('xdotool', 'mousemove', '--window', shell, '235', '82', 'click', '1') + wait_for(lambda: windows('Notepad'), 'focus-regression Notepad launch') + native = windows('Notepad')[-1] + focus(native) + key('XF86PowerOff') + wait_for(lambda: input_focus() == int(shell), 'focus-regression Home return') + if destination == shell: + assert input_focus(clear=True) == 0 + assert active() == shell, 'cached active client must differ from actual X focus' + else: + focus(original) + assert input_focus() == int(original) + exits = (BASE / 'session.log').read_text().count('event=app_exited ') + os.kill(int(run('xdotool', 'getwindowpid', native)), 15) + wait_for(lambda: not windows('Notepad'), 'background Notepad exit') + wait_for(lambda: (BASE / 'session.log').read_text().count('event=app_exited ') > exits, + 'background exit reaped by Shell') + wait_for(lambda: input_focus() == int(destination), 'exit repairs or preserves X input focus') focus(shell) run('import', '-window', shell, str(OUT / 'stock-session-menu.png')) session.awesome(f'for _, c in ipairs(client.get()) do if c.window == {int(shell)} then c:kill() end end; return \"close requested\"') @@ -198,6 +246,8 @@ def spawn(name, *args): (OUT / 'stock-session.json').write_text(json.dumps({ 'native_crash_recovery': ['Terminal', 'Notepad', 'Files'], 'native_launch_home_resume_close': ['Terminal', 'Notepad', 'Files'], + 'background_exit_repairs_x_input_focus': True, + 'background_exit_preserves_other_app_focus': True, 'original_focus_and_keys_restored': True, 'concurrent_binding_preserved': True, 'stock_config_unchanged': True, diff --git a/tests/test_installer.py b/tests/test_installer.py index debaddc..52f7875 100644 --- a/tests/test_installer.py +++ b/tests/test_installer.py @@ -527,7 +527,7 @@ def test_bounded_version_probes_reject_mixed_versions_and_output_floods(self): generation.mkdir() for name in m.BINARIES: path = generation / name - version = '2.6.0' if name == 'arti' else '0.1.0-test' + version = '2.7.0' if name == 'arti' else '0.1.0-test' path.write_text('#!/bin/sh\nprintf "' + ('Arti' if name == 'arti' else name) + ' ' + version + '\\n"\n') path.chmod(0o755) m.verify_versions(generation) diff --git a/tests/test_shell_release.py b/tests/test_shell_release.py index 36a0bf9..74787c7 100644 --- a/tests/test_shell_release.py +++ b/tests/test_shell_release.py @@ -37,7 +37,7 @@ def write_binaries(self): (self.binaries / name).write_bytes(self.data) def version(self, version): - self.check.side_effect = [json.dumps({'packages': [{'name': 'vitrallis-shell', 'version': version}]}).encode()] + [('Arti 2.6.0' if name == 'arti' else name + ' ' + version) + '\n' for name in RELEASE.BINARIES] + self.check.side_effect = [json.dumps({'packages': [{'name': 'vitrallis-shell', 'version': version}]}).encode()] + [('Arti 2.7.0' if name == 'arti' else name + ' ' + version) + '\n' for name in RELEASE.BINARIES] def package(self, target='x86_64-unknown-linux-gnu', tag='v1.2.3', runner=None): RELEASE.package(self.binaries, target, self.output, tag, runner) @@ -97,7 +97,7 @@ def check(command, **kwargs): if command[0] == 'cargo': return json.dumps({'packages': [{'name': 'vitrallis-shell', 'version': '1.2.3'}]}).encode() binary = Path(command[-2]).name - return ('Arti 2.6.0' if binary == 'arti' else binary + ' 1.2.3') + '\n' + return ('Arti 2.7.0' if binary == 'arti' else binary + ' 1.2.3') + '\n' self.check.side_effect = check arm = self.root / 'arm' diff --git a/tests/test_tor.py b/tests/test_tor.py index 8bea9aa..55b4a6e 100644 --- a/tests/test_tor.py +++ b/tests/test_tor.py @@ -21,7 +21,7 @@ FAKE = '''#!/usr/bin/env python3 import os, signal, socket, sys, time if sys.argv[1:] == ['--version']: - print('Arti 2.6.0'); sys.exit() + print('Arti 2.7.0'); sys.exit() open(os.path.join(os.path.dirname(sys.argv[-1]), 'fake.pid'), 'w').write(str(os.getpid())) s = socket.socket(); s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1); s.bind(('127.0.0.1', 9150)); s.listen(16) print('Bootstrapping: 45%', flush=True)