Overhaul validation and publication

This is the review record for the local overhaul, based on application commit 8d575ca. At the original local handoff, no commits, pushes, remote releases, website deployments, DNS changes, or production-server changes had been made. The maintainer has since authorized publishing main, running the hosted checks, and deploying the Pages preview. The measurements below record the local validation; current hosted results are available in GitHub Actions. The plan is in plan-overhaul.md; ongoing commands and release gates are in doc/maintenance.md and site/README.md.

Implemented scope

Application name, absence of a Qt organization name, default/portable data locations, schema version 10, UI forms/object names, embedded control catalogs, and version 2.0.0 are unchanged. No maintainer assessment database was used. Source validation used shadow builds, and the root application was also rebuilt for local review. Generated Makefiles/objects/resources/binaries remain ignored and were not manually edited or staged. Review artifacts are ignored under .build/.

Linux and application evidence

Environment: Ubuntu 26.04.1, GCC 15.2, Qt 6.10.2, libzip 1.11.4, libxlsxwriter 1.2.4. The requested Qt 6.12 upgrade applies to the static Windows toolchain; Linux uses Ubuntu's Qt development packages.

The original integration suite passed 19 tests, zero failures in 162.7 seconds. The expanded suite runs with unique application identity, isolated settings/data/cache and disposable fixture/output directories, using Qt's offscreen platform here. It does not download the live quarterly archive. Text and JUnit results are in .build/results/tests.txt and .build/results/tests.xml.

The expanded tests exercise the existing assessment/report workflow plus HTTP status/redirect/loop/disconnect/timeout/size failures, untrusted TLS, stable-version validation, exact catalog matching/cache recovery/checksums and repeated member extraction after the original archive becomes unavailable, corrupt ZIPs, worker failure/connection cleanup, XCCDF parsing and rollback, remapping rollback, schema 9→10 project migration, future-schema rejection, failed/active-database snapshot writes, CKL serialization and CKLB round trips, nested export failures, and upgrade field/marking preservation. Bulk-export tests also verify files are created in both formats/modes; normalized forward-slash containment fixes an existing Windows separator mismatch that could silently skip exports. The tests found and fixed CKLB not_a_finding being re-imported as Not Reviewed. Upgrade indexing preserves the previous first-match behavior while avoiding repeated nested database queries.

Timing is diagnostic only: the suite has more cases than the baseline and other builds ran concurrently. Do not interpret whole-suite times as a controlled performance benchmark.

Final application/test builds passed. The final expanded run passed 30 tests, zero failures/skips in 252.059 seconds while the clean Windows build and package build ran concurrently. The ASD upgrade fixture preserves status, comments, findings, override/justification, and marking; its timing is recorded in the test log.

The Ubuntu .deb builds successfully from a clean POSIX staging copy, with tracked Git file modes restored. Local debhelper tools were extracted without privilege and LOCAL_UNPRIVILEGED_PACKAGE=1 skipped only the installed build-dependency check; CI installs those dependencies normally. apt-get --simulate install resolves the package without removals. The extracted binary resolves all shared libraries, starts offscreen for five seconds, and creates a valid SQLite database in an isolated data directory. PRAGMA quick_check passes. This smoke run terminates the temporary process after startup; it is not a graceful-shutdown or system-install test.

Review artifacts are under .build/dist/: the Ubuntu 26.04 amd64 .deb, clean source archive, Windows portable .exe/.zip, and SHA-256 lists. Package inspection, install simulation, startup evidence, PE checks, and Qt Test logs are under .build/results/.

Windows toolchain validation

The initial source build produced matching host and target Qt 6.12.0 and a linked Windows application using the manifest-pinned dependencies. PE inspection passes the Windows-system-DLL allowlist and required ASLR, DEP, and high-entropy-VA flags (0x0160). Control Flow Guard is not emitted by this MinGW toolchain and is informational in the checker. Static plugin registration includes Windows integration, SQLite, OpenSSL and Schannel.

Two toolchain compatibility corrections are included: a scoped libzip DWORD_MAX definition for the selected MinGW headers, and direct host-qmake invocation with target_qt.conf because Qt's generated cross wrapper splits quoted compiler assignments. The reviewed system-library allowlist includes Qt 6.12's Direct3D 12 and Windows color management imports. Non-system runtime DLLs remain forbidden.

Both local attempts to compile the complete toolchain from clean sources reached the target plugins but exceeded this environment's per-user temporary-filesystem quota while writing precompiled headers. The second attempt used the final script's host-build cleanup and still needed the local storage workaround. The target build then completed and installed after relocating only its temporary precompiled headers to disk; source/configuration/compiler flags were unchanged. The application build directory was cleared for a fresh application compilation against that completed toolchain. This local evidence is successful source compilation with a documented resume. The subsequent hosted cold run completed uninterrupted on the normal runner workspace; see the publication evidence below.

The fresh Windows application build and portable EXE/ZIP packaging pass. A repeat run reuses the toolchain in 4.15 seconds. After removing Qt source/build scratch directories and the application build directory, a fresh application build using only the installed toolchain cache passes in 63.12 seconds; its EXE SHA-256 matches the previous build. This validates the installed cache rather than depending on leftover Qt build files.

The cache check exposed strip rewriting the PE timestamp. Packaging now uses --preserve-dates, retaining the linker's zero timestamp; the PE checker enforces that property. The prepared toolchain was reused for this packaging-only correction, which does not change its source/configuration/compiler flags. Repeat packaging and the fresh cache build produce the same executable bytes. ZIP container timestamps are not claimed reproducible.

Temporary Qt precompiled headers and source/build scratch directories were removed after installation. The installed local toolchain and verified source downloads remain under /tmp/stigqter-overhaul/; these temporary paths are evidence from this session, not permanent release infrastructure. The uninterrupted hosted cold build has now passed. Native Windows execution remains required before publishing a stable desktop release.

Website and content evidence

Website changes were prepared in /mnt/win/projects/websites/stigqter.com; this directory was not a Git repository at the start. The source has since moved into site/ in the STIGQter repository at the maintainer’s request. Original changed/removed PHP and shell files were backed up under /tmp/stigqter-overhaul/website-before/. The built _site directory, private .cache, backups, and local server configuration are excluded from source commits.

Hosted publication evidence

Published on 3 November 2026 (America/Chicago), after the maintainer authorized pushing main and the Pages preview:

Pages uses its project URL with HTTPS and no custom domain yet. No stable desktop release/tag, DNS cutover, or production legacy-host deployment was performed. The draft-release workflow was syntax-checked but deliberately not dispatched without a release candidate tag. Native platform acceptance remains a release gate.

Website repository correction — 4 November 2026

The site is now maintained under site/ in this repository. Its Pages workflow builds the historical public library and renders the user guide, README, release notes, security policy, and maintenance documentation from their Markdown sources. The link crawl handles the /STIGQter/ project prefix and the custom-domain root. Desktop release/content checks target https://squinky86.github.io/STIGQter/metadata/v1/.

The separate-repository deployment described in the original publication was an incorrect interpretation of the intended layout. The local source was preserved before the maintainer proposed deleting that repository. No separate checkout or repository is needed to build or maintain the replacement site. Domain/DNS gates below still apply. Desktop publication is recorded in the following release section.

Local consolidation checks pass: eight website tests, the full link crawl over 20,184 HTML pages, and generated documentation previews at 390×844 and 1440×1000. The public artifact contains 20,207 files and remains about 74 MiB. PHP, caches, backups, server configuration, and assessment files remain excluded. The Pages workflow uses Ubuntu 26.04 and runs the live site/metadata monitor after deployment. The application and test targets rebuild successfully, and the isolated desktop suite passes all 30 tests with no failures or skips in 181.805 seconds. The successful standalone test run followed an interrupted combined build/test invocation.

STIGQter 2.0.0 release — 7 November 2026

Release 2.0.0 is published from annotated tag 2.0.0, commit 7c74a6d8067a684b588b87d6ee9a900b3177b6b4. The tag-triggered release workflow passed tag/VERSION validation, Linux build/tests/package installation and removal, static Windows builds and PE checks, native Windows validation, and draft creation with all six attachments. The main CI run for that commit also passed, including CodeQL. The coverage job using stable action tags passed Sonar and Coveralls publication.

The tagged native Windows run passed 31 tests, zero failures/skips on Windows Server 2025 with static Qt 6.12.0. This includes checklist import/export, reports, classification, SQLite, untrusted TLS rejection, and a live check of the default GitHub Pages release URL. The shipped EXE then passed visible-window startup, database initialization, startup version checking, and clean shutdown with both portable and normal user databases, with only Windows system directories on PATH. Windows testing exposed retained temporary-file handles and an insufficient test import timeout; the fixtures now use temporary directories and the full four-guide import has a bounded four-minute allowance. Native window detection accepts Qt's application-name suffix.

The release EXE is x64 PE32+, imports only Windows system DLLs (including delayed imports), enables ASLR/DEP/high-entropy VA, and retains a zero PE build timestamp after stripping. The ZIP contains the exact same executable plus LICENSE, README, CHANGES, and the pinned dependency source manifest.

Windows asset Bytes SHA-256
STIGQter-2.0.0-win64.exe 31,574,016 db5a2a944d20265838303faab23026ce391ca1e548cd929f6a5fe48da067dcca
STIGQter-2.0.0-win64.zip 12,548,918 33f537b0742a4333edccee0bac6da434ade63d4489b69e848ac79eac057e72a9

All six public assets were downloaded anonymously and matched GitHub's SHA-256 digests, the checked checksum files, and the tagged workflow artifacts. The source archive's VERSION, update worker/URL, dependency manifest, and CI configuration match the tag. Stable metadata was generated from the published release API response after these checks. The site generates its download links from that same manifest, and nine site tests pass, including version/link consistency and rejection of unrelated package URLs.

Remaining platform and domain acceptance

View this page’s Markdown source