src/main/resources/userguide/credits.md now lists every shipped library
with its license (read from the dependencies' POMs), the recognition models
and the map and place data. CreditsView, opened from the ? in Settings,
renders it through the new MarkdownPage helper (per-language loading, links
opened in the browser), which the search help popup now shares, and the
release's distrib step copies it to distrib/CREDITS.md in the same commit
as the release note.
MarkdownToBBCode learns [text](url) links, inside bold too. URLs are quoted
in the generated BBCode: AtlantaFX's parser reads a tag ending in "/]" as
self-closing, so a URL with a trailing slash broke the whole page.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011xpLSeYKKHX6o16jzYLgZv
tools/demo/fetch-commons-photos.py builds a screenshot library from
Wikimedia Commons: geosearch around ten cities (a ring of nine points, since
each query returns at most 500 files), then only freely licensed JPEG
originals whose own EXIF has a capture date and GPS within range, skipping
placeholder "city centre" positions, at most two per author per city, with
an optional filter on Commons' Quality/Featured pictures. Writes CREDITS.md
and credits.csv, resumes interrupted runs, standard library only. Listed in
the README's useful scripts.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011xpLSeYKKHX6o16jzYLgZv
Sections are now the commit types (features, fixes, ...) with one sub-section
per scope, marked with a label icon instead of the puzzle piece.
ReleaseNotesTest, AGENTS.md and the release profile's comment follow the new
order.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011xpLSeYKKHX6o16jzYLgZv
The release profile gains two steps. notes writes
distrib/release_note/release-note-<version>.md from the Conventional
Commits since the previous v<version> tag (last 30 commits for the first
release), grouped by scope then type, duplicate first lines merged, with an
icon per type. publish uses that note as the GitHub release description and
attaches it; after the local tag, distrib commits the note in the distrib
worktree and pushes it. Covered by ReleaseNotesTest.
pom.xml is committed at 2026.9.0, so the next release is 2026.9.1.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011xpLSeYKKHX6o16jzYLgZv
./mvnw -Prelease validate bumps the project version (same month: build
number + 1, otherwise build 0 of the current month), runs a fresh
./mvnw verify, publishes pholio-<version>.jar and its SHA-256 as GitHub
release v<version> in Imag-In/Pholio through gh, then commits pom.xml and
tags v<version> locally. The non-Maven steps live in
tools/release/Release.java, a JDK-only single-file program; the version rule
is covered by ReleaseVersionTest.
AGENTS.md documents the new release flow and that source never goes to
GitHub (orphan distrib worktree, pre-push guard).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011xpLSeYKKHX6o16jzYLgZv
The full-bleed logo looked bigger than every other Dock icon. Add
tools/icons/make-macos-icon.py, which centres an 832 px rounded square on a
transparent 1024 px canvas and writes the result as jDeploy's icon.png, as
src/main/resources/images/spo-macos-1024x1024.png (the Dock icon set at
runtime) and as a multi-resolution src/main/packaging/macos/pholio.icns.
Also name the unbundled macOS process "Pholio" through LaunchServices
(MacOsProcessName, via the Foreign Function API) and log why the Dock icon
is skipped instead of returning silently.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011xpLSeYKKHX6o16jzYLgZv