Choose the prerelease identity and download coordinates #30
Labels
No labels
needs-info
needs-triage
ready-for-agent
ready-for-human
wayfinder:grilling
wayfinder:map
wayfinder:prototype
wayfinder:research
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
phg/iodd-tool#30
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent: Plan the signed IODD Tool prerelease
Type: grilling
Mode: HITL
Blocked by: Verify standard Homebrew lifecycle compatibility, Establish mise-driven local prerelease mechanics
Question
Which concrete version/build identity, bundle/component identities, Forgejo prerelease tag and asset coordinates, tap repository and fully qualified cask token will govern the first signed evaluation prerelease?
Use the mechanics research and check existing bundle/worker trust identities before proposing changes. The development build's hardcoded version is evidence, not an accepted release choice. Keep IODD Tool branding, one immutable final DMG shared by direct download and Homebrew, explicit Git-URL tap setup, and the agreed arm64/macOS restrictions. Clarify the limited-evaluation/prerelease presentation and how users obtain the exact intended cask without inventing stable-release promotion policy.
Resolve through live discussion with phg. Record concrete identifiers/coordinates and any compatibility consequences, or explicit prerequisites for choosing them. Do not create a tap/release, change bundle identifiers or publish assets in this ticket.
Resolution — first evaluation prerelease identity and public coordinates
Resolved through live discussion with phg on 16 October 2026. phg selected the version, public access, exact release coordinates, preserved product identity, fixed published bytes, tap coordinates, numeric bundle/build values and DMG signing identifier below. This is the planning answer for Choose the prerelease identity and download coordinates, under Plan the signed IODD Tool prerelease.
Release identity and presentation
0.1.0-beta.1.v0.1.0-beta.1.IODD Tool 0.1.0-beta.1 — Evaluation prerelease; set Forgejo's prerelease flag.IODD Tool.app, retaining IODD Tool branding.CFBundleShortVersionString:0.1.0.CFBundleVersion:2.0.1.0-beta.1label belongs in prerelease presentation; numeric bundle fields must not obscure its beta status. Use separate display metadata for full prerelease presentation rather than inserting the beta suffix into Apple's numeric version fields. The existing app inherits the default About UI, so showing the full beta identity there needs an explicit display-metadata integration in the implementation handoff.Build-number prerequisite: build 2 is the selected first-public-prerelease value, deliberately distinct from the development script's build 1. Before signing, inventory previously distributed builds and confirm that 2 exceeds them. If a previously distributed build is 2 or higher, stop and return for a revised build-number decision; do not silently pick another value. Empty hosted release/tag lists do not establish that no development build was ever distributed. The tag's source commit and actual release-candidate freeze remain with Set the qualification freeze and evidence handoff.
Bundle and signing identities
Preserve this identity family:
dev.s1q.iodd-tool; app executableIODDTool.dev.s1q.iodd-tool.worker; bundled executableContents/Helpers/IODDWorker.dev.s1q.iodd-tool.lifecycle; bundled executableContents/Helpers/IODDLifecycle.dev.s1q.iodd-tool.dmg.Keep the accepted Developer ID signed-peer checks and common publisher-team relationship. Concrete signing identity/Team ID references and the private credential handoff belong to Define the mise release stages and signing handoff; no new Team ID, credential or trust bypass is selected here. There is one application installation identity for this effort, without a separately installable beta channel or a beta-suffixed bundle name.
Preserving these identifiers matters beyond branding: the inspected code uses exact app/worker/lifecycle signing identifiers, exact app identity for recovery-export ancestor protection, a shared lifecycle namespace and the exact cask token. Merely adding a beta bundle suffix would not isolate those namespaces. The inspected signature requirements do not pin a release version or binary hash; preserving the identity family does not by itself establish IPC compatibility or qualify an upgrade/downgrade route.
Public release and final DMG
iodd-tool-0.1.0-beta.1-arm64.dmg.https://git.s1q.dev/phg/iodd-tool/releases/download/v0.1.0-beta.1/iodd-tool-0.1.0-beta.1-arm64.dmg.After phg reported making the repository public, an unauthenticated read of the repository API succeeded and returned
private: falseon 16 October 2026. No agent visibility change was performed. This verifies current repository access, not an asset that has yet to be published.Direct download and Homebrew must use one identical final Developer ID signed, notarized and stapled DMG. Compute and record SHA-256 only after the final byte-changing operation; the cask must use that exact URL and digest, with independent downloaded-byte verification at the accepted gate.
Once published, the release tag/source target and DMG asset are fixed. Do not replace the asset in place or move the tag to another candidate. Any changed distributed DMG requires a new prerelease version and new coordinates. Forgejo permits release/asset edits, so the release procedure must enforce this policy and reconcile existing remote state rather than treating a versioned URL as an immutability guarantee. Unpublished candidate preparation, stage receipts and retry mechanics remain with the mise/freeze handoff decisions.
Homebrew coordinates and obtaining the intended cask
https://git.s1q.dev/phg/homebrew-tap.git.phg/tap.iodd-tool.phg/tap/iodd-tool.0.1.0-beta.1, pointing at the exact final DMG URL and SHA-256 above. Do not useversion :latestorsha256 :no_check.The intended setup and install command forms are:
The explicit Git URL is required for this Forgejo tap; a one-argument tap command assumes GitHub. Installation guidance must show the fully qualified token and the intended
0.1.0-beta.1recipe. Subsequent documented upgrade/reinstall/uninstall/zap commands must likewise usephg/tap/iodd-tool. A fully qualified name selects the tap's recipe; it does not freeze that recipe's version forever. Record the actual published tap commit with release evidence once it exists.No
iodd-tool@betatoken is selected: it conflicts with the inspected exact-token-root policy. Creation of the chosen tap, write access and verification that its Git endpoint is anonymously cloneable remain execution prerequisites; the read-only name check found no accessible existing repository, which is not a guarantee of creation authority.These are naming and download decisions. The standard-cask lifecycle route remains unresolved with Agree the manual and Homebrew lifecycle handoff, following Verify standard Homebrew lifecycle compatibility. These command forms do not establish that a published or qualified cask already exists.
Evidence and implementation handoff
The development version was inspected as evidence and was not adopted implicitly. Read-only source observations used local Git objects:
b8334e758a8fb11d61b7af8d3ed6f0f632a4216b.381442f79cd5736fceaffa15d5f1edacb1ca8842.44b4247d83811ce4232b1f04f65021adf590116d.At these snapshots
scripts/build-app.sh:17–23contains app naming/identity and hardcoded development0.1.0/1. At the lifecycle snapshot,Sources/IODDCore/NativeCodeSigning.swift:6–18,NativeWorker.swift:79–127,348–362andNativeAppLifecycleIO.swift:14–20show the exact signing-identifier/common-team checks.NativeRecoveryExportDestination.swift:52–58protects app ancestors by bundle identifier, andNativeCaskRootPolicy.swift:29–30,94–95requires tokeniodd-tool.The same lifecycle snapshot expects the signed lifecycle helper but does not yet declare/package its executable product (
Package.swift:7–13,scripts/build-app.sh:6–12). This is a commit-specific implementation prerequisite, not a claim about every live branch. The eventual integrated candidate must contain and correctly sign all three components.Sources/IODDTool/App.swift:121–144has no custom About/version presentation at the inspected integration and lifecycle snapshots. These observations select no candidate and supply no runtime qualification.Primary references: Apple marketing-version field, Apple build-version field, Apple About application-version display, Homebrew custom-URL tap setup. Release mechanics and final-byte limitations are retained in Establish mise-driven local prerelease mechanics.
Only this decision ticket is resolved. No app/source changes, build, signing, notarization, tap/release creation or asset publication occurred. Existing lifecycle, mise and qualification handoff tickets already own the remaining questions; this decision introduces no additional fog or child ticket. Ordinary stable-release promotion policy remains outside this map.