Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
771db34
feat(0.2.0): migrate Loupe to Qt Quick and retire Widgets product UI …
mberrys Aug 31, 2026
a620e30
chore: rebase Loop rebrand onto dev and fix operator acceptance includes
cursoragent Aug 27, 2026
eca0762
fix: rename Phase 5 scripts and evidence to Loop naming
cursoragent Aug 27, 2026
9d9c089
fix: rename Phase 4 unit test link targets to Loop libraries
cursoragent Aug 28, 2026
fe6649c
fix(ci): verify loop-release surface on Linux Release Gate
cursoragent Aug 28, 2026
e8f5f2f
fix: recompute loop-default profile digest after rename
cursoragent Aug 28, 2026
180a0a9
fix: complete Loop product identity migration
mberrys Aug 30, 2026
7cee92e
fix: repair rebrand CI compile and Widgets-absent configure
cursoragent Aug 30, 2026
ff4180f
fix: restore Loop identity and regenerate catalogs after dev merge
cursoragent Aug 31, 2026
f65b6e3
fix: repair QuickShellSmoke build and widgets-free verifier helper
cursoragent Aug 31, 2026
72b1d08
chore: regenerate phase5-widgets inventory after merge
cursoragent Aug 31, 2026
8f27c0f
fix: use QGuiApplication::applicationDisplayName in LoopEditor
cursoragent Aug 31, 2026
b1024a5
fix: place QuickShellSmoke beside LoopLibCore on Windows
cursoragent Aug 31, 2026
0340ca2
fix: restore Loop naming after stable rebase conflict resolution
cursoragent Aug 31, 2026
4f83d6d
chore: regenerate phase5 evidence after stable rebase
cursoragent Aug 31, 2026
6678264
chore: regenerate architecture catalog after stable rebase
cursoragent Aug 31, 2026
c37227c
fix: ensure legacy settings path exists in identity migration test
cursoragent Aug 31, 2026
8955a7e
chore: complete Loupe to Loop product rename (#383)
mberrys Aug 31, 2026
50f818f
Document gh-143 parity checklist and update Quick tests (#489)
mberrys Sep 1, 2026
787cdea
fix: merge unstable into dev for PR 490 promotion readiness
cursoragent Sep 2, 2026
ac702f8
chore: add changelog fragment for PR 490 promotion fix
cursoragent Sep 2, 2026
12083f8
fix: reword changelog to satisfy loop identity contract
cursoragent Sep 2, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .clang-tidy
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
# Loupe-PDF clang-tidy defaults (C++20 / Qt6).
# Loop-PDF clang-tidy defaults (C++20 / Qt6).
# Run via: scripts/run-clang-tidy.sh
#
# Start conservative; tighten checks once baseline noise is understood.
Expand Down
10 changes: 5 additions & 5 deletions .claude/policy-brief.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<!-- GENERATED FILE: edit agent-policy.json and run scripts/agent/generate-adapters.py --write -->
# Loupe agent policy adapter
# Loop agent policy adapter

Repository: `studio-berry/loupe`; version: `0.2.0-alpha`; language: `C++20`; minimum Qt: `6.11.1`.
Repository: `studio-berry/loop`; version: `0.2.0-alpha`; language: `C++20`; minimum Qt: `6.11.1`.

## Branches and safety

Expand Down Expand Up @@ -38,9 +38,9 @@ Approval is required for:

## Module placement

- Core PDF logic belongs in `LoupeLibCore`; it must not depend on Widgets.
- Interactive capabilities belong in `LoupeEditor`/`LoupeLibQuick`; batch geometry belongs in `LoupeLibCore`/`PdfTool`; unattended pipelines belong in `PdfTool`.
- Core PDF logic belongs in `LoopLibCore`; it must not depend on Widgets.
- Interactive plugins belong in `LoopEditorPlugins` hosted by the Editor; batch geometry belongs in PageMaster; unattended pipelines belong in PdfTool.
- Consult the generated architecture catalog and current code/tests for dynamic facts; narrative docs are not authoritative when they conflict.
- Record parser/writer/renderer divergences from the upstream engine in `docs/UPSTREAM_DIVERGENCE.md`. Cosmetic Loupe-only code does not belong there.
- Record parser/writer/renderer divergences from the upstream engine in `docs/UPSTREAM_DIVERGENCE.md`. Cosmetic Loop-only code does not belong there.

Generated adapter: `.claude/policy-brief.md`.
10 changes: 5 additions & 5 deletions .cursor/agent-policy.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<!-- GENERATED FILE: edit agent-policy.json and run scripts/agent/generate-adapters.py --write -->
# Loupe agent policy adapter
# Loop agent policy adapter

Repository: `studio-berry/loupe`; version: `0.2.0-alpha`; language: `C++20`; minimum Qt: `6.11.1`.
Repository: `studio-berry/loop`; version: `0.2.0-alpha`; language: `C++20`; minimum Qt: `6.11.1`.

## Branches and safety

Expand Down Expand Up @@ -38,9 +38,9 @@ Approval is required for:

## Module placement

- Core PDF logic belongs in `LoupeLibCore`; it must not depend on Widgets.
- Interactive capabilities belong in `LoupeEditor`/`LoupeLibQuick`; batch geometry belongs in `LoupeLibCore`/`PdfTool`; unattended pipelines belong in `PdfTool`.
- Core PDF logic belongs in `LoopLibCore`; it must not depend on Widgets.
- Interactive plugins belong in `LoopEditorPlugins` hosted by the Editor; batch geometry belongs in PageMaster; unattended pipelines belong in PdfTool.
- Consult the generated architecture catalog and current code/tests for dynamic facts; narrative docs are not authoritative when they conflict.
- Record parser/writer/renderer divergences from the upstream engine in `docs/UPSTREAM_DIVERGENCE.md`. Cosmetic Loupe-only code does not belong there.
- Record parser/writer/renderer divergences from the upstream engine in `docs/UPSTREAM_DIVERGENCE.md`. Cosmetic Loop-only code does not belong there.

Generated adapter: `.cursor/agent-policy.md`.
4 changes: 2 additions & 2 deletions .cursor/agents/audit-debugger.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
---
name: audit-debugger
description: >-
Loupe post-audit debugger. Use proactively after readiness audits, bug hunts,
Loop post-audit debugger. Use proactively after readiness audits, bug hunts,
or GAP reviews to find defects those passes missed — regressions, drifted
"pass" claims, untested paths, and security/correctness holes in Core,
PdfTool, PageMaster, Editor plugins, and CI. Do not rerun a closed audit
checklist; hunt leftovers.
---

You are a Loupe-specific debugger. Your job is to find **bugs previous audits
You are a Loop-specific debugger. Your job is to find **bugs previous audits
missed**, not to restate known accepted risks.

## Already covered — do not re-report as new
Expand Down
2 changes: 1 addition & 1 deletion .cursor/environment.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"name": "Loupe-PDF",
"name": "Loop-PDF",
"install": "./scripts/setup-dev-env.sh"
}
10 changes: 5 additions & 5 deletions .cursor/rules/versioning.mdc
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
---
description: Loupe product versions follow Semantic Versioning 2.0
description: Loop product versions follow Semantic Versioning 2.0
alwaysApply: true
---

# Semantic Versioning

Loupe releases use [SemVer 2.0](https://semver.org/). The current version is
Loop releases use [SemVer 2.0](https://semver.org/). The current version is
**0.2.0-alpha**.

- Canonical core: `LOUPE_VERSION` in root `CMakeLists.txt` (`0.2.0`).
- Pre-release: `LOUPE_VERSION_PRERELEASE` (`alpha` until 0.2.0 final).
- Canonical core: `LOOP_VERSION` in root `CMakeLists.txt` (`0.2.0`).
- Pre-release: `LOOP_VERSION_PRERELEASE` (`alpha` until 0.2.0 final).
- Git tags: `v0.2.0-alpha` now; `vMAJOR.MINOR.PATCH` with optional `-pre.release`.
- Do not use four-part `x.y.z.w` product versions. Appx derives `LOUPE_WINDOWS_VERSION` as `MAJOR.MINOR.PATCH.0`.
- Do not use four-part `x.y.z.w` product versions. Appx derives `LOOP_WINDOWS_VERSION` as `MAJOR.MINOR.PATCH.0`.
- Former gates 0.0.3–0.0.6 are 0.1.1–0.1.4. Do not reintroduce 0.0.3 as a living version.
- Bump MAJOR for breaking CLI/ABI/behavior, MINOR for compatible features, PATCH for compatible fixes.
- Policy: `docs/VERSIONING.md` and `docs/version-policy.json`.
8 changes: 4 additions & 4 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# Copy to .env.local and adjust paths if you do not use the default /opt layout.
# Most shells: source scripts/dev-env.sh (preferred)
#
# LOUPE_REPO_ROOT=/workspace
# LOUPE_QT_VERSION=6.9.1
# LOUPE_QT_ROOT=/opt/Qt/6.9.1/gcc_64
# LOOP_REPO_ROOT=/workspace
# LOOP_QT_VERSION=6.9.1
# LOOP_QT_ROOT=/opt/Qt/6.9.1/gcc_64
# VCPKG_ROOT=/opt/vcpkg
# VCPKG_INSTALLED_DIR=/opt/vcpkg_installed
# VCPKG_OVERLAY_PORTS=/workspace/vcpkg/overlays/linux:/workspace/vcpkg/overlays/general
# LOUPE_BUILD_DIR=/workspace/build
# LOOP_BUILD_DIR=/workspace/build
# CC=gcc
# CXX=g++
# QT_QPA_PLATFORM=offscreen
4 changes: 2 additions & 2 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ UnitTests/testdata/interaction-traces/** text eol=lf
Fuzz/corpus/regression/** binary
Fuzz/corpus/regression/README.md text
Fuzz/corpus/regression/manifest.json text
LoupeLibCore/cmaps/** binary
LoupeLibCore/liberation-fonts-ttf/** -whitespace
LoopLibCore/cmaps/** binary
LoopLibCore/liberation-fonts-ttf/** -whitespace
3rdparty_licenses/** -whitespace
WixInstaller/explic.rtf -whitespace
28 changes: 14 additions & 14 deletions .github/workflows/CreateReleaseDraft.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,17 @@ jobs:
- name: Read version
id: get_version
run: |
version=$(grep -oP 'set\(LOUPE_VERSION \K[0-9]+\.[0-9]+\.[0-9]+' "CMakeLists.txt")
prerelease=$(grep -oP 'set\(LOUPE_VERSION_PRERELEASE \K[A-Za-z0-9.-]+' "CMakeLists.txt" || true)
version=$(grep -oP 'set\(LOOP_VERSION \K[0-9]+\.[0-9]+\.[0-9]+' "CMakeLists.txt")
prerelease=$(grep -oP 'set\(LOOP_VERSION_PRERELEASE \K[A-Za-z0-9.-]+' "CMakeLists.txt" || true)
if [ -n "$prerelease" ]; then
version="${version}-${prerelease}"
fi
echo "Version: $version"
echo "loupe_version=$version" >> $GITHUB_ENV
echo "loop_version=$version" >> $GITHUB_ENV

- name: Stop if release already exists
run: |
tag="v${{ env.loupe_version }}"
tag="v${{ env.loop_version }}"
if gh release view "$tag" --repo "${{ github.repository }}" >/dev/null 2>&1; then
if [ "${{ inputs.allow_existing_release }}" != "true" ]; then
echo "::error::Release $tag already exists. Refusing to upload assets because this would modify an existing release."
Expand Down Expand Up @@ -143,8 +143,8 @@ jobs:
run: |
set -euo pipefail
mkdir -p package-evidence/linux package-evidence/windows
gh run download "$linux_run_id" --name loupe-package-boundary-linux-evidence -D package-evidence/linux
gh run download "$windows_run_id" --name loupe-package-boundary-windows-evidence -D package-evidence/windows
gh run download "$linux_run_id" --name loop-package-boundary-linux-evidence -D package-evidence/linux
gh run download "$windows_run_id" --name loop-package-boundary-windows-evidence -D package-evidence/windows
python3 scripts/ci/compare_package_boundary_evidence.py \
--linux package-evidence/linux/evidence.json \
--windows package-evidence/windows/evidence.json \
Expand All @@ -157,15 +157,15 @@ jobs:
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: loupe-package-boundary-pair-evidence
name: loop-package-boundary-pair-evidence
path: package-evidence
if-no-files-found: warn
retention-days: 30
compression-level: 0

- name: Exclude CI evidence from release assets
run: |
for evidence_dir in artifacts/loupe-package-boundary-linux-evidence artifacts/loupe-package-boundary-windows-evidence; do
for evidence_dir in artifacts/loop-package-boundary-linux-evidence artifacts/loop-package-boundary-windows-evidence; do
if [ -e "$evidence_dir" ]; then
rm -rf "$evidence_dir"
fi
Expand All @@ -174,13 +174,13 @@ jobs:
- name: Rezip zip file
id: rezip_zip_file
run: |
cd artifacts/Loupe-pdf-Windows-${{ env.loupe_version }}.zip
zip -r ../Loupe-pdf-Windows-${{ env.loupe_version }}.zip.backup *
cd artifacts/Loop-pdf-Windows-${{ env.loop_version }}.zip
zip -r ../Loop-pdf-Windows-${{ env.loop_version }}.zip.backup *

- name: Rename zip archive
run: |
rm -rf artifacts/Loupe-pdf-Windows-${{ env.loupe_version }}.zip/
mv artifacts/Loupe-pdf-Windows-${{ env.loupe_version }}.zip.backup artifacts/Loupe-pdf-Windows-${{ env.loupe_version }}.zip
rm -rf artifacts/Loop-pdf-Windows-${{ env.loop_version }}.zip/
mv artifacts/Loop-pdf-Windows-${{ env.loop_version }}.zip.backup artifacts/Loop-pdf-Windows-${{ env.loop_version }}.zip

- name: Correct file paths
run: |
Expand Down Expand Up @@ -220,8 +220,8 @@ jobs:
id: create_release
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2.6.2
with:
tag_name: 'v${{ env.loupe_version }}'
name: "Release of Loupe-pdf ${{ env.loupe_version }} (Draft)"
tag_name: 'v${{ env.loop_version }}'
name: "Release of Loop-pdf ${{ env.loop_version }} (Draft)"
draft: true
prerelease: false
generate_release_notes: true
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/LinuxFlatpak.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,20 +73,20 @@ jobs:
run: |
COMMIT_HASH=$(git rev-parse HEAD)
echo "Current commit hash: $COMMIT_HASH"
sed -i "s/LOUPE_LAST_COMMIT/$COMMIT_HASH/g" ./Flatpak/io.github.mberrys.Loupe-pdf.json
sed -i "s/LOOP_LAST_COMMIT/$COMMIT_HASH/g" ./Flatpak/io.github.mberrys.Loop-pdf.json

- name: Build Flatpak
run: |
flatpak-builder --repo=repo --sandbox --force-clean build-dir ./Flatpak/io.github.mberrys.Loupe-pdf.json
flatpak-builder --repo=repo --sandbox --force-clean build-dir ./Flatpak/io.github.mberrys.Loop-pdf.json

- name: Build Flatpak Package
run: |
flatpak build-bundle repo io.github.mberrys.Loupe-pdf.flatpak io.github.mberrys.Loupe-pdf
flatpak build-bundle repo io.github.mberrys.Loop-pdf.flatpak io.github.mberrys.Loop-pdf

- name: Upload Flatpak Package
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: io.github.mberrys.Loupe-pdf.flatpak
path: ./io.github.mberrys.Loupe-pdf.flatpak
name: io.github.mberrys.Loop-pdf.flatpak
path: ./io.github.mberrys.Loop-pdf.flatpak
retention-days: 30
compression-level: 0
Loading
Loading