Skip to content

v0.9.0 — Infrastructure & Hardening#36

Merged
OldCrow merged 6 commits into
mainfrom
feat/v0.9.0-infrastructure-hardening
Jul 10, 2026
Merged

v0.9.0 — Infrastructure & Hardening#36
OldCrow merged 6 commits into
mainfrom
feat/v0.9.0-infrastructure-hardening

Conversation

@OldCrow

@OldCrow OldCrow commented Jul 10, 2026

Copy link
Copy Markdown
Owner

Summary

Implements the v0.9.0 — Infrastructure & Hardening milestone: relocates the C bridge to a platform-agnostic top-level component, adds sanitizer/static-analysis/coverage CI jobs, and adds Windows MSIX packaging.

Closes #22
Closes #23
Closes #24
Closes #25

Changes

#22 — Relocate C bridge

  • Moved frontend/macos/bridge/ to top-level bridge/ (sibling to libew/ewpresenter/frontend).
  • Root CMakeLists.txt now builds the bridge unconditionally instead of gating it if(APPLE); the test_bridge gate was also lifted since the bridge has no macOS-specific code.
  • Updated ewpresenter/tests/CMakeLists.txt, frontend/macos/CMakeLists.txt, AGENTS.md, and READMEs to reflect the new location.

#23 — Sanitizer + static-analysis CI jobs

  • Added sanitizers (ASan/UBSan) and static-analysis (clang-tidy + cppcheck) jobs to .github/workflows/ci.yml.
  • Fixed .clang-tidy, which was a silent no-op (its prior rule syntax enabled zero checks against an empty base set). It now enables clang-diagnostic-*, clang-analyzer-*, bugprone-*, performance-*, portability-* with three documented suppressions.
  • Fixed a real clang-tidy finding surfaced by the corrected config (bugprone-crtp-constructor-accessibility in PresenterBase).

#25 — Coverage reporting

  • Added a coverage CI job (Clang/llvm-cov) and an EWCALC_BUILD_COVERAGE CMake option gating instrumentation flags.
  • Threshold set to 75% (measured baseline: 79.48% line coverage for libew+ewpresenter); the plan's initial 80% proposal would have failed on day one, so the threshold was set with margin below the measured baseline.

#24 — Windows MSIX packaging

  • Added Package.appxmanifest for the WinUI 3 app; verified existing Assets/ images already satisfy required sizes.
  • Wired -Package into the CI Windows job with MSIX artifact upload (the release job already expected artifacts/**/*.msix).
  • Documented self-signed vs. trusted-certificate signing in frontend/windows/ewcalc-winui/README.md.
  • Defensive fix in scripts/build-windows.ps1: makeappx now packs from the AppX staging subfolder when present (per Microsoft's single-project MSIX build layout), falling back to the bin root otherwise.

Validation

  • Full local build + ctest on macOS after each merge: 13/13 tests pass.
  • clang-tidy (final config): 0 findings. cppcheck (warning/style/performance/portability): 0 findings.
  • ASan+UBSan build: 13/13 tests pass, no sanitizer reports.
  • Coverage build (Clang/llvm-cov): 13/13 tests pass, HTML report generated, 79.48% line coverage measured.
  • .github/workflows/ci.yml validated as well-formed YAML.

Known caveats (need verification on non-macOS hosts / real CI)

  • Bridge relocation and CI-quality changes were validated only with Apple Clang on macOS; no Linux/GCC or Windows build has confirmed them yet — first real GitHub Actions run should confirm.
  • The GCC/gcov coverage path (EWCALC_BUILD_COVERAGE on non-Clang toolchains) is implemented but unvalidated locally — only the Clang/llvm-cov path was exercised.
  • MSIX packaging (manifest, makeappx staging-path fix) is unvalidated — no Windows/MSBuild/makeappx toolchain was available. Needs a Windows CI run or manual Windows build to confirm -Package produces a working .msix.
  • Placeholder MSIX Identity/Publisher values (OldCrow.EWCalculator / CN=Gary Wolfman) should be confirmed before any real signing or Store submission, since Publisher must exactly match the signing certificate's Subject.

Artifacts

Plan: ewcalc v0.9.0 — Infrastructure & Hardening
Conversation

Co-Authored-By: Oz oz-agent@warp.dev

OldCrow and others added 6 commits July 9, 2026 21:46
Move frontend/macos/bridge/ to a new top-level bridge/ directory,
sibling to libew/ewpresenter/frontend, since the bridge is plain
C++20 with no macOS-specific code and is consumed by both the
macOS Swift frontend and ewpresenter/tests/test_bridge.cpp.

- Root CMakeLists.txt now builds bridge/ unconditionally instead of
  gating it behind if(APPLE).
- ewpresenter/tests/CMakeLists.txt: test_bridge is no longer gated
  behind if(APPLE) either, since nothing in the bridge or its test
  depends on macOS APIs. Updated its include path.
- frontend/macos/CMakeLists.txt: updated the bridge include paths
  to point at the new top-level bridge/ directory.
- Updated AGENTS.md, README.md, and frontend/macos/README.md to
  document the new bridge/ location.

Co-Authored-By: Oz <oz-agent@warp.dev>
Add frontend/windows/ewcalc-winui/ewcalc-winui/Package.appxmanifest
declaring package Identity, Properties, Applications, and Capabilities
for the single-project MSIX WinUI 3 app. Existing Assets/ logo and
splash images already satisfy the referenced sizes.

Wire scripts/build-windows.ps1's -Package flow into the build-windows
CI job on tagged and manual (workflow_dispatch) runs, uploading the
unsigned .msix as a workflow artifact for the release job to attach.

Make build-windows.ps1's makeappx invocation pack from the "AppX"
staging subfolder when present (per single-project MSIX build output),
falling back to the bin root otherwise.

Document MSIX packaging and signing in
frontend/windows/ewcalc-winui/README.md, including how to generate a
matching self-signed certificate for local/test packaging and the
requirement for a trusted cert for public distribution.

Co-Authored-By: Oz <oz-agent@warp.dev>
Add three independent, parallel jobs to .github/workflows/ci.yml, all
running on ubuntu-24.04:

- sanitizers: build libew/ewpresenter/tests with ASan+UBSan and run
  ctest under instrumentation.
- static-analysis: run clang-tidy (using .clang-tidy) and cppcheck
  against libew/ewpresenter sources.
- coverage: build with Clang source-based coverage instrumentation,
  run ctest, generate an HTML report (uploaded as a CI artifact), and
  fail if libew+ewpresenter line coverage drops below 75%.

Add EWCALC_BUILD_COVERAGE CMake option to gate coverage instrumentation
flags (GCC --coverage or Clang -fprofile-instr-generate/-fcoverage-mapping)
so they aren't hardcoded in the workflow YAML.

Fix .clang-tidy: the previous config's Checks value enabled zero checks
(verified with --list-checks), so clang-tidy was a silent no-op. Enable
clang-diagnostic-*, clang-analyzer-*, bugprone-*, performance-*, and
portability-* with three documented suppressions: the existing
bugprone-exception-escape (confirmed still warranted), plus new
suppressions for bugprone-easily-swappable-parameters (physics
functions legitimately take several same-typed double parameters) and
portability-avoid-pragma-once (conflicts with the project's #pragma
once convention).

Fix the one resulting real clang-tidy finding: restrict
PresenterBase's default constructor to the Derived CRTP type
(bugprone-crtp-constructor-accessibility), and suppress a cppcheck
false positive in formatter.cpp's negative-zero normalization (the
value == 0.0 / value = 0.0 idiom flips the IEEE-754 sign bit, so it is
not a no-op despite cppcheck flagging it as duplicateConditionalAssign).

Co-Authored-By: Oz <oz-agent@warp.dev>
@OldCrow OldCrow merged commit 684e424 into main Jul 10, 2026
9 checks passed
@OldCrow OldCrow deleted the feat/v0.9.0-infrastructure-hardening branch July 10, 2026 02:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant