docs: record audited 5.2.8 release evidence
Some checks are pending
CI / Source-only, license, shell and secret policy (push) Waiting to run
CI / Build and full tests (clang) (push) Blocked by required conditions
CI / Build and full tests (gcc) (push) Blocked by required conditions
CI / Strict warnings (clang) (push) Blocked by required conditions
CI / Strict warnings (gcc) (push) Blocked by required conditions
CI / ASan, LSan and UBSan (push) Blocked by required conditions
CI / GCC static analyzer (push) Blocked by required conditions
CI / Reproducible audited source archive (push) Blocked by required conditions
CI / Debian/Ubuntu source-built package (push) Blocked by required conditions
CI / openSUSE Tumbleweed x86_64 RPM gate (push) Blocked by required conditions
CI / Fedora noarch GUI RPM and SRPM gate (push) Blocked by required conditions
CI / Linux x86_64 notice-bearing CLI tar.xz gate (push) Blocked by required conditions
CI / Source-only GUI portable ZIP gate (push) Blocked by required conditions
CI / Windows and macOS release gates (push) Blocked by required conditions
CI / Windows x86_64 package and smoke test (push) Blocked by required conditions
CI / macOS native DMG and installed-image test (push) Blocked by required conditions

This commit is contained in:
Cristian Cezar Moisés 2026-08-31 22:28:57 -03:00
commit f8844f806a
10 changed files with 140 additions and 57 deletions

View file

@ -223,7 +223,7 @@ its volume and file index against the traversal handle, and marks only that
identity-checked handle for deletion. The live-workspace identity-checked handle for deletion. The live-workspace
regression injects a directory symlink and verifies that its external sentinel regression injects a directory symlink and verifies that its external sentinel
survives. These are reviewed fixes and regression coverage, not independent survives. These are reviewed fixes and regression coverage, not independent
certification or proof that an exact-tag 5.2.8 gate passed. certification by themselves; the exact-tag evidence is recorded below.
The C/C++ default-branch analysis of commit `69fc26b` closed #5, #6, and #7, The C/C++ default-branch analysis of commit `69fc26b` closed #5, #6, and #7,
then reported High #8, #9, and #10 solely in the newly added SDK regression: then reported High #8, #9, and #10 solely in the newly added SDK regression:
@ -248,12 +248,24 @@ matching, and requires extraction plus a full tree diff. The path-confinement
regression independently constructs the BMP/non-BMP archive name from ASCII regression independently constructs the BMP/non-BMP archive name from ASCII
hex and requires byte-exact listing and extraction. hex and requires byte-exact listing and extraction.
Because that pre-tag run failed, it is diagnostic evidence rather than release Because that pre-tag run failed, it remains diagnostic evidence rather than
approval. The exact 5.2.8 candidate must repeat the required suite. Exact-tag release approval. The immutable `v5.2.8` tag at
native Windows/macOS, hosted CI, authenticated OBS service execution, and `ebb9ab3aa1d42c50030ca02883f6162dc4771fe1` repeated the complete suite in
release promotion remain pending until recorded otherwise. The pre-tag manually dispatched run `33456209269`: all 15 jobs passed, including native
openSUSE Tumbleweed job did build source and binary RPMs, pass `rpmlint` without Windows/macOS, the pinned local OBS service chain, source reproducibility,
suppressions, and pass install/round-trip/uninstall checks. DEB/RPM/SRPM, installed-package, sanitizer, analyzer, and source-only gates.
The canonical source archive was reproduced at 798296 bytes with SHA-256
`378b9506211545b9594cf0d38ac8955d9b1cac34eb6b379ae0ec26b84edb65f7`.
Initial promotion run `33457344882` stopped before release creation because
its validator incorrectly assumed that an SRPM's `%{ARCH}` must be `src`.
Both artifacts were genuine source packages: `%{SOURCEPACKAGE}` was `1`,
`%{SOURCERPM}` was absent, each payload was exactly its Source0 plus spec, and
each binary RPM referenced the matching SRPM. Commit `33eb904` changed the
gate to those canonical metadata and payload checks. Corrected promotion run
`33457868306` then validated the same tag-bound artifacts and published exactly
13 assets. No asset was rebuilt to pass promotion. These are reproducible
project records, not independent certification.
## Cryptographic review boundary ## Cryptographic review boundary

View file

@ -57,9 +57,13 @@ unchanged.
- Realign current code, package, workflow, artifact, and documentation - Realign current code, package, workflow, artifact, and documentation
references to 5.2.8, and pin the AUR/Homebrew SHA-256 and Guix content hash references to 5.2.8, and pin the AUR/Homebrew SHA-256 and Guix content hash
to the final reproducible source archive before tagging. to the final reproducible source archive before tagging.
- Require fresh exact-`v5.2.8` source, checksum, hosted CI, native-platform, - Exact-tag run `33456209269` passed all 15 source, package, analyzer,
package, OBS, and promotion evidence. This entry does not claim those gates sanitizer, OBS, Windows, and macOS jobs at `ebb9ab3`. Promotion initially
passed, and no v5.2.7 result transfers automatically. stopped before publication because its validator treated `%{ARCH}` as the
SRPM discriminator; the genuine SRPMs instead correctly carry
`%{SOURCEPACKAGE}=1`. Commit `33eb904` corrected and strengthened that gate,
and run `33457868306` published the exact 13 tested assets without rebuilding
them. No v5.2.7 result transfers to this evidence.
## [5.2.7] — 2026-08-31 — Native test-harness portability corrections ## [5.2.7] — 2026-08-31 — Native test-harness portability corrections

View file

@ -37,7 +37,13 @@ Windows distribution checks, before an old MSYS `grep` non-BMP pattern failed
in the later smoke. ZUPT's redirected listing was byte-correct; the corrected in the later smoke. ZUPT's redirected listing was byte-correct; the corrected
gate uses byte-exact, locale-independent checks and requires extraction plus a gate uses byte-exact, locale-independent checks and requires extraction plus a
full tree diff. The failed run is diagnostic evidence only. full tree diff. The failed run is diagnostic evidence only.
Corrective packages and release assets must use `v5.2.8`; never move or Exact-tag run `33456209269` subsequently passed all 15 jobs at
`ebb9ab3aa1d42c50030ca02883f6162dc4771fe1`, including the pinned local OBS
source-service chain, native
Windows/macOS, and every package gate. Promotion run `33457868306` published
the exact tested 13-file set; the source archive SHA-256 is
`378b9506211545b9594cf0d38ac8955d9b1cac34eb6b379ae0ec26b84edb65f7`.
Corrective packages and release assets use `v5.2.8`; never move or
overwrite an earlier tag or checksum, and never transfer prior evidence overwrite an earlier tag or checksum, and never transfer prior evidence
automatically. Version 5.2.8 corrects those native test boundaries, hardens automatically. Version 5.2.8 corrects those native test boundaries, hardens
three path-race boundaries, and adds the SDK regression to release/hosted Linux three path-race boundaries, and adds the SDK regression to release/hosted Linux
@ -295,9 +301,10 @@ For every published artifact:
Do not infer multi-architecture compatibility from portable source. Do not add Do not infer multi-architecture compatibility from portable source. Do not add
precompiled optional libraries to make a package build. precompiled optional libraries to make a package build.
Publish release assets at the canonical GitHub release. If an expected asset is The 13 gated assets are published at the
absent or has a different checksum, report that target as unpublished rather [canonical GitHub release](https://github.com/cristiancmoises/zupt/releases/tag/v5.2.8).
than redirecting consumers to an unverified file. If an expected asset is absent or has a different checksum, report that target
as unpublished rather than redirecting consumers to an unverified file.
## Downstream checklist ## Downstream checklist

View file

@ -38,11 +38,11 @@ check`; a MinGW/Wine reproduction isolated the cause to the non-console
password-prompt test entering `_getch`. Version 5.2.8 makes both password-prompt test entering `_getch`. Version 5.2.8 makes both
fixtures portable, hardens the three CodeQL High path-race boundaries described fixtures portable, hardens the three CodeQL High path-race boundaries described
in the security documents, and adds `sdk-test` to release and hosted Linux in the security documents, and adds `sdk-test` to release and hosted Linux
gates. It still requires fresh exact-version validation. Do not treat any prior gates. Exact-tag run `33456209269` passed all 15 jobs, and promotion run
candidate's artifacts or evidence as 5.2.8 packages or validation. `33457868306` published the exact tested set. Do not treat any prior candidate's
artifacts or evidence as 5.2.8 packages or validation.
The 5.2.8 package set eligible for promotion after each target gate succeeds is The published 5.2.8 package set is exactly these 13 gated assets:
exactly these 13 assets:
| Component | Gated artifacts | | Component | Gated artifacts |
|---|---| |---|---|

View file

@ -19,7 +19,9 @@ POSIX-mode projection. The C/C++ default-branch scan run `33452563116` of
commit `7a8e5c5` completed successfully after the follow-up changed the new SDK commit `7a8e5c5` completed successfully after the follow-up changed the new SDK
regression to no-follow descriptors plus `fstat` and descriptor reads. Alerts regression to no-follow descriptors plus `fstat` and descriptor reads. Alerts
#5 through #10 are fixed, and the authenticated code-scanning API reported zero #5 through #10 are fixed, and the authenticated code-scanning API reported zero
open alerts. These corrections do not change archive format v1.6, open alerts. Final release-commit CodeQL run `33456049125` also completed
successfully, with the API still reporting zero open alerts. These corrections
do not change archive format v1.6,
cryptography, the bundled codec release, or the SDK ABI. cryptography, the bundled codec release, or the SDK ABI.
The predecessor `v5.2.7` tag is immutable and was not promoted. Exact-tag run The predecessor `v5.2.7` tag is immutable and was not promoted. Exact-tag run
@ -39,6 +41,16 @@ gate creates that name from byte escapes, validates Latin-1, BMP, and non-BMP
listing bytes with Python, and requires extraction plus a full tree diff. The listing bytes with Python, and requires extraction plus a full tree diff. The
failed run is diagnostic evidence, not release-candidate approval. failed run is diagnostic evidence, not release-candidate approval.
The immutable `v5.2.8` candidate at commit
`ebb9ab3aa1d42c50030ca02883f6162dc4771fe1` subsequently passed all 15 jobs in
manually dispatched exact-tag run `33456209269`. That run includes the pinned
local OBS source-service chain, reproducible source checks, GCC/Clang, analyzers,
sanitizers, DEB/RPM/SRPM and portable-package gates, the native Windows ZIP
round trip, and the mounted macOS arm64 DMG test. Corrected promotion run
`33457868306` validated and published exactly 13 assets. The canonical source
archive is 798296 bytes with SHA-256
`378b9506211545b9594cf0d38ac8955d9b1cac34eb6b379ae0ec26b84edb65f7`.
Version 5.2.2 restored the original ZUPT product name and the `zupt` command. Version 5.2.2 restored the original ZUPT product name and the `zupt` command.
The `.zupt` archive extension, format v1.6, magic bytes, codec identifiers, and The `.zupt` archive extension, format v1.6, magic bytes, codec identifiers, and
SDK ABI remain unchanged. An optional `vaptvupt` command alias may be provided SDK ABI remain unchanged. An optional `vaptvupt` command alias may be provided
@ -55,8 +67,9 @@ SDK link-target/mode regression, static path-race guards, portable raw-C1
fixture with Bash 3.2 unsigned-byte normalization, native redirected-prompt fixture with Bash 3.2 unsigned-byte normalization, native redirected-prompt
and protected-DACL regressions, byte-exact BMP/non-BMP Windows list and extract and protected-DACL regressions, byte-exact BMP/non-BMP Windows list and extract
checks, and `sdk-test` CI step cover these boundaries. All current release checks, and `sdk-test` CI step cover these boundaries. All current release
paths move to 5.2.8 and require fresh exact-tag hosted CI, package, paths moved to 5.2.8 and received fresh exact-tag hosted CI, package,
native-platform, source-only, checksum, OBS, and promotion evidence. native-platform, source-only, checksum, OBS, and promotion evidence in runs
`33456209269` and `33457868306`.
## Corrective changes introduced in 5.2.7 ## Corrective changes introduced in 5.2.7
@ -177,8 +190,12 @@ See [CHANGELOG.md](CHANGELOG.md) for the release record.
## Canonical source ## Canonical source
- Canonical: https://github.com/cristiancmoises/zupt - Canonical: https://github.com/cristiancmoises/zupt
- Codeberg mirror: https://codeberg.org/berkeley/zupt
- SecurityOps Brazil mirror: https://git.securityops.com.br/cristiancmoises/zupt
- SecurityOps global mirror: https://git.securityops.co/cristiancmoises/zupt
Release tags and source archives are published from this repository. GitHub remains canonical. The `v5.2.8` tag and its 13 release assets are also
published byte-for-byte on the three mirrors above.
## Source-only policy ## Source-only policy
@ -194,8 +211,8 @@ built and tested is not presented as supported.
## 5.2.8 release artifacts ## 5.2.8 release artifacts
The 5.2.8 release workflow is defined to produce exactly the following 13 files only after The published 5.2.8 release contains exactly the following 13 files after
the corresponding target gate succeeds. `SHA256SUMS` records the exact promoted every corresponding target gate succeeded. `SHA256SUMS` records the exact promoted
filenames and digests. The release notes identify the tested commit and the filenames and digests. The release notes identify the tested commit and the
manually dispatched CI run; that run's job definitions and logs are the runtime manually dispatched CI run; that run's job definitions and logs are the runtime
evidence for runner image, architecture, toolchain, results, and explicit evidence for runner image, architecture, toolchain, results, and explicit
@ -238,9 +255,10 @@ software already installed on the target. Other historical GUI packages and
platform installers are not carried forward implicitly. platform installers are not carried forward implicitly.
The canonical source repository is The canonical source repository is
<https://github.com/cristiancmoises/zupt>. Release assets referenced by the AUR, <https://github.com/cristiancmoises/zupt>. The canonical release is
Homebrew, Guix, or generic RPM recipes must exist in the canonical GitHub <https://github.com/cristiancmoises/zupt/releases/tag/v5.2.8>. Assets referenced
release at their recorded URL before those recipes are published. by the AUR, Homebrew, Guix, or generic RPM recipes must exist there at their
recorded URL before those recipes are published.
Audit the current checkout and its Git archive with: Audit the current checkout and its Git archive with:
@ -410,11 +428,12 @@ not promoted. The immutable v5.2.7 tag was also not promoted: exact-tag run
recorded 13 successful jobs, and cancelled Windows after the hosted job stalled recorded 13 successful jobs, and cancelled Windows after the hosted job stalled
in `make check`; a MinGW/Wine reproduction isolated the stall to in `make check`; a MinGW/Wine reproduction isolated the stall to
`test --password-prompt ... </dev/null` entering `_getch`. The `test --password-prompt ... </dev/null` entering `_getch`. The
exact 5.2.8 candidate must repeat all required gates. Native Windows and macOS, exact 5.2.8 candidate then repeated all required gates: exact-tag run
hosted GitHub CI/release promotion, authenticated OBS, and resolution of the `33456209269` completed 15/15 jobs successfully, including native Windows and
openSUSE automatic `debugsource` rpmlint `no-binary` macOS, the pinned local OBS service chain, source/package gates, and the
finding remain pending until recorded otherwise. Unexecuted gates are `SKIP`, openSUSE RPM checks. Promotion run `33457868306` published the exact tested
never `PASS`. asset allowlist. Unexecuted environments remain `SKIP`, never `PASS`; these
project-run results are not independent certification.
On Windows, 5.2.8 scopes output handling to normal local Win32 paths. A MinGW On Windows, 5.2.8 scopes output handling to normal local Win32 paths. A MinGW
cross-build or Wine run is not native-Windows evidence; the `windows-latest` cross-build or Wine run is not native-Windows evidence; the `windows-latest`
@ -456,10 +475,9 @@ lists, tests, extracts, and restores it byte-exact. The full local Linux gate
passed on commit `ff99770`. This is not a claim that a 5.2.1 reader understands every new passed on commit `ff99770`. This is not a claim that a 5.2.1 reader understands every new
flag-gated 5.2.2 encoding or that every historical combination was tested. flag-gated 5.2.2 encoding or that every historical combination was tested.
The candidate commands and outcome fields for 5.2.8 are maintained in the The build/audit commands and recorded 5.2.8 outcomes are maintained in the
release handoff and release evidence and
[packaging/opensuse/README.md](packaging/opensuse/README.md). They must be [packaging/opensuse/README.md](packaging/opensuse/README.md). No architecture or
updated from the final release candidate before tagging. No architecture or
distribution is claimed merely because the code has a fallback path. distribution is claimed merely because the code has a fallback path.
## Source archive ## Source archive
@ -480,12 +498,12 @@ the same SHA-256. The AUR, Homebrew and Guix recipes are `export-ignore` so
their checksum fields do not make the archive self-referential. `make dist` their checksum fields do not make the archive self-referential. `make dist`
archives the verified `HEAD` tree object rather than embedding the commit ID, archives the verified `HEAD` tree object rather than embedding the commit ID,
so a commit changing only those ignored recipes leaves the fixed-epoch archive so a commit changing only those ignored recipes leaves the fixed-epoch archive
byte-identical. The recipes remain versioned in Git and must be filled with the byte-identical. The recipes remain versioned in Git and pin the final tagged
final digest before the tag is published. digest `378b9506211545b9594cf0d38ac8955d9b1cac34eb6b379ae0ec26b84edb65f7`.
## openSUSE and OBS ## openSUSE and OBS
The maintained upstream recipe is in packaging/opensuse. It is prepared for an The maintained upstream recipe is in packaging/opensuse. It targets the
immutable v5.2.8 tag, disables submodules and Git LFS, builds with immutable v5.2.8 tag, disables submodules and Git LFS, builds with
WITH_SDK=0 WITH_PQBOX=0, runs real checks, and installs without the renamed-era WITH_SDK=0 WITH_PQBOX=0, runs real checks, and installs without the renamed-era
`vaptvupt` alias. `vaptvupt` alias.

View file

@ -226,7 +226,8 @@ media before proceeding.
These changes address the three 5.2.8 CodeQL High reports: #5 at SDK key These changes address the three 5.2.8 CodeQL High reports: #5 at SDK key
publication, #6 at POSIX disk-target classification/use, and #7 at benchmark publication, #6 at POSIX disk-target classification/use, and #7 at benchmark
workspace cleanup. The regressions and source review are project evidence, not workspace cleanup. The regressions and source review are project evidence, not
an independent certification or a claim that exact-v5.2.8 CI has passed. an independent certification. Exact-tag run `33456209269` subsequently passed
all 15 jobs at `ebb9ab3aa1d42c50030ca02883f6162dc4771fe1`.
The C/C++ default-branch analysis of commit `69fc26b` closed #5, #6, and #7, The C/C++ default-branch analysis of commit `69fc26b` closed #5, #6, and #7,
then opened test-only High #8, #9, and #10 because the new SDK regression used then opened test-only High #8, #9, and #10 because the new SDK regression used
@ -236,6 +237,9 @@ static gate rejects reintroduction of path-level metadata checks there. The
subsequent C/C++ default-branch scan run `33452563116` completed successfully at subsequent C/C++ default-branch scan run `33452563116` completed successfully at
commit `7a8e5c5`; alerts #5 through #10 are fixed, and the authenticated commit `7a8e5c5`; alerts #5 through #10 are fixed, and the authenticated
code-scanning API reported zero open alerts. code-scanning API reported zero open alerts.
The final release-commit CodeQL run `33456049125` also completed successfully;
the authenticated API again reported zero open alerts, with #5 through #10
recorded as fixed rather than dismissed.
The Windows handle-relative implementation is scoped to normal local Win32 The Windows handle-relative implementation is scoped to normal local Win32
paths. Win32 extended-length and device-namespace paths, raw UNC output roots, paths. Win32 extended-length and device-namespace paths, raw UNC output roots,
@ -360,8 +364,8 @@ then completed 13 jobs successfully but failed native macOS because x86 SHA-NI
test helpers were unused on arm64 under `-Werror`, and failed native Windows test helpers were unused on arm64 under `-Werror`, and failed native Windows
when argv transcoding aborted the safe UTF-8 fixture. Those are test-harness when argv transcoding aborted the safe UTF-8 fixture. Those are test-harness
integration defects, not product, archive, cryptographic, codec, or SDK ABI integration defects, not product, archive, cryptographic, codec, or SDK ABI
changes; v5.2.6 remained unpromoted. The exact 5.2.8 candidate must changes; v5.2.6 remained unpromoted, so its results did not transfer to the
repeat the required suite. The immutable v5.2.7 candidate was likewise not required 5.2.8 suite. The immutable v5.2.7 candidate was likewise not
promoted: exact-tag run `33445470664` concluded `cancelled` at promoted: exact-tag run `33445470664` concluded `cancelled` at
`2026-08-31T23:11:19Z`, with 13 successful jobs, one failed macOS job after `2026-08-31T23:11:19Z`, with 13 successful jobs, one failed macOS job after
raw-C1 fixture creation returned `EILSEQ`, and one cancelled Windows job after raw-C1 fixture creation returned `EILSEQ`, and one cancelled Windows job after
@ -375,9 +379,13 @@ after ZUPT had compressed and verified all inputs; MinGW/Wine confirmed ZUPT's
byte-exact UTF-8 listing. The corrected gate validates Latin-1, BMP, and byte-exact UTF-8 listing. The corrected gate validates Latin-1, BMP, and
non-BMP listing bytes without locale-sensitive matching, then requires non-BMP listing bytes without locale-sensitive matching, then requires
extraction and a full tree diff. The failed run is not exact-candidate extraction and a full tree diff. The failed run is not exact-candidate
evidence. Exact-tag native gates, hosted CI, authenticated OBS service evidence. Exact-tag run `33456209269` then completed 15/15 jobs successfully,
execution, and release promotion remain pending. An unavailable or unexecuted including native Windows/macOS, the pinned local OBS service chain, package
environment remains `SKIP`, never `PASS`. installation/round trips, source-only checks, analyzers, and sanitizers.
Promotion run `33457868306` published the exact 13-file allowlist after
format, metadata, payload, and checksum validation. An unavailable or
unexecuted environment remains `SKIP`, never `PASS`; successful project CI is
still not independent security certification.
Run target-native static analyzers and package checks as additional evidence. Run target-native static analyzers and package checks as additional evidence.
Do not infer x86_64, aarch64, ppc64le, s390x, riscv64, macOS, Windows, Leap, or Do not infer x86_64, aarch64, ppc64le, s390x, riscv64, macOS, Windows, Leap, or

View file

@ -213,8 +213,10 @@ large device, power loss, or hardware failure.
The SDK publication, POSIX disk-target, and benchmark-cleanup changes address The SDK publication, POSIX disk-target, and benchmark-cleanup changes address
CodeQL High #5, #6, and #7 respectively. Their source review and regressions CodeQL High #5, #6, and #7 respectively. Their source review and regressions
are project evidence, not independent certification or proof that the exact alone are project evidence, not independent certification. Exact-tag run
5.2.8 hosted/native gates passed. `33456209269` subsequently passed all 15 hosted jobs at
`ebb9ab3aa1d42c50030ca02883f6162dc4771fe1`; final release-commit CodeQL run
`33456049125` completed successfully with zero open alerts.
For an untrusted archive: For an untrusted archive:
@ -312,12 +314,14 @@ successful jobs, one failed macOS job after raw-C1 filename creation returned
`EILSEQ`, and one cancelled Windows job after the hosted job stalled in `make `EILSEQ`, and one cancelled Windows job after the hosted job stalled in `make
check`; a MinGW/Wine reproduction isolated the cause to a redirected password check`; a MinGW/Wine reproduction isolated the cause to a redirected password
prompt entering `_getch`. prompt entering `_getch`.
The corresponding 5.2.8 fixture and prompt corrections do not establish their The corresponding 5.2.8 fixture and prompt corrections alone did not establish
own test result. CI now exercises `sdk-test`, but its inclusion is not a pass. a result. Exact-tag run `33456209269` then passed 15/15 jobs, including
Hosted GitHub CI and release promotion, native `sdk-test`, native Windows/macOS, the pinned local OBS source-service chain,
Windows/macOS, authenticated OBS, and the openSUSE automatic `debugsource` and the package/source gates. Promotion run `33457868306` published the exact
rpmlint `no-binary` finding remain pending until an exact 5.2.8 candidate 13 tested assets. Official authenticated OBS/Factory acceptance, the full
records them. automatic debug-package result, and untested architectures remain unclaimed;
the earlier `debugsource` rpmlint `no-binary` finding remains unresolved and
unsuppressed.
## Historical compatibility notes ## Historical compatibility notes

View file

@ -130,6 +130,8 @@ source_rpm=${source_rpms[0]}
die 'GUI binary RPM name metadata is not zupt-gui' die 'GUI binary RPM name metadata is not zupt-gui'
[[ $(rpm -qp --qf '%{VERSION}' "$main_rpm") == "$version" ]] || \ [[ $(rpm -qp --qf '%{VERSION}' "$main_rpm") == "$version" ]] || \
die 'GUI binary RPM version metadata does not match the release' die 'GUI binary RPM version metadata does not match the release'
[[ $(rpm -qp --qf '%{RELEASE}' "$main_rpm") == 1 ]] || \
die 'GUI binary RPM release metadata is not 1'
[[ $(rpm -qp --qf '%{SOURCEPACKAGE}' "$main_rpm") == '(none)' ]] || \ [[ $(rpm -qp --qf '%{SOURCEPACKAGE}' "$main_rpm") == '(none)' ]] || \
die 'GUI binary RPM is marked as a source package' die 'GUI binary RPM is marked as a source package'
[[ $(rpm -qp --qf '%{SOURCERPM}' "$main_rpm") == "$(basename -- "$source_rpm")" ]] || \ [[ $(rpm -qp --qf '%{SOURCERPM}' "$main_rpm") == "$(basename -- "$source_rpm")" ]] || \
@ -138,6 +140,8 @@ source_rpm=${source_rpms[0]}
die 'GUI source RPM name metadata is not zupt-gui' die 'GUI source RPM name metadata is not zupt-gui'
[[ $(rpm -qp --qf '%{VERSION}' "$source_rpm") == "$version" ]] || \ [[ $(rpm -qp --qf '%{VERSION}' "$source_rpm") == "$version" ]] || \
die 'GUI source RPM version metadata does not match the release' die 'GUI source RPM version metadata does not match the release'
[[ $(rpm -qp --qf '%{RELEASE}' "$source_rpm") == 1 ]] || \
die 'GUI source RPM release metadata is not 1'
[[ $(rpm -qp --qf '%{SOURCEPACKAGE}' "$source_rpm") == 1 ]] || \ [[ $(rpm -qp --qf '%{SOURCEPACKAGE}' "$source_rpm") == 1 ]] || \
die 'GUI source RPM is not marked as a source package' die 'GUI source RPM is not marked as a source package'
[[ $(rpm -qp --qf '%{SOURCERPM}' "$source_rpm") == '(none)' ]] || \ [[ $(rpm -qp --qf '%{SOURCERPM}' "$source_rpm") == '(none)' ]] || \

View file

@ -84,6 +84,8 @@ source_rpm=${source_rpms[0]}
die 'binary RPM name metadata is not zupt' die 'binary RPM name metadata is not zupt'
[[ $(rpm -qp --qf '%{VERSION}' "$main_rpm") == "$version" ]] || \ [[ $(rpm -qp --qf '%{VERSION}' "$main_rpm") == "$version" ]] || \
die 'binary RPM version metadata does not match the release' die 'binary RPM version metadata does not match the release'
[[ $(rpm -qp --qf '%{RELEASE}' "$main_rpm") == 0 ]] || \
die 'binary RPM release metadata is not 0'
[[ $(rpm -qp --qf '%{SOURCEPACKAGE}' "$main_rpm") == '(none)' ]] || \ [[ $(rpm -qp --qf '%{SOURCEPACKAGE}' "$main_rpm") == '(none)' ]] || \
die 'binary RPM is marked as a source package' die 'binary RPM is marked as a source package'
[[ $(rpm -qp --qf '%{SOURCERPM}' "$main_rpm") == "$(basename -- "$source_rpm")" ]] || \ [[ $(rpm -qp --qf '%{SOURCERPM}' "$main_rpm") == "$(basename -- "$source_rpm")" ]] || \
@ -92,6 +94,8 @@ source_rpm=${source_rpms[0]}
die 'source RPM name metadata is not zupt' die 'source RPM name metadata is not zupt'
[[ $(rpm -qp --qf '%{VERSION}' "$source_rpm") == "$version" ]] || \ [[ $(rpm -qp --qf '%{VERSION}' "$source_rpm") == "$version" ]] || \
die 'source RPM version metadata does not match the release' die 'source RPM version metadata does not match the release'
[[ $(rpm -qp --qf '%{RELEASE}' "$source_rpm") == 0 ]] || \
die 'source RPM release metadata is not 0'
[[ $(rpm -qp --qf '%{SOURCEPACKAGE}' "$source_rpm") == 1 ]] || \ [[ $(rpm -qp --qf '%{SOURCEPACKAGE}' "$source_rpm") == 1 ]] || \
die 'source RPM is not marked as a source package' die 'source RPM is not marked as a source package'
[[ $(rpm -qp --qf '%{SOURCERPM}' "$source_rpm") == '(none)' ]] || \ [[ $(rpm -qp --qf '%{SOURCERPM}' "$source_rpm") == '(none)' ]] || \

View file

@ -193,10 +193,10 @@ source scanner reported `PASS source-only: 204 files, 1 archives`.
This result establishes that the explicit tag revision works and isolates a This result establishes that the explicit tag revision works and isolates a
release/test harness defect. It does not change the product, archive format, release/test harness defect. It does not change the product, archive format,
cryptography, codec, or SDK ABI; it does not make skipped native jobs pass or cryptography, codec, or SDK ABI; it does not make skipped native jobs pass or
establish authenticated OBS/Factory acceptance. No v5.2.4 evidence transfers establish authenticated OBS/Factory acceptance. No v5.2.4 evidence transferred
automatically to v5.2.8. The exact v5.2.8 candidate must repeat every applicable automatically to v5.2.8; the exact candidate later repeated every applicable
gate, and the automatic openSUSE `debugsource` rpmlint `no-binary` finding upstream gate in run `33456209269`, as recorded below. The automatic openSUSE
remains unresolved and unsuppressed. `debugsource` rpmlint `no-binary` finding remains unresolved and unsuppressed.
## Prior 5.2.5 exact-tag native-gate evidence ## Prior 5.2.5 exact-tag native-gate evidence
@ -233,6 +233,28 @@ key publication, disk restore, and benchmark cleanup, and adds `sdk-test` to
release and hosted Linux gates. None of those changes establishes an exact release and hosted Linux gates. None of those changes establishes an exact
5.2.8 OBS, native, hosted-CI, or promotion result. 5.2.8 OBS, native, hosted-CI, or promotion result.
## 5.2.8 exact-tag upstream package evidence
Manually dispatched exact-tag GitHub Actions run `33456209269` passed all 15
jobs at `ebb9ab3aa1d42c50030ca02883f6162dc4771fe1`. Its openSUSE Tumbleweed
x86_64 job parsed and normalized the spec, executed the pinned standalone OBS
source-service chain, source-scanned the resulting archive, built the binary
RPM and genuine SRPM, ran `rpmlint` without suppressions, and completed the
install/round-trip/uninstall test. The canonical source archive is 798296 bytes
with SHA-256
`378b9506211545b9594cf0d38ac8955d9b1cac34eb6b379ae0ec26b84edb65f7`.
Promotion run `33457868306` published the exact tested binary RPM and SRPM with
the other gated assets. The source package is identified by
`%{SOURCEPACKAGE}=1` and an absent `%{SOURCERPM}`; its `%{ARCH}` legitimately
reflects the spec's build architecture and is not the SRPM discriminator.
Repository, Git archive, and upstream source tarball scans remain binary-free.
This is upstream local-service and package evidence, not a claim that the
package was submitted to or accepted by openSUSE Factory, nor a result for the
full set of automatically generated OBS debug packages or any untested
architecture.
## Prior openSUSE packaging validation ## Prior openSUSE packaging validation
The local results below were produced on 2026-08-24 from the 5.2.2 candidate The local results below were produced on 2026-08-24 from the 5.2.2 candidate