chore(packaging): align Flatpak identity and metadata - #223
Conversation
The Flatpak manifest and metainfo still used the former thewrz identity while generated icons and the repository itself already moved to the wrzonance org, leaving the app-id, desktop file, and icon install path disagreeing with each other. This makes the in-repo Flatpak packaging Flathub submission-ready: manifest, desktop install name, icon set, and bundle command now share one app-id; the metainfo gains a real captured screenshot, a corrected release date/URLs, and a full OARS-1.1 content rating; and flatpak_validate.sh gains a stale-identity regression guard plus a strict AppStream validation gate wired into CI. Closes #207. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The thewrz -> wrzonance Flatpak rename (#207) had no automated check that the sweep was complete or scoped correctly — only the ad-hoc grep recorded in the task notes. Add flatpak_identity_sweep.sh, which pins two invariants at the migration boundary: no stale 'io.github.thewrz' substring remains anywhere under the Flatpak packaging surface, the workflow, or the Flatpak test scripts (except the two canary literals inside flatpak_validate.sh's own regression guard, counted explicitly so a real leftover can't hide behind that exception); and packaging/aur/** stays byte-identical to origin/main, so this migration can't silently leak edits into out-of-scope packaging. Verified RED by temporarily reintroducing a stale reference, a wrong canary count, and a committed aur/ drift — each caught by name — before confirming GREEN on the clean tree. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
The "Install AppStream tools" step ran apt-get inside bilelmoussaoui/flatpak-github-actions:freedesktop-24.08, which is a Fedora 41 image — it has dnf, not apt-get. The step failed with "apt-get: command not found", taking the whole tag-triggered release job with it. Because flatpak.yml only runs on tag push, PR CI would never have caught this. The step was also unnecessary: appstreamcli is already present at /usr/bin/appstreamcli in that image, and flatpak_validate.sh passes 20/20 there with no install step at all. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`cp -r assets/icons/generated/hicolor /app/share/icons/` silently collapses the theme level when /app/share/icons does not already exist: cp then treats the destination as the copy target and produces /app/share/icons/64x64/apps/... instead of /app/share/icons/hicolor/64x64/apps/..., so the desktop entry's Icon= key resolves to nothing. Create the theme directory first and copy the contents into it, which is correct whether or not the parent pre-exists. Also drop --filesystem=xdg-config/honkhonk and --filesystem=xdg-data/honkhonk. Flatpak redirects the XDG base dirs to ~/.var/app/<app-id>/, which is what directories::ProjectDirs resolves to inside the sandbox, so the app never reads the host paths those grants opened up. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Both 0.1.0 and v0.1.0-alpha.1 shipped a honkhonk.flatpak bundle built from a manifest with app-id io.github.thewrz.HonkHonk, and those assets have real download counts. Renaming the id without migration metadata makes software centres treat the result as a separate application: the old install stays behind with its own launcher, icon and state under ~/.var/app/io.github.thewrz.HonkHonk. Declare the old id under <provides> and <replaces> so the rename upgrades in place, and add the metadata copyright header Flathub expects. The metainfo is now the one file that legitimately names the old id, so flatpak_validate.sh no longer greps it for absence. It parses the XML and asserts the real invariant instead: <id> is the new app-id, and the old one appears in both <provides> and <replaces>. A DOCTYPE/ENTITY guard keeps the stdlib parser off the entity-expansion paths — defusedxml is not installable in the Flatpak builder image, which has no pip. Verified with appstreamcli validate --strict inside that image. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The sweep did not guard anything. Nothing invoked it — no workflow referenced it and cargo test cannot discover shell scripts — and even run by hand it only grepped six hard-coded files, skipping any that were missing. Reintroducing the old app-id in assets/honkhonk.desktop, in src/, in a new packaging file, or by renaming the manifest back all passed cleanly. Sweep every tracked file's content and every tracked filename instead, with an explicit allowlist for the places the old id is legitimate: the two scripts that assert its absence, the metainfo migration block, and the dated docs/superpowers/ plans, which are a historical record and should not be rewritten. Missing files are now a failure rather than a silent pass. The second invariant is replaced. Asserting packaging/aur/** is byte-identical to origin/main is a scope assertion about this branch, not a durable property — committed as a permanent test it would fail every future PR that legitimately touches the AUR packaging. It now asserts what should hold forever: each canonical identity-bearing field names the new app-id. Wired into rust.yml, which runs on every PR, deliberately without a paths filter — the drift being guarded against can land in any file. Verified failing on all three scenarios above before wiring in. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The repository moved to the wrzonance org, and the new Flatpak app-id io.github.wrzonance.HonkHonk claims that location, but Cargo.toml's repository field and SECURITY.md's private-vulnerability-reporting link still pointed at thewrz/HonkHonk. The advisory link matters most: it is where a reporter is sent to disclose privately. The thewrz handle is left alone everywhere it identifies the maintainer rather than the repo — AUR PKGBUILD headers, the Cargo maintainer/copyright fields, and the historical design documents. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Draft-phase adversarial review (Codex GPT-5.5, xhigh) — outcomesRan Codex as the draft-phase reviewer, plus an independent pass of my own. Every Fixed
(1) The step this PR added ran (2) (3) Flatpak redirects the XDG base dirs into (4) Confirmed the old ID genuinely shipped: both (6) This was the PR's own headline deliverable and it did not work. Nothing Its second invariant was also replaced. Asserting Declined — tracked, not droppedFour Codex
One Heads-up, needs a human callCodex flagged that current Flathub policy restricts AI-generated submission PRs Verification
Note: the three red 🤖 Co-authored by Claude Opus 5. |
Use typed audio tracks and generic buffer conversion while retaining sample limits and panic containment. Reject truncated PCM instead of treating unexpected EOF as success, pin interleaving and truncation regressions, and regenerate Flatpak sources. Co-Authored-By: Codex gpt-6-astra <noreply@openai.com>
Encode each SHA-256 digest byte as two lowercase hex characters and pin leading-zero compatibility. Regenerate Flatpak sources for sha2 0.11. Co-Authored-By: Codex gpt-6-astra <noreply@openai.com>
Restore the pre-migration partial-packet EOF behavior and explicitly enable ALAC for accepted m4a files. Pin both behaviors with boundary regressions, include ALAC in sample-limit coverage, and regenerate Flatpak sources. Co-Authored-By: Codex gpt-6-astra <noreply@openai.com>
Merge the reviewed Symphonia predecessor fixes into the sha2 successor, retaining tolerant EOF decoding and ALAC support. Co-Authored-By: Codex gpt-6-astra <noreply@openai.com>
Co-Authored-By: Codex <noreply@openai.com>
The decoder now supports 0.6; allow Renovate to maintain that line. Co-Authored-By: Codex <noreply@openai.com>
Retain both the Flatpak identity sweep and the current MSRV job, using the current pinned checkout action. Co-Authored-By: Codex <noreply@openai.com>
Co-Authored-By: Codex <noreply@openai.com>
Integrate the pending dependency migrations and exercise asset installation with a fresh temporary directory for each build command. The generated desktop entry must survive until its install command. Closes #273 Co-Authored-By: Codex <noreply@openai.com>
The hosted runner denies creating a loopback interface. Network namespace setup is unrelated to the asset-installation contract; retain separate mount namespaces and fresh temporary directories for every command. Co-Authored-By: Codex <noreply@openai.com>
Run the filesystem sandbox regression with the runner privileges needed for UID mappings; keep the installation assertions and per-command temporary mounts intact. Co-Authored-By: Codex <noreply@openai.com>
Branch names can contain slashes rejected by upload-artifact. The commit SHA is safe for both branch dispatches and tagged releases. Co-Authored-By: Codex <noreply@openai.com>
This was written agentically; verify its assertions:
Why
The Flatpak package still used the former app identity while generated icons use io.github.wrzonance.HonkHonk. Align the in-repository packaging and metadata so desktop entries, icons, and AppStream agree.
What
Rename the manifest and metainfo, install icons under the full app ID, add screenshots/release/content-rating and old-ID metadata, update project URLs, and enforce the identity with a repository-wide CI sweep. Resolve drift from main while preserving its MSRV job and current pinned actions.
This is the in-repository metadata slice of #207. Flathub submission/runtime/source-policy work remains tracked in #224, and the application Wayland app-ID issue in #225.
Testing
ShellCheck reports existing SC2015 patterns in flatpak_validate.sh, tracked in #247. cargo-tarpaulin is unavailable locally; coverage was not measured. The prior one-shot adversarial review and its dispositions were read from GitHub; no repeat review was requested.
The full container build exposed #273: each build command gets a fresh /tmp, so the generated desktop entry disappeared before installation. It now lives in the persistent build directory. The regression executes actual manifest installation commands in separate filesystem sandboxes and checks the installed desktop entry/icons/metainfo and unchanged source desktop file. Both dependency migrations are integrated for final validation. The repaired full build and bundle passed; upload then exposed #274 because slash-containing branch names are invalid artifact names. Artifacts now use the immutable commit SHA; complete build, bundle, and upload validation passed at 8b435e7.
Closes #207
Closes #273
Closes #274
🤖 Co-authored by Claude (original implementation) and Codex (integration and verification updates).