Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
c4c69fa
1.1.0-beta.1: add touch optimizations and zoom controls
purrfecto114-lgtm Sep 2, 2026
c2b79f9
fix MSVC build: define missing control ids and remove unreferenced re…
purrfecto114-lgtm Sep 2, 2026
79803cc
fix MSVC link: add localization.c to the vs2019 project
purrfecto114-lgtm Sep 2, 2026
e789c23
fix MSVC x86 build: define VERSION_X86 for Win32 configurations
purrfecto114-lgtm Sep 2, 2026
6b82f1e
workflow: use absolute OutDir for msbuild output
purrfecto114-lgtm Sep 2, 2026
d711450
resources: add zoom toolbar icons and bump version resource to 1.1.0-…
purrfecto114-lgtm Sep 2, 2026
f52dfb9
workflow: always publish (undraft) the release when updating an exist…
purrfecto114-lgtm Sep 2, 2026
5210f25
1.1.0-beta.2: bilingual installer, in-app language switcher, refreshe…
Sep 2, 2026
e1b1087
workflow: expect NSIS output in the nsis script directory
Sep 2, 2026
9a0ab67
1.1.0-beta.3: fine 1% zoom steps, drag tearing fixes, closable zoom b…
Sep 3, 2026
ff07258
1.1.0-beta.4: save-as (png/jpg/bmp), intuitive default sort, zoom bar…
purrfecto114-lgtm Sep 3, 2026
9325e4e
1.1.0-beta.5: pinch zoom follows the fingers, zoom buttons no longer …
Sep 3, 2026
3482ab7
1.1.0-beta.6: aspect ratio locked, zoom lag fixed, View menu regrouped
Sep 3, 2026
a4462c9
1.1.0-beta.7: honest zoom percent, 1600% zoom range, dark mode
Sep 3, 2026
9eb2267
1.1.0-beta.8: zoom input responsiveness, less GDI churn
Sep 3, 2026
76dabf1
1.1.0-beta.9: reliable dark mode detection
Sep 4, 2026
61a739f
1.1.0-beta.10: dark dialogs
Sep 4, 2026
fd45013
1.1.0-beta.11: image backdrop, installer language dialog
Sep 4, 2026
b3654f9
1.1.0-beta.12: zoom stall fix, progressive display
Sep 4, 2026
2379727
1.1.0-beta.13: startup crash fix, context menu regroup, clipboard paste
hesphoros Sep 4, 2026
38e242f
1.1.0-rc.1: zoom percent stepping, always visible zoom pane, dark dia…
Sep 4, 2026
c21bbd2
release workflow: derive RC/BETA phase label from the version string
Sep 4, 2026
93a1995
1.1.0-rc.2: verified review fixes - gestures, security, webp backdrop…
Sep 4, 2026
7c1a3d4
fix the tests.yml compile job msbuild command line
Sep 4, 2026
6570adb
1.1.0-rc.3: second review pass - webp exif dims, wm_quit, drop and bo…
Sep 4, 2026
105821b
1.1.0-rc.4: release engineering batch 1 - bounded waits, installer au…
Sep 4, 2026
b7d4bfb
ci: pin runners to windows-2022 (v143) + windows-2025 (v145) matrix
Sep 4, 2026
088d301
release: split validate/tests/build/publish with hash chain and no cl…
Sep 4, 2026
5d1e552
fix: safe_size_mul for frame arrays, everything request flag, drop gp…
Sep 4, 2026
5f35a3d
libwebp: import 1.6.0 as a decode-only vendored tree (user-approved D1)
Sep 4, 2026
123106d
structure: delete vs2005, trim config families, shared file list prop…
Sep 4, 2026
1a5ec13
version: src/version.h becomes the single source of truth (D6/D7)
Sep 4, 2026
825d949
carpet review sweep: remove zero-reference stragglers
Sep 4, 2026
bd42450
modern gui round (rc.6): per monitor v2 dpi, win11 chrome, vector gly…
Sep 5, 2026
fb2575c
field feedback round (rc.7): pinch floor, 1600% ceiling, file options…
Sep 5, 2026
d4760fd
stable round (1.1.01): complete dark dialogs, auto language default, …
purrfecto114-lgtm Sep 5, 2026
4f80dce
tests: the tags trigger guard follows the dual style list
purrfecto114-lgtm Sep 5, 2026
6bfae90
release: the notes banner follows the phase (stable releases present …
purrfecto114-lgtm Sep 5, 2026
cb6ba36
menu bar round (1.1.02): the dark ui reaches the menu bar, dpi aware …
Sep 5, 2026
0f1eb86
docs: the upstream pr description follows the 1.1.02 menu bar round
Sep 5, 2026
faa78a4
dark layers round (1.1.02 re-cut): menu bar tail from drawn rects, op…
Sep 5, 2026
14517e3
fix the compile round: the record globals move before the wndproc, th…
Sep 5, 2026
a7bdb0d
pr round: the compare link becomes a one-click pre-filled form (title…
Sep 5, 2026
979c051
audit round: the frame delay read is hardened (seeded size, checked r…
Sep 5, 2026
64132f6
pr round: the description gains the user-audited robustness section, …
Sep 5, 2026
b490300
audit round: the frame dimensions count is validated before the dimen…
Sep 5, 2026
495e27f
pr round: the description gains the second-audit section, the ci evid…
Sep 5, 2026
09a0dd4
version governance round: the version line restarts at 1.0.01 (versio…
Sep 5, 2026
390d888
pr round: the description speaks to the upstream reviewer first (summ…
Sep 5, 2026
00eea5e
third audit round: both decoders refuse a canvas over 100 mp before a…
Sep 5, 2026
eee7a07
ci fix: QueryFullProcessImageNameW is resolved lazily through GetProc…
Sep 5, 2026
b505855
pr round: the robustness section carries the third audit story (the d…
Sep 5, 2026
98a7e9a
version display round: every user visible version now anchors to the …
purrfecto114-lgtm Sep 6, 2026
d2a601f
pr docs round: the one click link drops the url-encoded body entirely…
purrfecto114-lgtm Sep 6, 2026
86c0b85
repository hygiene round: the fork collapses to a single main branch …
purrfecto114-lgtm Sep 6, 2026
cd67ba1
load performance round: the pixel budget ceiling is now pointer width…
Sep 6, 2026
eaae246
magnifier pill round: the zoom glyph strokes declared three point pol…
purrfecto114-lgtm Sep 7, 2026
5f92585
compile fix: the rebar erase guard landed in the main window proc ins…
purrfecto114-lgtm Sep 7, 2026
630688b
tag hygiene round: the field tags view showed a dashboard marker sitt…
Sep 7, 2026
2ee0318
second review round: the thirteen first-audit findings were re-verifi…
Sep 7, 2026
11e9ed0
compile fix: the demux pre-scan typed the iterator as WPIterator wher…
Sep 7, 2026
d479de3
modern ux round: the third audit report mapped every low-cost upstrea…
Sep 7, 2026
872a4cd
field fix round: the 1.1.06 re-release. the recent-files mru block sa…
Sep 7, 2026
3ae5b66
field fix round 2: the open-image stutter (the mru write is deferred …
Sep 7, 2026
d007012
field fix round 3: the background mat was reported dead with an image…
Sep 8, 2026
59d60b2
second rework round: the simulation check. the earlier suites guard t…
purrfecto114-lgtm Sep 8, 2026
5434994
field fix round 4: the light dialogs painted dark controls (the theme…
purrfecto114-lgtm Sep 8, 2026
d089372
field fix round 5, redone: the dark options labels. the withdrawn 1.1…
Sep 8, 2026
210f143
field fix round 6: the dialog return value. the 1.1.09 dark options f…
Sep 8, 2026
13f7042
the font unification round: the message font for every dialog. the au…
Sep 8, 2026
05f04ea
the font lifetime round: the review fix for the 1.1.11 font unificati…
Sep 8, 2026
93d3b99
1.1.12 b41: the about title hard code fix round
Sep 10, 2026
27772d2
1.1.12 b42: the about band template round
Sep 10, 2026
db6443b
1.1.12 rc.1: the about line release candidate round
Sep 10, 2026
037a9fe
1.1.12 rc.2: the white band fix round
Sep 10, 2026
dca43ef
the viv split architecture round: the written spec and the plan (docu…
Sep 10, 2026
e0d825c
the viv one-shot split round: the 21,129-line monolith becomes a 4,74…
Sep 10, 2026
01cef47
the viv split fixup round: the balanced-region rebuild. the first pas…
Sep 10, 2026
7d6c545
the viv.h include guard round: the split's second CI catch. viv.h nev…
Sep 10, 2026
b58ca0b
the viv_state.h ordering round: the split's third CI catch. the share…
Sep 10, 2026
9cd19c5
the missing externs round: the split's fourth CI catch. the one-shot …
Sep 10, 2026
729c7d7
the count constants round: the split's fifth CI catch. msvc c resolve…
Sep 10, 2026
fc78878
the rc.3 round: the architecture split and the installer metafile ass…
Sep 10, 2026
a9c1a0b
the theme race self-heal round: version 1.1.12-rc.4, build 46. the wh…
Sep 11, 2026
bba7763
the readme compression round: 127 to 83 lines, the wall paragraphs go…
Sep 11, 2026
a35cb19
the structure round: version 1.1.12-rc.5, build 47. the three structu…
Sep 11, 2026
08f0691
the structure round's ci catch: the compile stage found four things t…
Sep 11, 2026
418d2fe
the top bar remake round: version 1.1.12-rc.6, build 48. the frame me…
Sep 11, 2026
e563e8e
the zoom pill rework round: version 1.1.12-rc.7, build 49. zoomui.c i…
purrfecto114-lgtm Sep 11, 2026
828d15b
the gui remake import: the user's local rc.8-rc.10 rounds (the gui re…
Sep 12, 2026
a42e1c7
the carpet repair round: version 1.1.12-rc.11, build 53. the user's r…
Sep 12, 2026
5f2fff9
the smoke crash root fix: the comctl status bar sends its owner-drawn…
Sep 12, 2026
4f19373
the platform guardrails round: version 1.1.12-rc.12, build 54. the im…
Sep 13, 2026
ca11da1
the non-win11 field round: version 1.1.12-rc.13, build 55. the window…
Sep 13, 2026
830e924
the zoom pane editor round: version 1.1.12-rc.14, build 56. the corne…
Sep 13, 2026
097e1a4
the field report round: version 1.1.12-rc.15, build 57. three symptom…
Sep 13, 2026
40cc517
the open intent round: version 1.1.12-rc.16, build 58. the follow-up …
Sep 13, 2026
ee09d5c
the review absorption round: version 1.1.12-rc.17, build 59. an exter…
purrfecto114-lgtm Sep 13, 2026
3a3c41f
the compile fix for the review absorption round: the resize band's pa…
purrfecto114-lgtm Sep 13, 2026
023bfe0
the stable promotion round: version 1.1.12, build 60. the rc arc is p…
purrfecto114-lgtm Sep 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
439 changes: 439 additions & 0 deletions .github/workflows/release.yml

Large diffs are not rendered by default.

99 changes: 99 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: tests

# Continuous verification of the zoom math, menu structure, dark mode wiring
# and localization alignment invariants. Runs on every push (branches and
# tags) and every pull request.
#
# The daily schedule (04:00 UTC = 12:00 Asia/Shanghai) intentionally runs
# ONLY the Windows compile matrix: the Python suites are fully covered by
# push/PR/tag events, while compiling every day on pinned runner images is
# the drift detector for hosted-image toolchain changes (the images gain
# and lose preinstalled software over time, e.g. the VS2026 images ship
# without NSIS and without the v143 toolset).
on:
push:
branches: ['**']
tags: ['v*', '[0-9]*']
pull_request:
branches: ['**']
schedule:
- cron: '0 4 * * *'
workflow_dispatch:

jobs:
tests:
if: github.event_name != 'schedule'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: '3.12'

- name: Zoom math regression tests
run: python3 tests/zoom_math_test.py

- name: Menu structure, dark mode wiring and version consistency tests
run: python3 tests/menu_structure_test.py

- name: Second-rework simulation tests (the 1.1.07 check)
run: python3 tests/simulation_test.py

# Compile both shipping configurations on every push (since rc.2), pull
# request, tag and daily schedule so a build break is caught before
# tagging a release.
#
# Runner matrix: windows-latest is in the middle of GitHub's gradual
# migration to the Windows Server 2025 + VS2026 (v145) image, and the
# 2025 image has no v143 toolset (MSB8020). Pin the shipping build to
# windows-2022 (VS2022, v143) and pair it with windows-2025 (VS2026,
# v145 via the vs2026 project) so the migration can not break this
# repository's CI by surprise: the v145 leg doubles as the forward
# compatibility / image drift detector.
compile:
strategy:
fail-fast: false
matrix:
include:
- name: windows-2022 v143
runner: windows-2022
project: vs2019
toolset: v143
- name: windows-2025 v145
runner: windows-2025
project: vs2026
toolset: v145
runs-on: ${{ matrix.runner }}
name: compile (${{ matrix.name }})
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: microsoft/setup-msbuild@30375c66a4eea26614e0d39710365f22f8b0af57 # v3

- name: Build x64 (Release)
shell: cmd
run: msbuild ${{ matrix.project }}\voidImageViewer.vcxproj /p:Configuration=Release /p:Platform=x64 /p:PlatformToolset=${{ matrix.toolset }} "/p:OutDir=%GITHUB_WORKSPACE%\build\x64\\" "/p:IntDir=%GITHUB_WORKSPACE%\build\obj\x64\\" /m /nologo /v:m

- name: Build x86 (Release)
shell: cmd
run: msbuild ${{ matrix.project }}\voidImageViewer.vcxproj /p:Configuration=Release /p:Platform=Win32 /p:PlatformToolset=${{ matrix.toolset }} "/p:OutDir=%GITHUB_WORKSPACE%\build\x86\\" "/p:IntDir=%GITHUB_WORKSPACE%\build\obj\x86\\" /m /nologo /v:m

- name: Verify build output
shell: pwsh
run: |
foreach ($p in @('build\x64\voidImageViewer.exe', 'build\x86\voidImageViewer.exe')) {
if (!(Test-Path $p)) { throw "missing build output: $p" }
Write-Host "== $p ==" (Get-Item $p).Length bytes
}

# the real machine smoke test from the 1.0.02 audit round never ran
# automatically: every push now opens the full anomaly sample set
# through the freshly compiled x64 exe on the windows-2022 runner
# (a hosted windows runner is a real windows machine - gui launch,
# exit codes and close all work). the samples generate inline when
# the directory is missing (pure stdlib python, no extra deps).
- name: Real machine smoke test (the anomaly sweep)
if: matrix.runner == 'windows-2022'
shell: powershell
run: powershell -ExecutionPolicy Bypass -File tests\smoke_test.ps1 -ExePath "build\x64\voidImageViewer.exe" -SamplesDir "tests\samples"
47 changes: 47 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# local build/verification artifacts (not needed for MSVC builds)
shim/
build/
*.o
*.obj
*.exe
*.pdb
*.iobj
*.ipdb

# zig build scratch (the object tree, logs and the generated manifest copy)
build-zig/obj/
build-zig/err.log
build-zig/viv.exe.manifest

# Visual Studio binary resource editor state (res/voidImageViewer.aps etc)
*.aps

# Visual Studio per-user state
*.user
*.suo
*.ncb
*.opt
*.plg
*.sdf
*.opensdf

# tarball pax header metadata directories (extracted junk, never source)
PaxHeaders.X/

# OS junk
Thumbs.db
.DS_Store

# python bytecode (the local test suites)
__pycache__/
*.pyc

# downloaded release assets kept for local forensics only
tool-results/r20/
tests/samples/

# local round patch scripts (byte-level prepend helpers, one-shot per round)
tools/r*_*.py

# anomaly sample self-check output (generated by make_anomaly_samples.py --self-check)
--self-check/
Loading